Hi All.
A few years ago I needed to generate the full jump tables for (from 2**0 to 2**127) for use with
the 64 bit xororoshiro128+. And not just the 2**64 (stream) jump available in the reference implementation.
Now, I'm porting code to GPU and need a 32 bit version of these tables for use with xoshiro128++/xoshiro128**
When I did them for xoroshiro128+ a few years ago I did it like below, but I'm not sure where to start with the 32 bit versions.
Can anyone help me out?
To be completely clear: I would like the full table, not only the 2**64 and 2**96 jumps available in the reference source:
static const uint32_t JUMP[] = { 0x8764000b, 0xf542d2d3, 0x6fa035c3, 0x77f2db5b }; //2**64
static const uint32_t LONG_JUMP[] = { 0xb523952e, 0x0b6f099f, 0xccf5a0ef, 0x1c580662 }; //2**96
We use full tables for two things:
1. to prove to ourselves
that the stream mechanism "works" by jumping smaller steps (such as
2**6) which can be reproduced by repeatedly drawing numbers, and then
similarly, that repetitions of smaller jumps are equivalent to larger
jumps.
2. to provide faster stream jumping we combine 2**64,
2**66, 2**68 and so on to our needs. (In my timing tests back then a
'stride' of 2 like that was optimal or close to optimal). When I did this, LONG_JUMP was not implemented.
best regards, Johan
What I did for the 64 bit version:
wget
http://xoroshiro.di.unimi.it/xorshift-1.2.tgz // is there an archive like this containing the 32 bit versions?
wget
http://home.bway.net/lewis/fermat64/ferl64.tar.gz
... extact and build .
and
cd build_tmp/xorshiftbuild/xorshift-1.2/full/128roshiro64
j=0
while [[ $j -le 128 ]] ; do
echo -e -n $j " "|head -c4; grep 55-14-36 prim.txt | ../common/jump.sh $j
j=$((j+2))
done