1

次のシナリオでは、それぞれオブジェクトを持つ N MPI プロセスがあります。通信段階になると、これらのオブジェクトから「通常は小さい」データが交換されます。通常、任意の 2 つのノード間でデータ交換が行われます。

最適な戦略は?:

  • 任意のノード X で、このノード X と接続する他のノードごとに 2 つのバッファーを作成し、ピア ツー ピアで送受信を行います。
  • 各ノード X で、通信するすべてのハロー データを収集するための 1 つのバッファーを作成します。そして、そのバッファを「bcast」します。

  • 私が気付いていない他の戦略はありますか?

4

2 に答える 2

12

最近傍スタイルのハロー スワップの場合、通常、最も効率的な実装の 1 つは、一連のMPI_Sendrecv呼び出しを使用することです。通常は、各次元ごとに 2 つです。

ハーフステップ 1 - 正の方向へのデータ転送:各ランクは左側のランクから左側のハローにデータを受信し、右側のランクにデータを送信します。

    +-+-+---------+-+-+     +-+-+---------+-+-+     +-+-+---------+-+-+
--> |R| | (i,j-1) |S| | --> |R| |  (i,j)  |S| | --> |R| | (i,j+1) |S| | -->
    +-+-+---------+-+-+     +-+-+---------+-+-+     +-+-+---------+-+-+

(Sは通信されるローカル データの一部を示し、 はデータがR受信されるハローを示します。 は(i,j)プロセス グリッド内のランクの座標です)

ハーフステップ 2 - 負の方向へのデータ転送:各ランクは右側のランクから右側のハローにデータを受信し、左側のランクにデータを送信します。

    +-+-+---------+-+-+     +-+-+---------+-+-+     +-+-+---------+-+-+
<-- |X|S| (i,j-1) | |R| <-- |X|S|  (i,j)  | |R| <-- |X|S| (i,j+1) | |R| <--
    +-+-+---------+-+-+     +-+-+---------+-+-+     +-+-+---------+-+-+

(Xは、前のハーフステップで既に設定されているハロー領域の一部です)

ほとんどの交換ネットワークは、複数の同時双方向 (全二重) 通信をサポートしており、交換全体の待ち時間は次のとおりです。

上記のハーフステップは両方とも、ドメイン分解の次元と同じ回数繰り返されます。

このプロセスは、いわゆる近隣集団通信を導入する規格のバージョン 3.0 ではさらに簡素化されています。への 1 回の呼び出しを使用して、多次元ハロー スワップ全体を実行できますMPI_Neighbor_alltoallw

于 2013-07-11T11:08:31.547 に答える
8

質問でハローという言葉を使用すると、プロセス間で分割される計算ドメインを設定している可能性があることが示唆されます。これは、幅広いアプリケーションの MPI プログラムで非常に一般的なアプローチです。通常、各プロセスはそのローカル ドメインで計算を行い、次にすべてのプロセスがハロー要素を隣接プロセスと交換し、満足するまで繰り返します。

ハロー要素を交換するための専用バッファーを作成することもできますが、より一般的なアプローチであり、確かに賢明な最初のアプローチは、ハロー要素自体を探しているバッファーと考えることです。たとえば、100 個のプロセスに分割された 100x100 の計算ドメインがある場合、各プロセスは 12x12 のローカル ドメインを取得します。 . ハロー セル、各ローカル ドメインの境界にあるセルであり、通信の前に要素を別のバッファーにマーシャリングする必要はありません。

実装しようとしている計算の種類を正しく推測できた場合はmpi_cart_create、関連する関数を確認する必要があります。これらは、計算ステップが隣接プロセス間の通信ステップとインターリーブされるプログラムのセットアップと実装を容易にするように設計されています。ネットには、このようなデカルト トポロジを作成および使用する例があふれています。

これが計画している計算スタイルである場合、mpi_bcast使用するのは絶対に間違っています。MPI ブロードキャスト (および同様の関数) は、(特定のコミュニケーター内の) すべてのプロセスが関与する集合操作です。ブロードキャストはグローバル通信に役立ちますが、ハロー交換はローカル通信です。

于 2013-07-11T08:31:58.523 に答える