В чем разница между использованием пакета doParallel с type = MPI и непосредственным использованием doMPI?
В чем разница между использованием пакета doParallel с type = MPI и непосредственным использованием doMPI?
library(foreach)
library(doParallel)
cl <- makeCluster(mpi.universe.size(), type='MPI')
registerDoParallel(cl)
system.time(foreach(i = 1:3) %dopar% {Sys.sleep(i); i})
В.С.
library(doMPI)
cl <- startMPIcluster(count=2)
registerDoMPI(cl)
system.time(foreach(i = 1:3) %dopar% {Sys.sleep(i); i})
1 ответ
Решение
Пакет "doParallel" действует как оболочка для функции "clusterApplyLB", которая реализуется путем вызова функций из пакета "Rmpi" при использовании кластера MPI.
Пакет "doMPI" напрямую использует функции "Rmpi" и включает некоторые функции, которые недоступны в "clusterApplyLB":
поддерживает выборку входных данных и комбинирование выходных данных на лету для эффективной обработки большого числа итераций цикла;
поддерживает вещание MPI для инициализации работников;
позволяет рабочим запускаться с помощью mpirun или функции spawn MPI.