【问题标题】:why dopar is not reducing time?为什么dopar没有减少时间?
【发布时间】:2020-05-01 16:50:08
【问题描述】:

我使用了这里的一个例子 https://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
system.time(foreach(i=1:10000) %do% sqrt(i))
stopCluster(cl)

这是我的输出

Loading required package: foreach
Loading required package: iterators
Loading required package: parallel

> system.time(foreach(i=1:10000) %dopar% sqrt(i))
   user  system elapsed
  6.307   0.537   7.499
> system.time(foreach(i=1:10000) %do% sqrt(i))
   user  system elapsed
  4.581   0.035   4.622

为什么用 dopar 没有减少时间?

【问题讨论】:

    标签: r doparallel


    【解决方案1】:

    我失去了速度。您需要记住,进行并行计算是有开销的:

    2 个节点:

    library(doParallel)
    cl <- makeCluster(2)
    registerDoParallel(cl)
    system.time(foreach(i=1:10000) %dopar% sqrt(i))
    #   user  system elapsed 
    #   1.71    0.26    2.13 
    system.time(foreach(i=1:10000) %do% sqrt(i))
    #   user  system elapsed 
    #   1.36    0.00    1.36 
    stopCluster(cl)
    

    12 个节点:

    cl <- makeCluster(12)
    registerDoParallel(cl)
    system.time(foreach(i=1:10000) %dopar% sqrt(i))
    #   user  system elapsed 
    #   1.92    0.14    2.09 
    system.time(foreach(i=1:10000) %do% sqrt(i))
    #   user  system elapsed 
    #   1.28    0.00    1.28 
    stopCluster(cl)
    

    对于这样一个简单的函数,你不能指望时间会减少与节点数量相对应的因子。

    比较:

    heavy_computation <- function(i) {
      Sys.sleep(0.1)
      1 + i
    }
    
    cl <- makeCluster(12)
    registerDoParallel(cl)
    system.time(foreach(i=1:100) %dopar% heavy_computation(i))
    #   user  system elapsed 
    #   0.03    0.00    0.95 
    system.time(foreach(i=1:100) %do% heavy_computation(i))
    #   user  system elapsed 
    #   0.00    0.00   10.28 
    stopCluster(cl)
    

    为了期望速度提升,函数应该足够昂贵,以便将任务发送给孩子的开销相对较小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2018-06-04
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多