2016-08-02 111 views
1

我試圖評估r中的串行和並行執行的時間。當比較「lapply」函數和「parLapply」函數時,我得到了以下結果。使用parLapply減少已用時間/用戶時間

vec1 <- 1:400000 
system.time(result <- lapply(vec1, function(x) x+2)) 

#using 3 nodes 
cl3 <- snow::makeCluster(c("localhost","localhost","localhost"), type = "SOCK") 
snow::clusterExport(cl3, c("vec1"), envir = .GlobalEnv) 
system.time(clus3 <- snow::parLapply(cl3, vec1, function(x) x+2)) 
snow::stopCluster(cl3) 

lapply:用戶時間= 0.69,已播放時間= 0.70 parLapply:用戶時間= 0.49,已播放時間= 0.92

雖然用戶時間減少,經過時間似乎增加。這可能會發生嗎或我做錯了什麼?因爲我認爲在使用並行執行時應減少流逝的時間。

回答

1

如果您的任務在單個節點上計算需要很長時間才能運行,這將反映在減少的運行時間中。另一方面,如果計算量很小,大部分時間將用於維護(建立會話,移動數據,檢索數據...),並且無效甚至否定並行計算的效果。