从多个节点检测核心

时间:2017-10-03 23:40:12

标签: r hpc parallel.foreach doparallel

我在R中有一个利用doParallel包和并行化foreach函数的脚本。我目前正在使用detectCores()命令的变体来注册我的集群,该命令运行良好,因为我使用的机器有32个核心。

我的问题是,如果我可以使用多台Linux计算机访问HPC资源,是否可以从多台计算机detectCores()并在一次foreach电话中实施

例如,如果我提交HPC作业以使其使用两个节点,是否可以使detectCores()函数生成64而不是32的值?

1 个答案:

答案 0 :(得分:1)

在顶部帖子的评论中总结解决方案的示例:

library("parallel")

find_workers <- function(nodes) {
  nodes <- unique(nodes)
  cl <- makeCluster(nodes)
  on.exit(stopCluster(cl))

  ns <- clusterCall(cl, fun = detectCores)
  rep(nodes, times = ns)
}

workers <- find_workers(c("n1", "n2", "n3"))
cl <- makeCluster(workers)