
メッセージパッシングは、すべてのコンピュータクラスタに固有の要素です。自作のBeowulfから世界最速のスーパーコンピュータまで、すべてのコンピュータクラスタは、多数のノードの活動を調整するためにメッセージパッシングに依存しています。 [ 1 ] [ 2 ]市販のサーバーとスイッチで構築されたコンピュータクラスタのメッセージパッシングは、事実上すべてのインターネットサービスで使用されています。 [ 1 ]
近年、1000ノードを超えるコンピュータクラスタの利用が広まっている。クラスタ内のノード数が増加するにつれて、通信サブシステムの複雑さが急速に増大し、インターコネクトを介したメッセージパッシングの遅延が並列プログラムの実行における深刻なパフォーマンス問題となっている。[ 3 ]
コンピュータクラスタ上でのメッセージパッシングのパフォーマンスをシミュレート、可視化、理解するために、特定のツールを使用することができます。大規模なコンピュータクラスタを組み立てる前に、トレースベースのシミュレータは少数のノードを使用して、より大規模な構成でのメッセージパッシングのパフォーマンスを予測するのに役立ちます。少数のノードでのテスト実行後、シミュレータは実行ログファイルとメッセージ転送ログファイルを読み取り、はるかに多くのノード間でより多くのメッセージが交換される場合のメッセージングサブシステムのパフォーマンスをシミュレートします。[ 4 ] [ 5 ]
歴史的に、クラスタノード間の通信には、PVM(並列仮想マシン)とMPI(メッセージパッシングインターフェース)という2つの典型的なアプローチがありました。[ 6 ]しかし、現在ではMPIがコンピュータクラスタにおけるメッセージパッシングの事実上の標準となっています。[ 7 ]
PVMはMPIより前に開発され、 1989年頃にオークリッジ国立研究所で開発されました。これは、コンピューティングノードが「並列仮想マシン」として動作できるようにする一連のソフトウェアライブラリを提供します。メッセージパッシング、タスクおよびリソース管理、障害通知のための実行時環境を提供し、すべてのクラスタノードに直接インストールする必要があります。PVMは、C、C++、Fortranなどで記述されたユーザープログラムで使用できます。 [ 6 ] [ 8 ]
具体的な実装を持つ PVM とは異なり、MPI は特定のライブラリのセットではなく仕様です。仕様は 1990 年代初頭に 40 の組織間の議論から生まれ、最初の取り組みはARPAとNational Science Foundationによって支援されました。MPI の設計は、当時の商用システムで利用可能なさまざまな機能を活用しました。その後、MPI 仕様から具体的な実装が生まれました。MPI の実装は通常、TCP/IPとソケット接続を使用します。[ 6 ] MPI は現在、 C、Fortran、Pythonなどの言語で並列プログラムを記述できる広く利用可能な通信モデルです。[ 8 ] MPI 仕様は、 MPICHやOpen MPIなどのシステムに実装されています。[ 8 ] [ 9 ]

