R e memória compartilhada para parallel :: mclapply

Eu estou tentando tirar proveito de uma máquina quad-core, paralelizando uma operação dispendiosa que é realizada em uma lista de cerca de 1000 itens.

Eu estou usando a função parallel :: mclapply de R atualmente:

res = rbind.fill(parallel::mclapply(lst, fun, mc.cores=3, mc.preschedule=T))

Que funciona. O problema é que qualquer subprocesso adicional gerado gera uma grande quantidade de memória:

Idealmente, gostaria que cada núcleo acessasse a memória compartilhada a partir do processo R pai, de modo que conforme eu aumente o número de núcleos usados ​​no mclapply, não atinjo limitações de RAM antes das limitações do núcleo.

No momento, estou com prejuízo de como depurar esse problema. Todas as grandes estruturas de dados que cada processo acessa são globais (atualmente). Isso é de alguma forma o problema?

Eu fiz aumentar minha configuração máxima de memória compartilhada para o sistema operacional para 20 GB (RAM disponível):

$ cat /etc/sysctl.conf 
kern.sysv.shmmax=21474836480
kern.sysv.shmall=5242880
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048

Eu pensei que iria consertar as coisas, mas o problema ainda ocorre.

Alguma outra ideia?

questionAnswers(3)

yourAnswerToTheQuestion