Rhpcパッケージを試す

統計数理研究所で行われているRユーザ会で,中間先生と中野先生が開発中のRhpcパッケージのお話を聞きました.Rhpcは,snowやRmpiなどの既存の並列計算パッケージの問題点を解決して,スーパーコンピュータなどの大規模クラスター上で効率的に並列計算を行うことを目的として開発されているものです.

早速,Rhpcパッケージをインストールして試してみます.OSはUbuntu13.10です.

OpenMPIのインストール

RhpcパッケージはMPIを使用しているので,ここではOpenMPIをインストールします.

$ sudo apt-get install openmpi-bin libopenmpi-dev

Rhpcパッケージのインストール

Rhpcをインストールするためにはrlecuyerパッケージが必要なので,あらかじめインストールしておきます.

> install.packages("rlecuyer")

統計数理研究所のサイトで中間先生が開設されているRhpcパッケージのページからRhpcパッケージのソースを取得して,インストールします.

$ wget http://prs.ism.ac.jp/~nakama/Rhpc/Rhpc_0.13-332.17.tar.gz
$ R CMD INSTALL xzvf Rhpc_0.13-332.17.tar.gz

動作確認

> library(Rhpc)
 要求されたパッケージ rlecuyer をロード中です
> # 初期化
> Rhpc_initialize()
> # ワーカーへのハンドル
> cl <- Rhpc_getHandle(2)
> # プロセスIDの確認
> Rhpc_worker_call(cl, Sys.getpid)
[[1]]
[1] 12134

[[2]]
[1] 12135
> Rhpc_finalize()
> q()

実行例

上記の中間先生のページそのままですが,行列を生成して各ワーカーへエクスポートして成分の和を求めてみます.

> library(Rhpc)
> Rhpc_initialize()
>
> # ワーカーへのハンドラ
> cl <- Rhpc_getHandle(2)
> Rhpc_numberOfWorker(cl)
[1] 2
>
> # 4000 * 4000の行列の生成
> set.seed(123)
> N <- 4e3
> M <- matrix(runif(N^2),N,N)
>
> # 生成した行列の各ワーカーへのエクスポート
> system.time(Rhpc_Export(cl,"M"))

> # 行列の成分の和を求める関数
> f <- function() sum(M)
> # 行列の成分の和(並列計算しない場合)
> x <- rep(sum(M), Rhpc_numberOfWorker(cl))
> # 行列の成分の和(並列計算した場合)
> y <- unlist(Rhpc_worker_call(cl, f))
> # 両者が同じ値であることの確認
> all.equal(x, y)
>
> Rhpc_finalize()

Rhpcパッケージの機能や性能については,今後詳しく調べたいと思います.