【发布时间】: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