并行化不适用于 foreach 包
Posted
技术标签:
【中文标题】并行化不适用于 foreach 包【英文标题】:Parallelization doesn't work with the foreach package 【发布时间】: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%:未注册并行后端”?
【参考方案1】:
您需要注册一个并行后端。做类似的事情
library(doParallel)
registerDoParallel(cores=4)
【讨论】:
以上是关于并行化不适用于 foreach 包的主要内容,如果未能解决你的问题,请参考以下文章