changeset be7f03723412 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=be7f03723412
description:
        stats: move code that loops over all stats into python

diffstat:

 src/base/SConscript             |   2 -
 src/base/statistics.cc          |  60 +++------------------------------
 src/base/statistics.hh          |  28 ++------------
 src/base/stats/info.hh          |   4 +-
 src/base/stats/mysql.cc         |  52 +++++++++++++++++-----------
 src/base/stats/mysql.hh         |  10 +++--
 src/base/stats/output.cc        |  73 -----------------------------------------
 src/base/stats/output.hh        |  24 ++++++++++--
 src/base/stats/text.cc          |  29 +++++++--------
 src/base/stats/text.hh          |   5 +-
 src/base/stats/visit.cc         |  41 -----------------------
 src/base/stats/visit.hh         |  59 ---------------------------------
 src/python/m5/simulate.py       |   2 +-
 src/python/m5/stats/__init__.py |  57 ++++++++++++++++++++++++++-----
 src/python/swig/stats.i         |  56 +++++++++++++++++++++++++++---
 15 files changed, 183 insertions(+), 319 deletions(-)

diffs (truncated from 858 to 300 lines):

diff -r 221013f9fd2f -r be7f03723412 src/base/SConscript
--- a/src/base/SConscript       Thu May 12 11:19:32 2011 -0700
+++ b/src/base/SConscript       Thu May 12 11:19:35 2011 -0700
@@ -71,9 +71,7 @@
 Source('loader/raw_object.cc')
 Source('loader/symtab.cc')
 
-Source('stats/output.cc')
 Source('stats/text.cc')
-Source('stats/visit.cc')
 
 if env['USE_MYSQL']:
     Source('mysql.cc')
diff -r 221013f9fd2f -r be7f03723412 src/base/statistics.cc
--- a/src/base/statistics.cc    Thu May 12 11:19:32 2011 -0700
+++ b/src/base/statistics.cc    Thu May 12 11:19:35 2011 -0700
@@ -433,66 +433,18 @@
     return root ? root->str() : "";
 }
 
-void
-enable()
-{
-    typedef list<Info *>::iterator iter_t;
-
-    iter_t i, end = statsList().end();
-    for (i = statsList().begin(); i != end; ++i) {
-        Info *info = *i;
-        assert(info);
-        if (!info->check() || !info->baseCheck())
-            panic("stat check failed for '%s' %d\n", info->name, info->id);
-    }
-
-    off_t j = 0;
-    for (i = statsList().begin(); i != end; ++i) {
-        Info *info = *i;
-        if (!(info->flags & display))
-            info->name = "__Stat" + to_string(j++);
-    }
-
-    statsList().sort(Info::less);
-
-    for (i = statsList().begin(); i != end; ++i) {
-        Info *info = *i;
-        info->enable();
-    }
-}
-
-void
-prepare()
-{
-    list<Info *>::iterator i = statsList().begin();
-    list<Info *>::iterator end = statsList().end();
-    while (i != end) {
-        Info *info = *i;
-        info->prepare();
-        ++i;
-    }
-}
-
 CallbackQueue resetQueue;
 
 void
-reset()
-{
-    list<Info *>::iterator i = statsList().begin();
-    list<Info *>::iterator end = statsList().end();
-    while (i != end) {
-        Info *info = *i;
-        info->reset();
-        ++i;
-    }
-
-    resetQueue.process();
-}
-
-void
 registerResetCallback(Callback *cb)
 {
     resetQueue.add(cb);
 }
 
 } // namespace Stats
+
+void
+debugDumpStats()
+{
+    Stats::dump();
+}
diff -r 221013f9fd2f -r be7f03723412 src/base/statistics.hh
--- a/src/base/statistics.hh    Thu May 12 11:19:32 2011 -0700
+++ b/src/base/statistics.hh    Thu May 12 11:19:35 2011 -0700
@@ -60,8 +60,8 @@
 #include <vector>
 
 #include "base/stats/info.hh"
+#include "base/stats/output.hh"
 #include "base/stats/types.hh"
-#include "base/stats/visit.hh"
 #include "base/cast.hh"
 #include "base/cprintf.hh"
 #include "base/intmath.hh"
@@ -90,7 +90,7 @@
     void prepare() { s.prepare(); }
     void reset() { s.reset(); }
     void
-    visit(Visit &visitor)
+    visit(Output &visitor)
     {
         visitor.visit(*static_cast<Base *>(this));
     }
@@ -738,7 +738,7 @@
     void reset() { }
     bool zero() const { return value() == 0; }
 
