[[ノート/ノート]]~
[[ノート/R]]~
訪問者数 &counter();      最終更新 &lastmod();

**マルチコアでR (2015-12-19) [#d9c18e7c]
Rをマルチコア/並列で使いたい

参考にしたサイト~
>[[Rの並列化(doMC):http://www.pu-hiroshima.ac.jp/~ttetsuji/R/[53]doMC.html]]

パッケージはいろいろとあるようだ。
>[[RでdoMCを使ったお手軽並列計算:http://blog.0093.tv/2011/10/rdomc.html]]

>ここにあるようにやってみたが、うまくいかなかった。

そこで、上記:[[Rの並列化(doMC):http://www.pu-hiroshima.ac.jp/~ttetsuji/R/[53]doMC.html]] に従ってみる。

あらかじめRにパッケージdoMCを入れておく。
 install.packages("doMC")

Rを起動した後、
 library(doMC)
で準備できるので、プログラムを入力。同ページにあった例題は
 N <- 10^4
 cores <- 1:8
 r <- rep(NA, length(cores))
 for (i in cores) {
     registerDoMC(i)
     r[i] <- system.time(foreach(i = 1:N, .combine = "c") %dopar% mean(rnorm(N)))[3]
 }
 
 plot(cores, r/r[1], type = "b", xlab = "number of cores", ylab = "relative time  compared with single core")
 abline(v = 4, lty = 4, col = "red")
 title(main = "Parallel computing by doMC + foreach")
 print(data.frame(cores, time = r, relative = r/r[1]))

これだと、コア=1の時の実行時間との比率を表示するので、アムダールの法則としては
見づらいので、縦軸を1/実行時間に変えてみよう。

 N <- 10^4
 cores <- 1:32
 r <- rep(NA, length(cores))
 for (i in cores) {
     registerDoMC(i)
     r[i] <- system.time(foreach(i = 1:N, .combine = "c") %dopar% mean(rnorm(N)))[3]
 }
 
 plot(cores, r[1]/r, type = "b", xlab = "number of cores", ylab = "relative speedup  compared with single core")
 abline(v = 4, lty = 4, col = "red")
 title(main = "Parallel computing by doMC + foreach")
 print(data.frame(cores, time = r, relative = r[1]/r))

得られたグラフは、
&ref(foreach-speedup.png);

| mint(32cores) | ginger(72cores) |
|&ref(foreach-speedup.png);|&ref(foreach-speedup-ginger.png);|


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS