#はじめに
R環境のハイパフォーマンスコンピューティング(HPC:High-Performance Computing)の領域は急速に変化し続けています。現時点、CRAN Task View: High-Performance and Parallel Computing with Rで確認できる情報を整理しました。「ハイパフォーマンスコンピューティング」といっても、たとえば、コンパイル、並列コンピューティング、大規模オブジェクト、プロファイリングといったような広範囲なトピックになっています。
#明示的な並列コンピューティング
##rpvm
並列仮想マシン(Parallel Virtual Machine)による並列処理。Li & Rossini によって提供。CRAN の rpvm のアーカイブから入手可能。ただし、現時点ではメンテナンスされていない。
##Rmpi
並列コンピューティングのデファクトスタンダードであるMPI(Message Passing Interface)のR版。Yuによって提供。MPI APIから多彩なアクセスが可能であり、さらに R 固有の機能拡張もある。現在も積極的にメンテナンスされている。
##pbdMPI
SPMD(Single Program/Multiple Data)の並列処理をサポートするために、MPIをダイレクトインターフェイスする S4 クラスを提供。
##pbdSLAP
pbdMPI を利用した線形代数パッケージ。
##pbdDMAT
ビッグデータ・プログラミングのための機能を提供。
##pbdBASE
pbdDMAT 上の分散データを扱うクラスとメソッドを提供。pbdMPI を利用している。
##pbdNCDF4
テラバイト級のファイルサイズの単一ファイルへのマルチプロセス操作を許可する
##pbdPROF
SPMDコードによるMPIコミュニケーションのプロファイル機能を提供。
fpmpi、MPIP、またはTAUなどのMPIプロファイリングライブラリを介している。
##nws
nws(NetWorkSpaces)は、以前からある LindaSpacesアプローチの後継であり、Python用のイベント駆動型のネットワークプログラミングフレームワーク Twisted 上に実装されている。REvolution Computing から提供。
##snow
snow(Simple Network of Workstations)は、Tierney らによるもの。PVM, MPI, NWS だけでなく、抽象化レイヤによって通信を隠ぺいする直接的なネットワークソケットを利用可能にする。snowFT は、snow のフォルト・トレランス拡張版。
##snowfall
snow の機能を、順次処理または並列処理のモード選択を可能にする。Knaus によって提供。
##foreach
明示的なループカウンターなしにコレクション内の要素の一般的な反復を可能にする。foreach を使うと、doMC、doSNOW、doMPI、doRedis パッケージ経由の並列処理のループ処理での使用が容易になる。
##future
future のファンクションコールもしくは割り当てた変数(Promise と呼ばれる)によって、同期(順次)/非同期(並列)の評価を可能にする。
##Rborist
ランダムフォレストアルゴリズムの並列処理を可能にする。アルゴリズムのパフォーマンスネックとなる、データの再ステージングと分割基準の決定において、マルチコアの効率的な利用を促進するために、OpenMP を採用している。
##h2o
H2Oの機械学習環境に接続するパッケージ。ランダムフォレスト、GBM、GLM(Elastic Net 正則化を含む)、ディープラーニングのスケーラブルな実装を可能にする。
#暗黙的な並列コンピューティング
##pnmath
この機能は、まだ、CRAN に統合されていない。(いずれは統合されることが期待される) gcc 4.2以降のコンパイラで、OpenMP 並列処理のディレティブとして利用可能な機能を提供。ユーザーからの明示的な要求無く、利用可能なマルチコアに応じた内部のR関数の数を書き換えることで、暗黙的な並列処理を実現する。なお、gcc 4.2より前の場合は、pnmath0 パッケージによる、Pthreads を使用して実現できる。
##romp
この機能は、R-Forge project「romp」が開始されたが、CRAN に統合されていない。Jamitzky の useR! 2008 での発表によると、Fortranを使用して、OpenMP の他のインターフェイスを提供する。pre-alpha のコードは、Google Code project の romp から入手可能。
##R/parallel
並列実行のための、C++ ベースのマスター・スレーブ・ディスパッチ方式を提供。Vera、Jansen、Suppi によって提供。詳細は、R/parallel framework
##Rdsm
分散共有メモリプログラミングの発想で、スレッド・ライクな並列コンピューティング環境を提供。
##RhpcBLASctl
利用可能な BLAS(e.g. Intel Math Kernel Library) コア数を検出し、コア数の明示的な選択を可能にする機能を提供。
##Rhpc
MPI 経由の *apply() スタイルの割り当てを可能にする。
#グリッドコンピューティング
##multiR
Grose の useR! 2008 での発表があったが、リリースされていない。グリッドコンピューティングプラットフォーム版の snow 型フレームワークが提供される予定。
##biocep-distrib
Chine が、ローカル、グリッド、クラウド・コンピューティングのためのJavaベースのフレームワークを提供。biocep-distrib プロジェクトにおいて、活発な開発が行われている。
#Hadoop
##RHIPE
RHIPE は、R と Hadoop のインターフェイスを提供。ビッグデータを分析するための、データ分割と再結合のアプローチを可能にする。Saptarshi Guha によって提供。
##rmr
rmr は、R と Hadoop のインターフェイスを提供。Map/Reduce プログラミング・フレームワークを利用可能にする。Revolution Analytics から提供。
##segue
segue は、AWS(Amazon Web Services) での EMR(Elastic Map Reduce) を利用した並列処理を簡単に実行することができる。Long によって提供。
##RProtoBuf
構造化されたデータをシリアライズするための Google の言語に中立な、プラットフォームに依存しない、拡張可能なメカニズムへのインターフェイスを提供する。
##HistogramTools
MapReduce アプリケーションの Mapper によって作成された構造体、集計、操作、および多数のヒストグラムのプロットのための便利なルーチンを提供する。
##toaster
並列/分散型の Teradata Aster 分析プラットフォームを利用したデータベース処理を提供する。
#ランダム・ナンバー
##rlecuyer
並列コンピューティングのための乱数発生器を提供。Sevcikova と Rossini によって提供。
##doRNG
再現可能な並列のforeachループを実行するための機能を提供。rsteamによって生成された独立したランダムなストリームを使って、異なるforeachのバックエンドへの最適化が可能。
#コンパイル済みコードへの簡単なインターフェイス
##inline
C, C++ or Fortran から R へ、コードを容易に追加する機能を提供。コンパイル、R 文字列として格納された組み込みコード部分のリンクとロードを可能にする。Sklyar らによって提供。
##Rcpp
R ⇔ C++ の双方向の変換を容易にする機能を提供。また、RInside は、より高速で直接的なデータ・トランスファーのための C++ アプリケーション内への R の組み込みを容易にする機能を提供。Eddelbuettel と Francois によって提供。
##rJava
Java への(C や C++ の".Call()"のような)低レベルのインターフェイスを提供。Urbanek によって提供。
#注意点
本 Tips では、CRAN Task View: High-Performance and Parallel Computing with R の全ての情報を整理していない点、また、掲載のパッケージについて未検証である点を予めご容赦ください。