1

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

CUDA 中的随机数生成

这表明线性同余是要走的路。看起来它应该很容易实现,但是我在实现任何有用的东西时遇到了麻烦。谁能提供一些将在设备中运行的代码?

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

4

2 回答 2

3

根据您的要求,有许多开源选项。还有几个商业选项,例如NAG,他们已经实施了 l'Ecuyer 的 MRG32k3a。如果您需要确保您的流不相关,请谨慎使用 LCG - 您可以使用跳跃/拆分,但您需要很长的时间!

如果你想开源,那么你绝对应该考虑使用推力,因为它很简单。NVIDIA SDK 中还有一些 RNG,包括 Mersenne Twister PRNG 示例(论坛上有 MT607、MT19937)以及 Sobol 和 Niederreiter QRNG。

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

于 2010-02-04T22:00:16.420 回答
3

CUDA 伪随机数生成器是

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

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

    2.a Langdon的论文Langdon的源代码

    2.b GPU 上的 Mersenne Twister

于 2010-02-04T19:48:52.620 回答