2013-07-29 16 views
0

當我在R中應用此代碼時,循環和sapply比降雪的函數更快。我究竟做錯了什麼? (使用的窗戶8)降雪的sfApply和sfClusterApplyLB比正常的循環或補充要慢

library(snowfall) 
a<- 2 
sfInit(parallel = TRUE, cpus = 4) 
wrapper <- function(x){((x*a)^2)/3} 
sfExport('a') 
values <- seq(0, 100,1) 
benchmark(for(i in 1:length(values)){wrapper(i)},sapply(values,wrapper),sfLapply(values, wrapper),sfClusterApplyLB(values, wrapper)) 
sfStop() 

經過時間爲100次重複後:

 
loop    0.05 
sapply   0.07 
sfClusterApplySB 2.94 
sfApply   0.26 

回答

1

如果被髮送到每個工作節點的功能所花的時間量小,開銷的並行化導致整個任務的持續時間比連續運行作業花費更長的時間。當發送給工作節點的作業花費大量時間(至少幾秒)時,平行化確實會提高性能。

參見:

搜索[r] parallel將產生至少20個問題像你這樣的,包括更多的細節,你可以做些什麼來解決這個問題。