R 中关于 foreach
函数的 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
最佳答案
doParallel
包是 doSNOW
的合并和doMC
,相当于 parallel
是 snow
的合并和multicore
。但尽管doParallel
具有 doMC
的所有功能,革命分析公司的 Rich Calaway 告诉我,他们想保留 doMC
因为它在某些情况下效率更高,尽管doMC
现在使用parallel
就像 doParallel
。我个人没有运行任何基准测试来确定是否以及何时存在显着差异。
我倾向于使用doMC
在 Linux 或 Mac OS X 计算机上,doParallel
在 Windows 计算机上,以及 doMPI
在 Linux 集群上,但是 doParallel
确实适用于所有这些平台。
至于不同的注册方式,如果执行:
registerDoParallel(cores=3)
在 Windows 计算机上,它将隐式创建一个集群对象以供以后与 clusterApplyLB
一起使用。 ,而在 Linux 和 Mac OS X 上,不会创建或使用任何集群对象。核心数量被简单地记住并用作 mc.cores
的值。稍后调用 mclapply
时争论.
如果执行:
cl <- makeCluster(3)
registerDoParallel(cl)
那么注册的集群对象将与clusterApplyLB
一起使用与平台无关。您是对的,在这种情况下,您有责任在创建集群对象后关闭它,而隐式集群对象会自动关闭。
关于r - R中doMC和doParallel的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989855/