并行计算时将 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)
我刚开始在 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)