我想知道这是否会使随机数的并行生成变得更糟。我在这里使用 Qt 和 QtConcurrent。是否值得使用并行化而不是连续生成 N 个数字?哪个可能是生成数字的临界数量? 我的代码在这里,非并行化:
double** sampled = Matrix::allocMatrice(n,m_ndim,true);
Random* generator_ = new Random();
generator_->newSeed();
double* temp_;
for(int k=0;k<n;k++)
{
for(int j=0;j<m_ndim;j++)
{
sampled[k][j] = generator_->run(lower[j],upper[j]);
}
}
whre Random 是一个遵循 Marsaglia 生成方法的自制随机生成器。
谢谢和问候。
最佳答案
如果您想要真正的并行随机数生成,那么您几乎肯定不走运。我知道没有真正的多线程算法可以在幕后有效且确定性地使用不同线程生成多个随机数。
我之前所做的并建议你现在做的,是设置 N 个不同的生成器(显然,有 N 个不同的种子),并手动将生成分布在 N 个线程上。结果将是可重现的,并且是高度多线程的。
关于c++ - 随机数生成和并行化 C++/Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10007113/