随机生成器和 CUDA

ALF*_*RAM 5 random cuda

我有一个关于 CUDA 中的随机生成器的问题。我使用 Curand 生成随机数,代码如下:

\n\n
__device__ float priceValue(int threadid){\n\n    unsigned int seed = threadid ;\n    curandState s;\n    curand_init (seed , 0, 0, &s);\n\n    float randomWalk = 2;\n    while (abs(randomWalk)> 1) {\n        randomWalk = curand_normal(&s);\n    }\n    return randomWalk; \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我多次尝试重新启动此代码,但输出始终相同。我找不到这段代码中的\xe2\x80\x99s 错误。线程给出相同的 Id,但 curand_normal 函数应该在每次启动时更改,对吧?

\n

Rob*_*lla 4

每次请求随机值时都会运行 init 。相反,您应该curand_init()在代码开头的单独内核中运行一次。然后当你想要一个新的随机值时,只需调用curand_normal(). 然后,每次调用设备函数时,这些值都会发生变化。

例如,请参阅我的回答

如果您想使用时间而不是线程 ID 作为种子,请传递返回的clock()或您最喜欢的时间函数:

unsigned int seed = (unsigned int) clock64();
Run Code Online (Sandbox Code Playgroud)