5.1. 主机API
Functions
- curandStatus_t CURANDAPI curandCreateGenerator ( curandGenerator_t* generator, curandRngType_t rng_type )
- Create new random number generator.
- curandStatus_t CURANDAPI curandCreateGeneratorHost ( curandGenerator_t* generator, curandRngType_t rng_type )
- Create new host CPU random number generator.
- curandStatus_t CURANDAPI curandCreatePoissonDistribution ( double lambda, curandDiscreteDistribution_t* discrete_distribution )
- Construct the histogram array for a Poisson distribution.
- curandStatus_t CURANDAPI curandDestroyDistribution ( curandDiscreteDistribution_t discrete_distribution )
- Destroy the histogram array for a discrete distribution (e.g. Poisson).
- curandStatus_t CURANDAPI curandDestroyGenerator ( curandGenerator_t generator )
- Destroy an existing generator.
- curandStatus_t CURANDAPI curandGenerate ( curandGenerator_t generator, unsigned int* outputPtr, size_t num )
- Generate 32-bit pseudo or quasirandom numbers.
- curandStatus_t CURANDAPI curandGenerateLogNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float mean, float stddev )
- Generate log-normally distributed floats.
- curandStatus_t CURANDAPI curandGenerateLogNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double mean, double stddev )
- Generate log-normally distributed doubles.
- curandStatus_t CURANDAPI curandGenerateLongLong ( curandGenerator_t generator, unsigned long long* outputPtr, size_t num )
- Generate 64-bit quasirandom numbers.
- curandStatus_t CURANDAPI curandGenerateNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float mean, float stddev )
- Generate normally distributed doubles.
- curandStatus_t CURANDAPI curandGenerateNormalDouble ( curandGenerator_t generator, double* outputPtr, size_t n, double mean, double stddev )
- Generate normally distributed doubles.
- curandStatus_t CURANDAPI curandGeneratePoisson ( curandGenerator_t generator, unsigned int* outputPtr, size_t n, double lambda )
- Generate Poisson-distributed unsigned ints.
- curandStatus_t CURANDAPI curandGenerateSeeds ( curandGenerator_t generator )
- Setup starting states.
- curandStatus_t CURANDAPI curandGenerateUniform ( curandGenerator_t generator, float* outputPtr, size_t num )
- Generate uniformly distributed floats.
- curandStatus_t CURANDAPI curandGenerateUniformDouble ( curandGenerator_t generator, double* outputPtr, size_t num )
- Generate uniformly distributed doubles.
- curandStatus_t CURANDAPI curandGetDirectionVectors32 ( curandDirectionVectors32_t* vectors, curandDirectionVectorSet_t set )
- Get direction vectors for 32-bit quasirandom number generation.
- curandStatus_t CURANDAPI curandGetDirectionVectors64 ( curandDirectionVectors64_t* vectors, curandDirectionVectorSet_t set )
- Get direction vectors for 64-bit quasirandom number generation.
- curandStatus_t CURANDAPI curandGetProperty ( libraryPropertyType type, int* value )
- Return the value of the curand property.
- curandStatus_t CURANDAPI curandGetScrambleConstants32 ( unsigned int** constants )
- Get scramble constants for 32-bit scrambled Sobol' .
- curandStatus_t CURANDAPI curandGetScrambleConstants64 ( unsigned long long** constants )
- Get scramble constants for 64-bit scrambled Sobol' .
- curandStatus_t CURANDAPI curandGetVersion ( int* version )
- Return the version number of the library.
- curandStatus_t CURANDAPI curandSetGeneratorOffset ( curandGenerator_t generator, unsigned long long offset )
- Set the absolute offset of the pseudo or quasirandom number generator.
- curandStatus_t CURANDAPI curandSetGeneratorOrdering ( curandGenerator_t generator, curandOrdering_t order )
- Set the ordering of results of the pseudo or quasirandom number generator.
- curandStatus_t CURANDAPI curandSetPseudoRandomGeneratorSeed ( curandGenerator_t generator, unsigned long long seed )
- Set the seed value of the pseudo-random number generator.
- curandStatus_t CURANDAPI curandSetQuasiRandomGeneratorDimensions ( curandGenerator_t generator, unsigned int num_dimensions )
- Set the number of dimensions.
- curandStatus_t CURANDAPI curandSetStream ( curandGenerator_t generator, cudaStream_t stream )
- Set the current stream for CURAND kernel launches.
枚举
- enum 主机::curandDirectionVectorSet [inherited]
-
CURAND方向向量集的选择
数值
- CURAND_DIRECTION_VECTORS_32_JOEKUO6 = 101
- Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions.
- CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102
- Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled.
- CURAND_DIRECTION_VECTORS_64_JOEKUO6 = 103
- Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions.
- CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104
- Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled.
- enum 主机::curandOrdering [inherited]
-
CURAND在内存中的结果排序
数值
- CURAND_ORDERING_PSEUDO_BEST = 100
- Best ordering for pseudorandom results.
- CURAND_ORDERING_PSEUDO_DEFAULT = 101
- Specific default thread sequence for pseudorandom results, same as CURAND_ORDERING_PSEUDO_BEST.
- CURAND_ORDERING_PSEUDO_SEEDED = 102
- Specific seeding pattern for fast lower quality pseudorandom results.
- CURAND_ORDERING_PSEUDO_LEGACY = 103
- Specific legacy sequence for pseudorandom results, guaranteed to remain the same for all cuRAND release.
- CURAND_ORDERING_PSEUDO_DYNAMIC = 104
- Specific ordering adjusted to the device it is being executed on, provides the best performance.
- CURAND_ORDERING_QUASI_DEFAULT = 201
- Specific n-dimensional ordering for quasirandom results.
- enum 主机::curandRngType [inherited]
-
CURAND生成器类型
数值
- CURAND_RNG_TEST = 0
- CURAND_RNG_PSEUDO_DEFAULT = 100
- Default pseudorandom generator.
- CURAND_RNG_PSEUDO_XORWOW = 101
- XORWOW pseudorandom generator.
- CURAND_RNG_PSEUDO_MRG32K3A = 121
- MRG32k3a pseudorandom generator.
- CURAND_RNG_PSEUDO_MTGP32 = 141
- Mersenne Twister MTGP32 pseudorandom generator.
- CURAND_RNG_PSEUDO_MT19937 = 142
- Mersenne Twister MT19937 pseudorandom generator.
- CURAND_RNG_PSEUDO_PHILOX4_32_10 = 161
- PHILOX-4x32-10 pseudorandom generator.
- CURAND_RNG_QUASI_DEFAULT = 200
- Default quasirandom generator.
- CURAND_RNG_QUASI_SOBOL32 = 201
- Sobol32 quasirandom generator.
- CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202
- Scrambled Sobol32 quasirandom generator.
- CURAND_RNG_QUASI_SOBOL64 = 203
- Sobol64 quasirandom generator.
- CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 204
- Scrambled Sobol64 quasirandom generator.
- enum 主机::curandStatus [inherited]
-
CURAND函数调用状态类型
数值
- CURAND_STATUS_SUCCESS = 0
- No errors.
- CURAND_STATUS_VERSION_MISMATCH = 100
- Header file and linked library version do not match.
- CURAND_STATUS_NOT_INITIALIZED = 101
- Generator not initialized.
- CURAND_STATUS_ALLOCATION_FAILED = 102
- Memory allocation failed.
- CURAND_STATUS_TYPE_ERROR = 103
- Generator is wrong type.
- CURAND_STATUS_OUT_OF_RANGE = 104
- Argument out of range.
- CURAND_STATUS_LENGTH_NOT_MULTIPLE = 105
- Length requested is not a multple of dimension.
- CURAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106
- GPU does not have double precision required by MRG32k3a.
- CURAND_STATUS_LAUNCH_FAILURE = 201
- Kernel launch failure.
- CURAND_STATUS_PREEXISTING_FAILURE = 202
- Preexisting failure on library entry.
- CURAND_STATUS_INITIALIZATION_FAILED = 203
- Initialization of CUDA failed.
- CURAND_STATUS_ARCH_MISMATCH = 204
- Architecture mismatch, GPU does not support requested feature.
- CURAND_STATUS_INTERNAL_ERROR = 999
- Internal library error.
Functions
- curandStatus_t CURANDAPI curandCreateGenerator ( curandGenerator_t* generator, curandRngType_t rng_type )
-
创建新的随机数生成器。
参数
- generator
- - Pointer to generator
- rng_type
- - Type of generator to create
返回
- CURAND_STATUS_ALLOCATION_FAILED,如果无法分配内存
- CURAND_STATUS_INITIALIZATION_FAILED 如果GPU设置过程中出现问题
- CURAND_STATUS_VERSION_MISMATCH 如果头文件版本与动态链接库版本不匹配
- 如果rng_type的值无效,则返回CURAND_STATUS_TYPE_ERROR
- 如果生成器创建成功,则返回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 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MRG32K3A 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MTGP32 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MT19937 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_PHILOX4_32_10 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_QUASI_SOBOL32 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SOBOL64 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SCRAMBBLED_SOBOL32 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
- curandStatus_t CURANDAPI curandCreateGeneratorHost ( curandGenerator_t* generator, curandRngType_t rng_type )
-
创建新的主机CPU随机数生成器。
参数
- generator
- - Pointer to generator
- rng_type
- - Type of generator to create
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- CURAND_STATUS_INITIALIZATION_FAILED 如果GPU设置过程中出现问题
- CURAND_STATUS_VERSION_MISMATCH 如果头文件版本与动态链接库版本不匹配
- 如果rng_type的值无效,则返回CURAND_STATUS_TYPE_ERROR
- 如果生成器创建成功,则返回CURAND_STATUS_SUCCESS状态
描述
创建一个类型为rng_type的新主机CPU随机数生成器,并在*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 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MRG32K3A 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MTGP32 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_MT19937 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_PSEUDO_PHILOX4_32_10 的默认值为:
-
seed = 0
-
offset = 0
-
ordering = CURAND_ORDERING_PSEUDO_DEFAULT
rng_type = CURAND_RNG_QUASI_SOBOL32 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SOBOL64 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
rng_type = CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 的默认值为:
-
dimensions = 1
-
offset = 0
-
ordering = CURAND_ORDERING_QUASI_DEFAULT
- curandStatus_t CURANDAPI curandCreatePoissonDistribution ( double lambda, curandDiscreteDistribution_t* discrete_distribution )
-
构建泊松分布的直方图数组。
参数
- lambda
- - lambda for the Poisson distribution
- discrete_distribution
- - pointer to the histogram in device memory
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED状态
- 如果GPU不支持双精度计算,则返回CURAND_STATUS_DOUBLE_PRECISION_REQUIRED状态
- CURAND_STATUS_INITIALIZATION_FAILED 如果GPU设置过程中出现问题
- 如果分布指针为空,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态
- 如果lambda为非正数或大于400,000,则返回CURAND_STATUS_OUT_OF_RANGE状态
- 如果直方图生成成功,则返回CURAND_STATUS_SUCCESS
描述
为泊松分布构建直方图数组,参数为lambda。当lambda大于2000时,将使用正态分布进行近似计算。
- curandStatus_t CURANDAPI curandDestroyDistribution ( curandDiscreteDistribution_t discrete_distribution )
-
销毁离散分布(例如泊松分布)的直方图数组。
参数
- discrete_distribution
- - pointer to device memory where the histogram is stored
返回
- 如果直方图从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果直方图成功销毁,则返回CURAND_STATUS_SUCCESS
描述
销毁由curandCreatePoissonDistribution创建的离散分布的直方图数组。
- curandStatus_t CURANDAPI curandDestroyGenerator ( curandGenerator_t generator )
-
销毁现有的生成器。
参数
- generator
- - Generator to destroy
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果生成器成功销毁,则返回CURAND_STATUS_SUCCESS
描述
销毁现有的生成器并释放与其状态相关的所有内存。
- curandStatus_t CURANDAPI curandGenerate ( curandGenerator_t generator, unsigned int* outputPtr, size_t num )
-
生成32位伪随机数或准随机数。
参数
- generator
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- num
- - Number of random 32-bit values to generate
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态码
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本数量不是准随机维度的倍数
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- 如果生成器是64位准随机生成器,则返回CURAND_STATUS_TYPE_ERROR。(对于64位准随机生成器,请使用curandGenerateLongLong())
- 如果结果成功生成,则返回CURAND_STATUS_SUCCESS
描述
使用generator生成num个32位结果到设备内存中的outputPtr位置。设备内存必须事先分配好,并且足够大以容纳所有结果。启动操作会使用通过curandSetStream()设置的流,如果未设置流则使用空流。
结果是32位的随机数值,每一位都是随机的。
- curandStatus_t CURANDAPI curandGenerateLogNormal ( curandGenerator_t generator, float* outputPtr, size_t n, float mean, float stddev )
-
生成对数正态分布的浮点数。
参数
- generator
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- n
- - Number of floats to generate
- mean
- - Mean of associated normal distribution
- stddev
- - Standard deviation of associated normal distribution
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- n
- - Number of doubles to generate
- mean
- - Mean of normal distribution
- stddev
- - Standard deviation of normal distribution
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数,或者对于伪随机生成器来说不是2的倍数
- 如果GPU不支持双精度,则返回CURAND_STATUS_DOUBLE_PRECISION_REQUIRED状态
- 如果结果成功生成,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- num
- - Number of random 64-bit values to generate
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- 如果生成器不是64位准随机生成器,则返回CURAND_STATUS_TYPE_ERROR
- 如果结果成功生成,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- n
- - Number of floats to generate
- mean
- - Mean of normal distribution
- stddev
- - Standard deviation of normal distribution
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- n
- - Number of doubles to generate
- mean
- - Mean of normal distribution
- stddev
- - Standard deviation of normal distribution
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本数量不是准随机维度的倍数,或者对于伪随机生成器来说不是2的倍数
- 如果GPU不支持双精度计算,则返回CURAND_STATUS_DOUBLE_PRECISION_REQUIRED状态
- 如果结果成功生成,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- n
- - Number of unsigned ints to generate
- lambda
- - lambda for the Poisson distribution
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态码
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
- 如果GPU或SM不支持双精度,则返回CURAND_STATUS_DOUBLE_PRECISION_REQUIRED
- 如果lambda为非正数或大于400,000,则返回CURAND_STATUS_OUT_OF_RANGE状态
- 如果结果成功生成,则返回CURAND_STATUS_SUCCESS
描述
使用generator在设备内存outputPtr处生成n个无符号整型结果。设备内存必须预先分配且足够容纳所有结果。启动操作通过使用curandSetStream()设置的流执行,若未设置流则使用空流。
结果为32位无符号整型点值,服从泊松分布,参数为lambda。
- curandStatus_t CURANDAPI curandGenerateSeeds ( curandGenerator_t generator )
-
设置初始状态。
参数
- generator
- - Generator to update
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回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
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- num
- - Number of floats to generate
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态码
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本数量不是准随机维度的倍数
- 如果结果成功生成,则返回CURAND_STATUS_SUCCESS
描述
使用generator生成num个浮点结果到设备内存中的outputPtr位置。设备内存必须事先分配且足够容纳所有结果。启动操作会通过使用curandSetStream()设置的流执行,若未设置流则使用空流。
结果是介于0.0f和1.0f之间的32位浮点数值,不包括0.0f但包括1.0f。
- curandStatus_t CURANDAPI curandGenerateUniformDouble ( curandGenerator_t generator, double* outputPtr, size_t num )
-
生成均匀分布的双精度浮点数。
参数
- generator
- - Generator to use
- outputPtr
- - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
- num
- - Number of doubles to generate
返回
- 如果无法分配内存,则返回CURAND_STATUS_ALLOCATION_FAILED
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果之前的CUDA内核启动存在错误,则返回CURAND_STATUS_PREEXISTING_FAILURE状态
- 如果内核启动因任何原因失败,则返回CURAND_STATUS_LAUNCH_FAILURE
- CURAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本数量不是准随机维度的倍数
- 如果GPU不支持双精度计算,则返回CURAND_STATUS_DOUBLE_PRECISION_REQUIRED状态
- 如果结果成功生成,则返回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
- - Address of pointer in which to return direction vectors
- set
- - Which set of direction vectors to use
返回
- 如果集合选择无效,则返回CURAND_STATUS_OUT_OF_RANGE状态
- 如果指针设置成功,则返回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
- - Address of pointer in which to return direction vectors
- set
- - Which set of direction vectors to use
返回
- 如果集合选择无效,则返回CURAND_STATUS_OUT_OF_RANGE状态
- 如果指针设置成功,则返回CURAND_STATUS_SUCCESS
描述
获取指向可用于准随机数生成的方向向量数组的指针。结果指针将引用主机内存中的方向向量数组。
该数组包含多个维度的向量。每个维度有64个向量。每个单独的向量是一个无符号长整型(unsigned long long)。
set 的合法取值为:
-
CURAND_DIRECTION_VECTORS_64_JOEKUO6 (20,000 维)
-
CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 (20,000维)
- curandStatus_t CURANDAPI curandGetProperty ( libraryPropertyType type, int* value )
-
返回当前CUDA随机数生成器(curand)属性的值。
参数
- type
- - CUDA library property
- value
- - integer value for the requested property
返回
- 如果成功返回属性值,则返回CURAND_STATUS_SUCCESS
- 如果属性类型未被识别,则返回CURAND_STATUS_OUT_OF_RANGE状态
描述
返回动态链接的CURAND库中由type描述的属性数值到*value中。
- curandStatus_t CURANDAPI curandGetScrambleConstants32 ( unsigned int** constants )
-
获取32位加扰Sobol序列的加扰常数。
参数
- constants
- - Address of pointer in which to return scramble constants
返回
- 如果指针设置成功,则返回CURAND_STATUS_SUCCESS
描述
获取指向可用于准随机数生成的扰码常量数组的指针。生成的指针将引用主机内存中的无符号整数数组。
该数组包含多个维度的常量。每个维度都有一个无符号整型常量。
- curandStatus_t CURANDAPI curandGetScrambleConstants64 ( unsigned long long** constants )
-
获取64位加扰Sobol序列的加扰常数。
参数
- constants
- - Address of pointer in which to return scramble constants
返回
- 如果指针设置成功,则返回CURAND_STATUS_SUCCESS
描述
获取指向可用于准随机数生成的扰码常量数组的指针。结果指针将引用主机内存中的无符号长整型数组。
该数组包含多个维度的常量。每个维度都有一个无符号长整型常量。
- curandStatus_t CURANDAPI curandGetVersion ( int* version )
-
返回该库的版本号。
参数
- version
- - CURAND library version
返回
- 如果版本号成功返回,则状态为CURAND_STATUS_SUCCESS
描述
返回动态链接的CURAND库的版本号到*version中。格式与CUDA运行时中的CUDART_VERSION相同。 唯一支持的配置是CURAND版本与CUDA运行时版本相同。
- curandStatus_t CURANDAPI curandSetGeneratorOffset ( curandGenerator_t generator, unsigned long long offset )
-
设置伪随机或准随机数生成器的绝对偏移量。
参数
- generator
- - Generator to modify
- offset
- - Absolute offset position
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果生成器偏移量设置成功,则返回CURAND_STATUS_SUCCESS
描述
设置伪随机或准随机数生成器的绝对偏移量。
offset的所有值都是有效的。offset位置是绝对的,而不是相对于序列中的当前位置。
- curandStatus_t CURANDAPI curandSetGeneratorOrdering ( curandGenerator_t generator, curandOrdering_t order )
-
设置伪随机或准随机数生成器结果的排序顺序。
参数
- generator
- - Generator to modify
- order
- - Ordering of results
返回
- 如果生成器从未创建,则返回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
- - Generator to modify
- seed
- - Seed value
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果生成器不是伪随机数生成器,则返回CURAND_STATUS_TYPE_ERROR
- 如果生成器种子设置成功,则返回CURAND_STATUS_SUCCESS
描述
设置伪随机数生成器的种子值。所有种子值都是有效的。不同的种子将产生不同的序列。不同种子生成的序列通常在统计上互不相关,但某些种子值对可能会生成统计上相关的序列。
- curandStatus_t CURANDAPI curandSetQuasiRandomGeneratorDimensions ( curandGenerator_t generator, unsigned int num_dimensions )
-
设置维度数量。
参数
- generator
- - Generator to modify
- num_dimensions
- - Number of dimensions
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果num_dimensions无效,则返回CURAND_STATUS_OUT_OF_RANGE状态
- 如果生成器不是准随机数生成器,则返回 CURAND_STATUS_TYPE_ERROR
- 如果生成器排序设置成功,则返回CURAND_STATUS_SUCCESS
描述
设置准随机数生成器生成的维度数量。
num_dimensions 的合法取值范围是1到20000。
- curandStatus_t CURANDAPI curandSetStream ( curandGenerator_t generator, cudaStream_t stream )
-
为CURAND内核启动设置当前流。
参数
- generator
- - Generator to modify
- stream
- - Stream to use or NULL for null stream
返回
- 如果生成器从未创建,则返回CURAND_STATUS_NOT_INITIALIZED
- 如果流设置成功,则返回CURAND_STATUS_SUCCESS
描述
为CURAND内核启动设置当前流。所有库函数都将使用此流,直到再次设置。