Can you give me an exact command line?

  Nate

On Wed, Jul 28, 2010 at 12:10 PM, Ali Saidi <[email protected]> wrote:
> Actually, it only appeared to fix the problem. It's still using some bad
> pointer/freed memory, it just didn't die with an assert. If you apply this
> patch to the simple cpu and run valgrind on M5 you can see that the stat is
> accessing freed memory.
>
> Ali
>
>
>
>
>
> On Thu, 22 Jul 2010 12:47:53 -0400, Ali Saidi <[email protected]> wrote:
>> This fixed my problem... Thanks Nate!
>>
>> Ali
>>
>>
>> On Wed, 21 Jul 2010 21:54:56 -0400, Nathan Binkert
>>
>> <[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
> _______________________________________________
> 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

Reply via email to