2016-08-02 12 views
1

rのシリアルおよびパラレル実行のタイミングを評価しようとしていました。 "lapply"関数と "parLapply"関数を比較すると、次の結果が得られました。parLapplyを使用した経過時間/ユーザー時間の短縮

lapply
vec1 <- 1:400000 
system.time(result <- lapply(vec1, function(x) x+2)) 

#using 3 nodes 
cl3 <- snow::makeCluster(c("localhost","localhost","localhost"), type = "SOCK") 
snow::clusterExport(cl3, c("vec1"), envir = .GlobalEnv) 
system.time(clus3 <- snow::parLapply(cl3, vec1, function(x) x+2)) 
snow::stopCluster(cl3) 

:ユーザー時間= 0.69、経過時間= 0.70 parLapply:ユーザーの時間が短縮されますが、ユーザーの時間= 0.49、経過時間= 0.92

、経過時間が増加しているようです。これが起こることができますか私は間違って何かをしましたか?並列実行を使用する場合は、経過時間を短縮する必要があると考えていたためです。

答えて

1

単一ノードで計算されたタスクが実行に非常に時間がかかる場合は、これが経過時間の短縮に反映されます。一方、計算量が少ない場合は、ほとんどの時間がアップキープ(セッションの設定、データの移動、データの取得...)に費やされ、並列計算の効果を無効にしたり否定したりします。

関連する問題