From: Nathan Binkert Date: Thu, 6 Nov 2003 05:41:14 +0000 (-0500) Subject: Little fixes to make more of the stats reset correctly. X-Git-Tag: m5_1.0_beta2~284 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=655e9ef3de65ce71f63fce23152de862994c38f3;p=gem5.git Little fixes to make more of the stats reset correctly. base/statistics.cc: formatting cpu/simple_cpu/simple_cpu.cc: cpu/simple_cpu/simple_cpu.hh: Make numInsts reset by adding a resetStats function sim/sim_object.cc: Register the reset callback in a slightly cleaner way to avoid potential static member constructor ordering issues --HG-- extra : convert_revision : 408073b4b0397fbf9dfd9c548a313f1c8c3fc031 --- diff --git a/base/statistics.cc b/base/statistics.cc index 1ffbeb690..3af764609 100644 --- a/base/statistics.cc +++ b/base/statistics.cc @@ -160,7 +160,6 @@ Database::~Database() void Database::dump(ostream &stream) { - #ifndef FS_MEASURE list_t::iterator i = printStats.begin(); list_t::iterator end = printStats.end(); @@ -179,7 +178,7 @@ Database::dump(ostream &stream) ccprintf(stream, "PRINTING BINNED STATS\n"); while (j != bins_end) { (*j)->activate(); - map::const_iterator iter; + map::const_iterator iter; iter = bin_names.find(*j); if (iter == bin_names.end()) panic("a binned stat not found in names map!"); @@ -187,19 +186,19 @@ Database::dump(ostream &stream) #ifdef FS_MEASURE list_t::iterator i = printStats.begin(); - list_t::iterator end = printStats.end(); + list_t::iterator end = printStats.end(); #else - list_t::iterator i = binnedStats.begin(); - list_t::iterator end = binnedStats.end(); + list_t::iterator i = binnedStats.begin(); + list_t::iterator end = binnedStats.end(); #endif - while (i != end) { - Stat *stat = *i; - if (stat->dodisplay()) - stat->display(stream); - ++i; - } - ++j; - ccprintf(stream, "---------------------------------\n"); + while (i != end) { + Stat *stat = *i; + if (stat->dodisplay()) + stat->display(stream); + ++i; + } + ++j; + ccprintf(stream, "---------------------------------\n"); } #ifndef FS_MEASURE ccprintf(stream, "**************ALL STATS************\n"); diff --git a/cpu/simple_cpu/simple_cpu.cc b/cpu/simple_cpu/simple_cpu.cc index 550b6c64f..a63f86098 100644 --- a/cpu/simple_cpu/simple_cpu.cc +++ b/cpu/simple_cpu/simple_cpu.cc @@ -159,7 +159,9 @@ SimpleCPU::SimpleCPU(const string &_name, Process *_process, memReq->data = new uint8_t[64]; numInst = 0; + startNumInst = 0; numLoad = 0; + startNumLoad = 0; lastIcacheStall = 0; lastDcacheStall = 0; @@ -215,6 +217,8 @@ SimpleCPU::execCtxStatusChg(int thread_num) { void SimpleCPU::regStats() { + using namespace Statistics; + BaseCPU::regStats(); numInsts @@ -244,10 +248,16 @@ SimpleCPU::regStats() .prereq(dcacheStallCycles) ; - numInsts = Statistics::scalar(numInst); + numInsts = Statistics::scalar(numInst) - Statistics::scalar(startNumInst); simInsts += numInsts; } +void +SimpleCPU::resetStats() +{ + startNumInst = numInst; +} + void SimpleCPU::serialize(ostream &os) { diff --git a/cpu/simple_cpu/simple_cpu.hh b/cpu/simple_cpu/simple_cpu.hh index d69d4e8de..b0189349f 100644 --- a/cpu/simple_cpu/simple_cpu.hh +++ b/cpu/simple_cpu/simple_cpu.hh @@ -231,10 +231,12 @@ class SimpleCPU : public BaseCPU } // statistics - void regStats(); + virtual void regStats(); + virtual void resetStats(); // number of simulated instructions Counter numInst; + Counter startNumInst; Statistics::Formula numInsts; // number of simulated memory references @@ -242,6 +244,7 @@ class SimpleCPU : public BaseCPU // number of simulated loads Counter numLoad; + Counter startNumLoad; // number of idle cycles Statistics::Average<> idleFraction; diff --git a/sim/sim_object.cc b/sim/sim_object.cc index b524d6075..dbc2cf7be 100644 --- a/sim/sim_object.cc +++ b/sim/sim_object.cc @@ -73,16 +73,6 @@ SimObject::regFormulas() { } -namespace { - class __SimObjectResetCB : public Callback - { - public: - __SimObjectResetCB() { Statistics::RegResetCallback(this); } - virtual void process() { SimObject::resetAllStats(); } - }; - __SimObjectResetCB __theSimObjectResetCB; -} - void SimObject::resetStats() { @@ -101,6 +91,15 @@ SimObject::printExtraOutput(ostream &os) // call regStats() on all SimObjects and then regFormulas() on all // SimObjects. // +struct SimObjectResetCB : public Callback +{ + virtual void process() { SimObject::resetAllStats(); } +}; + +namespace { + static SimObjectResetCB StatResetCB; +} + void SimObject::regAllStats() { @@ -122,7 +121,9 @@ SimObject::regAllStats() cprintf("registering formulas for %s\n", (*i)->name()); #endif (*i)->regFormulas(); - } + } + + Statistics::RegResetCallback(&StatResetCB); } //