-    void visit(Visit &visitor) { visitor.visit(*this); }
+    void visit(Output &visitor) { visitor.visit(*this); }
 };
 
 template <class T>
@@ -2933,28 +2933,10 @@
     return NodePtr(new SumNode<std::plus<Result> >(val));
 }
 
-/**
- * Enable the statistics package.  Before the statistics package is
- * enabled, all statistics must be created and initialized and once
- * the package is enabled, no more statistics can be created.
- */
-void enable();
-
-/**
- * Prepare all stats for data access.  This must be done before
- * dumping and serialization.
- */
-void prepare();
-
-/**
- * Dump all statistics data to the registered outputs
- */
+/** Dump all statistics data to the registered outputs */
 void dump();
-
-/**
- * Reset all statistics to the base state
- */
 void reset();
+
 /**
  * Register a callback that should be called whenever statistics are
  * reset
diff -r 221013f9fd2f -r be7f03723412 src/base/stats/info.hh
--- a/src/base/stats/info.hh    Thu May 12 11:19:32 2011 -0700
+++ b/src/base/stats/info.hh    Thu May 12 11:19:35 2011 -0700
@@ -62,7 +62,7 @@
 const FlagsType __reserved =    init | display;
 
 struct StorageParams;
-struct Visit;
+struct Output;
 
 class Info
 {
@@ -129,7 +129,7 @@
     /**
      * Visitor entry for outputing statistics data
      */
-    virtual void visit(Visit &visitor) = 0;
+    virtual void visit(Output &visitor) = 0;
 
     /**
      * Checks if the first stat's name is alphabetically less than the second.
diff -r 221013f9fd2f -r be7f03723412 src/base/stats/mysql.cc
--- a/src/base/stats/mysql.cc   Thu May 12 11:19:32 2011 -0700
+++ b/src/base/stats/mysql.cc   Thu May 12 11:19:35 2011 -0700
@@ -395,7 +395,8 @@
 
     list<Info *>::const_iterator i, end = statsList().end();
     for (i = statsList().begin(); i != end; ++i) {
-        (*i)->visit(*this);
+        Info *info = *i;
+        info->visit(*this);
     }
 
     for (i = statsList().begin(); i != end; ++i) {
@@ -606,7 +607,7 @@
 }
 
 void
-MySql::output()
+MySql::begin()
 {
     assert(valid());
 
@@ -615,18 +616,20 @@
 
     // store sample #
     newdata.tick = curTick();
+}
 
+void
+MySql::end()
+{
+    newdata.flush();
+}
+
+void
+MySql::commit()
+{
     MySQL::Connection &mysql = run->conn();
-
-    list<Info *>::const_iterator i, end = statsList().end();
-    for (i = statsList().begin(); i != end; ++i) {
-        Info *stat = *i;
-        stat->visit(*this);
-        if (mysql.commit())
-            panic("could not commit transaction\n%s\n", mysql.error);
-    }
-
-    newdata.flush();
+    if (mysql.commit())
+        panic("could not commit transaction\n%s\n", mysql.error);
 }
 
 void
@@ -641,6 +644,8 @@
     newdata.data = info.value();
 
     newdata.insert();
+
+    commit();
 }
 
 void
@@ -659,6 +664,8 @@
         newdata.data = cvec[x];
         newdata.insert();
     }
+
+    commit();
 }
 
 void
@@ -708,6 +715,8 @@
             newdata.insert();
         }
     }
+
+    commit();
 }
 
 void
@@ -719,6 +728,8 @@
     newdata.stat = find(info.id);
     newdata.y = 0;
     output(info.data, safe_cast<const DistParams *>(info.storageParams));
+
+    commit();
 }
 
 void
@@ -735,6 +746,8 @@
         output(info.data[y],
                safe_cast<const DistParams *>(info.storageParams));
     }
+
+    commit();
 }
 
 void
@@ -754,6 +767,8 @@
             newdata.insert();
         }
     }
+
+    commit();
 }
 
 void
@@ -821,20 +836,17 @@
         output(info);
 }
 
-bool
+Output *
 initMySQL(string host, string user, string password, string database,
     string project, string name, string sample)
 {
-    extern list<Output *> OutputList;
     static MySql mysql;
 
-    if (mysql.connected())
-        return false;
+    if (mysql.connected()) {
+        mysql.connect(host, user, password, database, name, sample, project);
+    }
 
-    mysql.connect(host, user, password, database, name, sample, project);
-    OutputList.push_back(&mysql);
-
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to