R и разделяемая память для параллельного :: mclapply

Я пытаюсь воспользоваться преимуществами четырехъядерного компьютера, распараллеливая дорогостоящую операцию, выполняемую в списке из примерно 1000 элементов.

Я использую R 'Функция srallel :: mclapply в настоящее время:

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

Который работает. Проблема в том, что любой дополнительный подпроцесс, который порождается, должен выделить большой кусок памяти:

В идеале я хотел бы, чтобы каждое ядро получало доступ к разделяемой памяти из родительского процесса R, чтобы по мере увеличения числа ядер, используемых в mclapply, я нет ограничения памяти до ограничений ядра.

Я в настоящее время затрудняюсь с отладкой этой проблемы. Все большие структуры данных, к которым обращается каждый процесс, являются глобальными (в настоящее время). Это как-то проблема?

Я увеличил максимальную настройку общей памяти для ОС до 20 ГБ (доступной оперативной памяти):

$ 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

Я думал, что это все исправит, но проблема все еще возникает.

Есть еще идеи?

Ответы на вопрос(3)

Ваш ответ на вопрос