R中doMC和doParallel之间的区别

Zhi*_*Jia 49 parallel-processing r domc doparallel

关于函数R doParalleldoMCR 之间的区别是什么foreachdoParallel支持windows,unix-like,同时doMC仅支持unix-like.换句话说,为什么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)
Run Code Online (Sandbox Code Playgroud)

它似乎registerDoParallel(ncores=3)可以自动停止集群,而第二个不会自动停止和需要stopCluster(cl).

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

Ste*_*ton 28

doParallel包是合并doSNOWdoMC,就像parallel是一个合并snowmulticore.但是虽然doParallel具有所有的功能doMC,但是康卡特分析的Rich Calaway告诉我,他们想要保留doMC,因为它在某些情况下更有效率,即使doMC现在使用parallel就像doParallel.我没有亲自运行任何基准来确定是否以及何时存在显着差异.

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


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

registerDoParallel(cores=3)
Run Code Online (Sandbox Code Playgroud)

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

如果你执行:

cl <- makeCluster(3)
registerDoParallel(cl)
Run Code Online (Sandbox Code Playgroud)

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

  • Revolution Analytics的Rich Calaway是否提供有关“ doMC”的“某些情况”的文字或文档?另外,在`ncores`和`makeCluster`情况下,考虑性能会有什么区别吗?我开发了一个R [cogena](https://github.com/zhilongjia/cogena)软件包,该软件包最初是使用`doMC`复制的。几个小时前,我将其更改为`doParallel`以支持Windows。当混合使用`doMC`和`doParallel`实现时,这是一个涉及“ NAMESPACE”和“ import”的杂物库。谢谢。 (2认同)