Hi all,

Consider the following program, which is supposed to check the
"randomness" of pycuda random number generator:

import pycuda.autoinit
import pycuda.curandom as curandom
import numpy

def test(size, dtype):
        a = curandom.rand((size,), dtype=dtype).get()
        return numpy.sum(a) / size

max_mem = 512 * (2 ** 20)
for dtype in numpy.float32, numpy.float64:
        mem = 2 ** 20
        print dtype
        while mem <= max_mem:
                size = mem / dtype().nbytes
                print str(float(size) / (2 ** 20)) + "M elements: " + 
str(test(size, dtype))
                mem *= 2


I get the following output on CentOS, PyCuda 0.94, GF GTX280:
<type 'numpy.float32'>
0.25M elements: 0.500930726528
0.5M elements: 0.499650388956
1.0M elements: 0.500381290913
2.0M elements: 0.499845147133
4.0M elements: 0.499690800905
8.0M elements: 0.499930769205
16.0M elements: 0.49999204278
32.0M elements: 0.5
64.0M elements: 0.25
128.0M elements: 0.125
<type 'numpy.float64'>
0.125M elements: 0.499772083492
0.25M elements: 0.50026633386
0.5M elements: 0.500266385917
1.0M elements: 0.499622306278
2.0M elements: 0.500208270678
4.0M elements: 0.499779380632
8.0M elements: 0.500015098409
16.0M elements: 0.499948681628
32.0M elements: 0.499982760884
64.0M elements: 0.499977268643

It looks like for single precision generator starts repeating itself
after ~16M numbers. Is it some restriction of the algorithm or a bug
in code?

Best regards,
Bogdan

_______________________________________________
PyCUDA mailing list
PyCUDA@tiker.net
http://lists.tiker.net/listinfo/pycuda

Reply via email to