![]() |
ノート/R/マルチコアhttp://pepper.is.sci.toho-u.ac.jp/pepper/index.php?%A5%CE%A1%BC%A5%C8%2FR%2F%A5%DE%A5%EB%A5%C1%A5%B3%A5%A2 |
![]() |
ノート/ノート
ノート/R
訪問者数 1078 最終更新 2015-12-19 (土) 14:39:48
Rをマルチコア/並列で使いたい
参考にしたサイト
Rの並列化(doMC):http://www.pu-hiroshima.ac.jp/~ttetsuji/R/[53]doMC.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))
得られたグラフは、