用curand来对一个数组随机赋值,但是出现问题,求教!

贴上kernel:
global void generate_uniform_kernel(float * state,int k,int time)
{
int id = threadIdx.x;
int t=time;
float x;
curandState localState ;
curand_init(t, id, 0, &localState);
for(int n=0;n<10000;n++)
{
if((id
10000+n)<=k)
{
x = curand_uniform(&localState);
state[id
10000+n]=x;
}
break;
}
}

我想在一次kernel中对state中的10000个数进行赋值,在主程序中调用
:generate_uniform_kernel<<<1,8>>>(devData,n,d_time);
但是程序总是不能正常运行啊。貌似只有第一个数赋值了,后面的全是0,不知道哪里有问题,我对curand的理解还是不太好。请大神指点啊

LZ您好,curand这个库我不是很熟悉,暂不能给您详细建议,不过您的循环中有一个“break”,这会使得您的循环只跑一次的。而您又是使用循环来生成随机数,并赋值的,所以这样就只有一个数被赋值了。

请您检查一下这里。

祝您好运~

:smiley:
好的。我再研究一下。感谢版主

:victory:
版主神人啊!!!把break删了之后在此运行成功搞定!!!!!!!!同时随机填充了80000个数。

额,这个是c语言常见内容的,以及,恭喜您成功解决问题!

祝您好运~