[Bench!][Mir] +54%..+185% performance boost for Mersenne Twister.

Joseph Rushton Wakeling via Digitalmars-d digitalmars-d at puremagic.com
Sat Jan 7 15:16:26 PST 2017


On Saturday, 26 November 2016 at 20:13:36 UTC, Andrei 
Alexandrescu wrote:
> On 11/26/16 11:31 AM, Ilya Yaroshenko wrote:
>> Hey,
>>
>> 32-bit Mt19937 random number Generator is default in Phobos.
>> It is default in Mir too, except that 64-bit targets use 
>> 64-bit Mt19937 instead.
>
> Congrats! Also thanks for using the Boost license which would 
> allow backporting the improvements to Phobos. Who'd be up for 
> it?

PR is now on Phobos, and in the process of looking at this 
together, Ilya and I resolved a number of issues both in this 
code and in mir.random:
https://github.com/dlang/phobos/pull/5011

There is unfortunately one serious blocker to this PR.  In order 
to allow it to be a drop-in replacement for the previous Phobos 
implementation, I had to find a means to default-initialize its 
internal state at compile time so that it would match what would 
be there if it was explicitly seeded with the default seed.

The method I developed works fine with LDC, but fails with DMD: 
the internal state of the generator winds up as all zeros, except 
for the `State.z` parameter which mysteriously ends up at the 
correct value.  This would suggest that somehow the generated 
state is being overwritten _after_ being correctly generated, 
rather than not correctly generated in the first place.

Any chance that someone with more CTFE-fu than myself could take 
a glance and advise what might be wrong (or how to work around 
it)?


More information about the Digitalmars-d mailing list