R中doMC和doParallel的区别

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

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

ref: 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)

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

doParallel软件包是doSNOWdoMC的合并doMC ,就像snowmulticore合并一样。 但尽pipedoParallel具有doParallel所有function, doMC革命分析公司的Rich Calaway告诉我,他们想要保持doMC ,因为在某些情况下它更高效,尽pipedoMC现在像doParallel一样使用parallel 。 我没有亲自运行任何基准来确定是否以及何时存在显着差异。

我倾向于在Linux或Mac OS X计算机上使用doMC ,在Windows计算机上使用doMPI ,在Linux群集上使用doParallel ,但doParallel在所有这些平台上都能正常工作。


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

 registerDoParallel(cores=3) 

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

如果您执行:

 cl <- makeCluster(3) registerDoParallel(cl) 

那么无论平台如何,注册的集群对象都将与clusterApplyLB一起使用。 在这种情况下,您是正确的,因为您创build集群对象是closures集群对象的责任,而隐式集群对象是自动closures的。