как элементы назначаются кластерам в foreach () при выполнении параллельных вычислений в R

У меня есть набор элементов для запуска пользовательской функцией в R. Для последовательного выполнения этих элементов требуется много времени. Затем я переключаюсь на параллельные вычисления, используя foreach(), %dopar%, makecluster() и registerdoparallel(). Мне интересно, как эти элементы распределяются по кластерам. Скажем, у меня есть 100 элементов и зарегистрировано 5 кластеров, элементы 1 ~ 20 назначены кластеру 1 и так далее, или они назначаются случайным образом. Спасибо


person Harry    schedule 27.08.2020    source источник
comment
Вы можете отслеживать, что происходит, читая код функции, если действительно хотите увидеть, как это работает. Например, если ввести в консоль следующее parallel::splitIndices WITHOUT (), вы увидите, что этот метод разделяет их от начала до конца, если имеется более определенного количества задач. Итак, для 4 кластеров вы выполняете 1: 5, 6:10, 11:15, 16:20 .... за исключением того, что, похоже, минимум 1000, поэтому вы выполняете все действия в одном кластере.   -  person Adam Sampson    schedule 27.08.2020


Ответы (1)


Первым готово, первым подано:

library(doParallel)
registerDoParallel(cl <- makeCluster(3))

foreach(i = 1:20, .combine = 'c') %dopar% {
  Sys.getpid()
}
[1] 13004  5924  6600 13004  5924 13004  6600  5924 13004  5924 13004  5924 13004
[14]  5924  6600 13004  5924  6600 13004  5924

stopCluster(cl)
person F. Privé    schedule 28.08.2020