gpt4 book ai didi

boost - 在 OpenMP 中使用 boost 随机数生成器

转载 作者:行者123 更新时间:2023-12-04 06:48:53 25 4
gpt4 key购买 nike

我想用 OpenMP 在 C++ 中并行化我的 boost 随机数生成器代码。我想以既高效又线程安全的方式做到这一点。有人能给我指点一下这是如何完成的吗?我目前正在附上我在下面的内容;这显然不是线程安全的,因为 sampleNormal 函数中的静态变量可能会给出
竞争条件。样本数 (nsamples) 远大于 n。

#pragma omp parallel for private(i,j) 
for (i = 0; i < nsamples; i++) {
for (j = 0; j < n; j++) {
randomMatrix[i + nsamples*j] = SampleNormal(0.0, 1.0);
}
}

double SampleNormal (double mean, double sigma)
{
// Create a Mersenne twister random number generator
static mt19937 rng(static_cast<unsigned> (std::time(0)));
// select Gaussian probability distribution
normal_distribution<double> norm_dist(mean, sigma);
// bind random number generator to distribution
variate_generator<mt19937&, normal_distribution<double> > normal_sampler(rng, norm_dist);
// sample from the distribution
return normal_sampler();
}

最佳答案

您是否只需要线程安全或可扩展的东西?如果您的 PRNG 不需要非常高的性能,您可以在 rng 的用途周围加锁。目的。为了获得更高的性能,您需要找到或编写一个并行伪随机数生成器——http://www.cs.berkeley.edu/~mhoemmen/cs194/Tutorials/prng.pdf有关于它们的教程。一种选择是把你的 mt19937线程本地存储中的对象,确保用不同的种子播种不同的线程;如果这对您很重要,这会使在不同的运行中重现相同的结果变得困难。

关于boost - 在 OpenMP 中使用 boost 随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3405526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com