je une boucle qui devrait être parallélisé bien par insering un OpenMP pragma:Réentrance de boost RNG
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();
}
(sauf si je fais une erreur chaque exécution ne dépend pas d'autres du tout désolé pas. tout le code est inséré).
Cependant, ma question est - sont boost RNG thread-safe? Ils semblent se référer au code gcc pour gcc donc même si le code gcc est thread-safe, il peut ne pas être le cas pour d'autres plateformes.
donc en d'autres termes, créer un rng pour chaque thread? – pyCthon