foreach:%do%需要比1-worker%dopar%更多的处理时间

foreach:%do%需要比1-worker%dopar%更多的处理时间,r,foreach,parallel-processing,R,Foreach,Parallel Processing,我准备了一个小的基准来比较当使用多个工人进行处理时速度的增益 library(foreach) library(doParallel) f <- function(n){ #just a function that needs some time sample(n, 1000000, replace = T) sqrt(n) } before = Sys.time() y = foreach(i=1:10000, .combine = c) %do% { f(i) } af

我准备了一个小的基准来比较当使用多个工人进行处理时速度的增益

library(foreach)
library(doParallel)

f <- function(n){ #just a function that needs some time
  sample(n, 1000000, replace = T)
  sqrt(n)
}

before = Sys.time()
y = foreach(i=1:10000, .combine = c) %do% {
  f(i)
}
after = Sys.time()
after - before # Time difference of 1.764439 mins (105.86634s)


benchmark <- function(n){
  f <- function(n){
    sample(n, 1000000, replace = T)
    sqrt(n)
  }

  cl <- makeCluster(n)
  registerDoParallel(cl)

  before = Sys.time()
  y = foreach(i=1:10000, .combine = c) %dopar% {
    f(i)
  }
  after = Sys.time()

  stopCluster(cl)

  after - before
}

benchmark(1) #Time difference of 1.49561 mins (89.7366s)
benchmark(2) #Time difference of 44.76028 secs
benchmark(3) #Time difference of 32.92803 secs
benchmark(4) #Time difference of 28.984 secs
benchmark(5) #Time difference of 27.46466 secs
benchmark(6) #Time difference of 26.48457 secs
benchmark(7) #Time difference of 26.48769 secs
benchmark(8) #Time difference of 29.07004 secs
库(foreach)
图书馆(双平行)

我已经修改了代码。现在它可能会自动重新运行。您如何运行此脚本?例如,你用的是RStudio吗?是的,我用的是RStudio。我正在使用CMD+Enter运行代码片段。然而,依咪浩,它不应该对处理时间有任何影响。我问你是如何运行你的示例的,因为我无法重现你的结果。我的
%dopar%
时间比我的
%do%
时间稍微长一些,正如预期的那样,即使在使用带有CMD+Enter的RStudio时也是如此。我已经重新运行了一会儿代码,现在1-worker%dopar%的时间比%do%的时间长。这很奇怪,因为我没有更新任何软件包。(在问这个问题之前,我已经运行了多次基准测试,每次结果都是相似的)。