コンピュータクラスタは、複数のノードに処理を分散させ、それに伴う通信オーバーヘッドに対処するために、さまざまな戦略を採用しています。天河一号のような一部のコンピュータクラスタでは、メッセージパッシングに計算を実行するプロセッサとは異なるプロセッサを使用しています。天河一号は、独自のメッセージパッシングシステムの動作を強化するために2,000個以上のFeiTeng-1000プロセッサを使用し、計算はXeonおよびNvidia Teslaプロセッサによって実行されます。[ 10 ] [ 11 ]
通信オーバーヘッドを削減するアプローチの1つは、特定のタスクにローカルネイバーフッド(ロケールとも呼ばれる)を使用することです。ここでは、計算タスクがクラスタ内の特定の「ネイバーフッド」に割り当てられ、互いに近いプロセッサを使用することで効率が向上します。[ 3 ]しかし、多くの場合、コンピュータクラスタノードの実際のトポロジとそれらの相互接続はアプリケーション開発者にはわからないため、アプリケーションプログラムレベルでパフォーマンスを微調整しようとするのは非常に困難です。[ 3 ]
MPIがコンピュータクラスタの事実上の標準として台頭してきたことを踏まえると、クラスタノード数の増加に伴い、MPIライブラリの効率とスケーラビリティを向上させるための研究が継続的に行われてきた。これらの取り組みには、 MPIライブラリのメモリ使用量を削減するための研究も含まれている。[ 7 ]
MPI は初期の頃からPMPI「プロファイリング システム」を介してパフォーマンス プロファイリングの機能を提供していました。 [ 12 ] PMIPI- プレフィックスを使用すると、メッセージのエントリ ポイントとエグジット ポイントを監視できます。ただし、このプロファイルは高レベルであるため、この種の情報は通信システムの実際の動作を垣間見るだけです。より多くの情報が必要になったため、MPI-Peruse システムの開発につながりました。Peruse は、アプリケーションが MPI ライブラリ内の状態変化にアクセスできるようにすることで、より詳細なプロファイルを提供します。これは、コールバックを Peruse に登録し、メッセージ イベントが発生したときにトリガーとして呼び出すことによって実現されます。[ 13 ] Peruse は、PARAVER 可視化システムと連携できます。PARAVER には、トレース コンポーネントと、トレース、特定のイベントに関連する統計などを分析するためのビジュアル コンポーネントの 2 つのコンポーネントがあります。 [ 14 ] PARAVER は、他のシステムのトレース フォーマットを使用したり、独自のトレースを実行したりできます。これはタスクレベル、スレッドレベル、およびハイブリッド形式で動作します。トレースには多くの場合、非常に多くの情報が含まれているため、圧倒されることがよくあります。そのため、PARAVER はそれらを要約して、ユーザーが視覚化および分析できるようにします。[ 13 ] [ 14 ] [ 15 ]
大規模な、多くの場合スーパーコンピュータレベルの並列システムを開発する場合、複数の構成を実験し、パフォーマンスをシミュレートできることが不可欠です。このシナリオでは、メッセージパッシング効率をモデル化するためのアプローチが数多くあり、解析モデルからトレースベースのシミュレーションまで多岐にわたります。また、一部のアプローチでは、「人工通信」に基づくテスト環境を使用して、メッセージパッシングパフォーマンスの合成テストを実行します。 [ 3 ] BIGSIMなどのシステムは、さまざまなノードトポロジ、メッセージパッシング、スケジューリング戦略でのパフォーマンスのシミュレーションを可能にすることで、これらの機能を提供します。 [ 4 ]
解析レベルでは、起動遅延、漸近帯域幅、プロセッサ数などのサブコンポーネントのセットで通信時間 T をモデル化する必要があります。よく知られているモデルは、ポイントツーポイント通信に単純に依存する Hockney のモデルで、T = L + (M / R) を使用します。ここで、M はメッセージサイズ、L は起動遅延、R は MB/s 単位の漸近帯域幅です。[ 16 ]
XuとHwangは、プロセッサ数を含めるようにHockneyのモデルを一般化し、レイテンシと漸近帯域幅の両方がプロセッサ数の関数となるようにしました。[ 16 ] [ 17 ] GunawanとCaiは、キャッシュサイズを導入することでこれをさらに一般化し、メッセージをサイズに基づいて分離し、キャッシュサイズ未満のメッセージとキャッシュサイズを超えるメッセージの2つの別々のモデルを取得しました。[ 16 ]

コンピュータクラスタ上でのメッセージパッシングのパフォーマンスをシミュレートして理解するために、特定のツールを使用することができます。たとえば、CLUSTERSIM は、離散イベントシミュレーション用の Java ベースのビジュアル環境を使用します。このアプローチでは、計算ノードとネットワークトポロジが視覚的にモデル化されます。ジョブとその実行時間と複雑さは、特定の確率分布で表現され、さまざまな並列ジョブスケジューリングアルゴリズムを提案して実験することができます。これにより、 MPIメッセージパッシングの通信オーバーヘッドをシミュレートし、大規模並列ジョブ実行のコンテキストでよりよく理解することができます。[ 18 ]
その他のシミュレーションツールには、MPI-sim と BIGSIM があります。[ 19 ] MPI-Sim は実行駆動型のシミュレータで、動作には C または C++ プログラムが必要です。[ 18 ] [ 19 ]一方、ClusterSim は、プログラム実行に使用されるプログラミング言語に依存しないハイブリッドな高レベルモデリングシステムを使用します。[ 18 ]
MPI-Simとは異なり、BIGSIMはトレース駆動システムであり、別のエミュレータプログラムによってファイルに保存された実行ログに基づいてシミュレーションを行います。[ 5 ] [ 19 ] BIGSIMにはエミュレータとシミュレータが含まれています。エミュレータは少数のノードでアプリケーションを実行し、結果を保存します。これにより、シミュレータはそれらを使用して、はるかに多くのノードでアクティビティをシミュレートできます。[ 5 ]エミュレータは、複数のプロセッサのシーケンシャル実行ブロック(SEB)の情報をログファイルに保存します。各SEBには、送信されたメッセージ、その送信元と宛先、依存関係、タイミングなどが記録されます。シミュレータはログファイルを読み込んでシミュレートし、追加のメッセージにスターを付けてSEBとして保存することもできます。[ 4 ] [ 5 ]したがって、シミュレータは、マシン全体が利用可能になる前、または構成される前に、エミュレータによって提供されるはるかに少数のノードでの実行トレースに基づいて、非常に大規模なアプリケーションのパフォーマンスのビューを提供できます。[ 5 ]
{{cite web}}: CS1 maint: タイトルとしてアーカイブされたコピー (リンク)