R中doMC和doParallel的区别

Posted

技术标签:

【中文标题】R中doMC和doParallel的区别【英文标题】:the difference between doMC and doParallel in R 【发布时间】:2015-05-13 10:24:28 【问题描述】:

关于foreach函数,R中的doParalleldoMC有什么区别? doParallel 支持 windows,类 unix,而 doMC 仅支持类 unix。换句话说,为什么doParallel不能直接替换doMC?谢谢。

更新: doParallel 建立在parallel 的基础上,它本质上是multicoresnow 的合并,并自动为您的系统使用适当的工具。因此,我们可以使用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

【问题讨论】:

只是为了让两者联系起来***.com/questions/28829300/… doParallel, cluster vs cores的可能重复 【参考方案1】:

doParallel 包是doSNOWdoMC 的合并,就像parallelsnowmulticore 的合并一样。但是尽管doParallel 具有doMC 的所有功能,但Revolution Analytics 的Rich Calaway 告诉我,他们希望保留doMC,因为它在某些情况下更有效,即使doMC 现在使用@987654332 @就像doParallel。我没有亲自运行任何基准来确定是否以及何时存在显着差异。

我倾向于在 Linux 或 Mac OS X 计算机上使用 doMC,在 Windows 计算机上使用 doParallel,在 Linux 集群上使用 doMPI,但 doParallel 确实适用于所有这些平台。


至于注册方式的不同,如果执行:

registerDoParallel(cores=3)

在 Windows 机器上,它将隐式创建一个集群对象以供以后与clusterApplyLB 一起使用,而在 Linux 和 Mac OS X 上,不会创建或使用任何集群对象。核心数被简单地记住,并在稍后调用mclapply 时用作mc.cores 参数的值。

如果你执行:

cl <- makeCluster(3)
registerDoParallel(cl)

那么无论平台如何,注册的集群对象都将与clusterApplyLB一起使用。您是正确的,在这种情况下,您有责任在创建集群对象后关闭它,而隐式集群对象会自动关闭。

【讨论】:

Revolution Analytics 的 Rich Calaway 是否有关于 doMC 的“特定情况”的文字或文件?此外,考虑ncoresmakeCluster 情况下的性能有什么区别吗?我开发了一个 R cogena 包,其中并行复制了 doMC 最初。几个小时前,我刚刚将其更改为 doParallel 以支持 Windows。当通过doMCdoParallel 的混合实现时,这是一个关于NAMESPACEimport 的垃圾复合体。谢谢。 @Zhilong 在 R 包中,我认为您应该让最终用户注册在他们的硬件上最适合的后端。这使您的代码更简单、更灵活。这是分离后端的初衷,也是 caret 和 plyr 这样做的方式。 我明白了你的想法。谢谢你。如果一般机器有性能差异,我会按照你的建议做。如果没有,我更喜欢我的包到目前为止易于使用。我给doParallel 的维护者发了电子邮件,会及时更新。 这是来自 Rich of Revolution Analytics 的回复(抱歉,对 SO 的评论有点长,我只是粘贴结论):“我建议大多数新用户使用 doParallel,因为两者都支持它Linux 和 Windows,并使用内置的并行包。此外,我建议使用并行的 fork 集群特性和类似雪的接口,以避免在 Linux 上出现僵尸进程。” 错字:该选项称为cores 而不是ncores。它不会让我用少于 6 个字符来编辑你的答案。

以上是关于R中doMC和doParallel的区别的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用 doParallel 时,如何获取引发错误的行号?

R:在doParallel /降雪中制作集群挂起

使用 foreach 函数和 doParallel 库在 R 中嵌套 for 循环

如何使用 doParallel 计算 R 中邮政编码之间的距离?

Foreach和doparallel而不是R中的for循环

并行化随机森林