MPI並列の用語集
MPI(Message Passing Interface)は、分散メモリ型の並列計算を行うためのライブラリであり、並列処理を行う際に多くの専門用語が使用されます。以下に、MPIで頻繁に使われる用語の簡単な解説付きのリストを作成しました。
MPI並列で頻繁に使われる用語集
-
プロセス(Process) MPIにおける基本単位。各プロセスは独立したメモリ空間を持ち、他のプロセスとメッセージを介して通信を行う。
-
ランク(Rank) 各プロセスに割り当てられる一意の識別子。ランク番号により、特定のプロセスを識別し、通信のターゲットとして指定できる。
-
ローカルランク(Local Rank) 特定のノードや物理マシン内でのプロセスのランク(番号)を指します。MPI環境では、複数のノード上で並列プロセスを実行する場合が多いため、同じノード内での識別番号(ローカルランク)を取得することが必要な場面があります。通常のランクはグローバルなプロセス番号ですが、ローカルランクはノード内でのプロセス番号です。
-
size(サイズ) MPI環境で使用されるプロセスの総数を指します。たとえば、
MPI_Comm_size
を使うと、指定されたコミュニケータ内のプロセス数(サイズ)を取得できます。プログラム全体のスケールを決める重要な値です。 -
local rank(ローカルランク) 特定のノードや物理マシン内でのプロセスのランク(番号)を指します。MPI環境では、複数のノード上で並列プロセスを実行する場合が多いため、同じノード内での識別番号(ローカルランク)を取得することが必要な場面があります。通常のランクはグローバルなプロセス番号ですが、ローカルランクはノード内でのプロセス番号です。
-
allgather(オールギャザー) MPIのコレクティブ通信操作で、各プロセスが持つデータをすべてのプロセスに収集・配布します。
MPI_Allgather
関数を使うと、各プロセスが他のプロセスからのデータを受け取って、全プロセスが同じデータ集合を保持できるようになります。分散データの同期が必要な場合に非常に有効です。 -
broadway(ブロードウェイ) 「Broadway」という言葉はMPIの標準用語には含まれていませんが、並列コンピューティングやデータセンターでの高帯域幅のネットワークや通信システムを指す場合もあります。Broadwayは一般的に「大規模データを迅速に転送するための通信システム」を意味する文脈で使われることもありますが、MPIの公式関数やメソッド名ではありません。
-
alltoall(オールトゥオール) MPIのコレクティブ通信操作の一つで、各プロセスが他のすべてのプロセスに異なるデータを送信し、同時にデータを受信する操作です。
MPI_Alltoall
関数を使用すると、プロセス間で効率的にデータを交換でき、各プロセスが他のすべてのプロセスからデータを取得できます。例えば、各プロセスが保持するデータを分散したり、交換したりする場合に便利です。 -
コミュニケータ(Communicator) プロセスグループを定義するMPIオブジェクト。MPI_COMM_WORLDが最も一般的で、すべてのプロセスを含むグローバルなコミュニケータ。
-
ポイント・ツー・ポイント通信(Point-to-Point Communication) 特定の2つのプロセス間でデータを送受信する通信。
MPI_Send
とMPI_Recv
が基本的な関数。 -
コレクティブ通信(Collective Communication) 複数のプロセス間で一斉にデータを交換する通信。
MPI_Bcast
(ブロードキャスト)やMPI_Reduce
(データの集約)が代表的な例。 -
ブロードキャスト(Broadcast) 1つのプロセスが他のすべてのプロセスにデータを送信する操作。
MPI_Bcast
で実現される。 -
リデュース(Reduce) 複数のプロセスのデータを集め、集約処理(例えば加算)を行う操作。
MPI_Reduce
で実装される。 -
スキャッター(Scatter) 1つのプロセスが他のプロセスにデータを分散して送信する操作。
MPI_Scatter
で実現される。 -
ギャザー(Gather) 複数のプロセスから1つのプロセスにデータを集める操作。
MPI_Gather
で実装される。 -
オールリデュース(Allreduce) 各プロセスがデータを集約し、その結果をすべてのプロセスに配布する操作。
MPI_Allreduce
で実現される。 -
ノンブロッキング通信(Non-blocking Communication) 通信操作が完了するまで待たずに、他の操作を続行する非同期通信。
MPI_Isend
やMPI_Irecv
などの関数で実現される。 -
バリア(Barrier) すべてのプロセスが指定の箇所に到達するまで、次の処理に進まない同期ポイント。
MPI_Barrier
で設定される。 -
カートグラフィー(Cartesian Topology) プロセスをグリッド状に配置するMPIの機能。計算領域を分割する際に有効で、
MPI_Cart_create
で作成できる。 -
タグ(Tag) メッセージを識別するための番号。通信相手のプロセスが、特定のタグを持つメッセージのみを受け取ることができる。
-
データ型(Datatype) MPIで送受信されるデータの型を表す。
MPI_INT
やMPI_FLOAT
などのプリミティブ型に加えて、カスタムのデータ型を定義できる。 -
MPI_Init と MPI_Finalize MPIプログラムの開始と終了に使われる関数。
MPI_Init
でMPI環境を初期化し、MPI_Finalize
で終了する。 -
ハロー・ワールド(Hello World) 並列プログラミングの「ハロー・ワールド」プログラム。最も基本的なMPIプログラムで、MPI環境で動作を確認するためのもの。
-
デッドロック(Deadlock) 通信が待機状態のまま進まない状態。プロセス間の待ちが発生し続け、システムが停止する可能性があるため、適切な設計が重要。
-
コアレセンス(Coalescence) 複数の通信操作を1つにまとめ、通信効率を向上させる最適化技法。通信オーバーヘッドを減らすために使用される。
-
ノード(Node) MPI環境での計算リソースの物理単位。各ノードは複数のプロセスを実行することができ、分散コンピューティングの基盤となる。