随机发生器& CUDA

时间:2013-03-08 15:12:59

标签: random cuda

我对CUDA中的随机生成器有疑问。我正在使用Curand使用以下代码生成随机数:

__device__ float priceValue(int threadid){

    unsigned int seed = threadid ;
    curandState s;
    curand_init (seed , 0, 0, &s);

    float randomWalk = 2;
    while (abs(randomWalk)> 1) {
        randomWalk = curand_normal(&s);
    }
    return randomWalk; 
}

我曾多次尝试重新启动此代码,我总是输出相同的内容。我在这段代码中找不到什么问题。线程给出相同的ID,但curand_normal函数应该在每次启动时改变,对吗?

1 个答案:

答案 0 :(得分:3)

每次要求随机值时,您都在运行init。相反,您应该在代码开头的单独内核中运行curand_init()一次。然后,当您想要一个新的随机值时,只需调用curand_normal()即可。然后,每次调用设备功能时,这些值都会改变。

有关示例,请参阅我的回答here

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

unsigned int seed = (unsigned int) clock64();