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.0f和1.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.0和1.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 内核启动设置当前流。所有库函数都将使用此流,直到再次设置。