我有一個循環應由insering一個OpenMP的編譯很好地被並行化:線程安全
boost::normal_distribution<double> ddist(0, pow(retention, i - 1));
boost::variate_generator<gen &, BOOST_TYPEOF(ddist)> dgen(rng, ddist);
// Diamond
const std::uint_fast32_t dno = 1 << i - 1;
// #pragma omp parallel for
for (std::uint_fast32_t x = 0; x < dno; x++)
for (std::uint_fast32_t y = 0; y < dno; y++)
{
const std::uint_fast32_t diff = size/dno;
const std::uint_fast32_t x1 = x*diff, x2 = (x + 1)*diff;
const std::uint_fast32_t y1 = y*diff, y2 = (y + 1)*diff;
double avg =
(arr[x1][y1] + arr[x1][y2] + arr[x2][y1] + arr[x2][y2])/4;
arr[(x1 + x2)/2][(y1 + y2)/2] = avg + dgen();
}
(除非我讓每個執行完全不依賴別人的錯誤比較遺憾的是沒有。所有代碼都被插入)。
但是我的問題是 - 是提高RNG線程安全嗎?他們似乎將gcc代碼引用到gcc中,所以即使gcc代碼是線程安全的,其他平臺也可能不是這種情況。
換句話說,爲每個線程創建一個rng? – pyCthon 2012-09-30 16:33:53