c++ - 随机数生成和并行化 C++/Qt

标签 c++ parallel-processing random

我想知道这是否会使随机数的并行生成变得更糟。我在这里使用 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/

相关文章:

java - Reader#lines() 由于其拆分器中不可配置的批量大小策略而严重并行化

c++ - 将随机整数写入文本文件而不重复

javascript - 使用 Math.random 获得相同值的概率

c++ - 双重赋值的评价顺序

c# - 关闭 Windows 8 Charm Bar

使用execl从txt中收集数据

r - 提高替换多个字符串的性能

Java 2D数组随机分配

c++ - std::move、std::forward、值类型和模板推导

Windows 上的 C++ : Using DirectInput without a window?