以下代码应该非常容易运行。在顺序模式下,它在不到一秒的时间内执行。然而,当我使它平行时,它似乎需要永远运行。如果我将矢量长度设置为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)
})
有什么收获? 赞赏。
答案 0 :(得分:1)
并行性需要相当多的开销。由于您的“sim”功能在计算上很便宜,因此开销的成本超过了并行执行“sim”的性能优势。这就是为什么你得到更大矢量长度的预期结果。