summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLisa Hsu <Lisa.Hsu@amd.com>2010-02-23 09:33:18 -0800
committerLisa Hsu <Lisa.Hsu@amd.com>2010-02-23 09:33:18 -0800
commitbe4cf50c5a6a5761f6474fb9f85a9c241101f3ce (patch)
treed9902a5c9c9ec4f9cf0250c59800211d38faeb0a
parent2ad386f104cf84bd8bcb50eef50f04cdbcf9ebf7 (diff)
downloadgem5-be4cf50c5a6a5761f6474fb9f85a9c241101f3ce.tar.xz
stats: this makes some fixes to AverageStat and AverageVector.
Also, make Formulas work on AverageVector. First, Stat::Average (and thus Stats::AverageVector) was broken when coming out of a checkpoint and on resets, this fixes that. Formulas also didn't work with AverageVector, but added support for that.
-rw-r--r--src/base/statistics.hh11
-rw-r--r--src/python/m5/simulate.py1
2 files changed, 10 insertions, 2 deletions
diff --git a/src/base/statistics.hh b/src/base/statistics.hh
index 0f001dccb..06a9d465d 100644
--- a/src/base/statistics.hh
+++ b/src/base/statistics.hh
@@ -492,6 +492,8 @@ class AvgStor
private:
/** The current count. */
Counter current;
+ /** The tick of the last reset */
+ Tick lastReset;
/** The total count for all tick. */
mutable Result total;
/** The tick that current last changed. */
@@ -505,7 +507,7 @@ class AvgStor
* Build and initializes this stat storage.
*/
AvgStor(Info *info)
- : current(0), total(0), last(0)
+ : current(0), lastReset(0), total(0), last(0)
{ }
/**
@@ -547,7 +549,7 @@ class AvgStor
result() const
{
assert(last == curTick);
- return (Result)(total + current) / (Result)(curTick + 1);
+ return (Result)(total + current) / (Result)(curTick - lastReset + 1);
}
/**
@@ -573,6 +575,7 @@ class AvgStor
{
total = 0.0;
last = curTick;
+ lastReset = curTick;
}
};
@@ -2551,6 +2554,10 @@ class Temp
: node(new VectorStatNode(s.info()))
{ }
+ Temp(const AverageVector &s)
+ : node(new VectorStatNode(s.info()))
+ { }
+
/**
*
*/
diff --git a/src/python/m5/simulate.py b/src/python/m5/simulate.py
index 092bd0339..291fdc7b7 100644
--- a/src/python/m5/simulate.py
+++ b/src/python/m5/simulate.py
@@ -148,6 +148,7 @@ def restoreCheckpoint(root, dir):
print "Restoring from checkpoint"
internal.core.unserializeAll(dir)
need_resume.append(root)
+ stats.reset()
def changeToAtomic(system):
if not isinstance(system, (objects.Root, objects.System)):