OpenMP로 C++에서 부스트 난수 생성기 코드를 병렬 처리하고 싶습니다. 효율적이고 스레드 안전성이있는 방식으로 처리하고 싶습니다. 누군가가이 일을 어떻게 처리하는지에 대한 조언을 해줄 수 있습니까? 나는 현재 내가 가지고있는 것을 감싸고있다. sampleNormal 함수의 정적 변수가 에 경쟁 조건을 부여 할 가능성이 있으므로 스레드 안전성이 보장되지 않습니다. 샘플 수 (nsamples)는 n보다 훨씬 큽니다.OpenMP에서 부스트 난수 생성기 사용
#pragma omp parallel for private(i,j)
for (i = 0; i < nsamples; i++) {
for (j = 0; j < n; j++) {
randomMatrix[i + nsamples*j] = SampleNormal(0.0, 1.0);
}
}
double SampleNormal (double mean, double sigma)
{
// Create a Mersenne twister random number generator
static mt19937 rng(static_cast<unsigned> (std::time(0)));
// select Gaussian probability distribution
normal_distribution<double> norm_dist(mean, sigma);
// bind random number generator to distribution
variate_generator<mt19937&, normal_distribution<double> > normal_sampler(rng, norm_dist);
// sample from the distribution
return normal_sampler();
}
샘플 코드에서 볼 수있는 사실상 모든 것은 * 난수 생성기입니다. – Puppy