利用curand的host API生成均匀分布的随机数

来源:互联网 发布:java 乘法溢出 编辑:程序博客网 时间:2024/05/16 06:47

利用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;}


0 0
原创粉丝点击