我想用OpenMP在C++中並行化我的boost隨機數生成器代碼。我希望這樣做既有效又線程安全。有人能告訴我這是如何完成的嗎?我現在附上我在下面的內容;這顯然不是線程安全的,因爲sampleNormal函數中的靜態變量很可能會給出競爭條件 。樣本數(nsamples)比n大得多。在OpenMP中使用boost隨機數生成器
#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 2012-01-03 14:29:45