r - R中doMC和doParallel的区别

标签 r parallel-processing domc doparallel

R 中关于 foreach 函数的 doParalleldoMC 有什么区别? doParallel 支持windows、unix-like,而doMC 仅支持unix-like。换句话说,为什么doParallel不能直接替代doMC呢?谢谢。

更新: doParallel 构建于 parallel 之上,它本质上是 multicoresnow 的合并,并自动使用适当的工具你的系统。因此,我们可以使用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 ,相当于 parallelsnow 的合并和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/

相关文章:

r - 选择循环中的列

css - 在 R 中的标题和其他元素之间留出空间( Shiny 的应用程序)

r - geom_text_repel 的控制颜色

r - 如何将单词分配给数据框中的数字

haskell - 如何使用 Haskell 中的策略编写并行归约?

c - 四个进程执行速度比两个进程慢

c++ - C++14 中 for 循环中的并行网络下载

R 不再并行运行

R foreach : Number of threads reduce to 1

r - 多次迭代后出现 %dopar% 错误