R中doMC和doParallel的区别
Posted
技术标签:
【中文标题】R中doMC和doParallel的区别【英文标题】:the difference between doMC and doParallel in R 【发布时间】:2015-05-13 10:24:28 【问题描述】:关于foreach
函数,R中的doParallel
和doMC
有什么区别? doParallel
支持 windows,类 unix,而 doMC
仅支持类 unix。换句话说,为什么doParallel
不能直接替换doMC
?谢谢。
更新:
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
【问题讨论】:
只是为了让两者联系起来***.com/questions/28829300/… doParallel, cluster vs cores的可能重复 【参考方案1】:doParallel
包是doSNOW
和doMC
的合并,就像parallel
是snow
和multicore
的合并一样。但是尽管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
的“特定情况”的文字或文件?此外,考虑ncores
和makeCluster
情况下的性能有什么区别吗?我开发了一个 R cogena 包,其中并行复制了 doMC
最初。几个小时前,我刚刚将其更改为 doParallel
以支持 Windows。当通过doMC
和doParallel
的混合实现时,这是一个关于NAMESPACE
和import
的垃圾复合体。谢谢。
@Zhilong 在 R 包中,我认为您应该让最终用户注册在他们的硬件上最适合的后端。这使您的代码更简单、更灵活。这是分离后端的初衷,也是 caret 和 plyr 这样做的方式。
我明白了你的想法。谢谢你。如果一般机器有性能差异,我会按照你的建议做。如果没有,我更喜欢我的包到目前为止易于使用。我给doParallel
的维护者发了电子邮件,会及时更新。
这是来自 Rich of Revolution Analytics 的回复(抱歉,对 SO 的评论有点长,我只是粘贴结论):“我建议大多数新用户使用 doParallel,因为两者都支持它Linux 和 Windows,并使用内置的并行包。此外,我建议使用并行的 fork 集群特性和类似雪的接口,以避免在 Linux 上出现僵尸进程。”
错字:该选项称为cores
而不是ncores
。它不会让我用少于 6 个字符来编辑你的答案。以上是关于R中doMC和doParallel的区别的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中使用 doParallel 时,如何获取引发错误的行号?
使用 foreach 函数和 doParallel 库在 R 中嵌套 for 循环