并行化无法与foreach包一起使用

9
使用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循环声明所有五个循环以串行方式运行。 - Robert Harvey
我感觉我误解了这个vignette。我以为使用%dopar%会导致foreach循环内的任何内容在每个i值上并行运行。在第8页的第一段中,可以读到:“要使先前的任何示例并行运行,您只需将%do%替换为%dopar%”。我的错误在哪里? - Remi.b
你是否收到了警告信息:“执行%dopar%时顺序执行:未注册并行后端”? - Steve Weston
1个回答

22
你需要注册一个并行后端。可以像这样执行操作:
library(doParallel)
registerDoParallel(cores=4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接