This fixed my problem... Thanks Nate! Ali
On Wed, 21 Jul 2010 21:54:56 -0400, Nathan Binkert begin_of_the_skype_highlighting end_of_the_skype_highlighting <[email protected]> wrote: > changeset 7772a8bf76ee in /z/repo/m5 > details: http://repo.m5sim.org/m5?cmd=changeset;node=7772a8bf76ee > description: > stats: unify the two stats distribution type better > > diffstat: > > src/base/statistics.hh | 34 ++++++++++++++++++++++++++++++++++ > src/base/stats/info.hh | 31 ++++++++----------------------- > src/base/stats/mysql.cc | 14 ++++++++------ > src/base/stats/text.cc | 36 ++++++++---------------------------- > 4 files changed, 58 insertions(+), 57 deletions(-) > > diffs (257 lines): > > diff -r ad631c296c9b -r 7772a8bf76ee src/base/statistics.hh > --- a/src/base/statistics.hh Wed Jul 21 15:53:53 2010 -0700 > +++ b/src/base/statistics.hh Wed Jul 21 18:54:53 2010 -0700 > @@ -160,6 +160,11 @@ > Vector2dInfoProxy(Stat &stat) : InfoProxy<Stat, Vector2dInfo>(stat) {} > }; > > +struct StorageParams > +{ > + virtual ~StorageParams(); > +}; > + > class InfoAccess > { > protected: > @@ -1269,6 +1274,12 @@ > // Non formula statistics > // > ////////////////////////////////////////////////////////////////////// > +/** The parameters for a distribution stat. */ > +struct DistParams : public StorageParams > +{ > + const DistType type; > + DistParams(DistType t) : type(t) {} > +}; > > /** > * Templatized storage and interface for a distrbution stat. > @@ -1279,6 +1290,15 @@ > /** The parameters for a distribution stat. */ > struct Params : public DistParams > { > + /** The minimum value to track. */ > + Counter min; > + /** The maximum value to track. */ > + Counter max; > + /** The number of entries in each bucket. */ > + Counter bucket_size; > + /** The number of buckets. Equal to (max-min)/bucket_size. */ > + size_type buckets; > + > Params() : DistParams(Dist) {} > }; > > @@ -1368,6 +1388,12 @@ > { > const Params *params = safe_cast<const Params > *>(info->storageParams); > > + assert(params->type == Dist); > + data.type = params->type; > + data.min = params->min; > + data.max = params->max; > + data.bucket_size = params->bucket_size; > + > data.min_val = (min_val == CounterLimits::max()) ? 0 : min_val; > data.max_val = (max_val == CounterLimits::min()) ? 0 : max_val; > data.underflow = underflow; > @@ -1468,6 +1494,10 @@ > void > prepare(Info *info, DistData &data) > { > + const Params *params = safe_cast<const Params > *>(info->storageParams); > + > + assert(params->type == Deviation); > + data.type = params->type; > data.sum = sum; > data.squares = squares; > data.samples = samples; > @@ -1540,6 +1570,10 @@ > void > prepare(Info *info, DistData &data) > { > + const Params *params = safe_cast<const Params > *>(info->storageParams); > + > + assert(params->type == Deviation); > + data.type = params->type; > data.sum = sum; > data.squares = squares; > data.samples = curTick; > diff -r ad631c296c9b -r 7772a8bf76ee src/base/stats/info.hh > --- a/src/base/stats/info.hh Wed Jul 21 15:53:53 2010 -0700 > +++ b/src/base/stats/info.hh Wed Jul 21 18:54:53 2010 -0700 > @@ -61,11 +61,7 @@ > /** Mask of flags that can't be set directly */ > const FlagsType __reserved = init | display; > > -struct StorageParams > -{ > - virtual ~StorageParams(); > -}; > - > +struct StorageParams; > struct Visit; > > class Info > @@ -168,8 +164,15 @@ > virtual Result total() const = 0; > }; > > +enum DistType { Deviation, Dist }; > + > struct DistData > { > + DistType type; > + Counter min; > + Counter max; > + Counter bucket_size; > + > Counter min_val; > Counter max_val; > Counter underflow; > @@ -180,24 +183,6 @@ > Counter samples; > }; > > -enum DistType { Deviation, Dist }; > - > -struct DistParams : public StorageParams > -{ > - const DistType type; > - > - /** The minimum value to track. */ > - Counter min; > - /** The maximum value to track. */ > - Counter max; > - /** The number of entries in each bucket. */ > - Counter bucket_size; > - /** The number of buckets. Equal to (max-min)/bucket_size. */ > - size_type buckets; > - > - explicit DistParams(DistType t) : type(t) {} > -}; > - > class DistInfo : public Info > { > public: > diff -r ad631c296c9b -r 7772a8bf76ee src/base/stats/mysql.cc > --- a/src/base/stats/mysql.cc Wed Jul 21 15:53:53 2010 -0700 > +++ b/src/base/stats/mysql.cc Wed Jul 21 18:54:53 2010 -0700 > @@ -481,9 +481,10 @@ > if (!configure(info, "DIST")) > return; > > - const DistParams *params = > - safe_cast<const DistParams *>(info.storageParams); > - if (params->type == Dist) { > + const DistStor::Params *params = > + dynamic_cast<const DistStor::Params *>(info.storageParams); > + if (params) { > + assert(params->type == Dist); > stat.size = params->buckets; > stat.min = params->min; > stat.max = params->max; > @@ -498,9 +499,10 @@ > if (!configure(info, "VECTORDIST")) > return; > > - const DistParams *params = > - safe_cast<const DistParams *>(info.storageParams); > - if (params->type == Dist) { > + const DistStor::Params *params = > + dynamic_cast<const DistStor::Params *>(info.storageParams); > + if (params) { > + assert(params->type == Dist); > stat.size = params->buckets; > stat.min = params->min; > stat.max = params->max; > diff -r ad631c296c9b -r 7772a8bf76ee src/base/stats/text.cc > --- a/src/base/stats/text.cc Wed Jul 21 15:53:53 2010 -0700 > +++ b/src/base/stats/text.cc Wed Jul 21 18:54:53 2010 -0700 > @@ -306,30 +306,24 @@ > bool descriptions; > int precision; > > - Counter min; > - Counter max; > - Counter bucket_size; > - size_type size; > - DistType type; > - > const DistData &data; > > DistPrint(const Text *text, const DistInfo &info); > DistPrint(const Text *text, const VectorDistInfo &info, int i); > - void init(const Text *text, const Info &info, const DistParams > *params); > + void init(const Text *text, const Info &info); > void operator()(ostream &stream) const; > }; > > DistPrint::DistPrint(const Text *text, const DistInfo &info) > : data(info.data) > { > - init(text, info, safe_cast<const DistParams *>(info.storageParams)); > + init(text, info); > } > > DistPrint::DistPrint(const Text *text, const VectorDistInfo &info, int i) > : data(info.data[i]) > { > - init(text, info, safe_cast<const DistParams *>(info.storageParams)); > + init(text, info); > > name = info.name + "_" + > (info.subnames[i].empty() ? (to_string(i)) : info.subnames[i]); > @@ -339,27 +333,13 @@ > } > > void > -DistPrint::init(const Text *text, const Info &info, const DistParams > *params) > +DistPrint::init(const Text *text, const Info &info) > { > name = info.name; > desc = info.desc; > flags = info.flags; > precision = info.precision; > descriptions = text->descriptions; > - > - type = params->type; > - switch (type) { > - case Dist: > - min = params->min; > - max = params->max; > - bucket_size = params->bucket_size; > - size = params->buckets; > - break; > - case Deviation: > - break; > - default: > - panic("unknown distribution type"); > - } > } > > void > @@ -391,10 +371,10 @@ > print.value = stdev; > print(stream); > > - if (type == Deviation) > + if (data.type == Deviation) > return; > > - assert(size == data.cvec.size()); > + size_t size = data.cvec.size(); > > Result total = 0.0; > if (data.underflow != NAN) > @@ -419,8 +399,8 @@ > stringstream namestr; > namestr << base; > > - Counter low = i * bucket_size + min; > - Counter high = ::min(low + bucket_size - 1.0, max); > + Counter low = i * data.bucket_size + data.min; > + Counter high = ::min(low + data.bucket_size - 1.0, data.max); > namestr << low; > if (low < high) > namestr << "-" << high; > _______________________________________________ > m5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/m5-dev _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
