始める無料で始める

Timings parSapply()

サイコロゲームの実行は「恥ずかしいほど並列化可能(embarrassingly parallel)」です。こうした種類のシミュレーションは、たいてい(いつもではありませんが)良いスピードアップが得られます。これまでと同様に、microbenchmark() または system.time() が使えます。今回は簡単のため、この演習では system.time() を使います。

この演習はコースの一部です

効率的なRコードの書き方

コースを見る

演習の手順

play() 関数はワークスペースに定義済みです。ここでは10万回ゲームを行うと仮定します。

  • no_of_games1e5 に設定してください。
  • system.time() を使って、直列で play() を繰り返し呼び出したときの時間を計測します。
    • sapply()1:no_of_gamesplay() ラッパー関数で呼び出します。
    • 結果を serial に代入します。
    • この呼び出し全体を system.time() で包んで計測します。
  • 4コアのクラスターオブジェクトを作成し、play() 関数をそのクラスターにエクスポートします。
  • system.time() を使って、並列で play() を繰り返し呼び出したときの時間を計測します。
    • serial を作成したときのコードを書き換え、並列で動作するようにしてください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Set the number of games to play
no_of_games <- ___

# Time serial version
system.time(serial <- sapply(1:___, function(i) play()))

# Set up cluster
cl <- makeCluster(___)
clusterExport(cl, "play")

# Time parallel version
system.time(par <- ___)

# Stop cluster
stopCluster(cl)
コードを編集して実行