RNG, R, mclapply e cluster de computadores

10

Estou executando uma simulação no R e em um cluster de computadores e tenho o seguinte problema. Em cada um dos computadores X, eu corro:

fxT2 <- function(i) runif(10)
nessay <- 100
c(mclapply(1:nessay, fxT2), recursive=TRUE)

Existem 32 computadores, cada um com 16 núcleos. No entanto, cerca de 2% dos números aleatórios são idênticos. Que estratégias você adotaria para evitar isso?

Consegui evitar esse problema no fxT2 definindo uma latência (ou seja, atrasando um segundo o tempo em que cada trabalho é enviado para cada um dos computadores X). Mas parece muito ad-hoc para o fxt2.

O problema é que, na realidade, o fxT2 é uma tarefa longa que envolve números pseudo-aleatórios. No final do processo, espero obter reprodução X * nessay do mesmo experimento estatístico, não reproduções de nessay. Como garantir que esse seja realmente o caso e se existe uma maneira de verificar isso?

user603
fonte
Boa pergunta. Ter um olhar para esta questão em números aleatórios eo pacote multicore
csgillespie
@ CSGillepsie:> obrigado pelo ponteiro, mas não tenho certeza se é o mesmo problema: da maneira como entendo a pergunta que você apontou, todos os processos são gerados pelo mclapply. Aqui está um pouco diferente: em cada uma das máquinas, todos os processos são gerados pelo mclapply, mas esse não é o caso entre as máquinas.
user603

Respostas:

6

A neve possui suporte explícito para inicializar o número determinado de fluxos RNG em uma computação de cluster.

Ele pode empregar uma das duas implementações RNG:

Caso contrário, você terá que fazer a coordenação manualmente.

Dirk Eddelbuettel
fonte
3

Você precisa usar um RNG projetado especificamente para computação paralela. Consulte a seção "Computação paralela: números aleatórios" na exibição de tarefas de computação de alto desempenho .

Joshua Ulrich
fonte
Você também precisa coordenar entre os fluxos RNG. A neve faz isso, o multicore pode agora.
Dirk Eddelbuettel