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 に答える