4. 模块

以下是所有模块的列表:

4.1. 主机API

4.1.1. 函数列表

mcrandStatus_t MCRANDAPI mcrandCreateGenerator ( mcrandGenerator_t* generator, mcrandRngType_t rng_type )

创建新的随机数生成器。

mcrandStatus_t MCRANDAPI mcrandCreateGeneratorHost ( mcrandGenerator_t* generator, mcrandRngType_t rng_type )

创建新的主机CPU随机数生成器。

mcrandStatus_t MCRANDAPI mcrandCreatePoissonDistribution ( double  lambda, mcrandDiscreteDistribution_t* discrete_distribution )

构建泊松分布的直方图数组。

mcrandStatus_t MCRANDAPI mcrandDestroyDistribution ( mcrandDiscreteDistribution_t discrete_distribution )

销毁离散分布(例如泊松分布)的直方图数组。

mcrandStatus_t MCRANDAPI mcrandDestroyGenerator ( mcrandGenerator_t generator )

销毁一个已有的生成器。

mcrandStatus_t MCRANDAPI mcrandGenerate ( mcrandGenerator_t generator, unsigned int* outputPtr, size_t num )

生成32位的伪随机或准随机数。

mcrandStatus_t MCRANDAPI mcrandGenerateLogNormal ( mcrandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )

生成对数正态分布的浮点数。

mcrandStatus_t MCRANDAPI mcrandGenerateLogNormalDouble ( mcrandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )

生成对数正态分布的双精度浮点数。

mcrandStatus_t MCRANDAPI mcrandGenerateLongLong ( mcrandGenerator_t generator, unsigned long long* outputPtr, size_t num )

生成64位的准随机数。

mcrandStatus_t MCRANDAPI mcrandGenerateNormal ( mcrandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )

生成正态分布的双精度浮点数。

mcrandStatus_t MCRANDAPI mcrandGenerateNormalDouble ( mcrandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )

生成正态分布的双精度浮点数。

mcrandStatus_t MCRANDAPI mcrandGeneratePoisson ( mcrandGenerator_t generator, unsigned int* outputPtr, size_t n, double  lambda )

生成泊松分布的无符号整数。

mcrandStatus_t MCRANDAPI mcrandGenerateSeeds ( mcrandGenerator_t generator )

设置起始状态。

mcrandStatus_t MCRANDAPI mcrandGenerateUniform ( mcrandGenerator_t generator, float* outputPtr, size_t num )

生成均匀分布的浮点数。

mcrandStatus_t MCRANDAPI mcrandGenerateUniformDouble ( mcrandGenerator_t generator, double* outputPtr, size_t num )

生成均匀分布的双精度浮点数。

mcrandStatus_t MCRANDAPI mcrandGetDirectionVectors32 ( mcrandDirectionVectors32_t* vectors, mcrandDirectionVectorSet_t set )

获取32位准随机数生成的方向向量。

mcrandStatus_t MCRANDAPI mcrandGetDirectionVectors64 ( mcrandDirectionVectors64_t* vectors, mcrandDirectionVectorSet_t set )

获取64位准随机数生成的方向向量。

mcrandStatus_t MCRANDAPI mcrandGetProperty ( libraryPropertyType type, int* value )

返回mcrand属性的值。

mcrandStatus_t MCRANDAPI mcrandGetScrambleConstants32 ( unsigned int** constants )

获取用于32位Scrambled Sobol序列的Scramble常数。

mcrandStatus_t MCRANDAPI mcrandGetScrambleConstants64 ( unsigned long long** constants )

获取用于64位Scrambled Sobol序列的Scramble常数。

mcrandStatus_t MCRANDAPI mcrandGetVersion ( int* version )

返回库的版本号。

mcrandStatus_t MCRANDAPI mcrandSetGeneratorOffset ( mcrandGenerator_t generator, unsigned long long offset )

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

mcrandStatus_t MCRANDAPI mcrandSetGeneratorOrdering ( mcrandGenerator_t generator, mcrandOrdering_t order )

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

mcrandStatus_t MCRANDAPI mcrandSetPseudoRandomGeneratorSeed ( mcrandGenerator_t generator, unsigned long long seed )

设置伪随机数生成器的种子值。

mcrandStatus_t MCRANDAPI mcrandSetQuasiRandomGeneratorDimensions ( mcrandGenerator_t generator, unsigned int  num_dimensions )

设置维度数量。

mcrandStatus_t MCRANDAPI mcrandSetStream ( mcrandGenerator_t generator, mcStream_t stream )

为MCRAND内核启动设置当前流。

4.1.2. 枚举

enum HOST::mcrandDirectionVectorSet [inherited]

MCRAND方向向量集的选择

MCRAND_DIRECTION_VECTORS_32_JOEKUO6 = 101

根据S. Joe和F. Y. Kuo推荐的多项式生成的特定32位方向向量集,适用于高达20000个维度。

MCRAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 = 102

根据S. Joe和F. Y. Kuo推荐的多项式生成的特定32位方向向量集,适用于高达20000个维度,并进行了混淆处理。

MCRAND_DIRECTION_VECTORS_64_JOEKUO6 = 103

根据S. Joe和F. Y. Kuo推荐的多项式生成的特定64位方向向量集,适用于高达20000个维度。

MCRAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 = 104

根据S. Joe和F. Y. Kuo推荐的多项式生成的特定32位方向向量集,适用于高达20000个维度,并进行了混淆处理。

enum HOST::mcrandOrdering [inherited]

MCRAND在内存中的结果排序

MCRAND_ORDERING_PSEUDO_BEST = 100

伪随机结果的最佳排序。

MCRAND_ORDERING_PSEUDO_DEFAULT = 101

伪随机结果的特定默认线程顺序,与MCRAND_ORDERING_PSEUDO_BEST相同。

MCRAND_ORDERING_PSEUDO_SEEDED = 102

用于获得快速、低质量伪随机结果的特定种子模式。

MCRAND_ORDERING_PSEUDO_LEGACY = 103

伪随机结果的特定遗留序列,保证在所有mcRAND发布中保持相同。

MCRAND_ORDERING_PSEUDO_DYNAMIC = 104

根据执行设备进行调整的特定顺序,提供最佳性能。

MCRAND_ORDERING_QUASI_DEFAULT = 201

用于拟随机结果的特定n维顺序。

enum HOST::mcrandRngType [inherited]

MCRAND生成器类型

MCRAND_RNG_TEST = 0
MCRAND_RNG_PSEUDO_DEFAULT = 100

默认伪随机生成器。

MCRAND_RNG_PSEUDO_XORWOW = 101

XORWOW伪随机生成器。

MCRAND_RNG_PSEUDO_MRG32K3A = 121

MRG32k3a伪随机生成器。

MCRAND_RNG_PSEUDO_MTGP32 = 141

Mersenne Twister MTGP32伪随机生成器。

MCRAND_RNG_PSEUDO_MT19937 = 142

Mersenne Twister MT19937伪随机生成器。

MCRAND_RNG_PSEUDO_PHILOX4_32_10 = 161

PHILOX-4x32-10伪随机生成器。

MCRAND_RNG_QUASI_DEFAULT = 200

默认准随机生成器

MCRAND_RNG_QUASI_SOBOL32 = 201

Sobol32准随机生成器

MCRAND_RNG_QUASI_SCRAMBLED_SOBOL32 = 202

Scrambled Sobol32准随机生成器

MCRAND_RNG_QUASI_SOBOL64 = 203

Sobol64准随机生成器

MCRAND_RNG_QUASI_SCRAMBLED_SOBOL64 = 204

Scrambled Sobol64准随机生成器

enum HOST::mcrandStatus [inherited]

MCRAND函数调用状态类型

MCRAND_STATUS_SUCCESS = 0

无错误。

MCRAND_STATUS_VERSION_MISMATCH = 100

头文件和链接库版本不匹配。

MCRAND_STATUS_NOT_INITIALIZED = 101

生成器未初始化。

MCRAND_STATUS_ALLOCATION_FAILED = 102

内存分配失败。

MCRAND_STATUS_TYPE_ERROR = 103

生成器类型错误。

MCRAND_STATUS_OUT_OF_RANGE = 104

参数超出范围。

MCRAND_STATUS_LENGTH_NOT_MULTIPLE = 105

请求的长度不是维度的倍数。

MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED = 106

GPU没有MRG32k3a所需的双精度浮点数。

MCRAND_STATUS_LAUNCH_FAILURE = 201

内核启动错误。

MCRAND_STATUS_PREEXISTING_FAILURE = 202

库入口先前存在的故障。

MCRAND_STATUS_INITIALIZATION_FAILED = 203

MXMACA初始化失败。

MCRAND_STATUS_ARCH_MISMATCH = 204

结构不匹配,GPU不支持请求的功能。

MCRAND_STATUS_INTERNAL_ERROR = 999

库内部错误。

4.1.3. 函数

mcrandStatus_t MCRANDAPI mcrandCreateGenerator ( mcrandGenerator_t* generator, mcrandRngType_t rng_type )

创建一个新的随机数生成器。

参数

generator

  • 生成器的指针

