Snow R:获取当前正在运行的节点信息

时间:2014-09-29 15:28:45

标签: r parallel-processing snow

假设我们在R通过SNOW中有一个4个CPU的集群。

如何找出正在运行的节点?

我想做到这样的逻辑:

IF(节点1)那么逻辑1 IF(节点2)那么逻辑2 IF(节点3)那么逻辑3 IF(节点4)那么逻辑4

如何实施IF条件?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您想要群集中每个工作人员的ID,可以使用“clusterApply”初始化每个工作人员的全局变量:

library(snow)
cl <- makeSOCKcluster(4)
clusterApply(cl, seq_along(cl), function(i) workerID <<- i)

然后你的“节点检查”逻辑可以写成:

fun <- function(task) {
  if (workerID == 1)
    sqrt(task)
  else if (workerID == 2)
    log(task)
  else if (workerID == 3)
    log10(task)
  else if (workerID == 4)
    exp(task)
  else
    -1
}
clusterApplyLB(cl, 1:10, fun)

如果您正在使用带有MPI群集的雪,则可以使用“mpi.comm.rank”功能,但它会将工作人员从0编号为n-1

人们经常使用paste(Sys.info()[['nodename']], Sys.getpid(), sep='-')等表达式作为唯一的工作者ID,但这个例子有点尴尬。