2015-03-11 2 views
40

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

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

исх: 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).

исх: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

+0

только для того, чтобы эти два соединения были связаны http://stackoverflow.com/questions/28829300/doparallel-cluster-vs-cores?noredirect11&lq=1 – Tony

+0

Возможный дубликат [doParallel, cluster vs corees] (https://переполнение стека.com/questions/28829300/doparallel-cluster-vs-corees) –

ответ

23

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 независимо от платформы. Вы правы, что в этом случае ваша ответственность - закрыть объект кластера с момента его создания, в то время как неявный объект кластера автоматически отключается.

+1

Есть ли слова или документы о «определенных обстоятельствах» для 'doMC' из Rich Calaway of Revolution Analytics? Кроме того, есть ли разница в производительности в условиях «ncores» и «makeCluster»? Я разработал пакет R [cogena] (https://github.com/zhilongjia/cogena), в котором параллель была скопирована с 'doMC' изначально. Я просто изменил его на 'doParallel' для поддержки Windows несколько часов назад. Это комплекс для мусора, относящийся к «NAMESPACE» и «import», когда он реализован посредством сочетания 'doMC' и' doParallel'. Спасибо. –

+0

@ Zhilong В пакете R, я думаю, вы должны позволить конечному пользователю зарегистрировать, что бэкэнд работает лучше всего на своем оборудовании. Это делает ваш код более простым и гибким. Это было первоначальное намерение отделить бэкэнда, и это, как это делают карет и plyr, например. –

+0

У меня есть идея. Спасибо. Если в общей машине есть разница в производительности, я сделаю то, что вы предложили. Если нет, я предпочитаю, чтобы мой пакет был прост в использовании до сих пор. Я отправил по электронной почте Maintainer 'doParallel' и продолжит обновление. –

 Смежные вопросы

  • Нет связанных вопросов^_^