rng_type

  • 要创建的生成器类型

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果GPU设置出现问题,则返回MCRAND_STATUS_INITIALIZATION_FAILED

  • 如果头文件版本与动态链接库版本不匹配,则返回MCRAND_STATUS_VERSION_MISMATCH

  • 如果rng_type的值无效,则返回MCRAND_STATUS_TYPE_ERROR

  • 如果生成器创建成功,则返回MCRAND_STATUS_SUCCESS

描述

创建了一个rng_type类型的新随机数生成器,并将其返回到*generator中。

rng_type的合法值包括:

  • MCRAND_RNG_PSEUDO_DEFAULT

  • MCRAND_RNG_PSEUDO_XORWOW

  • MCRAND_RNG_PSEUDO_MRG32K3A

  • MCRAND_RNG_PSEUDO_MTGP32

  • MCRAND_RNG_PSEUDO_MT19937

  • MCRAND_RNG_PSEUDO_PHILOX4_32_10

  • MCRAND_RNG_QUASI_DEFAULT

  • MCRAND_RNG_QUASI_SOBOL32

  • MCRAND_RNG_QUASI_SCRAMBLED_SOBOL32

  • MCRAND_RNG_QUASI_SOBOL64

  • MCRAND_RNG_QUASI_SCRAMBLED_SOBOL64

当rng_type为MCRAND_RNG_PSEUDO_DEFAULT时,选择的类型是MCRAND_RNG_PSEUDO_XORWOW。当rng_type为MCRAND_RNG_QUASI_DEFAULT时,选择的类型是MCRAND_RNG_QUASI_SOBOL32。

rng_type = MCRAND_RNG_PSEUDO_XORWOW的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MRG32K3A的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MTGP32的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MT19937的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_PHILOX4_32_10的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_QUASI_SOBOL32的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SOBOL64的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SCRAMBBLED_SOBOL32的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SCRAMBLED_SOBOL64的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

mcrandStatus_t MCRANDAPI mcrandCreateGeneratorHost ( mcrandGenerator_t* generator, mcrandRngType_t rng_type )

创建新的主机CPU随机数生成器。

参数

generator

  • 生成器的指针

rng_type

  • 要创建的生成器类型

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果GPU设置出现问题,则返回MCRAND_STATUS_INITIALIZATION_FAILED

  • 如果头文件版本与动态链接库版本不匹配,则返回MCRAND_STATUS_VERSION_MISMATCH

  • 如果rng_type的值无效,则返回MCRAND_STATUS_TYPE_ERROR

  • 如果生成器创建成功,则返回MCRAND_STATUS_SUCCESS

描述

创建一个新的类型为rng_type的主机CPU随机数生成器,并将其返回到*generator中。

rng_type的合法值为:

  • MCRAND_RNG_PSEUDO_DEFAULT

  • MCRAND_RNG_PSEUDO_XORWOW

  • MCRAND_RNG_PSEUDO_MRG32K3A

  • MCRAND_RNG_PSEUDO_MTGP32

  • MCRAND_RNG_PSEUDO_MT19937

  • MCRAND_RNG_PSEUDO_PHILOX4_32_10

  • MCRAND_RNG_QUASI_DEFAULT

  • MCRAND_RNG_QUASI_SOBOL32

当rng_type为MCRAND_RNG_PSEUDO_DEFAULT时,选择的类型为MCRAND_RNG_PSEUDO_XORWOW。当rng_type为MCRAND_RNG_QUASI_DEFAULT时,选择的类型为MCRAND_RNG_QUASI_SOBOL32。

rng_type = MCRAND_RNG_PSEUDO_XORWOW的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MRG32K3A的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MTGP32的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_MT19937的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_PSEUDO_PHILOX4_32_10的默认值为:

  • seed = 0

  • offset = 0

  • ordering = MCRAND_ORDERING_PSEUDO_DEFAULT

rng_type = MCRAND_RNG_QUASI_SOBOL32的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SOBOL64的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SCRAMBLED_SOBOL32的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

rng_type = MCRAND_RNG_QUASI_SCRAMBLED_SOBOL64的默认值为:

  • dimensions = 1

  • offset = 0

  • ordering = MCRAND_ORDERING_QUASI_DEFAULT

mcrandStatus_t MCRANDAPI mcrandCreatePoissonDistribution ( double  lambda, mcrandDiscreteDistribution_t* discrete_distribution )

构建泊松分布的直方图数组。

参数

lambda

  • 泊松分布的lambda

discrete_distribution

  • 指向设备内存中直方图的指针

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果GPU不支持双精度浮点数,则返回MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED

  • 如果GPU设置有问题,则返回MCRAND_STATUS_INITIALIZATION_FAILED

  • 如果分布指针为null,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果lambda非正或大于400,000,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果直方图生成成功,则返回MCRAND_STATUS_SUCCESS

描述

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

mcrandStatus_t MCRANDAPI mcrandDestroyDistribution ( mcrandDiscreteDistribution_t discrete_distribution )

销毁离散分布(例如泊松分布)的直方图数组。

参数

discrete_distribution

  • 指向存储直方图的设备内存的指针

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果直方图销毁成功,则返回MCRAND_STATUS_SUCCESS

描述

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

mcrandStatus_t MCRANDAPI mcrandDestroyGenerator ( mcrandGenerator_t generator )

销毁一个现有的生成器。

参数

generator

  • 待销毁的生成器

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果直方图销毁成功,则返回MCRAND_STATUS_SUCCESS

描述

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

mcrandStatus_t MCRANDAPI mcrandGenerate ( mcrandGenerator_t generator, unsigned int* outputPtr, size_t num )

生成32位伪随机数或准随机数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

num

  • 生成的32位随机值的个数

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果生成器是64位的准随机生成器(使用64位准随机生成器的mcrandGenerateLongLong()),则返回MCRAND_STATUS_TYPE_ERROR

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator在outputPtr的设备内存中生成num个32位随机数。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

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

mcrandStatus_t MCRANDAPI mcrandGenerateLogNormal ( mcrandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )

生成对数正态分布的浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

n

  • 要生成的浮点数个数

mean

  • 正态分布的均值

stddev

  • 正态分布的标准差

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数或不是伪随机生成器的2的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator将n个浮点数结果生成到设备内存的outputPtr位置。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

结果是32位浮点值,其平均值为mean,标准偏差为stddev。

通常,使用伪随机数生成器和Box-Muller变换来生成正态分布的结果,因此要求n为偶数。准随机生成器使用逆累积分布函数来保持维数。生成的正态分布结果会转换为对数正态分布。

使用mcrandCreateGenerator()创建的生成器在GPU上生成的结果与使用mcrandCreateGeneratorHost()创建的生成器在CPU上计算的结果之间可能会有轻微的数值差异。这些差异是由于超越函数计算结果的差异造成的。此外,未来版本的MCRAND可能会使用更新版本的MXMACA math库,因此不同版本的MCRAND可能会给出略有不同的数值。

mcrandStatus_t MCRANDAPI mcrandGenerateLogNormalDouble ( mcrandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )

生成对数正态分布的双精度浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的随机数,或者指向主机内存的指针,用于存储CPU生成的随机数

n

  • 要生成的双精度浮点数个数

mean

  • 正态分布的平均值

stddev

  • 正态分布的标准差

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数或不是伪随机生成器的2的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果GPU不支持双精度浮点数,则返回MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator将n个浮点数结果生成到设备内存的outputPtr位置。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

结果是64位浮点值,其平均值为mean,标准偏差为stddev。

通常,使用伪随机数生成器和Box-Muller变换来生成正态分布的结果,因此要求n为偶数。准随机生成器使用逆累积分布函数来保持维数。生成的正态分布结果会转换为对数正态分布。

使用mcrandCreateGenerator()创建的生成器在GPU上生成的结果与使用mcrandCreateGeneratorHost()创建的生成器在CPU上计算的结果之间可能会有轻微的数值差异。这些差异是由于超越函数计算结果的差异造成的。此外,未来版本的MCRAND可能会使用更新版本的MXMACA math库,因此不同版本的MCRAND可能会给出略有不同的数值。

mcrandStatus_t MCRANDAPI mcrandGenerateLongLong ( mcrandGenerator_t generator, unsigned long long* outputPtr, size_t num )

生成64位的准随机数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

num

  • 要生成的随机64位值的个数

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果生成器不是64位的准随机生成器,则返回MCRAND_STATUS_TYPE_ERROR

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator在outputPtr的设备内存中生成num个64位的结果。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

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

mcrandStatus_t MCRANDAPI mcrandGenerateNormal ( mcrandGenerator_t generator, float* outputPtr, size_t n, float  mean, float  stddev )

生成正态分布的双精度浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

n

  • 要生成的浮点数个数

mean

  • 正态分布的平均值

stddev

  • 正态分布的标准差

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数或不是伪随机生成器的2的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator将n个浮点数结果生成到设备内存的outputPtr位置。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

随机数是32位浮点值,其平均值为mean,标准偏差为stddev。

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

使用mcrandCreateGenerator()创建的生成器在GPU上生成的结果与使用mcrandCreateGeneratorHost()创建的生成器在CPU上计算的结果之间可能会有轻微的数值差异。这些差异是由于超越函数计算结果的差异造成的。此外,未来版本的MCRAND可能会使用更新版本的MXMACA math库,因此不同版本的MCRAND可能会给出略有不同的数值。

