我正在实现一个最终将部署在集群上的并行处理系统,但我无法弄清楚各种并行处理方法如何交互。
我需要使用 for 循环来运行一大块代码,其中包含几个大型矩阵操作列表。为了加快速度,我想用 foreach() 并行化 for 循环,并用 mclapply 并行化列表操作。
示例伪代码:
cl<-makeCluster(2)
registerDoParallel(cl)
outputs <- foreach(k = 1:2, .packages = "various packages") {
l_output1 <- mclapply(l_input1, function, mc.cores = 2)
l_output2 <- mclapply(l_input2, function, mc.cores = 2)
return = mapply(cbind, l_output1, l_output2, SIMPLIFY=FALSE)
}
这似乎有效。我的问题是:
1)这是一种合理的方法吗?他们似乎在我的小规模测试中一起工作,但感觉有点笨拙。
2)在任何给定时间它将使用多少个内核/处理器?当我将它升级到集群时,我需要了解我可以推送多少(foreach 只循环 7 次,但 mclapply 列表最多有 70 个左右的大矩阵)。它似乎创建了 6 个“核心”(大概 2 个用于 foreach,2 个用于每个 mclapply。