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