mcrandStatus_t MCRANDAPI mcrandGenerateNormalDouble ( mcrandGenerator_t generator, double* outputPtr, size_t n, double  mean, double  stddev )

生成正态分布的双精度浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

n

  • 要生成的双精度浮点数个数

mean

  • 正态分布的平均值

stddev

  • 正态分布的标准差

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数或不是伪随机生成器的2的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果GPU不支持双精度浮点数,则返回MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator将n个浮点数结果生成到设备内存的outputPtr位置。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

随机数是64位浮点值,其平均值为mean,标准偏差为stddev。

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

使用mcrandCreateGenerator()创建的生成器在GPU上生成的结果与使用mcrandCreateGeneratorHost()创建的生成器在CPU上计算的结果之间可能会有轻微的数值差异。这些差异是由于超越函数计算结果的差异造成的。此外,未来版本的MCRAND可能会使用更新版本的MXMACA math库,因此不同版本的MCRAND可能会给出略有不同的数值。

mcrandStatus_t MCRANDAPI mcrandGeneratePoisson ( mcrandGenerator_t generator, unsigned int* outputPtr, size_t n, double  lambda )

生成泊松分布的无符号整型数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

n

  • 要生成的无符号整型数个数

lambda

  • 泊松分布的lambda

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果GPU或sm不支持双精度浮点数,则返回MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED

  • 如果lambda非正或大于400,000,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator在outputPtr的设备内存中生成n个无符号整型结果。设备内存必须是预先分配的,并且必须足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

结果是泊松分布的32位无符号整型点值,使用lambda表达式。

mcrandStatus_t MCRANDAPI mcrandGenerateSeeds ( mcrandGenerator_t generator )

设置启动状态。

参数

generator

  • 要更新的生成器

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果种子成功生成,则返回MCRAND_STATUS_SUCCESS

描述

生成生成器的启动状态。该函数由生成函数自动调用,如mcrandGenerate()和mcrandGenerateUniform()。出于性能测试的目的,可以手动调用它来分离起始状态生成的时间和随机数生成的时间。

mcrandStatus_t MCRANDAPI mcrandGenerateUniform ( mcrandGenerator_t generator, float* outputPtr, size_t num )

生成均匀分布的浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

num

  • 要生成的浮点数个数

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator在outputPtr的设备内存中生成num个浮点数结果。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

结果是介于0.0f和1.0f之间的32位浮点值,包括1.0f但不包括0.0f。

mcrandStatus_t MCRANDAPI mcrandGenerateUniformDouble ( mcrandGenerator_t generator, double* outputPtr, size_t num )

生成均匀分布的双精度浮点数。

参数

generator

  • 可用的生成器

outputPtr

  • 指向设备内存的指针,用于存储MXMACA生成的结果,或者指向主机内存的指针,用于存储CPU生成的结果

num

  • 要生成的双精度浮点数个数

返回值

  • 如果无法分配内存,则返回MCRAND_STATUS_ALLOCATION_FAILED

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果先前的内核启动存在错误,则返回MCRAND_STATUS_PREEXISTING_FAILURE

  • 如果内核因某种原因启动失败,则返回MCRAND_STATUS_LAUNCH_FAILURE

  • 如果输出样本的数量不是准随机维数的倍数,则返回MCRAND_STATUS_LENGTH_NOT_MULTIPLE

  • 如果GPU不支持双精度浮点数,则返回MCRAND_STATUS_DOUBLE_PRECISION_REQUIRED

  • 如果成功生成,则返回MCRAND_STATUS_SUCCESS

描述

使用generator在outputPtr的设备内存中生成num个双精度浮点数结果。设备内存必须是预先分配的,并且足够大以容纳所有结果。启动是使用mcrandSetStream()设置的流完成的,如果没有设置流,则为空流。

结果是介于0.0和1.0之间的64位双精度浮点值,包括1.0但不包括0.0。

mcrandStatus_t MCRANDAPI mcrandGetDirectionVectors32 ( mcrandDirectionVectors32_t* vectors, mcrandDirectionVectorSet_t set )

获得用于生成32位准随机数的方向向量。

参数

vectors

  • 返回方向向量的指针地址

set

  • 一组选用的方向向量

返回值

  • 如果选择的集合无效,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果指针设置成功,则返回MCRAND_STATUS_SUCCESS

描述

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

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

set的合法值为:

  • MCRAND_DIRECTION_VECTORS_32_JOEKUO6 (20000维度)

  • MCRAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 (20000维度)

mcrandStatus_t MCRANDAPI mcrandGetDirectionVectors64 ( mcrandDirectionVectors64_t* vectors, mcrandDirectionVectorSet_t set )

获得用于生成64位准随机数的方向向量。

参数

vectors

  • 返回方向向量的指针地址

set

  • 一组选用的方向向量

返回值

  • 如果选择的集合无效,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果指针设置成功,则返回MCRAND_STATUS_SUCCESS

描述

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

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

set的合法值为:

  • MCRAND_DIRECTION_VECTORS_64_JOEKUO6 (20000维度)

  • MCRAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 (20000维度)

mcrandStatus_t MCRANDAPI mcrandGetProperty ( libraryPropertyType type, int* value )

返回mcrand属性的值。

参数

type

  • MXMACA 库属性

value

  • 请求的属性的整数值

返回值

  • 如果属性值已成功返回,则返回MCRAND_STATUS_SUCCESS

  • 如果无法识别属性类型,则返回MCRAND_STATUS_OUT_OF_RANGE

描述

value 中返回由动态链接的MCRAND库的类型描述的属性数字。

mcrandStatus_t MCRANDAPI mcrandGetScrambleConstants32 ( unsigned int** constants )

获取32位Scrambled Sobol序列的Scramble常数。

参数

constants

  • 返回Scramble常数的指针地址

返回值

如果指针设置成功,则返回MCRAND_STATUS_SUCCESS

描述

获取指向可用于生成准随机数的Scramble常数数组的指针。所得到的指针将引用位于主机内存中的无符号整型数组。

该数组包含多个维度的常量。每个维度都有一个无符号整型常量。

mcrandStatus_t MCRANDAPI mcrandGetScrambleConstants64 ( unsigned long long** constants )

获得64位Scrambled Sobol序列的Scramble常数。

参数

constants

  • 返回Scramble常数的指针地址

返回值

如果指针设置成功,则返回MCRAND_STATUS_SUCCESS

描述

获取指向可用于生成准随机数的Scramble常数数组的指针。所得到的指针将引用位于主机内存中的无符号双长整型数组。

该数组包含多个维度的常量。每个维度都有一个无符号双长整型常量。

mcrandStatus_t MCRANDAPI mcrandGetVersion ( int* version )

返回库的版本号。

参数

version

  • MCRAND 库的版本号

返回值

如果版本号成功返回,则返回MCRAND_STATUS_SUCCESS

描述

在*version中返回动态链接的mcRAND库的版本号。格式与MXMACA Runtime中的MACART_VERSION相同。唯一支持的配置是与MXMACA Runtime版本相同的MCRAND版本。

mcrandStatus_t MCRANDAPI mcrandSetGeneratorOffset ( mcrandGenerator_t generator, unsigned long long offset )

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

参数

generator

  • 待修改的生成器

offset

  • 绝对偏移位置

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果生成器偏移量设置成功,则返回MCRAND_STATUS_SUCCESS

描述

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

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

mcrandStatus_t MCRANDAPI mcrandSetGeneratorOrdering ( mcrandGenerator_t generator, mcrandOrdering_t order )

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

参数

generator

  • 待修改的生成器

order

  • 结果的排序

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果排序无效,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果生成器顺序设置成功,则返回MCRAND_STATUS_SUCCESS

描述

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

伪随机数生成器的合法排序值为:

  • MCRAND_ORDERING_PSEUDO_DEFAULT

  • MCRAND_ORDERING_PSEUDO_BEST

  • MCRAND_ORDERING_PSEUDO_SEEDED

  • MCRAND_ORDERING_PSEUDO_LEGACY

准随机数生成器的合法排序值为:

  • MCRAND_ORDERING_QUASI_DEFAULT

mcrandStatus_t MCRANDAPI mcrandSetPseudoRandomGeneratorSeed ( mcrandGenerator_t generator, unsigned long long seed )

设置伪随机数生成器的种子值。

参数

generator

  • 待修改的生成器

seed

  • 种子值

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果排序无效,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果生成器顺序设置成功,则返回MCRAND_STATUS_SUCCESS

描述

设置伪随机数生成器的种子值。 所有的种子值都是有效的。 不同的种子将产生不同的序列。 不同的种子之间往往不具有统计相关性,但某些种子对的值可能生成具有统计相关性的序列。

mcrandStatus_t MCRANDAPI mcrandSetQuasiRandomGeneratorDimensions ( mcrandGenerator_t generator, unsigned int  num_dimensions )

设置维度数量。

参数

generator

  • 待修改的生成器

num_dimensions

  • 维度数量

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果num_dimensions无效,则返回MCRAND_STATUS_OUT_OF_RANGE

  • 如果生成器不是准随机数生成器,则返回MCRAND_STATUS_TYPE_ERROR

  • 如果生成器顺序设置成功,MCRAND_STATUS_SUCCESS

