6

私は、MPIコミュニケーター内で実際のプロセス通信がどのように行われているのかを把握しようとしています。私には8つのノードがあり、それぞれに12のコアがあります(96のインスタンスが実行されています)。各プロセスには一意のランクが割り当てられており、プロセスは相互に通信できます。では、プロセスはどのようにして一意のランクを取得し、実際のメッセージを送信することができますか?いくつかのスライドによると、Open Run-Time Environment(ORTE)があります。これは、「そのセルでプロセスが起動されるマシン上にあります(たとえば、クラスターのフロントエンド)。セルでプロセスを起動する責任があります。セルの状態を監視します。 (ノード、プロセス)。セルの状態を残りのユニバースに報告します。セル間の通信をルーティングします。」MPI実装の開発者向けドキュメントやアーキテクチャペーパーを見つけることができませんでした。MPIプロセス間の実際の通信がどのように実装されているか、つまり、どのようにして自分自身を見つけてランクを割り当てられるかについて、誰もが考えていますか?ルーティング用の中央または複数の中央MPI内部プロセスがありますか(ノードごとなど)?

ありがとう、デビッド

4

1 に答える 1

20

あなたが話しているメカニズムは、実装に厳密に依存しています。MPI は、ハードウェアとオペレーティング システムによって提供される通信メカニズムの上に位置する中間レベルの標準です。

ORTE は Open MPI の一部です。これは、現在広く普及している汎用 MPI 実装の 1 つです。また、MPICH と MPICH2、およびそれらのバリアント (Intel MPI など) もあります。ほとんどのスーパーコンピューター ベンダーは、独自の MPI 実装を提供しています (たとえば、IBM は Blue Gene/Q 用に修正された MPICH2 を提供しています)。

Open MPI が機能する方法は、複数のレイヤーに分割され、各レイヤーの機能が動的にロードされる多数のモジュールによって提供されることです。特定の条件下で最適なモジュールを選択することになっているスコアリング メカニズムがあります。

すべての MPI 実装は、いわゆる SPMD 起動を行うメカニズムを提供します。基本的に、MPI アプリケーションは特殊な種類の SPMD (Single Program Multiple Data) です。単一の実行可能ファイルの多数のコピーが実行され、通信と調整のメカニズムとしてメッセージ パッシングが使用されます。実行ノードのリストを取得し、プロセスをリモートで起動し、それらの間の関連付けと通信スキームを確立するのは SPMD ランチャーです (Open MPI では、これは MPI ユニバースと呼ばれます)。これは、グローバル MPI コミュニケーター MPI_COMM_WORLD を作成し、最初のランク割り当てを配布し、CPU コアへのプロセスのバインドなどのオプションを提供できます (NUMA システムでは非常に重要です)。プロセスが開始されると、識別のための何らかのメカニズムが利用可能になります (例: ランクと IP アドレス/TCP ポートの間のマッピング) 他のアドレッシング方式が使用される場合があります。たとえば、Open MPI は、次を使用してリモート プロセスを起動します。sshまたは、rsh別のリソース管理システム (PBS/Torque、SLURM、Grid Engine、LSF など) によって提供されるメカニズムを使用できます。プロセスが起動し、それらの IP アドレスとポート番号が記録されてユニバースにブロードキャストされると、プロセスは InfiniBand などの他の (より高速な) ネットワーク上でお互いを見つけ、通信ルートを確立できます。

通常、メッセージのルーティングは MPI 自体によって行われるのではなく、基礎となる通信ネットワークに任されます。MPI はメッセージの作成のみを処理し、メッセージをネットワークに渡して宛先に配信します。同じノードに存在するプロセス間の通信には、通常、共有メモリが使用されます。

技術的な詳細に興味がある場合は、Open MPI のソース コードを読むことをお勧めします。プロジェクトのWEB サイトで見つけることができます。

于 2012-05-10T21:47:44.997 に答える