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
를 얻을. 두 스레드가 동일하고 상관없는 엔진을 가지고있을 때 후자의 결과는 어떻게 가능합니까?
댓글 : 'nor (eng);'를 포함 할 때만 나타납니다 ... 더 의미가 아니라 ... – BillyJean