在foreach循环中处理多个worker的内存

时间:2016-11-16 11:21:04

标签: r memory foreach parallel-processing

我正在使用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

0 个答案:

没有答案