R中doMC和doParallel的区别
R中关于foreach函数的doParallel和doMC什么区别? doParallel支持windows,类似unix,而doMC只支持unix。 换句话说,为什么doParallel不能直接取代doMC ? 谢谢。
更新: doParallelbuild立在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的。