Review of Andrei's std.benchmark

foobar foo at bar.com
Thu Sep 20 12:01:46 PDT 2012


On Thursday, 20 September 2012 at 12:35:15 UTC, Andrei 
Alexandrescu wrote:
> On 9/20/12 2:42 AM, Manu wrote:
>> On 19 September 2012 12:38, Peter Alexander
>> <peter.alexander.au at gmail.com 
>> <mailto:peter.alexander.au at gmail.com>> wrote:
>>
>>        The fastest execution time is rarely useful to me, I'm 
>> almost
>>        always much
>>        more interested in the slowest execution time.
>>        In realtime software, the slowest time is often the only
>>        important factor,
>>        everything must be designed to tolerate this 
>> possibility.
>>        I can also imagine other situations where multiple 
>> workloads are
>>        competing
>>        for time, the average time may be more useful in that 
>> case.
>>
>>
>>    The problem with slowest is that you end up with the 
>> occasional OS
>>    hiccup or GC collection which throws the entire benchmark 
>> off. I see
>>    your point, but unless you can prevent the OS from 
>> interrupting, the
>>    time would be meaningless.
>>
>>
>> So then we need to start getting tricky, and choose the 
>> slowest one that
>> is not beyond an order of magnitude or so outside the average?
>
> The "best way" according to some of the people who've advised 
> my implementation of the framework at Facebook is to take the 
> mode of the measurements distribution, i.e. the time at the 
> maximum density.
>
> I implemented that (and it's not easy). It yielded numbers 
> close to the minimum, but less stable and needing more 
> iterations to become stable (when they do get indeed close to 
> the minimum).
>
> Let's use the minimum. It is understood it's not what you'll 
> see in production, but it is an excellent proxy for indicative 
> and reproducible performance numbers.
>
>
> Andrei

 From the responses on the thread clearly there isn't a "best way".
There are different use-cases with different tradeoffs so why not 
allow the user to choose the policy best suited for their 
use-case?
I'd suggest to provide a few reasonable common choices to choose 
from, as well as a way to provide a user defined calculation 
(function pointer/delegate?)


More information about the Digitalmars-d mailing list