Little fixes to make more of the stats reset correctly.
authorNathan Binkert <binkertn@umich.edu>
Thu, 6 Nov 2003 05:41:14 +0000 (00:41 -0500)
committerNathan Binkert <binkertn@umich.edu>
Thu, 6 Nov 2003 05:41:14 +0000 (00:41 -0500)
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

base/statistics.cc
cpu/simple_cpu/simple_cpu.cc
cpu/simple_cpu/simple_cpu.hh
sim/sim_object.cc

index 1ffbeb690253455bae762e8085f3c4f336042caa..3af764609d2aac0ea40278d768970526b8b265b9 100644 (file)
@@ -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 GenBin  *, std::string>::const_iterator iter;
+            map<const GenBin  *, std::string>::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");
index 550b6c64f0d31fb8dfa61dda7fbca958716f9468..a63f860986d2db5de1e0eeef69a84d833a67bfe0 100644 (file)
@@ -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)
 {
index d69d4e8de04dfc7476c43a1fcb3c0ae75df57581..b0189349fdc5309330134ef977825ce637da0eea 100644 (file)
@@ -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;
index b524d607591c6e883b76cb8c1d0e12875e2fbe15..dbc2cf7be3fcd12e57d4e2df14c34060e838f716 100644 (file)
@@ -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);
 }
 
 //