Snowfall 的 sfApply 和 sfClusterApplyLB 比正常循环或 sapply 慢 [重复]

Posted

技术标签:

【中文标题】Snowfall 的 sfApply 和 sfClusterApplyLB 比正常循环或 sapply 慢 [重复]【英文标题】:Snowfall's sfApply and sfClusterApplyLB is slower than normal loop or sapply [duplicate] 【发布时间】:2013-07-29 10:36:24 【问题描述】:

当我在 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

【问题讨论】:

【参考方案1】:

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

另见:

Why is the parallel package slower than just using apply?

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

【讨论】:

以上是关于Snowfall 的 sfApply 和 sfClusterApplyLB 比正常循环或 sapply 慢 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

$ 使用 snowFall 的问题

利用snowfall.jquery.js实现满屏爱心表白代码

R Snowfall - 难以实现调用其他函数的函数

为集群上的所有节点开启所有 CPU:snow/snowfall 包

R Snowfall - 在并行函数中调用并行函数?

什么时候需要使用 sfExport(R Snowfall 包)