Skip to content

Benchmark

This page includes the results of speed tests and big crush tests of several kinds of RNGs in this package. The data is produced on such a computer:

julia> versioninfo()
Julia Version 0.5.0-rc0+0
Commit 633443c (2016-08-02 00:53 UTC)
Platform Info:
  System: Linux (x86_64-redhat-linux)
  CPU: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Sandybridge)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.7.1 (ORCJIT, ivybridge)

All the benchmark scripts are in the benchmark directory, you can do the tests by yourself.

!!!note All the data here is only for reference, and will be updated as this package is updated.

Speed Test

The speed test results are as following (the smaller is the better):

Speed Test

and detailed in the table (sorted by speed):

RNG Type Speed (ns/64 bits) RNG Type Speed (ns/64 bits) RNG Type Speed (ns/64 bits)
Xoroshiro128Star 1.184 PCG_XSL_RR_128 2.646 Philox4x64 5.737
Xorshift128Plus 1.189 PCG_XSH_RS_64 2.738 Threefry4x64 5.965
Xoroshiro128Plus 1.393 PCG_XSH_RR_128 3.260 Threefry2x64 7.760
Xorshift128Star 1.486 PCG_XSL_RR_64 3.308 Philox2x32 9.698
PCG_RXS_M_XS_64 1.522 PCG_XSH_RS_128 3.373 Philox4x32 11.517
PCG_XSL_RR_RR_128 1.602 PCG_RXS_M_XS_32 3.420 Threefry4x32 12.241
Xorshift64 1.918 PCG_XSH_RR_64 3.580 Threefry2x32 16.253
BaseMT19937* 1.971 Xorshift1024Plus 3.725 ARS1x128 17.081
Xorshift64Star 2.000 Xorshift1024Star 3.748 ARS4x32 18.059
PCG_XSL_RR_RR_64 2.044 MT19937 4.229 AESNI1x128 18.304
PCG_RXS_M_XS_128 2.482 Philox2x64 5.161 AESNI4x32 29.770

*BaseMT19937 denotes to Base.Random.MersenneTwister.

Big Crush Test

10 kinds of RNGs (which are worth considering) have been tested with Big Crush test batteries:

RNG Type Speed (ns/64 bits) Total CPU time Failed Test(s)*
AESNI1x128 18.304 04:14:22.19
ARS1x128 17.081 04:13:27.54 55 SampleCorr, k = 1 p-value = 7.0e-4
BaseMT19937 1.971 03:18:23.47
MT19937 4.229 03:32:59.06 36 Gap, r = 0 p-value = eps
80LinearComp, r = 0 p-value = 1-eps1
81 LinearComp, r = 29 p-value = 1-eps1
PCG_RXS_M_XS_64_64 1.522 03:20:07.97
PCG_XSH_RS_128_64 3.373 03:24:57.54 54 SampleMean, r = 10 0.9991
Philox2x64 5.737 03:28:52.27 35 Gap, r = 25 3.4e-4
Threefry2x64 5.965 03:37:53.53
Xoroshiro128Plus 1.393 03:33:16.51
Xorshift1024Star 3.748 03:39:15.19

*eps means a value < 1.0e-300, and eps1 means a value < 1.0e-15.

It is interesting that BaseMT19937 passes all the tests when generating UInt64 (by generating two UInt32 with dSFMT). The PCG ones do not pass all the tests as the paper says, but the failures are just near the threshold. The RNG with best performance here is Xoroshiro128Plus, which passes all the tests and has an excellent speed.