parallel random
-
Hi,
wie erzeugt man am besten Zufallszahlen in Threads?
Beispiel:const size_t N = 100000; vector<double> num(N, 0); random_gen r; #pragma omp parallel for /*entweder:*/private(r) for(int n=0; n < N; ++n) { /*oder:*/ //#pragma omp critical num[n] = r(); }Im Fall von
private (r)arbeitet jeder Thread mit einem eigenen Generator mit unterschiedlichen seeds, etwas wiestruct random_gen { random_gen() { mt.seed(++seed); } double operator()() { return dist(mt); } std::tr1::normal_distribution<double> dist; std::tr1::mt19937 mt; static unsigned long seed; }; unsigned long random_gen::seed = 1;Das ist natürlich deutlich schneller als ein geteilter Generator. Aber wie sieht es mit der Qualität der Verteilung aus? Sieht zwar beim draufgucken gleich aus aber ist sie es auch? Kenn mich ja mit der Mathematik dahinter überhaupt nicht aus (ja hier gibts nen ausführlichen Artikel, ich weiß
).oh 16:11 ... wm und ich sitz noch im büro :schland: