1

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

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

我想做这样的逻辑:

IF(节点 1)THEN 逻辑 1 IF(节点 2)THEN 逻辑 2 IF(节点 3)THEN 逻辑 3 IF(节点 4)THEN 逻辑 4

如何实现 IF 条件?

谢谢!

4

1 回答 1

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 集群中使用 snow,则可以改用“mpi.comm.rank”函数,但它会将工作人员从0到编号n-1

人们经常使用诸如paste(Sys.info()[['nodename']], Sys.getpid(), sep='-')唯一工人 ID 之类的表达式,但这对于本示例来说有点尴尬。

于 2014-09-29T21:42:56.400 回答