Several tweaks to make binning work in any simulation
configuration so that we can always have binning on. base/statistics.cc: If we're binning, and there is no bin active at the time we check all stats stuff, create a bin. base/statistics.hh: FS_MEASURE doesn't exist anymore base/stats/text.cc: don't print out bin names if there is only one bin sim/process.cc: don't zero stats. It happens automatically. Don't activate the context at the time it is registered, instead activate the first context in a startup callback. sim/process.hh: Add startup callback to initialize the first exec context --HG-- extra : convert_revision : bcb23cdb184b0abf7cecd79902f8a59b50f71fe4
This commit is contained in:
parent
2e4bb0fc0c
commit
a24016c731
5 changed files with 25 additions and 11 deletions
|
@ -286,6 +286,13 @@ check()
|
||||||
|
|
||||||
Database::stats().sort(StatData::less);
|
Database::stats().sort(StatData::less);
|
||||||
|
|
||||||
|
#if defined(STATS_BINNING)
|
||||||
|
if (MainBin::curBin() == NULL) {
|
||||||
|
static MainBin mainBin("main bin");
|
||||||
|
mainBin.activate();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (i == end)
|
if (i == end)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -2184,7 +2184,7 @@ class SumNode : public Node
|
||||||
* binned. If the typedef is NoBin, nothing is binned. If it is
|
* binned. If the typedef is NoBin, nothing is binned. If it is
|
||||||
* MainBin, then all stats are binned under that Bin.
|
* MainBin, then all stats are binned under that Bin.
|
||||||
*/
|
*/
|
||||||
#if defined(FS_MEASURE) || defined(STATS_BINNING)
|
#if defined(STATS_BINNING)
|
||||||
typedef MainBin DefaultBin;
|
typedef MainBin DefaultBin;
|
||||||
#else
|
#else
|
||||||
typedef NoBin DefaultBin;
|
typedef NoBin DefaultBin;
|
||||||
|
|
|
@ -126,7 +126,7 @@ Text::output()
|
||||||
using namespace Database;
|
using namespace Database;
|
||||||
|
|
||||||
ccprintf(*stream, "\n---------- Begin Simulation Statistics ----------\n");
|
ccprintf(*stream, "\n---------- Begin Simulation Statistics ----------\n");
|
||||||
if (bins().empty()) {
|
if (bins().empty() || bins().size() == 1) {
|
||||||
stat_list_t::const_iterator i, end = stats().end();
|
stat_list_t::const_iterator i, end = stats().end();
|
||||||
for (i = stats().begin(); i != end; ++i)
|
for (i = stats().begin(); i != end; ++i)
|
||||||
(*i)->visit(*this);
|
(*i)->visit(*this);
|
||||||
|
|
|
@ -88,8 +88,6 @@ Process::Process(const string &name,
|
||||||
fd_map[i] = -1;
|
fd_map[i] = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
num_syscalls = 0;
|
|
||||||
|
|
||||||
// other parameters will be initialized when the program is loaded
|
// other parameters will be initialized when the program is loaded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,21 +143,28 @@ Process::registerExecContext(ExecContext *xc)
|
||||||
execContexts.push_back(xc);
|
execContexts.push_back(xc);
|
||||||
|
|
||||||
if (myIndex == 0) {
|
if (myIndex == 0) {
|
||||||
// first exec context for this process... initialize & enable
|
|
||||||
|
|
||||||
// copy process's initial regs struct
|
// copy process's initial regs struct
|
||||||
xc->regs = *init_regs;
|
xc->regs = *init_regs;
|
||||||
|
|
||||||
// mark this context as active.
|
|
||||||
// activate with zero delay so that we start ticking right
|
|
||||||
// away on cycle 0
|
|
||||||
xc->activate(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// return CPU number to caller and increment available CPU count
|
// return CPU number to caller and increment available CPU count
|
||||||
return myIndex;
|
return myIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Process::startup()
|
||||||
|
{
|
||||||
|
if (execContexts.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// first exec context for this process... initialize & enable
|
||||||
|
ExecContext *xc = execContexts[0];
|
||||||
|
|
||||||
|
// mark this context as active.
|
||||||
|
// activate with zero delay so that we start ticking right
|
||||||
|
// away on cycle 0
|
||||||
|
xc->activate(0);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Process::replaceExecContext(ExecContext *xc, int xcIndex)
|
Process::replaceExecContext(ExecContext *xc, int xcIndex)
|
||||||
|
|
|
@ -108,6 +108,8 @@ class Process : public SimObject
|
||||||
int stdout_fd,
|
int stdout_fd,
|
||||||
int stderr_fd);
|
int stderr_fd);
|
||||||
|
|
||||||
|
// post initialization startup
|
||||||
|
virtual void startup();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FunctionalMemory *memory;
|
FunctionalMemory *memory;
|
||||||
|
|
Loading…
Reference in a new issue