描述

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

合法的num_dimensions值为1 ~ 20000。

mcrandStatus_t MCRANDAPI mcrandSetStream ( mcrandGenerator_t generator, mcStream_t stream )

为MCRAND内核启动设置当前流。

参数

generator

  • 待修改的生成器

stream

  • 要使用的数据流,空数据流则为 NULL

返回值

  • 如果生成器未创建,则返回MCRAND_STATUS_NOT_INITIALIZED

  • 如果流设置成功,则返回MCRAND_STATUS_SUCCESS

描述

为 MCRAND 内核启动设置当前数据流。在重新设置之前,所有库函数都将使用该数据流。

4.2. 设备API

4.2.1. 命名空间

命名空间mcrand_detail

4.2.2. 函数列表

__device__ unsigned int mcrand ( mcrandStateMtgp32_t* state )

从mtgp32生成器中返回32位的伪随机数。

__device__ unsigned long long mcrand ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器中返回64位的准随机数。

__device__ unsigned long long mcrand ( mcrandStateSobol64_t* state )

从Sobol64生成器中返回64位准随机数。

__device__ unsigned int mcrand ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器中返回32位的准随机数。

__device__ unsigned int mcrand ( mcrandStateSobol32_t* state )

从Sobol32生成器中返回32位的准随机数。

__device__ unsigned int mcrand ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回32位的伪随机数。

__device__ unsigned int mcrand ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回32位的伪随机数。

__device__ unsigned int mcrand ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回32位的伪随机数。

__device__ uint4 mcrand4 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回一个包含四个32位伪随机数的元组。

__host__ __forceinline__ mcrandStatus_t mcrandMakeMTGP32Constants ( const mtgp32_params_fast_t params[], mtgp32_kernel_params_t* p )

设置mtgp32生成器的常数参数

__host__ __forceinline__ mcrandStatus_t MCRANDAPI mcrandMakeMTGP32KernelState ( mcrandStateMtgp32_t* s, mtgp32_params_fast_t params[], mtgp32_kernel_params_t* k, int  n, unsigned long long seed )

设置mtgp32生成器的初始状态

__device__ void mcrand_init ( mcrandDirectionVectors64_t direction_vectors, unsigned long long scramble_c, unsigned long long offset, mcrandStateScrambledSobol64_t* state )

初始化Scrambled Sobol64生成器的状态

__device__ void mcrand_init ( mcrandDirectionVectors64_t direction_vectors, unsigned long long offset, mcrandStateSobol64_t* state )

初始化Sobol64生成器的状态

__device__ void mcrand_init ( mcrandDirectionVectors32_t direction_vectors, unsigned int  scramble_c, unsigned int  offset, mcrandStateScrambledSobol32_t* state )

初始化Scrambled Sobol32生成器的状态

__device__ void mcrand_init ( mcrandDirectionVectors32_t direction_vectors, unsigned int  offset, mcrandStateSobol32_t* state )

初始化Sobol32生成器的状态

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStateMRG32k3a_t* state )

初始化MRG32k3a生成器的状态

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStatePhilox4_32_10_t* state )

初始化Philox4_32_10生成器的状态

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStateXORWOW_t* state )

初始化XORWOW生成器的状态

__device__ float mcrand_log_normal ( mcrandStateScrambledSobol64_t* state, float  mean, float  stddev )

从Scrambled Sobol64生成器中返回一个对数正态分布的浮点数

__device__ float mcrand_log_normal ( mcrandStateSobol64_t* state, float  mean, float  stddev )

从Sobol64生成器返回一个对数正态分布的浮点数。

__device__ float mcrand_log_normal ( mcrandStateScrambledSobol32_t* state, float  mean, float  stddev )

从Scrambled Sobol32生成器返回一个对数正态分布的浮点数。

__device__ float mcrand_log_normal ( mcrandStateSobol32_t* state, float  mean, float  stddev )

从Sobol32生成器返回一个对数正态分布的浮点数。

__device__ float mcrand_log_normal ( mcrandStateMtgp32_t* state, float  mean, float  stddev )

从MTGP32生成器中返回一个对数正态分布的浮点数

__device__ float mcrand_log_normal ( mcrandStateMRG32k3a_t* state, float  mean, float  stddev )

从MRG32k3a生成器中返回一个对数正态分布的浮点数

__device__ float mcrand_log_normal ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从Philox4_32_10生成器中返回一个对数正态分布的浮点数

__device__ float mcrand_log_normal ( mcrandStateXORWOW_t* state, float  mean, float  stddev )

从XORWOW生成器返回一个对数正态分布的浮点数。

__device__ float2 mcrand_log_normal2 ( mcrandStateMRG32k3a_t* state, float  mean, float  stddev )

从MRG32k3a生成器返回两个正态分布的浮点数。

__device__ float2 mcrand_log_normal2 ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从Philox4_32_10生成器中返回两个正态分布的浮点数

__device__ float2 mcrand_log_normal2 ( mcrandStateXORWOW_t* state, float  mean, float  stddev )

从XORWOW生成器中返回两个正态分布的浮点数

__device__ double2 mcrand_log_normal2_double ( mcrandStateMRG32k3a_t* state, double  mean, double  stddev )

从MRG32k3a生成器返回两个对数正态分布的双精度浮点数。

__device__ double2 mcrand_log_normal2_double ( mcrandStatePhilox4_32_10_t* state, double  mean, double  stddev )

从Philox4_32_10生成器返回两个对数正态分布的双精度浮点数。

__device__ double2 mcrand_log_normal2_double ( mcrandStateXORWOW_t* state, double  mean, double  stddev )

从XORWOW生成器返回两个对数正态分布的双精度浮点数。

__device__ float4 mcrand_log_normal4 ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从Philox4_32_10生成器返回四个正态分布的浮点数

__device__ double mcrand_log_normal_double ( mcrandStateScrambledSobol64_t* state, double  mean, double  stddev )

从Scrambled Sobol64生成器返回一个对数正态分布的双精度浮点数

__device__ double mcrand_log_normal_double ( mcrandStateSobol64_t* state, double  mean, double  stddev )

从Sobol64生成器返回一个对数正态分布的双精度浮点数

__device__ double mcrand_log_normal_double ( mcrandStateScrambledSobol32_t* state, double  mean, double  stddev )

从Scrambled Sobol32生成器返回一个对数正态分布的双精度浮点数。

__device__ double mcrand_log_normal_double ( mcrandStateSobol32_t* state, double  mean, double  stddev )

从Sobol32生成器返回一个对数正态分布的双精度浮点数。

__device__ double mcrand_log_normal_double ( mcrandStateMtgp32_t* state, double  mean, double  stddev )

从MTGP32生成器返回一个对数正态分布的双精度浮点数。

__device__ double mcrand_log_normal_double ( mcrandStateMRG32k3a_t* state, double  mean, double  stddev )

从MRG32k3a生成器返回一个对数正态分布的双精度浮点数。

__device__ double mcrand_log_normal_double ( mcrandStatePhilox4_32_10_t* state, double  mean, double  stddev )

从Philox4_32_10生成器返回一个对数正态分布的双精度浮点数。

__device__ double mcrand_log_normal_double ( mcrandStateXORWOW_t* state, double  mean, double  stddev )

从XORWOW生成器返回一个对数正态分布的双精度浮点数。

__device__ float mcrand_mtgp32_single ( mcrandStateMtgp32_t* state )

从mtgp32生成器返回一个均匀分布的浮点数。

__device__ float mcrand_mtgp32_single_specific ( mcrandStateMtgp32_t* state, unsigned char  index, unsigned char  n )

从mtgp32生成器的特定位置返回一个均匀分布的浮点数。

__device__ unsigned int mcrand_mtgp32_specific ( mcrandStateMtgp32_t* state, unsigned char  index, unsigned char  n )

从mtgp32生成器的特定位置返回一个32位伪随机数。

__device__ float mcrand_normal ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStateSobol64_t* state )

从Sobol64生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStateSobol32_t* state )

从Sobol32生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStateMtgp32_t* state )

从MTGP32生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回一个正态分布的浮点数。

__device__ float mcrand_normal ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回一个正态分布浮点数。

__device__ float mcrand_normal ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回一个正态分布的浮点数。

__device__ float2 mcrand_normal2 ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回两个正态分布的浮点数。

__device__ float2 mcrand_normal2 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回两个正态分布的浮点数。

__device__ float2 mcrand_normal2 ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回两个正态分布的浮点数。

__device__ double2 mcrand_normal2_double ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回两个正态分布的双精度浮点数。

__device__ double2 mcrand_normal2_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回两个正态分布的双精度浮点数。

__device__ double2 mcrand_normal2_double ( mcrandStateXORWOW_t* state )

从XORWOW生成器中返回两个正态分布的双精度浮点数。

__device__ float4 mcrand_normal4 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回4个正态分布的浮点数。

__device__ double mcrand_normal_double ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateSobol64_t* state )

从Sobol64生成器返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateSobol32_t* state )

从Sobol32生成器返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateMtgp32_t* state )

从MTGP32生成器中返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器中返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器中返回一个正态分布的双精度浮点数。

__device__ double mcrand_normal_double ( mcrandStateXORWOW_t* state )

从XORWOW生成器中返回一个正态分布的双精度浮点数。

