假设我们在R通过SNOW中有一个4个CPU的集群。
如何找出正在运行的节点?
我想做到这样的逻辑:
IF(节点1)那么逻辑1 IF(节点2)那么逻辑2 IF(节点3)那么逻辑3 IF(节点4)那么逻辑4
如何实施IF条件?
谢谢!
答案 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,但这个例子有点尴尬。