5.1. 主机 API

函数

curandStatus_t CURANDAPI curandCreateGenerator ( curandGenerator_t* generator, curandRngType_t rng_type )
创建新的随机数生成器。
curandStatus_t CURANDAPI curandCreateGeneratorHost ( curandGenerator_t* generator, curandRngType_t rng_type )
创建新的主机 CPU 随机数生成器。
curandStatus_t CURANDAPI curandCreatePoissonDistribution ( double  lambda, curandDiscreteDistribution_t* discrete_distribution )
构造泊松分布的直方图数组。
curandStatus_t CURANDAPI curandDestroyDistribution ( curandDiscreteDistribution_t discrete_distribution )
销毁离散分布(例如泊松分布)的直方图数组。
curandStatus_t CURANDAPI curandDestroyGenerator ( curandGenerator_t generator )
销毁现有的生成器。
curandStatus_t CURANDAPI curandGenerate ( curandGenerator_t generator, unsigned int* outputPtr, size_t num )
生成 32 位伪随机数或准随机数。
curandStatus_t CURANDAPI curandGenerateLogNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )
生成对数正态分布的浮点数。
curandStatus_t CURANDAPI curandGenerateLogNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )
生成对数正态分布的双精度浮点数。
curandStatus_t CURANDAPI curandGenerateLongLong ( curandGenerator_t generator, unsigned long long* outputPtr, size_t num )
生成 64 位准随机数。
curandStatus_t CURANDAPI curandGenerateNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )
生成正态分布的双精度浮点数。
curandStatus_t CURANDAPI curandGenerateNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )
生成正态分布的双精度浮点数。
curandStatus_t CURANDAPI curandGeneratePoisson ( curandGenerator_t generator, unsigned int* outputPtr, size_t n, double  lambda )
生成泊松分布的无符号整数。
curandStatus_t CURANDAPI curandGenerateSeeds ( curandGenerator_t generator )
设置起始状态。
curandStatus_t CURANDAPI curandGenerateUniform ( curandGenerator_t generator, float* outputPtr, size_t num )
生成均匀分布的浮点数。
curandStatus_t CURANDAPI curandGenerateUniformDouble ( curandGenerator_t generator, double* outputPtr, size_t num )
生成均匀分布的双精度浮点数。
curandStatus_t CURANDAPI curandGetDirectionVectors32 ( curandDirectionVectors32_t* vectors, curandDirectionVectorSet_t set )
获取用于 32 位准随机数生成的方向向量。
curandStatus_t CURANDAPI curandGetDirectionVectors64 ( curandDirectionVectors64_t* vectors, curandDirectionVectorSet_t set )
获取用于 64 位准随机数生成的方向向量。
curandStatus_t CURANDAPI curandGetProperty ( libraryPropertyType type, int* value )
返回 curand 属性的值。
curandStatus_t CURANDAPI curandGetScrambleConstants32 ( unsigned int** constants )
获取 32 位扰乱 Sobol' 的扰乱常数。
curandStatus_t CURANDAPI curandGetScrambleConstants64 ( unsigned long long** constants )
获取 64 位扰乱 Sobol' 的扰乱常数。
curandStatus_t CURANDAPI curandGetVersion ( int* version )
返回库的版本号。
curandStatus_t CURANDAPI curandSetGeneratorOffset ( curandGenerator_t generator, unsigned long long offset )
设置伪随机数或准随机数生成器的绝对偏移量。
curandStatus_t CURANDAPI curandSetGeneratorOrdering ( curandGenerator_t generator, curandOrdering_t order )
设置伪随机数或准随机数生成器结果的排序。
curandStatus_t CURANDAPI curandSetPseudoRandomGeneratorSeed ( curandGenerator_t generator, unsigned long long seed )
设置伪随机数生成器的种子值。
curandStatus_t CURANDAPI curandSetQuasiRandomGeneratorDimensions ( curandGenerator_t generator, unsigned int  num_dimensions )
设置维度数量。
curandStatus_t CURANDAPI curandSetStream ( curandGenerator_t generator, cudaStream_t stream )
为 CURAND 内核启动设置当前流。

