大神帮我看看这个随机数程序为何每次生成的都是相同的随机数

weixin_42166476 2018-05-09 09:21:33
int n = 200;
using namespace std;

__device__ float generate(curandState* globalState, int ind)
{
//int ind = threadIdx.x;
curandState localState = globalState[ind];
float RANDOM = curand_uniform(&localState);
globalState[ind] = localState;
return RANDOM;
}

__global__ void setup_kernel(curandState * state, unsigned long seed)
{
int id = threadIdx.x;
curand_init(seed, id, 0, &state[id]);
}

__global__ void kernel(float* N, curandState* globalState, int n)
{
// generate random numbers
for (int i = 0; i<40000; i++)
{
float k = generate(globalState, i) * 100000;
while (k > n*n - 1)
{
k -= (n*n - 1);
}
N[i] = k;
printf("%f", N[i]);
}
}

int main()
{
int N = 40000;

curandState* devStates;
cudaMalloc(&devStates, N*sizeof(curandState));

// setup seeds
setup_kernel << < 1, N >> > (devStates, unsigned(time(NULL)));

float N2[40000];
float* N3;
cudaMalloc((void**)&N3, sizeof(float)*N);

kernel << <1, 1 >> > (N3, devStates, n);

cudaMemcpy(N2, N3, sizeof(float)*N, cudaMemcpyDeviceToHost);

// for (int i = 0; i<N; i++)
// {
// printf("%f",N2[i] );
//}

return 0;
}
...全文
1092 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
YCMyTot 2018-05-25
  • 打赏
  • 举报
回复
更详细的用法您可以去查看curand文档
YCMyTot 2018-05-25
  • 打赏
  • 举报
回复
调用 API 函数 : curandSetPseudoRandomGeneratorSeed( curandGenerator_t generator( 随机数变量 ), unsigned long long seed( 初始值 ) ); 在这里说明一下指定初始值的意义:因为所有的随机数生成算法都是按照即定的顺序来生成随机数,所以,如果不设定初值或者不改变初始值的话。那每次生成的随机数将不会发生改变。

580

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