R中doMC和doParallel的区别
R中关于foreach
函数的doParallel
和doMC
什么区别? doParallel
支持windows,类似unix,而doMC
只支持unix。 换句话说,为什么doParallel
不能直接取代doMC
? 谢谢。
更新: doParallel
build立在parallel
基础上,这本质上是multicore
和snow
的合并,并自动为您的系统使用适当的工具。 因此,我们可以使用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
软件包是doSNOW
和doMC
的合并doMC
,就像snow
和multicore
合并一样。 但尽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的。