API 参考#
定义
-
NVPL_RAND_VERSION#
NVPL RAND 库版本。
类型定义
-
typedef enum nvplRandRngType nvplRandRngType_t#
NVPL RAND 生成器类型。
-
typedef enum nvplRandDistributionType nvplRandDistributionType_t#
NVPL RAND 分布类型。
-
typedef struct nvplRandDistributionConfig nvplRandDistributionConfig_t#
用于描述数据分布属性的配置。
-
typedef enum nvplRandStatus nvplRandStatus_t#
NVPL RAND API 返回状态。
-
typedef enum nvplRandOrdering nvplRandOrdering_t#
多线程生成器内存中结果的排序类型。
枚举
-
enum nvplRandRngType#
NVPL RAND 生成器类型。
值
-
enumerator NVPL_RAND_RNG_PSEUDO_DEFAULT#
默认伪随机生成器,与 NVPL_RAND_RNG_PSEUDO_XORWOW 相同。
-
enumerator NVPL_RAND_RNG_PSEUDO_XORWOW#
XORWOW 伪随机生成器。
-
enumerator NVPL_RAND_RNG_PSEUDO_MRG32K3A#
MRG32K3A 伪随机生成器。
-
enumerator NVPL_RAND_RNG_PSEUDO_MT19937#
梅森旋转 MT19937 伪随机生成器。
-
enumerator NVPL_RAND_RNG_PSEUDO_PHILOX4_32_10#
PHILOX-4x32-10 伪随机生成器。
-
enumerator NVPL_RAND_RNG_PSEUDO_PCG#
PCG 伪随机生成器。
-
enumerator NVPL_RAND_RNG_QUASI_DEFAULT#
默认准随机生成器,与 NVPL_RAND_RNG_QUASI_SOBOL32 相同。
-
enumerator NVPL_RAND_RNG_QUASI_SOBOL32#
SOBOL32 准随机生成器。
-
enumerator NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL32#
Scrambled SOBOL32 准随机生成器。
-
enumerator NVPL_RAND_RNG_QUASI_SOBOL64#
SOBOL64 准随机生成器。
-
enumerator NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL64#
Scrambled SOBOL64 准随机生成器。
-
enumerator NVPL_RAND_RNG_PSEUDO_DEFAULT#
-
enum nvplRandDistributionType#
NVPL RAND 分布类型。
值
-
enum nvplRandStatus#
NVPL RAND API 返回状态。
值
-
enumerator NVPL_RAND_STATUS_SUCCESS#
-
enumerator NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED#
生成器未初始化。
-
enumerator NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR#
生成器类型错误。
-
enumerator NVPL_RAND_STATUS_DATA_NULLPTR#
数据 ptr 为 nullptr。
-
enumerator NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE#
请求的长度不是维度的倍数,或者不是二的倍数。
-
enumerator NVPL_RAND_STATUS_PCG_INCREMENT_NOT_ODD#
为 PCG 请求的增量不是奇数。
-
enumerator NVPL_RAND_STATUS_OUT_OF_RANGE#
参数超出范围。
-
enumerator NVPL_RAND_STATUS_DISTRIBUTION_CONFIGS_ERROR#
分布参数不可接受。
-
enumerator NVPL_RAND_STATUS_DISTRIBUTION_TYPE_ERROR#
生成器不支持分布类型。
-
enumerator NVPL_RAND_STATUS_INTERNAL_ERROR#
内部库错误。
-
enumerator NVPL_RAND_STATUS_SUCCESS#
-
enum nvplRandOrdering#
多线程生成器内存中结果的排序类型。
值
-
enumerator NVPL_RAND_ORDERING_PSEUDO_DEFAULT#
伪随机结果的默认排序。
-
enumerator NVPL_RAND_ORDERING_PSEUDO_FAST#
非严格排序,性能良好,但无法恢复偏移量。
-
enumerator NVPL_RAND_ORDERING_STRICT#
严格排序,生成与单线程结果相同的序列。
-
enumerator NVPL_RAND_ORDERING_CURAND_LEGACY#
伪随机的旧版序列,保证与 cuRAND 结果相同。
-
enumerator NVPL_RAND_ORDERING_QUASI_DEFAULT#
准随机结果的特定 n 维排序。
-
enumerator NVPL_RAND_ORDERING_PSEUDO_DEFAULT#
函数
-
nvplRandStatus_t nvplRandCreateGenerator(nvplRandGenerator_t *gen, nvplRandRngType_t rng_type)#
创建
rng_type
类型的新随机数生成器,并在*gen
中返回它。rng_type
的合法值是NVPL_RAND_RNG_PSEUDO_DEFAULT
NVPL_RAND_RNG_PSEUDO_XORWOW
NVPL_RAND_RNG_PSEUDO_MRG32K3A
NVPL_RAND_RNG_PSEUDO_MT19937
NVPL_RAND_RNG_PSEUDO_PHILOX4_32_10
NVPL_RAND_RNG_PSEUDO_PCG
NVPL_RAND_RNG_QUASI_DEFAULT
NVPL_RAND_RNG_QUASI_SOBOL32
NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL32
NVPL_RAND_RNG_QUASI_SOBOL64
NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL64
当
rng_type
为 NVPL_RAND_RNG_PSEUDO_DEFAULT 时,选择的类型是 NVPL_RAND_RNG_PSEUDO_XORWOW。 当rng_type
为 NVPL_RAND_RNG_QUASI_DEFAULT 时,选择的类型是 NVPL_RAND_RNG_QUASI_SOBOL32。- 参数:
gen – 生成器指针
rng_type – 要创建的生成器类型
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器未初始化
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果
rng_type
的值无效NVPL_RAND_STATUS_SUCCESS 如果生成器成功生成
-
nvplRandStatus_t nvplRandDestroyGenerator(nvplRandGenerator_t gen)#
销毁现有生成器并释放与其状态关联的所有内存。
- 参数:
gen – 要销毁的生成器
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_SUCCESS 如果生成器成功销毁
-
nvplRandStatus_t nvplRandGetVersion(int *version)#
返回 NVPL RAND 库的
version
号。- 参数:
version – RAND 库版本
- 返回值:
NVPL_RAND_STATUS_SUCCESS 如果版本号成功返回
-
nvplRandStatus_t nvplRandSetPseudoRandomGeneratorSeed(nvplRandGenerator_t gen, const unsigned long long seed)#
设置伪随机数生成器的种子值。
种子的所有值均有效。不同的种子将产生不同的序列。不同的种子通常在统计上彼此不相关,但是某些种子值对可能会生成在统计上相关的序列。
默认值
seed
是0ULL,对于 NVPL_RAND_RNG_PSEUDO_XORWOW
12345ULL,对于 NVPL_RAND_RNG_PSEUDO_MRG32K3A
5489ULL,对于 NVPL_RAND_RNG_PSEUDO_MT19937
0xdeadbeefdeadbeefULL,对于 NVPL_RAND_RNG_PSEUDO_PHILOX4_32_10
0x853c49e6748fea9bULL,对于 NVPL_RAND_RNG_PSEUDO_PCG
- 参数:
gen – 要修改的生成器
seed – 种子值
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果生成器不是伪随机数生成器
NVPL_RAND_STATUS_SUCCESS 如果生成器种子设置成功
-
nvplRandStatus_t nvplRandSetPCGRandomGeneratorIncrement(nvplRandGenerator_t gen, const unsigned long long inc)#
设置 PCG 伪随机数生成器的增量。
PCG 的增量值必须始终为奇数。
inc
的默认值为 0xda3e39cb94b95bdbULL。- 参数:
gen – 要修改的生成器
inc – PCG 的增量值,控制选择哪个子序列
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果生成器不是 PCG
NVPL_RAND_STATUS_PCG_INCREMENT_NOT_ODD 如果增量值为偶数
NVPL_RAND_STATUS_SUCCESS 如果生成器增量值设置成功
-
nvplRandStatus_t nvplRandSetGeneratorOffset(nvplRandGenerator_t gen, const unsigned long long offset)#
设置伪随机数或准随机数生成器的绝对偏移量。
偏移量的所有值均有效。偏移位置是绝对的,而不是相对于序列中的当前位置。
对于准随机生成器,偏移量是每个维度生成的序列中的绝对位置。
所有生成器的默认值
offset
均为 0ULL。- 参数:
gen – 要修改的生成器
offset – 绝对偏移位置
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_SUCCESS 如果生成器偏移量设置成功
-
nvplRandStatus_t nvplRandSetGeneratorSubsequence(nvplRandGenerator_t gen, const unsigned long long seq)#
为伪随机数生成器设置子序列号。
为伪随机数生成器设置子序列或流编号,以允许用户显式跳过子序列。 生成伪随机数的多个子序列的能力允许使用单线程 NVPL RAND 库开发并行随机数生成。
子序列位置是绝对的,而不是相对于当前状态的子序列。
支持的伪随机生成器:XORWOW、MRG32K3A、PHILOX4_32_10 和 PCG。
除 MRG32K3a 外,它的最大子序列号为 \(2^{51}\),所有子序列值均有效。
建议 API 仅与单线程生成器一起使用。
- 参数:
gen – 要修改的生成器
seq – 要设置的子序列号
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果生成器不支持 API
NVPL_RAND_STATUS_OUT_OF_RANGE 如果子序列号超出范围
NVPL_RAND_STATUS_SUCCESS 如果生成器子序列设置成功
-
nvplRandStatus_t nvplRandSetQuasiRandomGeneratorDimensions(nvplRandGenerator_t gen, const unsigned int num_dims)#
设置准随机数生成器的维度数。
当在 num_dims 维度中生成结果时,大小为 n 的输出将由来自 第一个 维度的 n / num_dims 个结果组成,后跟来自 第二个 维度的 n / num_dims 个结果,依此类推,直到最后一个维度。 只能生成维度大小的确切倍数。
num_dims
的合法值为 1 到 20000;默认值为 1。- 参数:
gen – 要修改的生成器
num_dims – 维度数
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_OUT_OF_RANGE 如果维度数无效
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果生成器不是准随机数生成器
NVPL_RAND_STATUS_SUCCESS 如果维度设置成功
-
nvplRandStatus_t nvplRandGenerate(nvplRandGenerator_t gen, unsigned int *outputPtr, const size_t num)#
使用 XORWOW、MRG32K3A、MT19937、PHILOX4_32_10、PCG、SOBOL32 和 Scrambled SOBOL32 生成器生成 32 位伪随机数或准随机数。
使用
gen
将num
个 32 位结果生成到outputPtr
的内存中。 内存必须已预先分配,并且足够大以容纳所有结果。结果是 32 位值,每个位都是随机的。
- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的随机 32 位值的数量
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果生成器类型与数据类型不匹配
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateLongLong(nvplRandGenerator_t gen, unsigned long long *outputPtr, const size_t num)#
生成 64 位伪随机数或准随机数,使用 PCG、SOBOL64 和 Scrambled SOBOL64 生成器。
使用
gen
生成num
个 64 位结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 64 位值,每一位都是随机的。
- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的 64 位随机值的数量
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
如果生成器类型不是 64 位生成器,则返回 NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateUniform(nvplRandGenerator_t gen, float *outputPtr, const size_t num)#
生成均匀分布的浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP32 均匀分布的随机值,范围在 0 到 1 之间,不包括 0,包括 1。
- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的浮点数数量
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateUniformDouble(nvplRandGenerator_t gen, double *outputPtr, const size_t num)#
生成均匀分布的双精度浮点数。
使用
generator
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP64 均匀分布的随机值,范围在 0 到 1 之间,不包括 0,包括 1。
- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的双精度浮点数数量
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateUniformRange(nvplRandGenerator_t gen, float *outputPtr, const size_t num, const float start, const float end)#
生成具有自定义范围的均匀分布浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP32 均匀分布的随机值,范围在
start
和end
之间,不包括start
,包括end
。- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的浮点数数量
start – 区间的起始值
end – 区间的结束值
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateUniformRangeDouble(nvplRandGenerator_t gen, double *outputPtr, const size_t num, const double start, const double end)#
生成具有自定义范围的均匀分布双精度浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP64 均匀分布的随机值,范围在
start
和end
之间,不包括start
,包括end
。- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的双精度浮点数数量
start – 区间的起始值
end – 区间的结束值
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE 如果输出样本的数量不是准随机维度的倍数
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateNormal(nvplRandGenerator_t gen, float *outputPtr, const size_t num, const float mean, const float stddev)#
生成正态分布的浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP32 正态分布的随机值,均值为
mean
,标准差为stddev
。正态分布结果由伪随机生成器使用 Box-Muller 变换生成。准随机生成器使用逆累积分布函数 (ICDF) 来保持维度。
- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的浮点数数量
mean – 正态分布的均值
stddev – 正态分布的标准差
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数,则返回 NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateNormalDouble(nvplRandGenerator_t gen, double *outputPtr, const size_t num, const double mean, const double stddev)#
生成正态分布的双精度浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP64 正态分布的随机值,均值为
mean
,标准差为stddev
。正态分布结果由伪随机生成器(Mersenne Twister MT19937 除外)使用 Box-Muller 变换生成,因此要求
num
为偶数。准随机生成器和 Mersenne Twister MT19937 使用逆累积分布函数 (ICDF) 来保持维度。- 参数:
gen – 要使用的生成器
outputPtr – 指向存储生成结果的内存的指针
num – 要生成的双精度浮点数数量
mean – 正态分布的均值
stddev – 正态分布的标准差
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
如果输出样本数不是准随机维度的倍数,或者对于伪随机生成器不是 2 的倍数,则返回 NVPL_RAND_STATUS_LENGTH_NOT_MULTIPLE
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateDistribution(nvplRandGenerator_t gen, float *outputPtr, const nvplRandDistributionConfig_t config, const size_t num)#
基于指定的连续分布生成浮点数。
使用
gen
生成num
个浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP32 随机值,具有用户指定的分布
config
。正态分布结果由伪随机生成器(Mersenne Twister MT19937 除外)使用 Box-Muller 变换生成,因此要求
num
为偶数。准随机生成器和 Mersenne Twister MT19937 使用逆累积分布函数 (ICDF) 来保持维度。- 参数:
gen – 要使用的生成器
outputPtr – 存储结果的内存指针
config – 分布的配置
num – 要生成的浮点数数量。对于多变量分布,例如狄利克雷分布,将生成 (num *
config.nk
) 个浮点数。
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
如果不支持分布类型,则返回 NVPL_RAND_STATUS_DISTRIBUTION_TYPE_ERROR
如果分布配置设置不正确,或者不支持某些排序,则返回 NVPL_RAND_STATUS_DISTRIBUTION_CONFIGS_ERROR。请注意,Gamma、Beta 和 Dirichlet 分布不支持 NVPL_RAND_ORDERING_STRICT 排序
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateDistributionDouble(nvplRandGenerator_t gen, double *outputPtr, const nvplRandDistributionConfig_t config, const size_t num)#
基于指定的连续分布生成双精度浮点数。
使用
gen
生成num
个双精度浮点数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 FP64 随机值,具有用户指定的分布
config
。- 参数:
gen – 要使用的生成器
outputPtr – 存储结果的内存指针
config – 分布的配置
num – 要生成的浮点数数量。对于多变量分布,例如狄利克雷分布,将生成 (num *
config.nk
) 个双精度浮点数。
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
如果不支持分布类型,则返回 NVPL_RAND_STATUS_DISTRIBUTION_TYPE_ERROR
如果分布配置设置不正确,或者不支持某些排序,则返回 NVPL_RAND_STATUS_DISTRIBUTION_CONFIGS_ERROR。请注意,Gamma、Beta 和 Dirichlet 分布不支持 NVPL_RAND_ORDERING_STRICT 排序
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandGenerateDistributionDiscrete(nvplRandGenerator_t gen, unsigned int *outputPtr, const nvplRandDistributionConfig_t distConfig, const size_t num)#
基于指定的离散分布生成无符号整数。
使用
gen
生成num
个整数结果到outputPtr
指向的内存中。内存必须事先分配,并且足够大以容纳所有结果。结果是 32 位随机整数值,具有用户指定的分布
config
。- 参数:
gen – 要使用的生成器
outputPtr – 存储结果的内存指针
distConfig – 分布的配置
num – 要生成的无符号整数数量。对于多变量分布,例如多项分布,将生成 (num *
config.nk
) 个无符号整数。
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器从未创建
NVPL_RAND_STATUS_DATA_NULLPTR 如果 outputPtr 为 nullptr
如果不支持分布类型,则返回 NVPL_RAND_STATUS_DISTRIBUTION_TYPE_ERROR
如果分布配置设置不正确,或者不支持某些排序,则返回 NVPL_RAND_STATUS_DISTRIBUTION_CONFIGS_ERROR。请注意,泊松分布不支持 NVPL_RAND_ORDERING_STRICT 排序
NVPL_RAND_STATUS_SUCCESS 如果结果成功生成
-
nvplRandStatus_t nvplRandMTCreateGenerator(nvplRandGenerator_t *gen, nvplRandRngType_t rng_type, const unsigned int nthreads)#
创建
rng_type
类型的新随机数生成器,将线程数设置为nthreads
,并在*gen
中返回。rng_type
的合法值是NVPL_RAND_RNG_PSEUDO_DEFAULT
NVPL_RAND_RNG_PSEUDO_XORWOW
NVPL_RAND_RNG_PSEUDO_MRG32K3A
NVPL_RAND_RNG_PSEUDO_PHILOX4_32_10
NVPL_RAND_RNG_PSEUDO_PCG
NVPL_RAND_RNG_QUASI_DEFAULT
NVPL_RAND_RNG_QUASI_SOBOL32
NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL32
NVPL_RAND_RNG_QUASI_SOBOL64
NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL64
当
rng_type
为NVPL_RAND_RNG_PSEUDO_DEFAULT
时,选择的类型是NVPL_RAND_RNG_PSEUDO_XORWOW
。当rng_type
为 NVPL_RAND_RNG_QUASI_DEFAULT 时,选择的类型是NVPL_RAND_RNG_QUASI_SOBOL32
。该 API 只能在链接到多线程 NVPL RAND 库时使用。
- 参数:
gen – 生成器指针
rng_type – 要创建的生成器类型
nthreads – 用于生成随机数的线程数
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器未初始化
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果
rng_type
的值无效NVPL_RAND_STATUS_SUCCESS 如果生成器成功生成
-
nvplRandStatus_t nvplRandMTCreateGeneratorDefault(nvplRandGenerator_t *gen, nvplRandRngType_t rng_type)#
创建
rng_type
类型的新随机数生成器,将线程数设置为 std::thread::hardware_concurrency() 的值,并在*gen
中返回。该 API 只能在链接到多线程 NVPL RAND 库时使用。
- 参数:
gen – 生成器指针
rng_type – 要创建的生成器类型
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器未初始化
NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR 如果
rng_type
的值无效NVPL_RAND_STATUS_SUCCESS 如果生成器成功生成
-
nvplRandStatus_t nvplRandMTSetGeneratorOrdering(nvplRandGenerator_t gen, nvplRandOrdering_t order)#
设置伪随机数或准随机数生成器结果的排序。
order
对于伪随机生成器的合法值包括NVPL_RAND_ORDERING_PSEUDO_DEFAULT
NVPL_RAND_ORDERING_PSEUDO_FAST
NVPL_RAND_ORDERING_STRICT
NVPL_RAND_ORDERING_CURAND_LEGACY
order
对于准随机生成器的合法值包括NVPL_RAND_ORDERING_QUASI_DEFAULT
该 API 只能在链接到多线程 NVPL RAND 库时使用。
- 参数:
gen – 要修改的生成器
order – 结果的排序
- 返回值:
NVPL_RAND_STATUS_GENERATOR_NOT_INITIALIZED 如果生成器未初始化
如果生成器不支持排序类型,则返回 NVPL_RAND_STATUS_GENERATOR_TYPE_ERROR
如果生成器排序设置成功,则返回 NVPL_RAND_STATUS_SUCCESS
-
struct nvplRandDistributionConfig#
用于描述数据分布属性的配置。
公共成员
-
nvplRandDistributionType_t dist#
分布类型。
-
double a#
对于每种分布类型,双精度值
a
是NVPL_RAND_CONTINUOUS_DIST_UNIFORM: 未使用
NVPL_RAND_CONTINUOUS_DIST_UNIFORM_RANGE : 范围 (start, end] 的起始值
NVPL_RAND_CONTINUOUS_DIST_NORMAL : 正态分布的均值
NVPL_RAND_CONTINUOUS_DIST_LOGNORMAL : 相关正态分布的均值
NVPL_RAND_CONTINUOUS_DIST_EXPONENTIAL : 指数分布的位置参数,\( \lambda \)
NVPL_RAND_CONTINUOUS_DIST_GAMMA : 形状参数,\( \alpha > 0 \)
NVPL_RAND_CONTINUOUS_DIST_BETA : 形状参数,\( \alpha > 0 \)
NVPL_RAND_CONTINUOUS_DIST_DIRICHLET: 未使用
NVPL_RAND_DISCRETE_DIST_POISSON : 速率参数,\( \lambda > 0 \)
NVPL_RAND_DISCRETE_DIST_BERNOULLI : 速率参数,\( 1 >= \lambda >= 0 \)
NVPL_RAND_DISCRETE_DIST_CATEGORICAL : 未使用
NVPL_RAND_DISCRETE_DIST_BINOMIAL : 速率参数,\( 1 >= \lambda >= 0 \)
-
double b#
对于每种分布类型,双精度值
b
仅需为以下分布定义NVPL_RAND_CONTINUOUS_DIST_UNIFORM_RANGE : 范围 (start, end] 的结束值
NVPL_RAND_CONTINUOUS_DIST_NORMAL : 正态分布的标准差
NVPL_RAND_CONTINUOUS_DIST_LOGNORMAL : 相关正态分布的标准差
NVPL_RAND_CONTINUOUS_DIST_GAMMA : 尺度参数,\( \beta > 0 \)
NVPL_RAND_CONTINUOUS_DIST_BETA : 形状参数,\( \beta > 0 \)
-
double *p_array#
双精度数组
p_array
仅需为以下分布定义NVPL_RAND_CONTINUOUS_DIST_DIRICHLET: 大小为 k 的形状参数数组,所有值 > 0
NVPL_RAND_DISCRETE_DIST_CATEGORICAL: 概率数组,所有值 >= 0
-
unsigned int nk#
无符号整数值
nk
仅需为以下分布定义NVPL_RAND_CONTINUOUS_DIST_DIRICHLET: 形状参数的大小
NVPL_RAND_DISCRETE_DIST_CATEGORICAL: 概率参数的大小,>1 (如果 =1,请使用伯努利分布)
NVPL_RAND_DISCRETE_DIST_BINOMIAL : 伯努利试验的大小,>1 (如果 =1,请使用伯努利分布)
NVPL_RAND_DISCRETE_DIST_MULTINOMIAL : 概率参数的大小,>1
-
unsigned int nt#
无符号整数值
nt
仅需为以下分布定义NVPL_RAND_DISCRETE_DIST_MULTINOMIAL : 伯努利试验的大小 >1
-
nvplRandDistributionType_t dist#