__device__ unsigned int mcrand_poisson ( mcrandStateScrambledSobol64_t* state, double  lambda )

从Scrambled Sobol64生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateSobol64_t* state, double  lambda )

从Sobol64生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateScrambledSobol32_t* state, double  lambda )

从Scrambled Sobol32生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateSobol32_t* state, double  lambda )

从Sobol32生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateMtgp32_t* state, double  lambda )

从MTGP32生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateMRG32k3a_t* state, double  lambda )

从MRG32k3A生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStatePhilox4_32_10_t* state, double  lambda )

从Philox4_32_10生成器中返回一个泊松分布的无符号整数。

__device__ unsigned int mcrand_poisson ( mcrandStateXORWOW_t* state, double  lambda )

从XORWOW生成器中返回一个泊松分布的无符号整数。

__device__ uint4 mcrand_poisson4 ( mcrandStatePhilox4_32_10_t* state, double  lambda )

从Philox4_32_10生成器中返回四个泊松分布的无符号整数。

__device__ float mcrand_uniform ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateSobol64_t* state )

从Sobol64生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateSobol32_t* state )

从Sobol32生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateMtgp32_t* state )

从MTGP32生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器中返回一个均匀分布的浮点数。

__device__ float mcrand_uniform ( mcrandStateXORWOW_t* state )

从XORWOW生成器中返回一个均匀分布的浮点数。

__device__ double2 mcrand_uniform2_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器中返回一个均匀分布的元组,其中包含两个双精度浮点数。

__device__ float4 mcrand_uniform4 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器中返回一个均匀分布的元组,包含四个浮点数。

__device__ double mcrand_uniform_double ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateSobol64_t* state )

从Sobol64生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateSobol32_t* state )

从Sobol32生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateMtgp32_t* state )

从MTGP32生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器中返回一个均匀分布的双精度浮点数。

__device__ double mcrand_uniform_double ( mcrandStateXORWOW_t* state )

从XORWOW生成器中返回一个均匀分布的双精度浮点数。

template < typename T >
__device__ MCRAND_STD::enable_if < MCRAND_STD::is_same &lt; mcrandStateSobol64_t* > ::type skipahead ( unsigned long long n, T state )

更新Sobol64生成器的状态以跳过n个元素。

template < typename T >
__device__ MCRAND_STD::enable_if < MCRAND_STD::is_same &lt; mcrandStateSobol32_t* > ::type skipahead ( unsigned int  n, T state )

更新Sobol32生成器的状态以跳过n个元素。

__device__ void skipahead ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新MRG32k3a生成器的状态以跳过n个元素。

__device__ void skipahead ( unsigned long long n, mcrandStatePhilox4_32_10_t* state )

更新Philox4_32_10生成器的状态以跳过n个元素。

__device__ void skipahead ( unsigned long long n, mcrandStateXORWOW_t* state )

更新XORWOW生成器的状态以跳过n个元素。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新MRG32k3a生成器的状态以跳过n个序列。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStatePhilox4_32_10_t* state )

更新Philox4_32_10生成器的状态以跳过n个序列。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStateXORWOW_t* state )

更新XORWOW生成器的状态以跳过n个序列。

__device__ void skipahead_subsequence ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新MRG32k3a生成器的状态以跳过n个序列。

4.2.3. 函数

__device__ unsigned int mcrand ( mcrandStateMtgp32_t* state )

从mtgp32生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针。

返回值

32位伪随机数作为无符号整数返回,所有位均有效。

描述

从state状态的MTGP32生成器中返回32位伪随机数,生成器的位置按块中的线程数递增。注意,块中的线程数不能超过 256。

__device__ unsigned long long mcrand ( mcrandStateScrambledSobol64_t* state )

从Sobol64生成器返回64位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

64位准随机数作为无符号双长整型返回,所有位均有效。

描述

从state状态的Scrambled Sobol32生成器中返回64位准随机数,生成器的位置递增一位。

__device__ unsigned long long mcrand ( mcrandStateSobol64_t* state )

从Sobol64生成器返回64位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

64位准随机数作为无符号长整型返回,所有位均有效。

描述

从state状态的Sobol64生成器中返回64位准随机数,生成器的位置递增一位。

__device__ unsigned int mcrand ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

32位准随机数作为无符号整数返回,所有位均有效。

描述

从state状态的Scrambled Sobol32生成器中返回32位准随机数,生成器的位置递增一位。

__device__ unsigned int mcrand ( mcrandStateSobol32_t* state )

从Sobol32生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

32位准随机数作为无符号整数返回,所有位均有效。

描述

从state状态的Sobol32生成器中返回32位准随机数,生成器的位置递增一位。

__device__ unsigned int mcrand ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

32位伪随机数作为无符号整数返回,所有位均有效。

描述

从state状态的 MRG32k3a 生成器中返回32位伪随机数,生成器的位置递增一位。

__device__ unsigned int mcrand ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

32位伪随机数作为无符号整数返回,所有位均有效。

描述

从state状态的 Philox4_32_10 生成器中返回32位伪随机数,生成器的位置递增一位。

__device__ unsigned int mcrand ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回32位伪随机数。

参数

state

  • 指向要更新状态的指针

返回值

32位伪随机数作为无符号整数返回,所有位均有效。

描述

从state状态的 XORWOW 生成器返回32位伪随机数,生成器的位置递增一位。

__device__ uint4 mcrand4 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回4个32位伪随机数的元组。

参数

state

  • 指向要更新状态的指针

返回值

128位伪随机数作为uint4返回,所有位均有效。

描述

从state状态的Philox4_32_10生成器中返回128位伪随机数,生成器的位置递增四位。

__host__ __forceinline__ mcrandStatus_t mcrandMakeMTGP32Constants ( const mtgp32_params_fast_t params[], mtgp32_kernel_params_t* p )

为 MTGP32 生成器设置常量参数。

参数

params

  • 指向主机内存中mtgp32_params_fast_t类型的数组的指针。

p

  • 指向设备内存中为mtgp32_kernel_params_t的结构体的指针。

返回值

  • 如果主机内存无法分配,则返回MCRAND_STATUS_ALLOCATION_FAILED;

  • 如果复制到设备内存时失败,则返回MCRAND_STATUS_INITIALIZATION_FAILED;

  • 否则返回MCRAND_STATUS_SUCCESS。

描述

这个主机端辅助函数重新组织了 MCRAND_NUM_MTGP32_PARAMS 组生成器参数,供内核函数使用,并将结果复制到设备内存中的指定位置。

__host__ __forceinline__ mcrandStatus_t MCRANDAPI mcrandMakeMTGP32KernelState ( mcrandStateMtgp32_t* s, mtgp32_params_fast_t params[], mtgp32_kernel_params_t* k, int  n, unsigned long long seed )

为 mtgp32 生成器设置初始状态。

参数

s

  • 指向设备内存中状态数组的指针

params

  • 指向主机内存中mtgp32_params_fast_t类型的数组的指针

k

  • 指向设备内存中mtgp32_kernel_params_t类型的结构体的指针

n

  • 要初始化的参数集/状态的数量。

seed

  • 种子值

返回值

  • 如果主机内存状态无法分配,则返回MCRAND_STATUS_ALLOCATION_FAILED;

  • 如果复制到设备内存时失败,则返回MCRAND_STATUS_INITIALIZATION_FAILED;

  • 否则返回MCRAND_STATUS_SUCCESS。

描述

这个主机端的辅助函数用于初始化MTGP32生成器的多个状态(每个状态对应一个参数集)。为了实现这一点,它在主机内存中分配了一个状态数组,然后初始化该数组,并将结果复制到设备内存。

__device__ void mcrand_init ( mcrandDirectionVectors64_t direction_vectors, unsigned long long scramble_c, unsigned long long offset, mcrandStateScrambledSobol64_t* state )

初始化Scrambled Sobol64生成器的状态。

参数

direction_vectors

  • 指向64个无符号双长整型数组的指针,这些长度表示所需维度的方向向量

scramble_c

  • 用于Scrambled Sobol64序列的常量

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的方向向量和偏移量初始化处于state中的 Sobol64 状态。

方向向量是一个指向64个无符号双长整型数组的设备指针。任意输入的偏移量值都是合法的。

__device__ void mcrand_init ( mcrandDirectionVectors64_t direction_vectors, unsigned long long offset, mcrandStateSobol64_t* state )

初始化 Sobol64 状态。

参数

direction_vectors

  • 指向64个无符号双长整型的数组的指针。这些长度表示所需维度的方向向量。

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的方向向量和偏移量初始化处于state中的 Sobol64 状态。

方向向量是一个指向64个无符号双长整型数组的设备指针。任意输入的偏移量值都是合法的。

__device__ void mcrand_init ( mcrandDirectionVectors32_t direction_vectors, unsigned int  scramble_c, unsigned int  offset, mcrandStateScrambledSobol32_t* state )

初始化Scrambled Sobol32生成器的状态

参数

direction_vectors

  • 指向表示所需维度的方向向量的32个无符号整型数组的指针

scramble_c

  • 用于Scrambled Sobol32序列的常量

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的方向向量和偏移量初始化处于state中的 Sobol32 状态。

