我正在使用由C++ 11提供的RNG,並且我也在使用OpenMP。我已經爲每個線程分配了一個引擎,並且作爲測試,我將相同的種子分配給每個引擎。這意味着我希望兩個線程都能產生完全相同的隨機生成數字序列。這裏是一個MWE:使用相同的引擎並行生成隨機數
#include <iostream>
#include <random>
using namespace std;
uniform_real_distribution<double> uni(0, 1);
normal_distribution<double> nor(0, 1);
int main()
{
#pragma omp parallel
{
mt19937 eng(0); //GIVE EACH THREAD ITS OWN ENGINE
vector<double> vec;
#pragma omp for
for(int i=0; i<5; i++)
{
nor(eng);
vec.push_back(uni(eng));
}
#pragma omp critical
cout << vec[0] << endl;
}
return 0;
}
大多數情況下,我得到的輸出0.857946 0.857946
,但幾次我得到0.857946 0.592845
。當兩個線程具有相同的,不相關的引擎時,後者的結果如何?
評論:它似乎只出現在我包括'也沒有(英);'...不是說它更有意義.. – BillyJean