我无法理解mclapply的行为(或者别的什么)。R,mclapply的环境和删除变量
我做这样的事情:
opt.Models = mclapply(1:100, mc.cores=20, function(i){
res = loadResult(reg, id=i)
return(post.Process(res))
})
loadResult
负载从先前保存BatchJob会议一个结果。所以,res
对象需要〜170MB(大概所有的100个对象都是相同的大小+/- 5MB)。 当执行这段代码时,内存占用如预期:170MB * 20 =〜3.5GB(我使用了20个内核)。 第二次执行这段代码时,我的机器吸入了大量的内存(超过可用数量 - 因此我停止执行)。什么是预期的,因为,mclapply
再次为每个孩子分配完整的环境,我的环境现在有大的opt.Models
变量〜10GB。因此需要10 * 20 = 200GB。
当我删除opt.Models,rm(opt.Models)
,我仍遇到同样的问题。 mclapply比可用内存消耗更多的内存(btw:90GB)。 那么,哪个环境的mclapply叉,或不是opt.Models完全消失了?我无法看到它使用ls()
。
也许你们中的一个人观察到类似的东西。
最好的问候,
马里奥
我不明白你为什么不内核的数量限制在一个比较合理的值。 –
因为那不是我的问题。我只是想知道为什么这个内存没有被释放。减少内核只会导致效果收敛速度减慢。 – mariodeng