枚举

enum HOST::curandDirectionVectorSet [继承]

CURAND 方向向量集选择

CURAND_DIRECTION_VECTORS_32_JOEKUO6 = 101
由 S. Joe 和 F. Y. Kuo 推荐的多项式生成的特定 32 位方向向量集,适用于最多 20,000 个维度。
CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102
由 S. Joe 和 F. Y. Kuo 推荐的多项式生成的特定 32 位方向向量集,适用于最多 20,000 个维度,并进行了扰乱。
CURAND_DIRECTION_VECTORS_64_JOEKUO6 = 103
由 S. Joe 和 F. Y. Kuo 推荐的多项式生成的特定 64 位方向向量集,适用于最多 20,000 个维度。
CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104
由 S. Joe 和 F. Y. Kuo 推荐的多项式生成的特定 64 位方向向量集,适用于最多 20,000 个维度,并进行了扰乱。
enum HOST::curandOrdering [继承]

CURAND 结果在内存中的排序

CURAND_ORDERING_PSEUDO_BEST = 100
伪随机结果的最佳排序。
CURAND_ORDERING_PSEUDO_DEFAULT = 101
伪随机结果的特定默认线程序列,与 CURAND_ORDERING_PSEUDO_BEST 相同。
CURAND_ORDERING_PSEUDO_SEEDED = 102
用于快速低质量伪随机结果的特定播种模式。
CURAND_ORDERING_PSEUDO_LEGACY = 103
伪随机结果的特定旧版序列,保证在所有 cuRAND 版本中保持不变。
CURAND_ORDERING_PSEUDO_DYNAMIC = 104
特定排序调整为正在执行它的设备,提供最佳性能。
CURAND_ORDERING_QUASI_DEFAULT = 201
准随机结果的特定 n 维排序。
enum HOST::curandRngType [继承]

CURAND 生成器类型

CURAND_RNG_TEST = 0
CURAND_RNG_PSEUDO_DEFAULT = 100
默认伪随机生成器。
CURAND_RNG_PSEUDO_XORWOW = 101
XORWOW 伪随机生成器。
CURAND_RNG_PSEUDO_MRG32K3A = 121
MRG32k3a 伪随机生成器。
CURAND_RNG_PSEUDO_MTGP32 = 141
梅森旋转 MTGP32 伪随机生成器。
CURAND_RNG_PSEUDO_MT19937 = 142
梅森旋转 MT19937 伪随机生成器。
CURAND_RNG_PSEUDO_PHILOX4_32_10 = 161
PHILOX-4x32-10 伪随机生成器。
CURAND_RNG_QUASI_DEFAULT = 200
默认准随机生成器。
CURAND_RNG_QUASI_SOBOL32 = 201
Sobol32 准随机生成器。
CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202
扰乱 Sobol32 准随机生成器。
CURAND_RNG_QUASI_SOBOL64 = 203
Sobol64 准随机生成器。
CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 204
扰乱 Sobol64 准随机生成器。
enum HOST::curandStatus [继承]

CURAND 函数调用状态类型

CURAND_STATUS_SUCCESS = 0
没有错误。
CURAND_STATUS_VERSION_MISMATCH = 100
头文件和链接库版本不匹配。
CURAND_STATUS_NOT_INITIALIZED = 101
生成器未初始化。
CURAND_STATUS_ALLOCATION_FAILED = 102
内存分配失败。
CURAND_STATUS_TYPE_ERROR = 103
生成器类型错误。
CURAND_STATUS_OUT_OF_RANGE = 104
参数超出范围。
CURAND_STATUS_LENGTH_NOT_MULTIPLE = 105
请求的长度不是维度的倍数。
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106
GPU 没有 MRG32k3a 所需的双精度。
CURAND_STATUS_LAUNCH_FAILURE = 201
内核启动失败。
CURAND_STATUS_PREEXISTING_FAILURE = 202
库入口处已存在失败。
CURAND_STATUS_INITIALIZATION_FAILED = 203
CUDA 初始化失败。
CURAND_STATUS_ARCH_MISMATCH = 204
架构不匹配,GPU 不支持请求的功能。
CURAND_STATUS_INTERNAL_ERROR = 999
内部库错误。

