0

当我在 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 次复制后经过的时间:

循环 0.05
0.07
sfClusterApplySB 2.94
sf应用 0.26
4

1 回答 1

1

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

也可以看看:

搜索[r] parallel将产生至少 20 个与您类似的问题,包括有关您可以采取哪些措施来解决问题的更多详细信息。

于 2013-07-29T16:12:01.400 回答