我有一个关于 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}\nRun Code Online (Sandbox Code Playgroud)\n\n我多次尝试重新启动此代码,但输出始终相同。我找不到这段代码中的\xe2\x80\x99s 错误。线程给出相同的 Id,但 curand_normal 函数应该在每次启动时更改,对吧?
\n每次请求随机值时都会运行 init 。相反,您应该curand_init()在代码开头的单独内核中运行一次。然后当你想要一个新的随机值时,只需调用curand_normal(). 然后,每次调用设备函数时,这些值都会发生变化。
例如,请参阅我的回答。
如果您想使用时间而不是线程 ID 作为种子,请传递返回的值clock()或您最喜欢的时间函数:
unsigned int seed = (unsigned int) clock64();
Run Code Online (Sandbox Code Playgroud)