default random object?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Feb 14 17:27:04 PST 2009


Denis Koroskin wrote:
> On Sat, 14 Feb 2009 21:38:19 +0300, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> wrote:
>> For 20000 evaluations over a 100000-integers array, reduce!(min), 
>> reduce!("b > a ? b : a"), and handMax all finished within 3.4 to 3.5 
>> seconds on my machine. The "normal" version took 11.6 seconds to 
>> complete. Trials with various sizes reveal a similar pattern 
>> throughout: pass-by-delegate is way behind the others, which work 
>> about as fast.
>>
>> This means that, had std.algorithm taken the "normal" route, it would 
>> have been plenty useless for any serious needs. Not taking the 
>> "normal" route means that its abstractions rival hand-tuned code so I 
>> can use them without worrying they will come unglued when shown a real 
>> challenge.
>>
>> So, to paraphrase the ugly guy in "The Good, The Bad, and The Ugly": 
>> If you want to shoot, shoot, don't troll.
>>
>>
>> Andrei
> 
> Did you try passing a comparator (C++ way to do things)? It should be 
> pretty fast, to.

Is this what you meant?

struct StructMax
{
     static uint opCall(uint a, uint b)
     {
         return b > a ? b : a;
     }
}

uint reduceStruct(uint[] x, StructMax s)
{
     invariant n = x.length;
     uint m = x[0];
     for (uint i = 1; i < n; ++i) {
         m = s(m, x[i]);
     }
     return m;
}

I did, and as expected the running time is similar to the other fast 
approaches. Removing "static" does not affect the timings sensibly.


Andrei



More information about the Digitalmars-d mailing list