CUDA随机数生成库curand——deviceAPI
原创作品,如要转载请注明出处:http://www.cnblogs.com/shrimp-can/p/6590152.html
最近要在device函数中使用curand库生成随机数,查找了下资料,除了NVIDIA官网的介绍外,其他介绍deviceAPI的我没有找到,倒是介绍hostAPI的一大堆,因此简单整理下自己所理解的deviceAPI的使用。
一、简介
curand由两部分组成:host端的库和device端的头文件。
host端的库就像其他的CPU库一样curand.h,随机数可以在设备端生成或者CPU端生成。在设备端生成的时候,对库的调用发生在host端,但是随机数的生成实际上发生在device端,随机数存储在global memory中,用户可以调用kernel直接使用这个随机数,也可以将此随机数拷贝回kernel。
device端的库头文件curand_kernel.h,这个头文件里面定义了设置随机数生成器的状态以及生成一系列随机数的设备函数,使得kernel可以调用函数生成随机数,而不需要从global memory处读写。
二、device API
包含头文件curand_kernel.h,工程需要链接到库curand。
使用curand的deviceAPI生成随机数主要需要三个步骤
a.创建一个随机算法状态的对象,如curandState state
b.对状态进行初始化,使用curand_init()函数
c.生成随机数,使用curand等
deviceAPI的作用也是这些,下面进行更详细的介绍
1.创建随机算法状态对象
在deviceAPI中,有4中为随机算法,4种真随机算法
伪随机算法 对应的状态
Mtgp32 curandStateMtgp32_t
MRG32k3a curandStateMRG32k3a_t
Philox4_32_10 curandStatePhilox4_32_10_t
XORWOW curandStateWORWOW_t
真随机算法 对应的状态
scrambled Sobol64 curandStateScrambledSobol64_t
Sobol64 curandStateSobol64_t
scrambled Sobol32 curandStateScrambledSobol32_t
Sobol32 curandStateSobol32_t
如要创建算法XORWOW状态对象:curandStateWORWOW_t state
2.对算法状态进行初始化
curand_init()函数,不同的算法,函数的参数不相同,具体算法所需要的参数可以看NVIDIA官网curand_initAPI:http://docs.nvidia.com/cuda/curand/group__DEVICE.html#group__DEVICE
对于除了MTGP32的伪随机算法,初始化参数都是:种子、序列、偏移、要初始化的随机算法状态对象
注意:算法MTGP32的初始化是通过两个hostAPI,curandMakeMTGP32Constants和cirandMakeMTGP32KernelState
如要初始化算法XORWOW状态对象:curand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, curandStateXORWOW_t* state )
3.生成随机数
生成随机数除了可以使用不同的算法(由参数决定)以外,还能生成不同分布、不同浮点类型的随机数,这根据调用的生成随机数的API决定。
主要有以下几种API:
curand 生成unsigned int型整数,没有特殊分布
curand_uniform 生成服从均匀分布的float
curand_uniform4 生成4个服从均匀分布的float
curand_uniform_double 生成服从均匀分布的double
curand_uniform2_double 生成2个服从均匀分布的double
curand_poisson 生成服从泊松分布的int
curand_poisson4 生成4个服从泊松分布的int
curand_normal 生成服从正态分布的float
curand_normal2 生成2个服从正态分布的float
curand_normal4 生成4个服从正态分布的float
curand_normal_double 生成服从正态分布的double
curand_normal2_double 生成2个服从正态分布的double
curand_log_normal 生成服从对数正态分布的float
curand_log_normal2 生成2个服从对数正态分布的float
curand_log_normal4 生成4个服从对数正态分布的float
curand_log_normal_double 生成服从对数正态分布的double
curand_log_normal2_double 生成2个服从对数正态分布的double
curand_mtgp32_single 生成mtgp32算法中服从均匀分布的float
curand_mtgp32_single_specific 生成mtgp32算法中服从特殊泊松分布的float
curand_mtgp32_specific 生成mtgp32算法中的32bits的int
如要生成一个int型的随机数,采用XORWOW算法:curand(curandStateXORWOW_t* state)
以上是个人理解,如有错误的地方,忘批评指正
urand_mtgp32_single 生成mtgp32算法中服从均匀分布的floa
curand_log_normal2 生成2个服从对数正态分布的float_log_normal 生成服从对数正态分布的floatcurand_log_normal 生成服从对数正态分布的floatcu
curand_log_normal 生成服从对数正态分布的floa
curand_log_normal 生成服从对数正态分布的floacurand_log_normal 生成服从对数正态分布的floacurand_log_normal 生成服从对数正态分布的f
CUDA随机数生成库curand——deviceAPI的更多相关文章
- CUDA数学库
CUDA数学库 高性能数学例程 CUDA数学库是经过行业验证的,高度准确的标准数学函数的集合.只需在源代码中添加" #include math.h",即可用于任何CUDA C或CU ...
- cuda npp库旋转图片
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h&g ...
- NVIDIA GPU上的随机数生成
NVIDIA GPU上的随机数生成 NVIDIA CUDA随机数生成库(cuRAND)提供高性能的GPU加速的随机数生成(RNG).cuRAND库使用NVIDIA GPU中提供的数百个处理器内核,将质 ...
- ubuntu16.04 Detectron目标检测库配置(包含GPU驱动,Cuda,Caffee2等配置梳理)
Detectron概述 Detectron是Facebook FAIR开源了的一个目标检测(Object Detection)平台. 用一幅图简单说明下Object Detection.如Mask R ...
- CUDA基础介绍
一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi ...
- 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...
- ubuntu16.04+caffe+GPU+cuda+cudnn安装教程
步骤简述: 1.安装GPU驱动(系统适配,不采取手动安装的方式) 2.安装依赖(cuda依赖库,caffe依赖) 3.安装cuda 4.安装cudnn(只是复制文件加链接,不需要编译安装的过程) 5. ...
- [翻译]CURAND Libaray--Host API--(2)
Translated by xingoo 如果有错误请联系:xinghl90@gmail.com 2.3 返回值 所有的CURAND host端的函数返回值都是curandStatus_t.如果调用没 ...
- cuda在ubuntu的安装使用分享
前言 之前给大家分享过opencv在jetson nano 2gb和ubuntu设备中使用并且展示了一些人脸识别等的小demo.但是对于图像处理,使用gpu加速是很常见 .(以下概念介绍内容来自百科和 ...
随机推荐
- SQL 数据库基本知识
SQL:Structured Quety Language SQL SERVER是一个以客户/服务器(c/s)模式访问.使用Transact-SQL语言的关系型数据库管理子系统(RDBMS) DBMS ...
- oracle__wm_concat函数
首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据 SQL> ...
- 获取SQL中某一列的类型及精度
SELECT @type=t.name, @prec=c.prec FROM sysobjects o JOIN syscolumns c on o.id=c.id JOI ...
- java中的final与static
许多程序设计语言都有自己的办法告诉编译器某个数据是"常数".常数主要应用于下述两个方面: (1) 编译期常数,它永远不会改变 (2) 在运行期初始化的一个值,我们不希望它发生变化 ...
- Windows下搭建HTTP/HTTPS服务器及测试过程
1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...
- HTTP学习目录
前面的话 除了HTML.CSS.javascript这三门前端基础知识之外,HTTP恐怕是前端工程师最需要掌握的知识了,它是前端和后端沟通的桥梁,前端工程师需要能够调试HTTP.修复网络传输中可能遇到 ...
- CMFCShellList和自定义ShellList结合使用,达到“直接浏览缩略图,双击打开图片”
在GOPaint的设计研究过程中,我一直希望能够实现这样的结果(A B C 3个步骤) 在我之前的博客里面,曾经有过缩略图显示的现就(http://www.cnblogs.com/jsxyhelu/p ...
- SaberRD之瞬态分析
瞬态分析(Transient Analysis)也叫做暂态分析,一般用于分析含有储能器件的电路在换路后发生的过渡状态,比如分析RLC电路在接通.断开.改接以及参数发生改变和电源突变时,电路的电压电流从 ...
- 2017-2-24 C#基础 for循环的嵌套
用几个练习题演示一下for循环的嵌套 1.打印以下图形 ★★★★★★★★★★★★★★★ namespace _2017_2_24_for循环的嵌套 { class Program { static v ...
- 2017-2-23 C#基础 中间变量
用中间变量做这个题 1."请输入年份:"(1-9999) "请输入月份:"(1-12) "请输入日期:"(要判断大小月,判断闰年) 判断输入 ...