方向向量是一个指向64个无符号双长整型数组的设备指针。任意输入的偏移量值都是合法的。

__device__ void mcrand_init ( mcrandDirectionVectors32_t direction_vectors, unsigned int  offset, mcrandStateSobol32_t* state )

初始化 Sobol32 状态。

参数

direction_vectors

  • 指向表示所需维度的方向向量的32个无符号整数的数组的指针

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的方向向量和偏移量初始化处于state中的 Sobol32 状态。

方向向量是一个指向64个无符号双长整型数组的设备指针。任意输入的偏移量值都是合法的。

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStateMRG32k3a_t* state )

初始化 MRG32k3a 状态。

参数

seed

  • 用作种子的任意位

subsequence

  • 开始的子序列

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的种子、子序列和偏移量初始化处于state中的 MRG32k3a 的状态。

种子、子序列和偏移量的所有输入值都是合法的。将子序列截断为51位以避免进入下一个序列。

种子值为 0 时,则将状态设置为 MRG32k3a 算法原始发布版本的值。

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStatePhilox4_32_10_t* state )

初始化 Philox4_32_10 状态。

参数

seed

  • 用作种子的任意位

subsequence

  • 开始的子序列

offset

  • 进入子序列的绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的种子、 p子序列和偏移量初始化处于state中的 Philox4_32_10状态。

种子、子序列和偏移量的所有输入值都是合法的。种子的264个可能值中的每一个都选择一个长度为2130的独立序列。序列的前266 * subsequence + offset.个值被跳过。也就是说,子序列的长度为266。

__device__ void mcrand_init ( unsigned long long seed, unsigned long long subsequence, unsigned long long offset, mcrandStateXORWOW_t* state )

初始化 XORWOW 状态。

参数

seed

  • 用作种子的任意位

subsequence

  • 开始的子序列

offset

  • 按顺序绝对偏移量

state

  • 要初始化的状态指针

描述

使用给定的种子、子序列和偏移量初始化处于state中的 XORWOW 状态。

输入任意种子、子序列以及偏移量的值都是合法的。子序列和偏移值越大,需要的计算量就越大,因此完成时间也就越长。

如果种子值为0,则将状态设置为原始发布的 xorwow 算法的值。

__device__ float mcrand_log_normal ( mcrandStateScrambledSobol64_t* state, float  mean, float  stddev )

从Scrambled Sobol64 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的Scrambled Sobol64 生成器中返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

实现使用分位函数生成正态分布的结果,然后将结果转换为对数正态分布。

__device__ float mcrand_log_normal ( mcrandStateSobol64_t* state, float  mean, float  stddev )

从 Sobol64 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 Sobol64 生成器中返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

实现使用分位函数生成正态分布的结果,然后将结果转换为对数正态分布。

__device__ float mcrand_log_normal ( mcrandStateScrambledSobol32_t* state, float  mean, float  stddev )

从Scrambled Sobol32 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的Scrambled Sobol32 生成器返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

该实现使用分位函数生成一个正态分布的结果,然后将结果转换为对数正态分布。

__device__ float mcrand_log_normal ( mcrandStateSobol32_t* state, float  mean, float  stddev )

从 Sobol32 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 Sobol32 生成器返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

该实现使用分位函数生成一个正态分布的结果,然后将结果转换为对数正态分布。

__device__ float mcrand_log_normal ( mcrandStateMtgp32_t* state, float  mean, float  stddev )

从 MTGP32 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 MTGP32 生成器返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

该实现使用分位函数生成一个正态分布的结果,然后将结果转换为对数正态分布。

__device__ float mcrand_log_normal ( mcrandStateMRG32k3a_t* state, float  mean, float  stddev )

从 MRG32k3a 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 MRG32k3a 生成器返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

实现过程中使用了 Box-Muller 变换生成的两个正态分布结果,将它们转换为对数正态分布,然后一次返回一个。有关一次返回两个结果的更高效的版本,请参见 mcrand_log_normal2()。

__device__ float mcrand_log_normal ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从 Philox4_32_1 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 Philox4_32_1 生成器中返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

实现过程使用了 Box-Muller 变换生成的两个正态分布结果,将它们转换为对数正态分布,然后一次返回一个。有关一次返回两个结果的更高效的版本,请参见 mcrand_log_normal2()。

__device__ float mcrand_log_normal ( mcrandStateXORWOW_t* state, float  mean, float  stddev )

从 XORWOW 生成器返回一个对数正态分布的浮点数。

参数

state

  • 要更新的状态指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布浮点数

描述

从state状态的 XORWOW 生成器中返回一个从正态分布派生,均值为mean,标准差为stddev的对数正态分布浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,将它们转换为对数正态分布,并逐个返回。 如果希望以更高效的方式同时返回两个结果,请参见 mcrand_log_normal2() 函数。

__device__ float2 mcrand_log_normal2 ( mcrandStateMRG32k3a_t* state, float  mean, float  stddev )

从 MRG32k3a 生成器返回两个正态分布的浮点数。

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布float2

描述

从state状态的MRG32k3a生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ float2 mcrand_log_normal2 ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从Philox4_32_10生成器返回两个正态分布的浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布float2

描述

从state状态的Philox4_32_10生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ float2 mcrand_log_normal2 ( mcrandStateXORWOW_t* state, float  mean, float  stddev )

从XORWOW生成器返回两个正态分布的浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布

描述

从state状态的XORWOW生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ double2 mcrand_log_normal2_double ( mcrandStateMRG32k3a_t* state, double  mean, double  stddev )

从MRG32k3a生成器返回两个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布double2

描述

从state状态的MRG32k3a生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布双精度数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ double2 mcrand_log_normal2_double ( mcrandStatePhilox4_32_10_t* state, double  mean, double  stddev )

从Philox4_32_10生成器返回两个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布double2

描述

从state状态的Philox4_32_10生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布双精度数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ double2 mcrand_log_normal2_double ( mcrandStateXORWOW_t* state, double  mean, double  stddev )

从XORWOW生成器返回两个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布double2

描述

从state状态的XORWOW生成器中返回两个由均值为mean,标准差为stddev的正态分布派生的对数正态分布双精度数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ float4 mcrand_log_normal4 ( mcrandStatePhilox4_32_10_t* state, float  mean, float  stddev )

从Philox4_32_10生成器返回4个正态分布的浮点数。

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

由均值为mean,标准差为stddev的正态分布派生的对数正态分布float4

描述

从state状态的MRG32k3a生成器中四个由均值为mean,标准差为stddev的正态分布派生的对数正态分布浮点数,生成器的位置递增四位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并将其转换为对数正态分布。

__device__ double mcrand_log_normal_double ( mcrandStateScrambledSobol64_t* state, double  mean, double  stddev )

从Scrambled Sobol64生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的Scrambled Sobol64生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_log_normal_double ( mcrandStateSobol64_t* state, double  mean, double  stddev )

从Sobol64生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的Sobol64生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_log_normal_double ( mcrandStateScrambledSobol32_t* state, double  mean, double  stddev )

从Scrambled Sobol32生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的Scrambled Sobol32生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果,并将其转换为对数正态分布。

__device__ double mcrand_log_normal_double ( mcrandStateSobol32_t* state, double  mean, double  stddev )

从Sobol32生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的Sobol32生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果,并将其转换为对数正态分布。

__device__ double mcrand_log_normal_double ( mcrandStateMtgp32_t* state, double  mean, double  stddev )

从MTGP32生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的MTGP32生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果,并将其转换为对数正态分布。

__device__ double mcrand_log_normal_double ( mcrandStateMRG32k3a_t* state, double  mean, double  stddev )

从MRG32k3a生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的MRG32k3a生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,将其转换为对数正态分布,并逐个返回。 如果希望以更高效的方式同时返回两个结果,请参见mcrand_log_normal2_double()函数。

__device__ double mcrand_log_normal_double ( mcrandStatePhilox4_32_10_t* state, double  mean, double  stddev )

从Philox4_32_10生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的Philox4_32_10生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,将它们转换为对数正态分布,并逐个返回。 如果希望以更高效的方式同时返回两个结果,请参见mcrand_log_normal2_double()函数。

__device__ double mcrand_log_normal_double ( mcrandStateXORWOW_t* state, double  mean, double  stddev )

从XORWOW生成器返回一个对数正态分布的双精度浮点数

参数

state

  • 指向要更新状态的指针

mean

  • 相关正态分布的均值

stddev

  • 相关正态分布的标准差

返回值

均值为mean,标准差为stddev的对数正态分布双精度浮点数

描述

从state状态的XORWOW生成器中返回一个由均值为mean,标准差为stddev正态分布派生的对数正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,将它们转换为对数正态分布,并逐个返回。 如果希望以更高效的方式同时返回两个结果,请参见mcrand_log_normal2_double()函数。

__device__ float mcrand_mtgp32_single ( mcrandStateMtgp32_t* state )

从mtgp32生成器返回一个均匀分布的浮点数。

参数

state

  • 指向要更新状态的指针

返回值

均匀分布在0.0f到1.0f之间的浮点数

描述

从state状态的mtgp32生成器中返回一个在0.0f和1.0f之间均匀分布的浮点数,生成器的位置递增一位。输出范围不包括0.0f但包括1.0f。不会返回非规格化的浮点数。

