2014-12-13 73 views
0

你好我試圖使用R包並行,特別是mclapply()函數來使用我的8核心系統產生一個移動平均超過10000列和24行(移動平均在這些列上,因此24個數據點被平滑了10000次)。R沒有lapply和mclapply之間的性能差異

但是,當我比較標準樂器與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 
+0

這也許是深奧的,你的函數的風格是前途未卜。 'lapply(x,rollmean,k = 7)'更清潔,可能更快。 – user5957401 2017-09-13 18:38:39

回答

2

你給一個列表,所以沒有並行性(這是在6歲的MacPro)

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 

+0

感謝您幫助我理解列表導向應用程序。 – ElChapo 2014-12-13 06:03:01

相關問題