为什么以下代码的并行化需要运行太多?

时间:2016-07-08 16:30:45

标签: r time foreach parallel-processing

以下代码应该非常容易运行。在顺序模式下,它在不到一秒的时间内执行。然而,当我使它平行时,它似乎需要永远运行。如果我将矢量长度设置为100,那么代码运行正常,所以我不认为这是一个结构性问题。

  library(foreach)
    library(doParallel)
    cl <- makeCluster(4)
    registerDoParallel(cl)
    bvec <-as.vector(1:1e3)
    avec <-as.vector(1:1e3)
    sim= function(x,y) 10*x+y
    system.time(x <-
       foreach(b=bvec, .combine='cbind') %:%
       foreach(a=avec, .combine='c') %dopar% {
         sim(a, b)
         })

有什么收获? 赞赏。

1 个答案:

答案 0 :(得分:1)

并行性需要相当多的开销。由于您的“sim”功能在计算上很便宜,因此开销的成本超过了并行执行“sim”的性能优势。这就是为什么你得到更大矢量长度的预期结果。