[[ノート/ノート]]~
[[ノート/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);|