Nvidia uses XorWow random number generator in its CURAND library. It is a simple and fast random number generator with a reasonably long period. It can also be parallelized relatively easily. Nvidia suggests it passes L'Ecuyer TestU01, but is not very explicit about it. So I've decided to see how it performed on TestU01.
I found very simple to test a new random number generator on TestU01, the documentation is great and the examples helpful. Basically there is just a simple C file to create & compile & run.
XORWOW passes the SmallCrush battery, and according to Marsaglia, it also passes DieHard. But it fails on 1 test in Crush and 3 in BigCrush. By comparison, Mersenne-Twister fails on 2 tests in Crush and 2 in BigCrush. Here are the results of the failures:
========= Summary results of Crush =========
Version: TestU01 1.2.3
Generator: Xorwow
Number of statistics: 144
Total CPU time: 00:50:15.92
The following tests gave p-values outside [0.001, 0.9990]:
(eps means a value < 1.0e-300):
(eps1 means a value < 1.0e-15):
Test p-value
----------------------------------------------
72 LinearComp, r = 29 1 - eps1
----------------------------------------------
All other tests were passed
Version: TestU01 1.2.3
Generator: Xorwow
Number of statistics: 144
Total CPU time: 00:50:15.92
The following tests gave p-values outside [0.001, 0.9990]:
(eps means a value < 1.0e-300):
(eps1 means a value < 1.0e-15):
Test p-value
----------------------------------------------
72 LinearComp, r = 29 1 - eps1
----------------------------------------------
All other tests were passed
========= Summary results of BigCrush =========
Version: TestU01 1.2.3
Generator: Xorwow
Number of statistics: 160
Total CPU time: 06:12:38.79
The following tests gave p-values outside [0.001, 0.9990]:
(eps means a value < 1.0e-300):
(eps1 means a value < 1.0e-15):
Test p-value
----------------------------------------------
7 CollisionOver, t = 7 1.6e-6
27 SimpPoker, r = 27 eps
81 LinearComp, r = 29 1 - eps1
----------------------------------------------
All other tests were passed
very interesting. good one. I need to test RNGs using TestU01. If I have an offline file with bunch of random numbers how can I test using the TestU01.
ReplyDelete