以下(简化的)脚本在 unix 集群(4 个虚拟核心)的主节点上运行良好。
library(foreach)
library(doParallel)
nc = detectCores()
cl = makeCluster(nc)
registerDoParallel(cl)
foreach(i = 1:nrow(data_frame_1), .packages = c("package_1","package_2"), .export = c("variable_1","variable_2")) %dopar% {
row_temp = data_frame_1[i,]
function(argument_1 = row_temp, argument_2 = variable_1, argument_3 = variable_2)
}
stopCluster(cl)
我想利用集群中的 16 个节点(16 * 4
总共虚拟核心)。
我想我需要做的就是更改由makeCluster
. 但是我该怎么做呢?文档不是很清楚。
基于这篇相当古老的(2013 年)帖子http://www.r-bloggers.com/the-wonders-of-foreach/似乎我应该更改默认类型(sock
或者MPI
- 哪个 - 可以在 unix 上使用? )
编辑
来自foreach 的作者的这个小插曲:
默认情况下,doParallel 在类 Unix 系统上使用多核功能,在 Windows 上使用雪功能。请注意,多核功能仅在单台计算机上运行任务,而不是在计算机集群上运行。但是,您可以使用 snow 功能在集群上执行,使用类 Unix 操作系统、Windows 或什至组合。
是什么you can use the snow functionality
意思?我该怎么做?