我正在实现一个并行处理系统,最终将部署在集群上,但我在解决各种并行处理方法之间的交互时遇到了问题。
我需要使用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个“核心”(可能是 foreach 用了2个,每个 mclapply 用了2个)。