1

CURAND 带有一组随机数生成器,但我没有找到它们每个的性能(和随机性)属性的任何比较;大多数情况下,我会对使用哪个生成器用于哪个应用程序以获得最大性能感兴趣。如果有人可以快速概述它们之间的差异或链接我一个这样做的资源,我会很高兴。

提前致谢。

4

2 回答 2

2

这张图显示了不同 RNG 的性能。

cuRAND RNG 的速度

对于随机性,它应该只与 RNG 类型/算法有关。所以你可以参考英特尔 MKL 文档。里面有详细信息和研究论文。CURAND 和 MKL 中的类型名称非常相似。

http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-3D7D2650-A414-4C95-AF33-BE291BAB2AC3.htm

于 2013-08-29T09:33:39.717 回答
2

第一个区别是效率。XORWOW 是默认生成器,但并不总是最有效的。例如,Philox 更快地生成正态分布的浮点数。

库兰德

另一个区别是,在实践中,您可以使用一些生成器在每次调用时生成多个浮点数。例如,使用 Philox 您可以在每次调用时生成甚至 4 个正态或均匀分布的浮点数,而使用 XORWOW 您可以生成最多两个正态或均匀分布的浮点数。

__device__ float4 
curand_normal4 (curandStatePhilox4_32_10_t *state)

下一个区别是伪随机序列的周期(开始看到重复之前的 PRNG 的总状态空间)。Xorwow 的周期约为 2^190(同一种子在 2^67 之后设置状态)*。对于 Philox,子序列和偏移量一起定义了周期为 2^128 的序列中的偏移量。请注意,如果您使用相同的种子运行数百万个线程,您可能会用完每个线程的状态空间并开始看到重复。((2^190) / (10^6)) / (2^67) = 1.0633824 × 10^31

另一个区别是各州的规模。对于 Xorwow,sizeof(curandState_t) 是 48 字节,sizeof(curandStatePhilox4_32_10_t) 是 64 字节。当您运行数百万个线程(每个线程都有自己的 curand 状态)时,您可能会耗尽设备内存。1024^2*64 ~= 每百万线程 64 兆字节。

XORWOW、Philox、MRR32k3a、MTGP32 是伪随机生成器,而两个 Sobol 都是准随机生成器。

*当使用种子调用 curand_init 时,它会打乱该种子,然后向前跳过 2^67 个数字(这有点贵,但有一些不错的属性)

资料来源: https ://developer.nvidia.com/cuRAND http://cs.brown.edu/courses/cs195v/lecture/week11.pdf

于 2014-07-02T18:48:52.210 回答