【问题标题】:R no performance difference between lapply and mclapplyR lapply 和 mclapply 之间没有性能差异
【发布时间】:2014-12-13 03:30:10
【问题描述】:

您好,我正在尝试并行使用 R 包,特别是 mclapply() 函数来使用我的 8 核系统生成 10000 列和 24 行的移动平均值(列的移动平均值,因此 24 个数据点正在被平滑,10000 次)。

但是,当我将标准 lapply 的性能速度与 mclapply 进行比较时,我发现速度并没有提高。有人可以解释为什么我看不到运行时间的差异吗?

> x = replicate(10000, rnorm(24)) 
> system.time({
+   tmpp = lapply(list(x), function(x) {
+     rollmean(x, 7)
+   })
+ })
user  system elapsed 
15.309   7.893  23.201 
> 
> detectCores() 
[1] 8
> 
> system.time({
+   tmpp = mclapply(list(x),mc.cores=8, function(x) {
+     rollmean(x, 7)
+   })
+ })
user  system elapsed 
15.628   7.948  23.573 

【问题讨论】:

  • 这可能是深奥的,你的函数风格是不确定的。 lapply(x,rollmean,k=7) 更干净,而且可能更快。

标签: r parallel-processing


【解决方案1】:

你给出的是一个列表,所以没有并行性:

 x <-replicate(10000, list(rnorm(24)) )  # list length 10000 
 library(zoo)
 library(parallel)
 system.time({
    tmpp = lapply(x, function(x) {
      rollmean(x, 7)
    })
  })
#   user  system elapsed 
#  8.250   0.044   8.249 
 parallel::detectCores()
#[1] 8
 system.time({
    tmpp = mclapply(x, mc.cores=8, function(z) {
      rollmean(z, 7)
    })
  })
#   user  system elapsed 
# 14.376   8.858   3.922 

(这是使用 6 年的 MacPro。)

【讨论】:

  • 感谢您帮助我了解面向列表的应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多