注意:提供这种备选的均匀浮点数派生方式是为了与源代码保持完整性。

__device__ float mcrand_mtgp32_single_specific ( mcrandStateMtgp32_t* state, unsigned char  index, unsigned char  n )

从mtgp32生成器的特定位置返回一个均匀分布的浮点数。

参数

state

  • 指向要更新状态的指针

index

  • 此状态下要提取和更新的位置索引(0..255)

n

  • 此状态下要通过此次调用更新的位置总数

返回值

均匀分布在0.0f到1.0f之间的浮点数

描述

从state状态的mtgp32生成器的位置索引处返回一个在0.0f和1.0f之间均匀分布的浮点数,并将生成器增加n个位置,其中n必须为线程块在此次调用中的状态下更新的位置总数。输出范围不包括0.0f但包括1.0f。不会返回非规格化的浮点数。

备注

  • 线程索引必须在0到n - 1范围内。更新的位置数不能超过256。一个线程块可以更新多个状态,但一个给定状态不能由多个线程块更新。

  • 提供这种备选的均匀浮点数派生方式是为了与源代码保持完整性。

__device__ unsigned int mcrand_mtgp32_specific ( mcrandStateMtgp32_t* state, unsigned char  index, unsigned char  n )

从mtgp32生成器的特定位置返回32位的伪随机数。

参数

state

  • 指向要更新状态的指针

index

  • 此状态下要提取和更新的位置索引(0..255)

n

  • 此状态下要通过此次调用更新的位置总数

返回值

作为无符号整数的32位伪随机数,所有位都可用。

描述

从state状态的mtgp32生成器的位置索引处返回32位的伪随机数,并将生成器递增n个位置,其中n必须为线程块在此调用中的状态下更新的位置总数。

备注

线程索引必须在0到n - 1范围内。更新的位置数不能超过256。一个线程块可以更新多个状态,但是一个给定的状态不能同时被多个线程块更新。

__device__ float mcrand_normal ( mcrandStateScrambledSobol64_t* state )

从一个Scrambled Sobol64生成器返回一个正态分布的浮点数

参数

state

  • 指向要更新状态的指针

返回值

均值为0.0f,标准差为1.0f的正态分布浮点数

描述

从state状态的Scrambled Sobol64生成器中返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ float mcrand_normal ( mcrandStateSobol64_t* state )

从一个Sobol64生成器返回一个正态分布的浮点数

参数

state

  • 指向要更新状态的指针

返回值

均值为0.0f,标准差为1.0f的正态分布浮点数

描述

从state状态的Sobol64生成器中返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ float mcrand_normal ( mcrandStateScrambledSobol32_t* state )

从一个Scrambled Sobol32生成器返回一个正态分布的浮点数

参数

state

  • 指向要更新状态的指针

返回值

均值为0.0f,标准差为1.0f的正态分布浮点数

描述

从state状态的Scrambled Sobol32生成器中返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ float mcrand_normal ( mcrandStateSobol32_t* state )

从Sobol32生成器返回一个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

平均值为 0.0f,标准差为 1.0f 的正态分布浮点数

描述

从state状态的Sobol32生成器中返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ float mcrand_normal ( mcrandStateMtgp32_t* state )

从MTGP32生成器返回一个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

平均值为 0.0f,标准差为 1.0f 的正态分布浮点数

描述

从state状态的MTGP32生成器返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ float mcrand_normal ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回一个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

平均值为 0.0f,标准差为 1.0f 的正态分布浮点数

描述

从state状态的MRG32k3a生成器返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ float mcrand_normal ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回一个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

平均值为 0.0f,标准差为 1.0f 的正态分布浮点数

描述

从state状态的Philox4_32_10生成器返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ float mcrand_normal ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回一个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

平均值为 0.0f,标准差为 1.0f 的正态分布浮点数

描述

从state状态的XORWOW生成器返回一个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ float2 mcrand_normal2 ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回两个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布的float2类型浮点数,其中每个元素都来自均值为0.0f,标准差为1.0f的分布

描述

从state状态的MRG32k3a生成器返回两个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ float2 mcrand_normal2 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回两个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布float2类型浮点数,其中每个元素都来自均值为0.0f,标准差为1.0f的分布

描述

从state状态的Philox4_32_10生成器返回两个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ float2 mcrand_normal2 ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回两个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布float2类型浮点数,其中每个元素都来自均值为0.0f,标准差为1.0f的分布

描述

从state状态的XORWOW生成器返回两个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ double2 mcrand_normal2_double ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回两个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布double2类型双精度浮点数,其中每个元素都来自均值为0.0,标准差为1.0的分布

描述

从state状态的MRG32k3a生成器返回两个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ double2 mcrand_normal2_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回两个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布double2类型双精度浮点数,其中每个元素都来自均值为0.0,标准差为1.0的分布

描述

从state状态的Philox4_32_10生成器返回两个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ double2 mcrand_normal2_double ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回两个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布double2类型双精度浮点数,其中每个元素都来自均值为0.0,标准差为1.0的分布

描述

从state状态的XORWOW生成器返回两个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增两位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ float4 mcrand_normal4 ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回四个正态分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

正态分布float2类型浮点数,其中每个元素都来自均值为0.0f,标准差为1.0f的分布

描述

从state状态的Philox4_32_10生成器返回四个均值为0.0f,标准差为1.0f的正态分布浮点数,生成器的位置递增四位。

该实现使用Box-Muller变换生成两个符合正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的Scrambled Sobol64生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateSobol64_t* state )

从Sobol64生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的Scrambled Sobol64生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的Scrambled Sobol32生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateSobol32_t* state )

从Sobol32生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的Sobol32生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateMtgp32_t* state )

从MTGP32生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的MTGP32生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用逆累积分布函数来生成正态分布的结果。

__device__ double mcrand_normal_double ( mcrandStateMRG32k3a_t* state )

从MRG32k3a生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的XORWOW生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ double mcrand_normal_double ( mcrandStatePhilox4_32_10_t* state )

从Philox4_32_10生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的Philox4_32_10生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ double mcrand_normal_double ( mcrandStateXORWOW_t* state )

从XORWOW生成器返回一个正态分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

均值为 0.0,标准差为 1.0 的正态分布双精度浮点数

描述

从state状态的XORWOW生成器返回一个均值为0.0,标准差为1.0的正态分布双精度浮点数,生成器的位置递增一位。

该实现使用Box-Muller变换生成两个符合正态分布的结果,并逐个返回。如果希望以更高效的方式同时返回两个结果,请参见mcrand_normal2()函数。

__device__ unsigned int mcrand_poisson ( mcrandStateScrambledSobol64_t* state, double  lambda )

从Scrambled Sobol64生成器返回一个泊松分布的无符号整型数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的Scrambled Sobol64生成器中使用 lambda 的值为 lambda 的泊松分布返回单个无符号整型,生成器的位置递增一位。

__device__ unsigned int mcrand_poisson ( mcrandStateSobol64_t* state, double  lambda )

从Sobol64生成器返回一个泊松分布的无符号整型数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的Sobol64生成器中使用 lambda 的值为 lambda 的泊松分布返回单个无符号整型,生成器的位置递增一位。

__device__ unsigned int mcrand_poisson ( mcrandStateScrambledSobol32_t* state, double  lambda )

从Scrambled Sobol32生成器返回一个泊松分布的无符号整型数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的Scrambled Sobol32生成器中使用 lambda 的值为 lambda 的泊松分布返回单个无符号整型,生成器的位置递增一位。

__device__ unsigned int mcrand_poisson ( mcrandStateSobol32_t* state, double  lambda )

从 Sobol32 生成器返回泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 Sobol32 生成器中使用 lambda 的值为 lambda 的泊松分布返回单个无符号整型,生成器的位置递增一位。

__device__ unsigned int mcrand_poisson ( mcrandStateMtgp32_t* state, double  lambda )

从 MTGP32 生成器返回泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 MTGP32 生成器中返回 lambda 的值为 lambda 的泊松分布的单个整型,生成器的位置递增一位。

__device__ unsigned int mcrand_poisson ( mcrandStateMRG32k3a_t* state, double  lambda )

从 MRG32k3A 生成器返回泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 MRG32k3a 生成器返回一个lambda的值为lambda的泊松分布无符号整数,并根据所使用的算法,以可变的数量递增生成器的位置。

__device__ unsigned int mcrand_poisson ( mcrandStatePhilox4_32_10_t* state, double  lambda )

从 Philox4_32_10 生成器返回泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 Philox4_32_10 生成器中返回一个lambda的值为lambda的泊松分布无符号整数,并根据所使用的算法,以可变的数量递增生成器的位置。

__device__ unsigned int mcrand_poisson ( mcrandStateXORWOW_t* state, double  lambda )

从 XORWOW 生成器返回泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 XORWOW 生成器中返回一个lambda的值为lambda的泊松分布无符号整数,并根据所使用的算法,以可变的数量递增生成器的位置。

__device__ uint4 mcrand_poisson4 ( mcrandStatePhilox4_32_10_t* state, double  lambda )

从 Philox4_32_10 生成器返回四个泊松分布的无符号整数。

参数

state

  • 指向要更新的状态的指针

lambda

  • 泊松分布的Lambda

返回值

