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