首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中doMC和doParallel的区别

R中doMC和doParallel的区别
EN

Stack Overflow用户
提问于 2015-03-11 22:52:03
回答 1查看 15.6K关注 0票数 51

关于foreach函数,doParallel和R中的doMC有什么不同?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)

代码语言:javascript
复制
cl <- makeCluster(3)
registerDoParallel(cl)

看起来registerDoParallel(ncores=3)可以自动停止集群,而第二个不会自动停止,需要stopCluster(cl)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-12 10:45:47

doParallel包是doSNOWdoMC的合并,就像parallelsnowmulticore的合并一样。但是,尽管doParallel拥有doMC的所有功能,但革命分析公司的Rich Calaway告诉我,他们希望保留doMC,因为在某些情况下它更高效,即使doMC现在像doParallel一样使用parallel。我个人没有运行任何基准测试来确定是否以及何时存在显着差异。

我倾向于在Linux或Mac计算机上使用doMC,在Windows计算机上使用doParallel,在Linux集群上使用doMPI,但是doParallel确实可以在所有这些平台上运行。

对于不同的注册方法,如果您执行:

代码语言:javascript
复制
registerDoParallel(cores=3)

在Windows机上,它将隐式创建集群对象以供以后与clusterApplyLB一起使用,而在Linux和Mac上,不会创建或使用集群对象。内核数只需记住,并在稍后调用mclapply时用作mc.cores参数的值。

如果执行以下命令:

代码语言:javascript
复制
cl <- makeCluster(3)
registerDoParallel(cl)

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

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28989855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档