我想在设备上生成统一的随机数,以在设备功能内部使用。每个线程应该生成一个不同的统一随机数。我有这段代码,但我遇到了分段错误。
int main{
curandStateMtgp32 *devMTGPStates;
mtgp32_kernel_params *devKernelParams;
cudaMalloc((void **)&devMTGPStates, NUM_THREADS*NUM_BLOCKS * sizeof(curandStateMtgp32));
cudaMalloc((void**)&devKernelParams,sizeof(mtgp32_kernel_params));
curandMakeMTGP32Constants(mtgp32dc_params_fast_11213, devKernelParams);
curandMakeMTGP32KernelState(devMTGPStates,
mtgp32dc_params_fast_11213, devKernelParams,NUM_BLOCKS*NUM_THREADS, 1234);
doHenry <<NUM_BLOCKS,NUM_THREADS>>> (devMTGPStates);
}
并且,在我的全局函数 doHenry 中,在设备上进行了评估,我输入:
double rand1 = curand_uniform_double(&state[threadIdx.x+NUM_THREADS*blockIdx.x]);
这是为每个线程生成随机数的最佳方法吗?我不明白 devKernelParams 在做什么,但我知道每个线程需要一个状态,对吧?
感谢您的帮助。