parallelパッケージ - parApply

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

Colin Gillespie

Jumping Rivers & Newcastle University

parallelパッケージ

  • 2011年よりRに標準搭載
    library("parallel")
    
    • クロスプラットフォーム対応:Windows、Linux、Macで動作
    • 標準関数の並列バージョンを提供
効率的なRコードの書き方

apply()関数

  • apply()はforループに相当

    • 行列の各行・列に関数を_適用_する
  • 10列・10,000行の行列:

m <- matrix(rnorm(100000), ncol = 10)
  • applyはforループより簡潔
res <- apply(m, 1, median)
効率的なRコードの書き方

並列処理への変換

  • パッケージの読み込み
    • コア数の指定
    • クラスターオブジェクトの作成
    • parApply()に切り替え
    • 停止!
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
効率的なRコードの書き方

注意点

ルイス・キャロルの言葉より

急げば急ぐほど、遅れる。

  • スレッド間通信のオーバーヘッドにより、並列処理が遅くなる場合がある
# シリアル版
apply(m, 1, median)
# 並列版
parApply(cl, m, 1, median)
  • 両方のソリューションをベンチマークする
効率的なRコードの書き方

練習しましょう!

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

Preparing Video For Download...