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='-') как уникальный идентификатор работника, но это немного неудобно для этого примера.

Другие вопросы по тегам