从多个节点检测核心
Detect Cores from Multiple Nodes
我在 R 中有一个脚本,它利用了 doParallel
包和并行化的 foreach
函数。我目前正在使用 detectCores()
命令的变体注册我的集群,该命令运行良好,因为我使用的机器有 32 个内核。
我的问题是,如果我可以通过多台 Linux 机器访问 HPC 资源,是否可以从多台机器 detectCores()
并在单个 foreach
呼叫?
例如,如果我提交我的 HPC 作业以便它使用两个节点,是否可以让 detectCores()
函数生成 64 而不是 32 的值?
置顶评论中的示例总结解决方案post:
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)
我在 R 中有一个脚本,它利用了 doParallel
包和并行化的 foreach
函数。我目前正在使用 detectCores()
命令的变体注册我的集群,该命令运行良好,因为我使用的机器有 32 个内核。
我的问题是,如果我可以通过多台 Linux 机器访问 HPC 资源,是否可以从多台机器 detectCores()
并在单个 foreach
呼叫?
例如,如果我提交我的 HPC 作业以便它使用两个节点,是否可以让 detectCores()
函数生成 64 而不是 32 的值?
置顶评论中的示例总结解决方案post:
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)