Nombres aléatoires et package multicœur


15

Lors de la programmation en R, j'ai utilisé le package multicœur plusieurs fois. Cependant, je n'ai jamais vu de déclaration sur la façon dont il gère ses nombres aléatoires. Lorsque j'utilise openMP avec C, je fais attention à utiliser un RNG parallèle approprié, mais avec R, je suppose que quelque chose de sensible se produit. Quelqu'un peut-il confirmer que quelque chose de sensible se produit?

Exemple

De la documentation, nous avons

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

Comment sont rnormgénérés les `s?

Réponses:


8

Je ne sais pas comment cela foreachfonctionne (à partir du package doMC, je suppose), mais en multicœur si vous avez fait quelque chose comme mclapplyle mc.set.seedparamètre par défaut TRUEqui donne à chaque processus une graine différente (par exemple mclapply(1:1000, rnorm)). Je suppose que votre code est traduit en quelque chose de similaire, c'est-à-dire qu'il se résume aux appels parallelqui ont la même convention.

Mais voir également la page 16 des diapositives de Charlie Geyer, qui recommande le package rlecuyer pour les flux indépendants parallèles avec des garanties théoriques. La page de Geyer contient également un exemple de code en R pour les différentes configurations.


7

Vous voudrez peut-être regarder la page 5 de ce document et de ce document . Par défaut, sous R, chaque ensemble de base est sa propre graine (je me souviens avoir utilisé un temps de haute précision).

NB: si vous utilisez foreach () de Revolution-computing sous Windows, je soupçonne que quelque chose de sensible ne se produira pas . Windows n'est pas compatible POSIX, et cela devrait poser des problèmes lorsque chaque cœur a besoin d'une haute précision différente. heure de départ pour définir sa valeur de départ (malheureusement, je n'ai pas de fenêtres à portée de main, donc je ne peux pas vérifier cela empiriquement).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.