나는 openMP를 처음 접했고, 내 프로그램에서 복잡한 시뮬레이션이 필요하고, 결과를 반복하기 위해 각 시뮬레이션에 대한 시드가 설정되지만 openMP를 구현할 때 실행할 때마다 다른 결과가 생성됩니다. 그래서 다음과 같이 문제를 확인하는 간단한 예제를 작성하고 매번 다른 결과를 생성했습니다.
#include <iostream>
#include <omp.h>
using namespace std;
int main () {
double A[10];
#pragma omp parallel for
for( int i=0;i<10;i++){
srand(i+1);
int m = rand()%100;
A[i] = m;
}
cout<<"A= \n";
for(int i=0;i<10;i++){
cout<<i<<" "<<A[i]<<" \n";
}
return 0;
}
두 번 실행하면 결과는 다음과 같습니다. A = 0 86 1 25 2 78 3 1 4 46 5 95 6 77 7 83 8 1598
및 A = 0 15 1 41 2 65 3 1 4 75 5 85 6 95 7 83 8 74 9 8
대단히 감사합니다!
rand ()는 정적 상태를 사용하며 스레드로부터 안전하지 않습니다. 스레드로부터 안전한 다른 PRNG를 사용해야합니다. Monte-Carlo 통합을위한 스레드 안전 난수 생성을 참조하십시오. 또는 PRNG가 스레드로부터 안전해야합니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다