0

このコードを R に適用すると、ループとsapplyスノーフォールの関数よりも高速になります。私は何を間違っていますか?(windows8を使用)

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 に答える