【问题标题】:Parallelization doesn't work with the foreach package并行化不适用于 foreach 包
【发布时间】:2015-08-21 16:32:54
【问题描述】:

使用 foreach 包,我预计以下行将在大约 10 秒内运行

system.time(foreach (i=1:5, .combine='c') %do% {Sys.sleep(2);i})
   user  system elapsed 
  0.053   0.011  10.012 

接下来的代码运行大约需要 2 秒

system.time(foreach (i=1:5, .combine='c') %dopar% {Sys.sleep(2);i})
   user  system elapsed 
  0.069   0.017  10.019 

但它不起作用。

我在 Mac OSX 上,我的机器有 16 个处理器,目前没有运行任何重物。我没有收到任何错误或警告消息。

【问题讨论】:

  • 这里似乎没有什么可以并行化的。您的 for 循环声明所有五个循环都连续运行。
  • 我觉得我误解了vignette。我认为使用 %dopar% 会导致 foreach 循环中的任何内容针对i 的每个值并行运行。在第 8 页的第一段中,您可以阅读:To make any of the previous examples run in parallel, all you have to do is to replace %do% with %dopar%。我的错误是什么?
  • 您是否收到警告消息:“按顺序执行 %dopar%:未注册并行后端”?

标签: r foreach parallel-processing parallel-foreach


【解决方案1】:

您需要注册一个并行后端。做类似的事情

library(doParallel)
registerDoParallel(cores=4)

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2013-01-17
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多