std.variant benchmark
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sun Jul 29 19:07:45 PDT 2012
On 7/29/12 11:20 AM, Gor Gyolchanyan wrote:
> On Sun, Jul 29, 2012 at 6:43 PM, Dmitry Olshansky <dmitry.olsh at gmail.com
> <mailto:dmitry.olsh at gmail.com>> wrote:
> This should be more relevant then:
>
> //fib.d
> import std.datetime, std.stdio, std.variant;
>
> auto fib(Int)()
> {
> Int a = 1, b = 1;
> for(size_t i=0; i<100; i++){
> Int c = a + b;
> a = b;
> b = c;
> }
> return a;
> }
>
> void main()
> {
> writeln(benchmark!(fib!int, fib!long, fib!Variant)(10_000));
> }
>
>
> dmd -O -inline -release fib.d
>
> Output:
>
> [TickDuration(197), TickDuration(276), TickDuration(93370107)]
>
> I'm horrified. Who was working on std.variant enhancements? Please
> chime in.
>
> --
> Dmitry Olshansky
>
>
> Thank you for demonstrating my point. :-)
I don't think he demonstrated your point (even leaving aside that the
benchmark above is also flawed). I don't think there was a point, unless
it was you wanted to vent and looked for a pretext - which is, by the
way, entirely reasonable.
You mentioned you need "a very fast typeless storage with maximum
performance and type safety." Well if it's typeless then it means you're
using it for storage, not for computationally-intensive operations, as
the code above does. So what you'd presumably want to test is the speed
of data storage and retrieval. A loop that does a bunch of adds on
Variant does not go in that direction.
Benchmarks are notoriously hard to get right. You need to think of
reasonable baselines - if you want to use Variant for typeless storage,
what is your vanilla implementation, the "obvious contender"? What are
the primitives of which speed is important? Then you need to make sure
you subtract noise from all your comparisons. Then you need to figure
whether the issue is with the design or with the implementation of
Variant. In the former case, maybe Variant isn't for you. In the latter,
bug reports are always welcome.
Andrei
More information about the Digitalmars-d
mailing list