05
1月
2007

MPIってなんだ?

MPIがなんなのかを調査した.
Message-Passing Interface
MPIの特徴
SPMD

Message-Passing Interface

MPIはMessage-Passing Interfaceの略である.MPIは並列プログラミングの規格であり,並列プログラミングライブラリのインタフェースが決められている.すなわち,MPIの実装はCまたはFortran 77の並列プログラミング用ライブラリである.並列プログラミングといいつついきなりMessage-Passingとか言われると面くらう人がいるかもしれない.そこで,分散メモリ型並列コンピュータであるPC Clusterで並列プログラミングを行なうにあたって,従来のプログラミング言語に何が足りないか,逆に何があれば並列プログラミングができるかを考えると,それぞれのマシンでの計算結果を相互に授受する仕組みだけであることに気づく.すなわちマシン間でメッセージの授受ができれば,それで事足りることに気づくはずだ.そこでMessage-Passingなのだ.別にMPIがなくてもSocket通信ライブラリを使用してマシン間でメッセージを授受し,並列プログラミングを作成することは可能である.だが,MPIは簡単にマシン間でメッセージを授受できるライブラリインタフェースになっており,これによってプログラマは並列計算アルゴリズムの実装に専念することができる.

MPIの特徴

MPIはCまたはFortran 77の並列プログラミング用ライブラリである.すなわち並列プログラミング用の全く新しい言語ではない.一方で,OpenMPやHPF(High Performance Fortran)の様に既存のプログラムに簡単なディレクティブを挿入するだけで並列プログラムができてしまうような代物はなく,プログラマはそれが並列プログラムであること明確に意識してコーディングする必要がある(これはプログラム設計の段階である程度隠蔽できるかもしれないが…).これらを踏まえてMPIを使用することのメリットを以下に示す.
ポータビリティ
標準化されたライブラリインタフェースによって,いろんなMPI実装で同じソースがコンパイルできる.これによって,MPI実装のあるシステムであれば,それがどんな実装であろうとソースの修正は必要ない.
並列コンピューティングのアセンブリ言語?
メッセージパッシングによる並列プログラミングはMIMD型であり,言ってみれば配列のループ処理を展開するだけに限定されるデータパラレルによる並列プログラミングよりも詳細に並列処理を記述できる.これは同時にメッセージパッシングによる並列プログラミングの困難さに跳ね返るが,設計さえ十分に行なわれていれば,このデメリットは解消される.

SPMD

混乱を避けるために,MPIによる並列プログラミングを始めるにあたって,これがSPMDだということを明確にしておく.MPIを使用することで,CまたはFortran 77プログラムにおいて,MPIライブラリを呼び出すことによって並列プログラミングを可能とする.MPIライブラリを呼び出すのは,主にプロセス間でメッセージを授受する場合であり,多くの場合これによってプロセス間の同期が実現される.ここまでは先述のとおりである.さらにMPIプログラムの特徴としてSPMD(Single Program Multi Data)であることがあげれあれる.すなわち,同一のプログラムを複数のプロセスが実行する.各プロセスには「ランク」という一意の値が設定され,プログラム内に記述されたランクの値で分岐する処理を実行する.これはちょうどCプログラムにおけるforkしてpidによって処理を分岐させるスタイルと同じである.SPMDというスタイルをとることによって,プログラマはどのマシンがどの処理ルートを通るとか,このソースはこのマシンで…などということを気にする必要がなくなる.

You may also like...