首页 文章

R中doMC和doParallel之间的区别

提问于
浏览
42

有关 foreach 函数的R中 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

1 回答

  • 25

    doParallel 包是 doSNOWdoMC 的合并,就像 parallelsnowmulticore 的合并一样 . 但是尽管_1848322_具有 doMC 的所有功能,但Rich Calaway告诉我革命分析,他们希望保持 doMC ,因为它在某些情况下效率更高,即使 doMC 现在使用 parallel 就像 doParallel . 我没有亲自运行任何基准来确定是否以及何时存在显着差异 .

    我倾向于在Linux或Mac OS X计算机上使用 doMC ,在Windows计算机上使用 doParallel ,在Linux集群上使用 doMPI ,但 doParallel 确实适用于所有这些平台 .


    至于不同的注册方法,如果你执行:

    registerDoParallel(cores=3)
    

    在Windows机器上,它将隐式创建一个集群对象,以便以后与 clusterApplyLB 一起使用,而在Linux和Mac OS X上,不会创建或使用集群对象 . 简单地记住核心数,并在以后调用 mclapply 时将其用作 mc.cores 参数的值 .

    如果你执行:

    cl <- makeCluster(3)
    registerDoParallel(cl)
    

    然后,无论平台如何,注册的集群对象都将与 clusterApplyLB 一起使用 . 您是正确的,在这种情况下,您有责任在创建集群对象后关闭集群对象,而隐式集群对象会自动关闭 .

相关问题