lambda的值为lambda的泊松分布无符号整数

描述

从state状态的 Philox4_32_10 生成器返回四个lambda的值为lambda的泊松分布无符号整数,并根据所使用的算法,以可变的数量递增生成器的位置。

__device__ float mcrand_uniform ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64 生成器返回一个均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的Scrambled Sobol64生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用了对 mcrand() 的单次调用。

__device__ float mcrand_uniform ( mcrandStateSobol64_t* state )

从 Sobol64 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的Sobol64生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用了对 mcrand() 的单次调用。

__device__ float mcrand_uniform ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的Scrambled Sobol32生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用了对 mcrand() 的单次调用。

__device__ float mcrand_uniform ( mcrandStateSobol32_t* state )

从 Sobol32 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的Sobol32生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用了对 mcrand() 的单次调用。

__device__ float mcrand_uniform ( mcrandStateMtgp32_t* state )

从 MTGP32 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的MTGP32生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

__device__ float mcrand_uniform ( mcrandStatePhilox4_32_10_t* state )

从 Philox4_32_10 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 到 1.0f 之间均匀分布的浮点数

描述

从state状态的Philox4_32_10生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

__device__ float mcrand_uniform ( mcrandStateMRG32k3a_t* state )

从 MRG32k3a 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的MRG32k3a生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现返回最多23位尾数,并带有最小返回值

__device__ float mcrand_uniform ( mcrandStateXORWOW_t* state )

从 XORWOW 生成器返回均匀分布的浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

介于 0.0f 和 1.0f 之间的均匀分布的浮点数

描述

从state状态的XORWOW生成器返回一个分布在0.0f到1.0f之间的均匀浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现可以使用任意数量的 mcrand() 调用来获取足够的随机位来创建返回值。 当前的实现使用一次调用。

__device__ double2 mcrand_uniform2_double ( mcrandStatePhilox4_32_10_t* state )

从 Philox4_32_10 生成器返回包含 2 个双精度浮点数的均匀分布元组。

参数

state

  • 指向要更新的状态的指针

返回值

2 个均匀分布在 0.0f 和 1.0f 之间的双精度浮点数

描述

从state状态的 Philox4_32_10 生成器返回 0.0f 和 1.0f 之间均匀分布的 2 个双精度浮点数 (double4),将生成器的位置递增四位。输出范围不包括 0.0f,但包括 1.0f。不返回非标准化的浮点数输出。

__device__ float4 mcrand_uniform4 ( mcrandStatePhilox4_32_10_t* state )

从 Philox4_32_10 生成器返回包含 4 个浮点数的均匀分布元组。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 到 1.0f 之间均匀分布的浮点数

描述

从state状态的 Philox4_32_10 生成器返回 0.0f 和 1.0f 之间均匀分布的 4 个浮点数,将生成器的位置递增四位。输出范围不包括 0.0f,但包括 1.0f。不返回非标准化的浮点数输出。

__device__ double mcrand_uniform_double ( mcrandStateScrambledSobol64_t* state )

从Scrambled Sobol64 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的打乱后的Sobol64生成器返回一个在0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用对 mcrand() 的单次调用以保持序列的准随机属性。

__device__ double mcrand_uniform_double ( mcrandStateSobol64_t* state )

从 Sobol64 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的Sobol64生成器返回一个在0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用对 mcrand() 的单次调用以保持序列的准随机属性。

__device__ double mcrand_uniform_double ( mcrandStateScrambledSobol32_t* state )

从Scrambled Sobol32 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的打乱后的Sobol32生成器返回一个在0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用对 mcrand() 的单次调用以保持序列的准随机属性。

请注意,该实现仅使用 32 个随机位来生成单个双精度值。

__device__ double mcrand_uniform_double ( mcrandStateSobol32_t* state )

从 Sobol32 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的Sobol32生成器返回一个0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现保证使用对 mcrand() 的单次调用以保持序列的准随机属性。

请注意,该实现仅使用 32 个随机位来生成单个双精度值。

__device__ double mcrand_uniform_double ( mcrandStatePhilox4_32_10_t* state )

从 Philox4_32_10 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的Philox4_32_10生成器返回一个在0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

请注意,该实现仅使用 32 个随机位来生成单个双精度值。

建议使用 mcrand_uniform2_double() 来生成更高质量的均匀分布双精度值。

__device__ double mcrand_uniform_double ( mcrandStateMtgp32_t* state )

从 MTGP32 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的MTGP32生成器返回一个介于0.0f和1.0f之间的均匀分布双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

请注意,该实现仅使用 32 个随机位来生成单个双精度值。

__device__ double mcrand_uniform_double ( mcrandStateMRG32k3a_t* state )

从 MRG32k3a 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的MRG32k3a生成器返回一个介于0.0f和1.0f之间的均匀分布双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

请注意,如 L’Ecuyer 的开创性论文中所述,该实现最多返回 32 个随机尾数位。

__device__ double mcrand_uniform_double ( mcrandStateXORWOW_t* state )

从 XORWOW 生成器返回均匀分布的双精度浮点数。

参数

state

  • 指向要更新的状态的指针

返回值

0.0f 和 1.0f 之间均匀分布的双精度浮点数

描述

从state状态的XORWOW生成器返回一个在0.0f到1.0f之间的均匀分布的双精度浮点数,生成器的位置递增一位。输出范围不包括0.0f,但包括1.0f。不返回非标准化的浮点数输出。

该实现可以使用任意数量的 mcrand() 调用来获取足够的随机位来创建返回值。 当前的实现仅使用两次调用。

template < typename T >
__device__ MCRAND_STD::enable_if < MCRAND_STD::is_same &lt; mcrandStateSobol64_t* > ::type skipahead ( unsigned long long n, T state ) [inline]

更新 Sobol64 状态,以跳过 n 个元素。

参数

n

  • 要跳过的元素数

state

  • 指向要更新的状态的指针

描述

更新state中的 Sobol64 状态,以跳过 n 个元素。

所有 n 值均有效。

template < typename T >
__device__ MCRAND_STD::enable_if < MCRAND_STD::is_same &lt; mcrandStateSobol32_t* > ::type skipahead ( unsigned int  n, T state ) [inline]

更新 Sobol32 状态,以跳过 n 个元素。

参数

n

  • 要跳过的元素数

state

  • 指向要更新的状态的指针

描述

更新state中的 Sobol32 状态,以跳过 n 个元素。

所有 n 值均有效。

__device__ void skipahead ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新 MRG32k3a 状态,以跳过 n 个元素。

参数

n

  • 要跳过的元素数

state

  • 指向要更新的状态的指针

描述

更新state中的MRG32k3a状态以跳过n个元素。

所有 n 值均有效。 较大的数值需要更多计算,因此需要更多时间来完成。

__device__ void skipahead ( unsigned long long n, mcrandStatePhilox4_32_10_t* state )

更新 Philox4_32_10 状态,以跳过 n 个元素。

参数

n

  • 要跳过的元素数

state

  • 指向要更新的状态的指针

描述

更新state中的Philox4_32_10状态以跳过n个元素。

所有 n 值均有效。

__device__ void skipahead ( unsigned long long n, mcrandStateXORWOW_t* state )

更新 XORWOW 状态,跳过 n 个元素。

参数

n

  • 要跳过的元素数

state

  • 指向要更新的状态的指针

描述

更新state中的 XORWOW 状态,以跳过 n 个元素。

所有 n 值均有效。 较大的数值需要更多计算,因此需要更多时间来完成。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新 MRG32k3a 状态,跳过 n 个序列。

参数

n

  • 要跳过的序列数

state

  • 指向要更新的状态的指针

描述

更新state中的 MRG32k3a 状态,跳过 n 个序列。每个序列长 2127 个元素,因此该函数将跳过 2127 * n 个元素。

所有 n 值均有效。 较大的数值需要更多计算,因此需要更多时间来完成。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStatePhilox4_32_10_t* state )

更新 Philox4_32_10 状态,以跳过 n 个子序列。

参数

n

  • 要跳过的子序列数

state

  • 指向要更新的状态的指针

描述

更新state中的 Philox4_32_10 状态,以跳过 n 个子序列。每个子序列有 266 个元素,因此该函数将跳过 266 * n 个元素。

所有 n 值均有效。

__device__ void skipahead_sequence ( unsigned long long n, mcrandStateXORWOW_t* state )

更新 XORWOW 状态,跳过 n 个子序列。

参数

n

  • 要跳过的子序列数

state

  • 指向要更新的状态的指针

描述

更新state中的 XORWOW 状态,以跳过 n 个子序列。每个子序列有 267 个元素长,这意味着函数将跳过 267 * n 个元素。

所有 n 值均有效。 较大的数值需要更多计算,因此需要更多时间来完成。

__device__ void skipahead_subsequence ( unsigned long long n, mcrandStateMRG32k3a_t* state )

更新 MRG32k3a 状态,以跳过 n 个子序列。

参数

n

  • 要跳过的子序列数

state

  • 指向要更新的状态的指针

描述

更新state中的 MRG32k3a 状态,以跳过 n 个子序列。每个子序列为 2127276 个元素长,因此这意味着该函数将跳过 267 * n 个元素。

n 的有效值为 0 到 251。注意 n 将被屏蔽为 51 位。