OpenMPI入門
松下祐介
MPIとは
Message Passing Interfaceの略。
分散メモリの並列計算におけるメッセージ通信の
ためのライブラリの規格。関数などの仕様が定め
られている。
2012/9/21にVer. 3.0が出た。

http://www.mpi-forum.org/
Open MPIとは
MPIの実装の一つ。
2012/12/3にVer. 1.6が出た。MPI-2完全対応。

対応OSは Linux, Solaris, AIX, OS X, FreeBSD,
Tru64,HP-UX,Windows。
C/C++/Fortranで記述する。

http://www.open-mpi.org/
Document http://www.open-mpi.org/doc/v1.6/
(参考) その他のMPIの実装
MPICH     http://www.mpich.org/
 優秀なMPIの実装であり、他の実装の元にもなった。
LAM/MPI    http://www.lam-mpi.org/
 Open MPIの前世代。
MS MPI    http://technet.microsoft.com/...
 Microsoftが開発した。
(参考) 並列化技術
Open MP (Open Multiprocessing)
 コンパイラレベルの並列化。C/C++/Fortran。
Open CL (Open Computing Language)
 マルチコアCPU、GPUなどでのC言語による並列化。
Intel Threading Building Block (TBB)
 C++のクラスライブラリ。
Grand Central Dispatch (GCD)
 OS X、iOS、FreeBSDでのOSレベルの並列化。
Parallel Extensions (of .NET framework)
 .NET環境における並列化。
基礎用語 (1)
スレッド
 実行の単位。プロセス内に一つ以上存在する。
 例えばゲームにはタイマー、入力処理、描画処理な
 どのスレッドがある。
プロセス
 プログラムごとに割り当てられる。プロセッサ内で
 複数実行される。
プロセッサ
 CPUとほぼ同義。
基礎用語 (2)
ハードウェアマルチスレッディング
 ハードウェアによって複数のスレッドを制御する。
マルチプロセッシング
 システム内で複数のプロセスを扱う。
マルチコア
 プロセッサ・パッケージに複数のコア(処理の中核)
 がある。マルチプロセッシングの一種。
マルチプロセッサ
 システムに複数のプロセッサがある。マルチプロ
 セッシングの一種。
基礎理論 (1)
•
基礎理論 (2)
•
基礎理論 (3)
粒度
 プロセスごとのタスクの大きさのこと。
 細粒度(文レベル)⇔粗粒度(サブルーチンレベル)
 粒度が小さいほどプロセス間の通信が必要。

通信の時間は意外に大きく、通信回数を減らすこ
とが重要である。
基礎理論 (4)
ロードバランス
 それぞれのプロセスの仕事量のバランス。

かかる時間は最大の仕事量に比例するのでなるべ
く等しく分配したほうがよい。
計算領域ごとで計算量にムラがある場合まんべん
なく分担したほうがよい(e.g. サイクリック分
割)。
MPIの基礎 (1)
環境制御サブルーチン
 初期化、終了処理、ランク情報の取り出し。
一対一通信サブルーチン
 あるプロセスから別のプロセスへ情報を送る。
集団通信サブルーチン
 グループに属するプロセスすべてにデータを送受信
 する。データ受信時に集まったデータに簡単な演算
 を加えることもできる。
MPIの基礎 (2)
各プロセスはランクという整数の番号(0から始ま
る)を与えられる。このランクにしたがって各プ
ロセスは自分のすべき仕事(e.g. 自分の処理すべき
データの範囲)を知る。
注意点
デッドロック
複数のプロセスが互いの処理終了を待ち、結果とし
てどの処理も先に進めなくなってしまうこと。
クリティカルセクション
複数のプロセスが同時に処理をすると破綻を来す
データ。排他制御を行うなどして単一のプロセスし
か一度に処理しないようにする(不可分処理)必要が
ある。ただし排他制御にはデッドロックの危険性が
ある。
勉強法
APIを覚える必要はない。必要になり次第リファ
レンスを見たり検索したりして調べればよい。

MPIプログラミング入門
http://h50146.www5.hp.com/solutions/hpc/stc/soft/
pdfs/mpi_training.pdf
リファレンス
MPIリファレンス
 http://www.cv.titech.ac.jp/~hiro-
 lab/study/mpi_reference/index.html
Open MPI v1.6.3 documentation
 http://www.open-mpi.org/doc/v1.6/
LAM/MPI Documentation
 http://www.lam-mpi.org/using/docs/
心配ないさ~
細かいことはきっと自然と覚えます。
必要ないことは自然と忘れます。
並列プログラミングは慣れないことも多いですが、
今の時代で非常に重要な技術です。頑張りましょ
う!

OpenMPI入門