tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

Rの並列化

Rも並列化で高速化することが可能らしい。使うパッケージとしてはRmpi、snow、pforeachがある。pforeachが一番後発なので多分使いやすいのだろう?

2019/02/18 追記

parallel, foreach, dosnow, doparallel, snowfall, domc, furrr, future, future.batchtools, dompi など山ほど出てくる。

foreachパッケージをdoMCやdoSNOWパッケージと組み合わせて使うのが便利そうである。どちらを使うかであるが、foreach-based Parallelismを見ると

4.2. doMC: shared-memory parallelism
4.3. doSNOW: distributed-memory parallelism

とのことであり、doMCはそもそもWindows用のバイナリを配布していない。ということで、他の人に使ってもらうときはdoSNOW、自分で使うときは基本的にdoMC、クラスタを使うときはdoSNOWということにしておく。%dopar%でだめなら%do%にすれば並列化をoffにできる。

# doMC + foreach
library(foreach)
library(doMC)

registerDoMC(cores=as.integer(system("nproc", intern=TRUE)) - 1)

result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% {
  myProc()
}
result
# doSNOW + foreach
library(foreach)
library(doSNOW, quietly=TRUE)
library(parallel) # detectCores

cluster <- makeCluster(detectCores(), type="SOCK")
# cluster <- makeCluster(detectCores() - 1, type="MPI")
registerDoSNOW(cluster)

result <- foreach(i=1:10, .combine=c, .export=ls(envir=parent.frame())) %dopar% {
  myProc()
}
result

stopCluster(cluster)

2019/02/19 追記

GPUも使ってみたい。R Language - GPU加速コンピューティング | r Tutorialを見るにnvidia製gpuならgputools、それ以外ならgpurを使うしかなさそう。openclパッケージはOpenCLをベタ書きするのでもはやRではない。