并行计算时将 n 项任务分配到 n+1 个核心上是否有意义? R

Does it make sense do distribute n tasks over n+1 cores when parallel computing? R

我刚开始在 R 中进行并行计算以优化我的代码,虽然我了解基本概念,但我有一个看似简单的问题我还没有找到答案。

如果我的计算机上有一个 n 迭代的 foreach 循环和 m>n 内核可用,它会加速我的代码吗如果我将 n+1 或更多核心用于此计算,甚至更多,而不是分配 n 个核心?

library(doParallel)
library(foreach)

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

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

[...]
} 

stopCluster(cl)

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

谢谢。

答案是否定的。其他人会闲着。

例如运行 打开系统监视器:

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)