Download - OpenMPI入門
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)
並列化した仕事の割合を P とし、並列化部分の性能向上率を S とすると、全体の性能向上率は
となる。 ( アムダールの法則 )S は高々並列実行可能なプロセス数である。P と S どちらを優先して改善していくかが重要である。
基礎理論 (2)
並列化できない時間の割合を α とし、並列化部分の性能向上率を S とすると、全体の性能向上率は
となる。 ( グスタフソンの法則 )
仕事基準と時間基準の違いに注意。並列化部分の割合は場合によっては変化する。
基礎理論 (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 documentationhttp://www.open-mpi.org/doc/v1.6/
LAM/MPI Documentationhttp://www.lam-mpi.org/using/docs/
心配ないさ~細かいことはきっと自然と覚えます。必要ないことは自然と忘れます。並列プログラミングは慣れないことも多いですが、今の時代で非常に重要な技術です。頑張りましょう!