2013-07-29 14 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个问题像你这样的,包括更多的细节,你可以做些什么来解决这个问题。