在并行计算时,在n + 1个内核上分配n个任务是否有意义? [R

时间:2018-08-13 11:58:41

标签: r foreach doparallel

我刚刚开始在Parallel in R中进行计算以优化我的代码,尽管我了解基本概念,但我有一个看似简单的问题,但找不到答案。

如果我的计算机上有一个 n 个迭代和 m> n 个内核的foreach循环,那么如果我将与分配 n 个内核相反,此计算需要n + 1 个或更多内核?

library(doParallel)
library(foreach)

cl <- makeCluster(m) #using m cores
registerDoParallel(cl)

object <– foreach(i = 1:n, ...) %dopar% {

[...]
} 

stopCluster(cl)

我认为不行,但这全归结于foreach如何将工作分配到核心。是一次每个内核一次迭代,还是将工作进一步细分?

谢谢。

1 个答案:

答案 0 :(得分:0)

答案是否定的。其他人将处于闲置状态。

例如在系统监视器打开的情况下运行它:

library(doParallel)

registerDoParallel(cl <- makeCluster(4))

object <- foreach(i = 1:2) %dopar% {

  start <- proc.time()[3]
  while (proc.time()[3] - start < 10) NULL
} 

stopCluster(cl)