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