Números aleatorios y el paquete multinúcleo

15

Al programar en R, he usado el paquete multinúcleo varias veces. Sin embargo, nunca he visto una declaración sobre cómo maneja sus números aleatorios. Cuando uso openMP con C, tengo cuidado de usar un RNG paralelo apropiado, pero con R supongo que sucede algo sensato. ¿Alguien puede confirmar que algo sensato sucede?

Ejemplo

De la documentación, tenemos

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

¿Cómo se rnormgeneran los `s?

csgillespie
fuente

Respuestas:

8

No estoy seguro de cómo foreachfunciona (desde el paquete doMC, supongo), pero en multinúcleo si hiciste algo como mclapplyel valor mc.set.seedpredeterminado del parámetro TRUEque le da a cada proceso una semilla diferente (por ejemplo mclapply(1:1000, rnorm)). Supongo que su código se traduce en algo similar, es decir, se reduce a llamadas a las parallelque tiene la misma convención.

Pero también vea la página 16 de las diapositivas de Charlie Geyer, que recomienda el paquete rlecuyer para flujos paralelos independientes con garantías teóricas. La página de Geyer también tiene un código de muestra en R para las diferentes configuraciones.

ars
fuente
7

Es posible que desee consultar la página 5 de este documento y de este documento . Por defecto, bajo R, cada conjunto de núcleos es su propia semilla (parece recordar que utilizo el tiempo de alta precisión).

NB: si usa foreach () de Revolution-computing en Windows, sospecho que algo sensato no sucederá. Windows no es compatible con POSIX, y esto debería plantear problemas cuando cada núcleo necesita un alto prec diferente. hora de inicio para configurar su semilla (desafortunadamente no tengo Windows a mano, así que no puedo verificar esto empíricamente).

usuario603
fuente