ノート/ノート
ノート/R
訪問者数 259      最終更新 2015-12-19 (土) 14:39:48

マルチコアでR (2015-12-19)

Rをマルチコア/並列で使いたい

参考にしたサイト

Rの並列化(doMC):http://www.pu-hiroshima.ac.jp/~ttetsuji/R/[53]doMC.html

パッケージはいろいろとあるようだ。

RでdoMCを使ったお手軽並列計算

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

そこで、上記: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))

得られたグラフは、

mint(32cores)ginger(72cores)
foreach-speedup.pngforeach-speedup-ginger.png

添付ファイル: fileforeach-speedup-ginger.png 69件 [詳細] fileforeach-speedup.png 64件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-19 (土) 14:39:48 (554d)