2012-04-04 14 views
2

これは乱数の生成を並列化して悪化する可能性があるかどうか疑問に思っています。私はここでQtとQtConcurrentを使用しています。並列にN個の数値を生成するのではなく、並列化を使う価値はありますか?それは生成された数の重要な数ですか? 私のコードは、ここに非並列化です:乱数の生成と並列化C++/Qt

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]); 
    } 
} 

ランダムMarsaglia生成方法以下の乱数発生器を作った家であるwhre。

ありがとうございます。

答えて

3

真の並列乱数生成が必要な場合は、ほぼ確実に運が悪いです。私はフードの下で異なるスレッドを効率的かつ確定的に使用していくつかの乱数を生成する真のマルチスレッドアルゴリズムは知らない。

これまでにやったことは、N個の異なるジェネレーター(明らかにN個の異なる種子を持つ)が設定されており、N個のスレッドに世代を手動でに分散しています。結果は再現可能で、高度にマルチスレッド化されます。