相关疑难解决方法(0)

为什么foreach()%do%有时慢于?

我第一次在R中进行并行化.作为第一个玩具示例,我试过了

library(doMC)
registerDoMC()

B<-10000

myFunc<-function()
{
    for(i in 1:B) sqrt(i)
}

myFunc2<-function()
{
    foreach(i = 1:B)  %do% sqrt(i)
}

myParFunc<-function()
{
    foreach(i = 1:B) %dopar% sqrt(i)
}
Run Code Online (Sandbox Code Playgroud)

我知道sqrt()执行速度太快,无法实现并行化,但我没想到的是,它foreach() %do%会比for()以下更慢:

> system.time(myFunc())
   user  system elapsed 
  0.004   0.000   0.005 
> system.time(myFunc2())
   user  system elapsed 
  6.756   0.000   6.759 
> system.time(myParFunc())
   user  system elapsed 
  6.140   0.524   6.096 
Run Code Online (Sandbox Code Playgroud)

在我看过的大多数例子中,foreach() %dopar%都是比较foreach() %do%而不是for().由于foreach() %do%for()我的玩具示例慢得多,我现在有点困惑.不知何故,我认为这些是构造for循环的等效方法.有什么不同?它们是否相同?是foreach() %do%始终慢?

更新:关于@Peter罚款回答,我更新myFunc如下:

 a<-rep(NA,B) …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r

10
推荐指数
1
解决办法
4199
查看次数

标签 统计

parallel-processing ×1

r ×1