CUDA的随机数生成方法
来源:互联网 发布:小米6网络制式 编辑:程序博客网 时间:2024/06/05 18:04
CUDA Runtime API 没有提供用于生成随机数的接口,但是CURAND这个库提供了通过GPU生成随机数的接口,详细内容可参考http://docs.nvidia.com/cuda/curand/index.html。
下面给出了通过GPU生成0.0到1.0之间(不包括0.0,包括1.0)服从均匀分布的单精度浮点伪随机数的CUDA程序。
#include <cuda.h>#include <curand.h>#define ERROR_EXIT -1/* Check the return value of CUDA Runtime API */#define CHECK_CUDA(err) do{\ if((err) != cudaSuccess){\ fprintf(stderr, "CUDA Runtime API error %d at file %s line %d: %s.\n",\ (int)(err), __FILE__, __LINE__, cudaGetErrorString((err)));\ exit(ERROR_EXIT);\ }}while(0)/* Check the return value of CURAND api. */#define CHECK_CURAND(err) do{\ if( (err) != CURAND_STATUS_SUCCESS ){\ fprintf(stderr, "CURAND error %d at file %s line %d.\n", (int)(err), __FILE__, __LINE__);\exit(ERROR_EXIT);\ }}while(0)/* Function: produce random float data by GPU * Input: dataHost: the memory to store data produced * number: the number of data to produce * seed: the seed for random generator * Output: void */extern "C"void randomGenerator(float *dataHost, int number, unsigned long long seed){ float *dataDev; CHECK_CUDA( cudaMalloc( (void **) &dataDev, number * sizeof(float) ) ); curandGenerator_t gen; CHECK_CURAND( curandCreateGenerator(&gen, CURAND_RNG_PSEUDO_DEFAULT) ); CHECK_CURAND( curandSetPseudoRandomGeneratorSeed(gen, seed) ); CHECK_CURAND( curandGenerateUniform(gen, dataDev, number) ); CHECK_CURAND( curandDestroyGenerator(gen) ); CHECK_CUDA( cudaMemcpy(dataHost, dataDev, number * sizeof(float), cudaMemcpyDeviceToHost) ); CHECK_CUDA( cudaFree(dataDev) ); return;}
使用CURAND生成随机数需要注意以下几个问题:
1. 函数curandCreateGenerator()的第二个参数指定的是随机数生成器的类型,共有7种类型,分为伪随机数生成器和准随机数生成器两类。
2. 函数curandSetPseudoRandomGeneratorSeed()的第二个参数为随机数生成器指定种子,相同的种子将会生成相同的随机数序列。
3. 函数curandGenerateUniform()用于生成0.0到1.0之间(不包括0.0,包括1.0)服从均匀分布的单精度浮点数,共有8个类似的函数,分别用于生成服从不同分布的不同类型的随机数。另外一个比较常用的函数是curandGenerate(),用于生成unsigned int类型的随机数。
4. 在编译包含CURAND接口的文件时,需要添加指定链接库的编译选项-lcurand。
2 0
- CUDA的随机数生成方法
- cuda随机数的生成
- cuda fotran 生成随机数
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- 生成随机数的方法
- CUDA 库函数-----cuRAND生成随机数
- cuda之curand生成随机数
- cuda生成随机数-完美版
- Symbian生成随机数的方法
- C#生成随机数的方法
- 生成一个随机数的方法
- C++随机数的生成方法
- 随机数的生成方法_1
- 随机数的生成方法_2
- 随机数的生成方法_3
- 2014年2月26收集jquery特效与flash素材
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- JNI 遇到的问题
- 几种数据同步共享方法
- 高性能分布式服务框架Dubbo背景与需求
- CUDA的随机数生成方法
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果
- TabActivity父Activity控制子Activity
- 最短路径Dijkstar算法和Floyd算法详解(c语言版)
- 腾讯共和国 “皇协军” 广泛招募中
- poj2081
- 2014-02-26
- 虚拟化技术加速Android模拟器尝试
- iOS--加载、滑动翻阅大量图片解决方案详解