为什么这个R计算在多个内核上运行速度较慢而单个内核运行速度更快?

时间:2018-02-01 21:55:58

标签: r performance parallel-processing multicore slowdown

两个矩阵

library(parallel)
m <- matrix(1:12000000000,  nrow=300000)
p <- matrix(21:32, nrow=3)

# Use all pairings of i and j
i_vec <- rep(seq_len(ncol(m)), times = ncol(m))
j_vec <- rep(seq_len(ncol(m)), each = ncol(m))

的多核

system.time(mcmapply(i_vec, j_vec, 
   FUN = function(i, j) {
     if (i <= j) return(0)
     sqrt(sum(m[,i]) * sum(m[,j]) * sum(p[,i]) * sum(p[,j]))
   }, mc.cores=7))

单核

system.time(mapply(i_vec, j_vec, 
      FUN = function(i, j) {
      if (i <= j) return(0)
      sqrt(sum(as.numeric(m[,i])) * sum(as.numeric(m[,j])) * sum(as.numeric(p[,i])) * sum(as.numeric(p[,j])))
                 }))

在mcmapply中使用七个核心运行此计算会产生

  user  system elapsed 
 0.014   0.485   0.019 

并且在mapply中有1个核心

 user  system elapsed 
0.008   0.000   0.008 

并为mcmapply指定1个核心

 user  system elapsed 
0.007   0.000   0.007 

我无法弄清楚为什么多核比单核更慢。是因为计算成本不是很高吗?

1 个答案:

答案 0 :(得分:4)

当您对代码进行并行化时,您总会得到一些开销。由于此处的工作量非常简单,因此开销大于工作负载。如果您使用需要一些时间的工作负载,例如Sys.sleep(0.1),您应该看到由于多核计算而加速。