【发布时间】:2015-10-07 21:35:18
【问题描述】:
如何为CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 生成器播种?因为每次运行它时它都会给我相同的数字,而且我不能使用curandSetPseudoRandomGeneratorSeed 和CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 来生成带有curandGenerateLongLong 的64 位随机整数。
如何在以下代码中为生成器播种?
size_t n = 10;
curandGenerator_t gen;
unsigned long long *devData, *hostData;
hostData = (unsigned long long *)calloc(n, sizeof(unsigned long long));
cudaMalloc(&devData, n*sizeof(unsigned long long));
curandCreateGenerator(&gen, curandRngType_t::CURAND_RNG_QUASI_SCRAMBLED_SOBOL64);
for (size_t j = 0; j < 3; j++)
{
curandGenerateLongLong(gen, devData, n);
cudaMemcpy(hostData, devData, n * sizeof(unsigned long long), cudaMemcpyDeviceToHost);
for (size_t i = 0; i < 3; i++) {
printf("%llx\n", hostData[i]);
}
printf("\n\n");
}
curandDestroyGenerator(gen);
cudaFree(devData);
free(hostData);
【问题讨论】:
-
为什么不能使用 curandSetPseudoRandomGeneratorSeed ?
-
因为
CURAND_RNG_QUASI_SCRAMBLED_SOBOL64和它不兼容,而curandGenerateLongLong需要64位生成器。
标签: random cuda gpu gpgpu nvidia