gpt4 book ai didi

macos - R和parallel::mclapply的共享内存

转载 作者:行者123 更新时间:2023-12-04 03:44:54 25 4
gpt4 key购买 nike

我正在尝试通过并行执行对大约1000个项目的列表执行的昂贵操作来利用四核计算机。

我目前正在使用R的parallel::mclapply函数:

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

哪个有效。问题是,产生的任何其他子进程都必须分配很大的内存:

理想情况下,我希望每个内核都可以从父R进程访问共享内存,以便随着我增加mclapply中使用的内核数量,在出现内核限制之前,我不会遇到RAM限制。

我目前对如何调试此问题一无所知。每个进程访问的所有大数据结构都是全局的(当前)。这是问题所在吗?

我确实将操作系统的共享内存最大设置增加到20 GB(可用RAM):
$ 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

我以为可以解决问题,但问题仍然存在。

还有其他想法吗?

最佳答案

只是提示可能发生了什么事
R-devel Digest, Vol 149, Issue 22

雷德福·尼尔(Radford Neal)在2015年7月26日的回答:

当mclapply分支以启动新进程时,内存最初是
与父进程共享。但是,内存页必须是
任何一个进程向其写入时都将其复制。不幸的是,R
垃圾回收器会在每个对象上写入以标记和取消标记它
一个完整的垃圾收集已经完成,所以很有可能每个R
对象将在每个过程中重复,即使其中很多
实际上并没有改变(从R程序的角度来看)。

关于macos - R和parallel::mclapply的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com