Snowfall的sfApply和sfClusterApplyLB比普通循环或sapply慢

时间:2013-07-29 15:00:24

标签: r snowfall

当我在R中应用此代码时,循环和sapply比降雪函数更快。我究竟做错了什么? (使用Windows 8)

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 个答案:

答案 0 :(得分:1)

如果发送到每个工作节点的函数花费很少的时间,则并行化的开销会导致任务的总持续时间比连续运行作业所花费的时间更长。当发送到工作节点的作业花费大量时间(至少几秒)时,并行化将真正显示出改进的性能。

另见:

搜索[r] parallel会产生至少20个与您类似的问题,包括您可以采取哪些措施来解决问题。