cuRAND
来源:互联网 发布:鼠标评测软件 编辑:程序博客网 时间:2024/05/16 19:52
CUDA提供了若干个高速的库函数,先介绍一下比较简单的符点型随机数生成函数——-cuRAND
cuRAND库函数分为可以在GPU的核函数中使用的API(即被device关键字修饰的函数)和在主机侧被使用的API(其实内部由GPU的API组成)两种。本次我只介绍被主机侧使用的API。
在主机侧使用随机数生成的库函数大致分为三个步骤:
1,声明随机数指针,指定随机数生成算法。
2,为生成算法设定初始值。
3,指定随机数生成个数,生成随机数,并保存在global memory中。
声明随机数指针,指定随机数生成算法
使用curandGenerator_t 生成相应的随机数指针,使用curandCreateGenerator(curandGenerator_t* generator, curandRngType_t rng_type)
指定随机数生成算法。
generator: 指向随机数的指针变量。
rng_type:算法类型
举列7种算法类型(部分) :
宏定义 算法类型
CURAND_RNG_PSEUDO_XORWOW XORWOW
CURAND_RNG_PSEUDO_MRG32K3A MRG32k3a
CURAND_RNG_PSEUDO_MTGP32 梅森・费尔拖斯特
CURAND_RNG_QUASI_SOBOL32 Sobol32
CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 Scrambled Sobol64
CURAND_RNG_QUASI_DEFAULT XORWOW
为生成算法设定初始值
使用curandSetPseudoRandomGeneratorSeed(curandGenerator_t generator, unsigned long long seed)
generator: 随机数变量
seed: 初始值
在这里说明一下指定初始值的意义:因为所有的随机数生成算法都是按照即定的顺序来生成随机数,所以,如果不设定初值或者不改变初始值的话。那每次生成的随机数将不会发生改变。
指定随机数生成个数,生成随机数,并保存在global memory中
使用curandGenerateUniform(curandGenerator_t generator, float* outputPtr, size_t num)函数来生成多个随机数,并将它们存放到global memory中
generator:随机数变量
outputPtr:global memory的首地址,将global memory做为随机数的缓冲器
num:生成随机数的个数
最后,需使用curandDestroyGenerotor将生成的随机数指针变量释放掉.
>
#include< stdio.h>
#include< stdlib.h>
#include< math.h>
#include< cuda_runtime.h>
#include< curand.h>
#include< helper_cuda.h>
#include< helper_timer.h>
#pragma comment(lib, “cudart.lib”)
#pragma comment(lib, “curand.lib”)
int main()
{
int N = 1024;
curandGenerator_t gen; //生成随机数变量
float *p_d, *p_h;
p_h = (float *)malloc(N*sizeof(float)); //在主机侧声明内存空间
cudaMalloc((void **)&p_d, N*sizeof(float)); //GPU侧声明随机数存储缓冲器的内存空间
curandCreateGenerator(&gen, CURAND_RNG_PSEUDO_MRG32K3A); //步骤1:指定算法
curandSetPseudoRandomGeneratorSeed(gen, 11ULL); //步骤2:随机数初始化
curandGenerateUniform(gen, p_d, N);//步骤3:生成随机数,存储到缓冲器中
cudaMemcpy(p_h, p_d, N*sizeof(float), cudaMemcpyDeviceToHost); //将随机数传送到主机
for(int i = 0; i< N; i++){ //输出结果
printf(“%d, %.4f\n”,i, p_h[i]);
}
curandDestroyGenerator(gen); //释放指针
cudaFree(p_d); //释放GPU侧内存空间
free(p_h); //释放主机侧内存空间
}
- cuRAND
- curand库函数求圆周率
- CUDA 库函数-----cuRAND生成随机数
- cuda之curand生成随机数
- CUDA(四) CUDA 库函数-----随机数生成cuRAND
- example: call cuda toolkit API from python, curand
- example: call cuda toolkit curand API from common lisp
- 利用curand的host API生成均匀分布的随机数
- 视频会议行业应用软件分析
- 关于NC-Verilog常用的仿真选项
- 杭电acm 3658How many words
- freeMarkerjia静态工具类
- css雪碧图相关
- cuRAND
- Web报表系统葡萄城报表:自定义报表
- 返回提交页面问题,重复提交问题解决方案
- 如何高效的学习新知识(技术)(三)
- 【ML--08】线性判别法和距离判别法
- 矩阵快速幂
- 安卓开发之把布局转换成图片,再把图片保存至本地,踩坑后至终极解决方案
- Counting Divisors HDU
- JavaScript中的this