2

我想知道这是否会更糟糕地并行生成随机数。我在这里使用 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 生成方法的自制随机生成器。

谢谢并恭祝安康。

4

1 回答 1

3

如果你想要真正的并行随机数生成,你几乎肯定不走运。我知道没有真正的多线程算法可以有效且确定地使用引擎盖下的不同线程生成多个随机数。

我之前所做的并建议您现在做的是设置 N 个不同的生成器(显然,具有 N 个不同的种子),并手动将生成分布在 N 个线程上。结果将是可重现的,并且是高度多线程的。

于 2012-04-04T08:35:29.923 回答