假设我们在R中通过SNOW有一个由4个CPU组成的集群。
如何查找正在运行的节点?
我想做这样的逻辑:
IF(节点1)THEN logic1IF(节点2)THEN logic2IF(节点3)THEN logic3如果(节点4),则逻辑4
如何实现IF条件?
谢谢!
如果您想要集群中每个工作进程的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.bank"函数,但它会将工作线程从0
编号为n-1
。
人们经常使用paste(Sys.info()[['nodename']], Sys.getpid(), sep='-')
这样的表达式作为唯一的员工ID,但对于这个例子来说,这有点尴尬。