函数

curandStatus_t CURANDAPI curandCreateGenerator ( curandGenerator_t* generator, curandRngType_t rng_type )
创建新的随机数生成器。
参数
generator
- 指向生成器的指针
rng_type
- 要创建的生成器类型
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_INITIALIZATION_FAILED,如果在设置 GPU 时出现问题
  • CURAND_STATUS_VERSION_MISMATCH,如果头文件版本与动态链接库版本不匹配
  • CURAND_STATUS_TYPE_ERROR,如果rng_type的值无效
  • CURAND_STATUS_SUCCESS,如果生成器创建成功
描述

CURAND 生成器 CURAND 分布 CURAND 分布 M2 创建类型为rng_type的新随机数生成器,并在*generator.

中返回它。的合法值rng_type

  • CURAND_RNG_PSEUDO_DEFAULT

  • CURAND_RNG_PSEUDO_XORWOW

  • CURAND_RNG_PSEUDO_MRG32K3A

  • CURAND_RNG_PSEUDO_MTGP32

  • CURAND_RNG_PSEUDO_MT19937

  • CURAND_RNG_PSEUDO_PHILOX4_32_10

  • CURAND_RNG_QUASI_DEFAULT

  • CURAND_RNG_QUASI_SOBOL32

  • CURAND_RNG_QUASI_SCRAMBLED_SOBOL32

  • CURAND_RNG_QUASI_SOBOL64

  • CURAND_RNG_QUASI_SCRAMBLED_SOBOL64

rng_type为 CURAND_RNG_PSEUDO_DEFAULT 时,选择的类型为 CURAND_RNG_PSEUDO_XORWOW。当rng_type为 CURAND_RNG_QUASI_DEFAULT 时,选择的类型为 CURAND_RNG_QUASI_SOBOL32。

的默认值rng_type= CURAND_RNG_PSEUDO_XORWOW 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MRG32K3A 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MTGP32 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MT19937 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

* 的默认值rng_type= CURAND_RNG_PSEUDO_PHILOX4_32_10 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SOBOL32 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SOBOL64 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SCRAMBBLED_SOBOL32 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

curandStatus_t CURANDAPI curandCreateGeneratorHost ( curandGenerator_t* generator, curandRngType_t rng_type )
创建新的主机 CPU 随机数生成器。
参数
generator
- 指向生成器的指针
rng_type
- 要创建的生成器类型
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_INITIALIZATION_FAILED,如果在设置 GPU 时出现问题
  • CURAND_STATUS_VERSION_MISMATCH,如果头文件版本与动态链接库版本不匹配
  • CURAND_STATUS_TYPE_ERROR,如果rng_type的值无效
  • CURAND_STATUS_SUCCESS,如果生成器创建成功
描述

创建类型为rng_type的新随机数生成器,并在*generator.

中返回它。的合法值rng_type

  • CURAND_RNG_PSEUDO_DEFAULT

  • CURAND_RNG_PSEUDO_XORWOW

  • CURAND_RNG_PSEUDO_MRG32K3A

  • CURAND_RNG_PSEUDO_MTGP32

  • CURAND_RNG_PSEUDO_MT19937

  • CURAND_RNG_PSEUDO_PHILOX4_32_10

  • CURAND_RNG_QUASI_DEFAULT

  • CURAND_RNG_QUASI_SOBOL32

  • CURAND_RNG_QUASI_SCRAMBLED_SOBOL32

  • CURAND_RNG_QUASI_SOBOL64

  • CURAND_RNG_QUASI_SCRAMBLED_SOBOL64

rng_type为 CURAND_RNG_PSEUDO_DEFAULT 时,选择的类型为 CURAND_RNG_PSEUDO_XORWOW。当rng_type为 CURAND_RNG_QUASI_DEFAULT 时,选择的类型为 CURAND_RNG_QUASI_SOBOL32。

