有关 foreach
函数的R中 doParallel
和 doMC
之间有什么区别? doParallel
支持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)
似乎 registerDoParallel(ncores=3)
可以自动停止集群,而第二个不会自动停止并需要 stopCluster(cl)
.
参考:http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
1 回答
doParallel
包是doSNOW
和doMC
的合并,就像parallel
是snow
和multicore
的合并一样 . 但是尽管_1848322_具有doMC
的所有功能,但Rich Calaway告诉我革命分析,他们希望保持doMC
,因为它在某些情况下效率更高,即使doMC
现在使用parallel
就像doParallel
. 我没有亲自运行任何基准来确定是否以及何时存在显着差异 .我倾向于在Linux或Mac OS X计算机上使用
doMC
,在Windows计算机上使用doParallel
,在Linux集群上使用doMPI
,但doParallel
确实适用于所有这些平台 .至于不同的注册方法,如果你执行:
在Windows机器上,它将隐式创建一个集群对象,以便以后与
clusterApplyLB
一起使用,而在Linux和Mac OS X上,不会创建或使用集群对象 . 简单地记住核心数,并在以后调用mclapply
时将其用作mc.cores
参数的值 .如果你执行:
然后,无论平台如何,注册的集群对象都将与
clusterApplyLB
一起使用 . 您是正确的,在这种情况下,您有责任在创建集群对象后关闭集群对象,而隐式集群对象会自动关闭 .