[Intel-gfx] [PATCH i-g-t 17/18] stats: Add support for quartiles (and thus median)
Chris Wilson
chris at chris-wilson.co.uk
Sat Jun 27 08:56:54 PDT 2015
On Sat, Jun 27, 2015 at 04:52:56PM +0100, Damien Lespiau wrote:
> On Sat, Jun 27, 2015 at 04:15:41PM +0100, Chris Wilson wrote:
> > > +static void igt_stats_ensure_sorted_values(igt_stats_t *stats)
> > > +{
> > > + if (stats->sorted_array_valid)
> > > + return;
> > > +
> > > + if (!stats->sorted) {
> > > + stats->sorted = calloc(stats->capacity, sizeof(*stats->values));
> > > + igt_assert(stats->sorted);
> > > + }
> >
> > Since sorted_array_valid = false on igt_stats_push, but we only allocate
> > for the first call to sort, there's no safeguard against
> >
> > igt_stats_push();
> > igt_stats_get_median();
> > igt_stats_push();
> > igt_stats_get_median();
> >
> > exploding.
>
> I believe it's fine (and I just sent a test telling the same story, but
> well, overflowing an small heap allocated array can often be "fine" with
> an overallocation from malloc() rounding up the size to git in a bin),
> as the size of the dataset is an invariant (I didn't implement your
> suggestion to grow the array at push() time). We allocate the full
> capacity here, not just the current n_values.
Ah, didn't realise that the capacity was fixed.
> I did have a think about a growing ->values array, but I think we know
> the number of data points we want upfront most of the time (if not
> always) when going to do some measurements?
No, often times I want to run a benchmark for x seconds and then look at
the spread of samples.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list