如何在cuda中生成伪随机数

时间:2010-02-04 19:27:05

标签: c++ random cuda gpgpu

我正在尝试使用CUDA构建一个粒子系统来完成繁重的工作。我想随机化一些粒子的初始值,如速度和寿命。随机数不必是超级随机数,因为它只是用于视觉效果。我发现这篇文章涉及同一主题:

Random Number Generation in CUDA

这表明线性同余是要走的路。它似乎应该很容易实现,但我无法获得有关我的实现的任何有用的东西。任何人都可以提供一些将在设备中运行的代码吗?

我在Windows 7 64位上使用C ++和VC ++。

2 个答案:

答案 0 :(得分:3)

CUDA伪随机数生成器

  1. 包含在NVidia SDK中,例如C/src/MersenneTwister/C/src/quasirandomGenerator

  2. 可作为单独的论文和来源提供:

    2.a Langdon's paperLangdon's source code

    2.b Mersenne Twister on GPU

答案 1 :(得分:3)

根据您的要求,有许多开源选项。还有一些商业选择,例如NAG已经实施了l'Ecuyer的MRG32k3a。如果你需要确保你的流不相关,要警惕使用LCG - 你可以使用跳跃/分裂,但你需要很长一段时间!

如果你想开源,那么你应该考虑使用thrust来简化它。 NVIDIA SDK中还有一些RNG,包括Mersenne Twister PRNG样本(论坛上有MT607,MT19937)以及Sobol和Niederreiter QRNG。

最后,CUDPP还有一个随机数生成器。