Snow R: получить текущую информацию об узле
Допустим, у нас есть кластер из 4 процессоров в R через SNOW.
Как я могу узнать, какой узел работает?
Я хочу сделать так, чтобы логика:
ЕСЛИ (Узел 1) ТОГДА логика1 ЕСЛИ (Узел 2) ТОГДА логика2 ЕСЛИ (Узел 3) ТОГДА логика3 ЕСЛИ (Узел 4) ТОГДА логика4
Как я могу выполнить условие ЕСЛИ?
Спасибо!
1 ответ
Если вам нужен идентификатор для каждого из сотрудников в вашем кластере, вы можете использовать "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)
Если вы используете snow с кластером MPI, вы можете использовать вместо этого функцию "mpi.comm.rank", но она нумерует рабочих из 0
в n-1
,
Люди часто используют такие выражения, как paste(Sys.info()[['nodename']], Sys.getpid(), sep='-')
как уникальный идентификатор работника, но это немного неудобно для этого примера.