的默认值rng_type= CURAND_RNG_PSEUDO_XORWOW 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MRG32K3A 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MTGP32 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_PSEUDO_MT19937 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

* 的默认值rng_type= CURAND_RNG_PSEUDO_PHILOX4_32_10 是

  • 种子 = 0

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_PSEUDO_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SOBOL32 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SOBOL64 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 的新主机 CPU 随机数生成器是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

的默认值rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 是

  • 维度 = 1

  • 偏移量 = 0

  • 排序= CURAND_ORDERING_QUASI_DEFAULT

curandStatus_t CURANDAPI curandCreatePoissonDistribution ( double  lambda, curandDiscreteDistribution_t* discrete_distribution )
构造泊松分布的直方图数组。
参数
lambda
- 泊松分布的 lambda 值
discrete_distribution
- 指向设备内存中直方图的指针
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_DOUBLE_PRECISION_REQUIRED,如果 GPU 不支持双精度
  • CURAND_STATUS_INITIALIZATION_FAILED,如果在设置 GPU 时出现问题
  • CURAND_STATUS_NOT_INITIALIZED,如果分布指针为空
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_OUT_OF_RANGE,如果 lambda 为非正数或大于 400,000
  • CURAND_STATUS_SUCCESS,如果直方图生成成功
描述

构造 lambda 为lambda的泊松分布的直方图数组。对于大于 2000 的 lambda,使用正态分布的近似值。

curandStatus_t CURANDAPI curandDestroyDistribution ( curandDiscreteDistribution_t discrete_distribution )
销毁离散分布(例如泊松分布)的直方图数组。
参数
discrete_distribution
- 指向存储直方图的设备内存的指针
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果直方图从未创建
  • CURAND_STATUS_SUCCESS,如果直方图销毁成功
描述

销毁由 curandCreatePoissonDistribution 创建的离散分布的直方图数组。

curandStatus_t CURANDAPI curandDestroyGenerator ( curandGenerator_t generator )
销毁现有的生成器。
参数
generator
- 要销毁的生成器
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_SUCCESS,如果生成器销毁成功
描述

销毁现有的生成器并释放与其状态关联的所有内存。

curandStatus_t CURANDAPI curandGenerate ( curandGenerator_t generator, unsigned int* outputPtr, size_t num )
生成 32 位伪随机数或准随机数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
num
- 要生成的随机 32 位值的数量
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_TYPE_ERROR,如果生成器是 64 位准随机生成器。(对于 64 位准随机生成器,请使用 curandGenerateLongLong()
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成num32 位结果到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是 32 位值,每一位都是随机的。

curandStatus_t CURANDAPI curandGenerateLogNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )
生成对数正态分布的浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
n
- 要生成的浮点数数量
mean
- 关联正态分布的均值
stddev
- 关联正态分布的标准差
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成n将浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

中。结果是 32 位浮点值,具有基于关联正态分布的对数正态分布,均值为mean,标准差为stddev.

。正态分布结果由伪随机生成器使用 Box-Muller 变换生成,因此要求n为偶数。准随机生成器使用逆累积分布函数来保留维度。正态分布结果被转换为对数正态分布。

使用 curandCreateGenerator() 创建的生成器在 GPU 上生成的结果与使用 curandCreateGeneratorHost() 创建的生成器在 CPU 上计算的结果之间可能存在细微的数值差异。这些差异是由于超越函数的结果差异引起的。此外,未来版本的 CURAND 可能会使用更新版本的 CUDA 数学库,因此不同版本的 CURAND 可能会给出略有不同的数值。

curandStatus_t CURANDAPI curandGenerateLogNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )
生成对数正态分布的双精度浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
n
- 要生成的双精度浮点数数量
mean
- 正态分布的均值
stddev
- 正态分布的标准差
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数
  • CURAND_STATUS_DOUBLE_PRECISION_REQUIRED,如果 GPU 不支持双精度
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成n将双精度浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

中。结果是 64 位浮点值,具有基于关联正态分布的对数正态分布,均值为mean,标准差为stddev.

。正态分布结果由伪随机生成器使用 Box-Muller 变换生成,因此要求n为偶数。准随机生成器使用逆累积分布函数来保留维度。正态分布结果被转换为对数正态分布。

