power: Allow global stats in power equations
authorStephan Diestelhorst <stephan.diestelhorst@arm.com>
Thu, 6 Apr 2017 13:53:41 +0000 (14:53 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Tue, 11 Apr 2017 23:57:26 +0000 (23:57 +0000)
Allow global stats such as sim_seconds in power equations to make it
possible to convert from event stats to rate stats.

Change-Id: I429abe0ffadc0dbd162eb39e0897143be472ef65
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/2720
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
src/sim/power/mathexpr_powermodel.cc

index a77e14a084c94a898cfce22eb1be5155940e5062..ab48720072218a7c4d97f4322c5dd724fc14cd4a 100644 (file)
@@ -39,6 +39,8 @@
 
 #include "sim/power/mathexpr_powermodel.hh"
 
+#include <string>
+
 #include "base/statistics.hh"
 #include "params/MathExprPowerModel.hh"
 #include "sim/mathexpr.hh"
@@ -62,9 +64,15 @@ MathExprPowerModel::startup()
 {
     // Create a map with stats and pointers for quick access
     // Has to be done here, since we need access to the statsList
-    for (auto & i: Stats::statsList())
-        if (i->name.find(basename) == 0)
+    for (auto & i: Stats::statsList()) {
+        if (i->name.find(basename) == 0) {
+            // Add stats for this sim object and its child objects
             stats_map[i->name.substr(basename.size())] = i;
+        } else if (i->name.find(".") == std::string::npos) {
+            // Add global stats (sim_seconds, for example)
+            stats_map[i->name] = i;
+        }
+    }
 
     tryEval(st_expr);
     const bool st_failed = failed;