R中doMC和doParallel之间的区别

时间:2015-03-11 14:52:03

标签: r parallel-processing domc doparallel

R中关于doParallel函数的doMCforeach之间有什么区别? doParallel支持windows,unix-like,而doMC仅支持unix-like。换句话说,为什么doParallel无法直接替换doMC?谢谢。

更新: doParallel构建于parallel,基本上是multicoresnow的合并,并自动为您的系统使用适当的工具。因此,我们可以使用doParallel来支持多系统。换句话说,我们可以使用doParallel来替换doMC

参考:http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

BTW,registerDoParallel(ncores=3)

之间有什么区别
cl <- makeCluster(3)
registerDoParallel(cl)

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

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

1 个答案:

答案 0 :(得分:27)

doParallel包是doSNOWdoMC的合并,而parallelsnowmulticore的合并。但是虽然doParallel具有doMC的所有功能,但我从Rich Calaway的革命分析中得知,他们希望保留doMC,因为它在某些情况下效率更高,即使{ {1}}现在使用doMC就像parallel一样。我没有亲自运行任何基准来确定是否以及何时存在显着差异。

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


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

doParallel

在Windows机器上,它将隐式创建一个集群对象,以便以后与registerDoParallel(cores=3) 一起使用,而在Linux和Mac OS X上,不会创建或使用集群对象。只需记住核心数量,并在调用clusterApplyLB后将其用作mc.cores参数的值。

如果您执行:

mclapply

然后,无论平台如何,注册的群集对象都将与cl <- makeCluster(3) registerDoParallel(cl) 一起使用。你是对的,在这种情况下,你有责任在创建集群对象后关闭它,而隐式集群对象会自动关闭。