Подтвердить что ты не робот

Разница между doMC и doParallel в R

Какая разница между doParallel и doMC в R относительно функции foreach? doParallel поддерживает windows, unix-like, а doMC поддерживает только unix-like. Другими словами, почему doParallel не может заменить doMC напрямую? Спасибо.

Обновление: doParallel построен на parallel, который по существу является слиянием multicore и snow и автоматически использует соответствующий инструмент для вашей системы. В результате мы можем использовать doParallel для поддержки нескольких систем. Другими словами, мы можем использовать doParallel для замены doMC.

ref: http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

Кстати, какая разница между registerDoParallel(ncores=3) и

cl <- makeCluster(3)
registerDoParallel(cl)

Кажется, что registerDoParallel(ncores=3) может автоматически остановить кластер, а второй не останавливается автоматически и нуждается в stopCluster(cl).

ref: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

4b9b3361

Ответ 1

Пакет doParallel представляет собой слияние doSNOW и doMC, так как parallel является слиянием snow и multicore. Но хотя doParallel имеет все функции doMC, мне сказал Rich Calaway of Revolution Analytics, что они хотят поддерживать doMC, потому что он был более эффективным при определенных обстоятельствах, хотя doMC теперь использует parallel > просто как doParallel. Я лично не провел никаких тестов, чтобы определить, есть ли и когда есть существенная разница.

Я использую doMC на компьютере под управлением Linux или Mac OS X, doParallel на компьютере под управлением Windows и doMPI в кластере Linux, но doParallel работает на всех этих платформах.


Что касается разных методов регистрации, выполните следующие действия:

registerDoParallel(cores=3)

на машине Windows, он будет создавать объект кластера неявно для последующего использования с clusterApplyLB, тогда как в Linux и Mac OS X не создается или не используется объект кластера. Количество ядер просто запоминается и используется в качестве значения аргумента mc.cores позже при вызове mclapply.

Если вы выполните:

cl <- makeCluster(3)
registerDoParallel(cl)

тогда зарегистрированный объект кластера будет использоваться с clusterApplyLB независимо от платформы. Вы правы, что в этом случае вы несете ответственность за выключение объекта кластера с момента его создания, тогда как неявный объект кластера автоматически отключается.