使用 curandCreateGenerator() 创建的生成器在 GPU 上生成的结果与使用 curandCreateGeneratorHost() 创建的生成器在 CPU 上计算的结果之间可能存在细微的数值差异。这些差异是由于超越函数的结果差异引起的。此外,未来版本的 CURAND 可能会使用更新版本的 CUDA 数学库,因此不同版本的 CURAND 可能会给出略有不同的数值。

curandStatus_t CURANDAPI curandGenerateLongLong ( curandGenerator_t generator, unsigned long long* outputPtr, size_t num )
生成 64 位准随机数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
num
- 要生成的随机 64 位值的数量
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_TYPE_ERROR,如果生成器不是 64 位准随机生成器
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成num将 64 位结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

中。结果是 64 位值,每一位都是随机的。

curandStatus_t CURANDAPI curandGenerateNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )
生成正态分布的双精度浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
n
- 要生成的浮点数数量
mean
- 正态分布的均值
stddev
- 正态分布的标准差
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成n将浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是 32 位浮点值,均值为mean,标准差为stddev.

。正态分布结果由伪随机生成器使用 Box-Muller 变换生成,因此要求n为偶数。准随机生成器使用逆累积分布函数来保留维度。

使用 curandCreateGenerator() 创建的生成器在 GPU 上生成的结果与使用 curandCreateGeneratorHost() 创建的生成器在 CPU 上计算的结果之间可能存在细微的数值差异。这些差异是由于超越函数的结果差异引起的。此外,未来版本的 CURAND 可能会使用更新版本的 CUDA 数学库,因此不同版本的 CURAND 可能会给出略有不同的数值。

curandStatus_t CURANDAPI curandGenerateNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )
生成正态分布的双精度浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
n
- 要生成的双精度浮点数数量
mean
- 正态分布的均值
stddev
- 正态分布的标准差
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数
  • CURAND_STATUS_DOUBLE_PRECISION_REQUIRED,如果 GPU 不支持双精度
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成n将双精度浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是 64 位浮点值,均值为mean,标准差为stddev.

。正态分布结果由伪随机生成器使用 Box-Muller 变换生成,因此要求n为偶数。准随机生成器使用逆累积分布函数来保留维度。

使用 curandCreateGenerator() 创建的生成器在 GPU 上生成的结果与使用 curandCreateGeneratorHost() 创建的生成器在 CPU 上计算的结果之间可能存在细微的数值差异。这些差异是由于超越函数的结果差异引起的。此外,未来版本的 CURAND 可能会使用更新版本的 CUDA 数学库,因此不同版本的 CURAND 可能会给出略有不同的数值。

curandStatus_t CURANDAPI curandGeneratePoisson ( curandGenerator_t generator, unsigned int* outputPtr, size_t n, double  lambda )
生成泊松分布的无符号整数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
n
- 要生成的无符号整数数量
lambda
- 泊松分布的 lambda 值
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数
  • CURAND_STATUS_DOUBLE_PRECISION_REQUIRED,如果 GPU 或 sm 不支持双精度
  • CURAND_STATUS_OUT_OF_RANGE,如果 lambda 为非正数或大于 400,000
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成n将无符号整数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且必须足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是 32 位无符号整数值,具有泊松分布,lambda 值为lambda.

curandStatus_t CURANDAPI curandGenerateSeeds ( curandGenerator_t generator )
设置起始状态。
参数
generator
- 要更新的生成器
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_SUCCESS,如果种子生成成功
描述

生成生成器的初始状态。此函数由生成函数自动调用,例如 curandGenerate()curandGenerateUniform()。为了进行性能测试,可以手动调用此函数,以分隔初始状态生成和随机数生成的时间。

curandStatus_t CURANDAPI curandGenerateUniform ( curandGenerator_t generator, float* outputPtr, size_t num )
生成均匀分布的浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
num
- 要生成的浮点数数量
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成num将浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是介于以下值之间的 32 位浮点值0.0f1.0f,不包括0.0f和包括1.0f.

