关于 doParallel
函数,R 中的 doMC
和 foreach
之间有什么区别? 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)
和 registerDoParallel(ncores=3)
有什么区别?
cl <- makeCluster(3)
registerDoParallel(cl)
似乎
stopCluster(cl)
可以自动停止集群,而第二个不会自动停止,需要 0x251812231343141 。引用:http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
最佳答案
doParallel
包是 doSNOW
和 doMC
的合并,就像 parallel
是 snow
和 0x251813123131313131313 的合并。但是,尽管multicore
有doParallel
所有功能,我被革命Analytics(分析)的丰富卡勒威游乐告诉记者,他们希望保持doMC
周围,因为它是在某些情况下更有效,即使doMC
现在使用doMC
就像parallel
。我没有亲自运行任何基准测试来确定是否以及何时存在显着差异。
我倾向于在 Linux 或 Mac OS X 计算机上使用 doParallel
,在 Windows 计算机上使用 doMC
,在 Linux 集群上使用 doParallel
,但 doMPI
的所有平台都可以使用。
至于不同的注册方式,如果执行:
registerDoParallel(cores=3)
在 Windows 机器上,它将隐式创建一个集群对象,供以后使用
doParallel
,而在 Linux 和 Mac OS X 上,没有创建或使用集群对象。内核数被简单地记住,并在稍后调用 clusterApplyLB
时用作 mc.cores
参数的值。如果执行:
cl <- makeCluster(3)
registerDoParallel(cl)
那么无论平台如何,注册的集群对象都将与
mclapply
一起使用。您是正确的,在这种情况下,您有责任在创建集群对象后关闭它,而隐式集群对象会自动关闭。关于r - R中doMC和doParallel的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28989855/