利用cuda生成随机数其实很简单,分为以下几步:
1. 准备相应的内存(device端)
2. 创建生成器
3. 设置生成器的种子
4. 调用对应均匀分布的生成函数
5. 拷贝回主存(可选)。
其中核心是234步,以下是一个简单的示例:
#include <iostream>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "curand.h"
#include "time.h"
#include <stdio.h>
using namespace std;
int main()
{
cudaError_t cudaStatus;
double* dev_tmp_u = 0;
double* tmp_u = 0;
tmp_u = new double[20];
curandGenerator_t gen;
cudaStatus = cudaMalloc((void**)&dev_tmp_u, 20* sizeof(double));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}
curandCreateGenerator(&gen, CURAND_RNG_PSEUDO_DEFAULT);
curandSetPseudoRandomGeneratorSeed(gen, time(NULL));
curandGenerateUniformDouble(gen, dev_tmp_u, 20);
// Copy output vector from GPU buffer to host memory.
cudaStatus = cudaMemcpy(tmp_u, dev_tmp_u, 20 * sizeof(double), cudaMemcpyDeviceToHost);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
goto Error;
}
for (int i = 0; i < 20; i++){
cout << tmp_u[i] << " " << endl;
}
Error:
cudaFree(dev_tmp_u);
delete[] tmp_u;
return cudaStatus;
}