Números aleatórios e o pacote multicore

15

Ao programar em R, usei o pacote multicore algumas vezes. No entanto, nunca vi uma declaração sobre como ele lida com seus números aleatórios. Quando uso o openMP com C, tenho o cuidado de usar um RNG paralelo adequado, mas com o R suponho que algo sensato aconteça. Alguém pode confirmar que algo sensato acontece?

Exemplo

A partir da documentação, temos

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

Como os rnorm`s são gerados?

csgillespie
fonte

Respostas:

8

Não sei ao certo como foreachfunciona (do pacote doMC, eu acho), mas em vários núcleos, se você fez algo parecido com mclapplyo mc.set.seedpadrão do parâmetro, TRUEque dá a cada processo uma semente diferente (por exemplo mclapply(1:1000, rnorm)). Presumo que seu código seja traduzido em algo semelhante, ou seja, se resume a chamadas para as parallelquais tem a mesma convenção.

Mas também veja a página 16 dos slides de Charlie Geyer, que recomenda o pacote rlecuyer para fluxos independentes paralelos com garantias teóricas. A página de Geyer também possui código de exemplo em R para as diferentes configurações.

ars
fonte
7

Você pode querer olhar para a página 5 deste documento e deste documento . Por padrão, em R, cada conjunto principal é próprio (eu me lembro usando tempo de alta precisão).

NB: se você usar foreach () da Revolution-computing no Windows, suspeito que algo sensato não acontecerá. O Windows não é compatível com POSIX, e isso deve causar problemas quando cada núcleo precisar de um valor alto diferente. hora de início para definir sua semente (infelizmente não tenho janelas à mão, então não posso verificar isso empiricamente).

user603
fonte