curandStatus_t CURANDAPI curandGenerateUniformDouble ( curandGenerator_t generator, double* outputPtr, size_t num )
生成均匀分布的双精度浮点数。
参数
generator
- 要使用的生成器
outputPtr
- 指向设备内存以存储 CUDA 生成的结果,或指向主机内存以存储 CPU 生成的结果的指针
num
- 要生成的双精度浮点数数量
返回值

  • CURAND_STATUS_ALLOCATION_FAILED,如果内存无法分配
  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_PREEXISTING_FAILURE,如果之前内核启动存在错误
  • CURAND_STATUS_LAUNCH_FAILURE,如果内核启动因任何原因失败
  • CURAND_STATUS_LENGTH_NOT_MULTIPLE,如果输出样本数不是准随机维度的倍数
  • CURAND_STATUS_DOUBLE_PRECISION_REQUIRED,如果 GPU 不支持双精度
  • CURAND_STATUS_SUCCESS,如果结果生成成功
描述

使用generator生成num将双精度浮点数结果输出到设备内存outputPtr中。设备内存必须事先分配,并且足够大以容纳所有结果。启动使用通过 curandSetStream() 设置的流完成,或者如果没有设置流,则使用空流。

结果是介于以下值之间的 64 位双精度浮点值0.01.0,不包括0.0和包括1.0.

curandStatus_t CURANDAPI curandGetDirectionVectors32 ( curandDirectionVectors32_t* vectors, curandDirectionVectorSet_t set )
获取用于 32 位准随机数生成的方向向量。
参数
vectors
- 用于返回方向向量的指针地址
set
- 要使用的方向向量集
返回值

  • CURAND_STATUS_OUT_OF_RANGE 如果 set 的选择无效
  • CURAND_STATUS_SUCCESS 如果指针已成功设置
描述

获取指向方向向量数组的指针,该数组可用于准随机数生成。结果指针将引用主机内存中的方向向量数组。

数组包含用于多个维度的向量。每个维度有 32 个向量。每个单独的向量都是一个无符号整数。

中返回它。的合法值set

  • CURAND_DIRECTION_VECTORS_32_JOEKUO6 (20,000 维度)

  • CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 (20,000 维度)

curandStatus_t CURANDAPI curandGetDirectionVectors64 ( curandDirectionVectors64_t* vectors, curandDirectionVectorSet_t set )
获取用于 64 位准随机数生成的方向向量。
参数
vectors
- 用于返回方向向量的指针地址
set
- 要使用的方向向量集
返回值

  • CURAND_STATUS_OUT_OF_RANGE 如果 set 的选择无效
  • CURAND_STATUS_SUCCESS 如果指针已成功设置
描述

获取指向方向向量数组的指针,该数组可用于准随机数生成。结果指针将引用主机内存中的方向向量数组。

数组包含用于多个维度的向量。每个维度有 64 个向量。每个单独的向量都是一个无符号长长整数。

中返回它。的合法值set

  • CURAND_DIRECTION_VECTORS_64_JOEKUO6 (20,000 维度)

  • CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 (20,000 维度)

curandStatus_t CURANDAPI curandGetProperty ( libraryPropertyType type, int* value )
返回 curand 属性的值。
参数
type
- CUDA 库属性
value
- 请求属性的整数值
返回值

  • CURAND_STATUS_SUCCESS 如果属性值已成功返回
  • CURAND_STATUS_OUT_OF_RANGE 如果属性类型无法识别
描述

在以下位置返回*value由以下项描述的属性的编号type动态链接的 CURAND 库的属性。

curandStatus_t CURANDAPI curandGetScrambleConstants32 ( unsigned int** constants )
获取用于 32 位 scrambled Sobol' 的扰码常数。
参数
constants
- 用于返回扰码常数的指针地址
返回值

  • CURAND_STATUS_SUCCESS 如果指针已成功设置
描述

获取指向扰码常数数组的指针,该数组可用于准随机数生成。结果指针将引用主机内存中的无符号整数数组。

数组包含用于多个维度的常数。每个维度都有一个无符号整数常数。

