我正在使用120内核和500GB内存的机器。由于我必须执行多个计算范围广泛的任务,因此我使用foreach
循环和doSNOW
集群来并行化这些任务。但是,有时所有组合的任务都会分配太多内存,因此机器会停止工作。
是否可以限制所有组合并行工作者的已用内存?如果超出这些内存限制,是否可以停止执行源R-skript?
我会尝试这样的事情......
library(doSNOW)
library(foreach)
nCPUs <- 120
mem <- memory.limit()
memory.limit(size = mem/nCPUs)
cl <- makeCluster(nCPUs)
registerDoSNOW(cl)
foreach(...)%dopar% {
...
}
但是在测试时,memory.limit(size = 20000)
会返回警告
Warning message: In memory.limit(size = 20000) : cannot decrease memory limit: ignored
检查它是否有效表明memory.limit没有减少(如警告中所述)
> memory.limit()
[1] 32692