Zufallszahlen und das Multicore-Paket

15

Beim Programmieren in R habe ich das Multicore- Paket einige Male verwendet. Ich habe jedoch noch nie eine Aussage darüber gesehen, wie es mit Zufallszahlen umgeht. Wenn ich openMP mit C verwende, achte ich darauf, ein korrektes paralleles RNG zu verwenden, aber mit R gehe ich davon aus, dass etwas Vernünftiges passiert. Kann jemand bestätigen, dass etwas Vernünftiges passiert?

Beispiel

Aus der Dokumentation haben wir

x <- foreach(icount(1000), .combine = "+") %do% rnorm(4)

Wie werden die rnormgeneriert?

csgillespie
quelle

Antworten:

8

Ich bin nicht sicher, wie das foreachfunktioniert (aus dem doMC-Paket, denke ich), aber in Multicore, wenn Sie so etwas wie mclapplydie mc.set.seedStandardparameter gemacht haben, TRUEdie jedem Prozess einen anderen Startwert geben (z mclapply(1:1000, rnorm). B. ). Ich gehe davon aus, dass Ihr Code in etwas Ähnliches übersetzt ist, dh er läuft auf Aufrufe hinaus, für paralleldie dieselbe Konvention gilt.

Siehe auch Seite 16 der Folien von Charlie Geyer, der das Paket rlecuyer für parallele unabhängige Streams mit theoretischen Garantien empfiehlt . Geyers Seite enthält auch Beispielcode in R für die verschiedenen Setups.

ars
quelle
7

Möglicherweise möchten Sie Seite 5 dieses Dokuments und dieses Dokuments lesen . Standardmäßig ist jedes Core-Set unter R ein eigener Startwert (ich erinnere mich an die Verwendung einer hochpräzisen Zeit).

NB: Wenn Sie foreach () von Revolution-computing unter Windows verwenden, dann vermute ich, dass etwas Vernünftiges nicht passieren wird. Windows ist nicht POSIX-kompatibel und dies sollte Probleme bereiten, wenn jeder Kern einen anderen High Prec benötigt. Startzeit, um den Startwert festzulegen (leider habe ich kein Windows zur Hand, daher kann ich dies nicht empirisch überprüfen).

user603
quelle