curandStatus_t CURANDAPI curandGetScrambleConstants64 ( unsigned long long** constants )
获取用于 64 位 scrambled Sobol' 的扰码常数。
参数
constants
- 用于返回扰码常数的指针地址
返回值

  • CURAND_STATUS_SUCCESS 如果指针已成功设置
描述

获取指向扰码常数数组的指针,该数组可用于准随机数生成。结果指针将引用主机内存中的无符号长长整数数组。

数组包含用于多个维度的常数。每个维度都有一个无符号长长整数常数。

curandStatus_t CURANDAPI curandGetVersion ( int* version )
返回库的版本号。
参数
version
- CURAND 库版本
返回值

  • CURAND_STATUS_SUCCESS 如果版本号已成功返回
描述

在以下位置返回*version动态链接的 CURAND 库的版本号。格式与 CUDA Runtime 中的 CUDART_VERSION 相同。唯一支持的配置是 CURAND 版本等于 CUDA Runtime 版本。

curandStatus_t CURANDAPI curandSetGeneratorOffset ( curandGenerator_t generator, unsigned long long offset )
设置伪随机数或准随机数生成器的绝对偏移量。
参数
generator
- 要修改的生成器
偏移量
- 绝对偏移位置
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_SUCCESS 如果生成器偏移量已成功设置
描述

设置伪随机数或准随机数生成器的绝对偏移量。

所有 offset 值均有效。偏移位置是绝对的,而不是相对于序列中的当前位置。

curandStatus_t CURANDAPI curandSetGeneratorOrdering ( curandGenerator_t generator, curandOrdering_t order )
设置伪随机数或准随机数生成器结果的排序。
参数
generator
- 要修改的生成器
order
- 结果的排序
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_OUT_OF_RANGE 如果排序无效
  • CURAND_STATUS_SUCCESS 如果生成器排序已成功设置
描述

设置伪随机数或准随机数生成器结果的排序。

合法值order对于伪随机生成器,合法值包括

  • CURAND_ORDERING_PSEUDO_DEFAULT

  • CURAND_ORDERING_PSEUDO_BEST

  • CURAND_ORDERING_PSEUDO_SEEDED

  • CURAND_ORDERING_PSEUDO_LEGACY

合法值order对于准随机生成器,合法值包括

  • CURAND_ORDERING_QUASI_DEFAULT

curandStatus_t CURANDAPI curandSetPseudoRandomGeneratorSeed ( curandGenerator_t generator, unsigned long long seed )
设置伪随机数生成器的种子值。
参数
generator
- 要修改的生成器
种子
- 种子值
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_TYPE_ERROR 如果生成器不是伪随机数生成器
  • CURAND_STATUS_SUCCESS 如果生成器种子已成功设置
描述

设置伪随机数生成器的种子值。所有 seed 值均有效。不同的种子将生成不同的序列。不同的种子通常在统计上彼此不相关,但某些种子值对可能会生成在统计上相关的序列。

curandStatus_t CURANDAPI curandSetQuasiRandomGeneratorDimensions ( curandGenerator_t generator, unsigned int  num_dimensions )
设置维度数量。
参数
generator
- 要修改的生成器
num_dimensions
- 维度数量
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_OUT_OF_RANGE 如果 num_dimensions 无效
  • CURAND_STATUS_TYPE_ERROR 如果生成器不是准随机数生成器
  • CURAND_STATUS_SUCCESS 如果生成器排序已成功设置
描述

设置准随机数生成器要生成的维度数量。

中返回它。的合法值num_dimensions范围是 1 到 20000。

curandStatus_t CURANDAPI curandSetStream ( curandGenerator_t generator, cudaStream_t stream )
为 CURAND 内核启动设置当前流。
参数
generator
- 要修改的生成器
stream
- 要使用的流,或 NULL 表示空流
返回值

  • CURAND_STATUS_NOT_INITIALIZED,如果生成器从未创建
  • CURAND_STATUS_SUCCESS 如果流已成功设置
描述

为 CURAND 内核启动设置当前流。所有库函数都将使用此流,直到再次设置。