首个多线程 (MT) NVPL RAND 程序#
以下是一个类似的示例,使用 NVPL RAND MT 库通过多线程生成 10000 个具有标准正态分布的 FP32 数字。代码与之前示例的唯一区别在于创建生成器句柄。
/*
* This program uses multi-threaded NVPL RAND library to generate 10000 FP32 numbers with standard normal distribution
*/
#include <vector>
#include <iostream>
#include "nvpl_rand.h"
#define NVPL_RAND_CHECK(x) \
do { \
if ((x) != NVPL_RAND_STATUS_SUCCESS) { \
printf("Error at %s:%d\n", __FILE__, __LINE__); \
_Exit(EXIT_FAILURE); \
} \
} while (0)
int main(int argc, char* argv[]) {
nvplRandGenerator_t gen;
const size_t n = 10000;
std::vector<float> array(n);
/* Create pseudo-random number generator */
NVPL_RAND_CHECK(nvplRandMTCreateGeneratorDefault(&gen, NVPL_RAND_RNG_PSEUDO_PCG));
/* Set seed */
NVPL_RAND_CHECK(nvplRandSetPseudoRandomGeneratorSeed(gen, 1234ULL));
/* Set Offset */
NVPL_RAND_CHECK(nvplRandSetGeneratorOffset(gen, 10ULL));
/* Generate n 32-bit random numbers */
NVPL_RAND_CHECK(nvplRandGenerateNormal(gen, array.data(), n, 0, 1));
for (auto i = 0; i < 10; i++) {
std::cout << " i " << i << " " << array[i] << std::endl;
}
/* Cleanup */
nvplRandDestroyGenerator(gen);
}