小さいデータセットサイズと大きいデータセットサイズを使用するMPI_Gatherを使用したMPI_Barrier?

ユ・チェン

私はさまざまな並列計算にMPI_Scatter / MPI_Gatherを使用してきました。私が気づいたことの1つは、OpenMPバリアディレクティブと同様に、プロセッサを同期するためにMPI_Barrier()が頻繁に呼び出されることです。プロジェクトのコードを微調整していて、以下のMPI_Barrier()行をコメントアウトしたところ、計算がまだ正しいことがわかりました。なぜそうなのですか?最初のMPI_Barrier()が必要な理由を理解できます。他のプロセッサは待つ必要がありません。プロセッサMASTERからデータを取得するとすぐに、計算を開始できます。しかし、MPI_Gatherの後にMPI_Barrierが必要になることはありますか、それともMPI_Gatherにはすでに暗黙のバリアがありますか?

編集:この場合、処理されるデータのサイズは重要ですか?

MPI_Scatter(&sendingbuffer,sendingcount,MPI_FLOAT,receivingbuffer,sendcount,
MPI_INT,MASTER_ID,MPI_COMM_WORLD);

// PERFORM SOME COMPUTATIONS
MPI_Barrier(); //<--- I understand why this is needed

MPI_Gather(localdata,sendcount, MPI_INT, global,sendcount, MPI_INT, MASTER_ID, MPI_COMM_WORLD);
//MPI_Barrier(); <------ is this ever needed?
ズラン

障壁は必要ありません!

MPI_Gatherはブロッキング操作です。つまり、呼び出しが完了した後に出力を使用できます。非ルートランクは、ルート/他のランクが操作を開始する前に完了することが許可されていますが、完了する保証はないため、これは障壁を意味するものではありません。ただし、市内通話が完了した後、ランクにアクセスglobalして任意のランクでMASTER_ID再利用することは完全に安全localdataです。

メッセージベースのMPIとの同期は、共有メモリのOpenMPとは異なります。通信をブロックする場合、通常、明示的な同期は必要ありません。呼び出しが完了した後、結果が利用可能であることが保証されます。

種類の同期は、非ブロッキング通信のために必要であるが、それを介して行われるMPI_Test/MPI_Wait特定のメッセージに-あなたが代用しようとした場合の障壁にも正しさの誤った感覚を提供するかもしれないMPI_WaitMPI_Barrier一方的なコミュニケーションでは、それはより複雑になり、障壁が役割を果たす可能性があります。

実際には、バリアが必要になることはめったにありません。代わりに、不要な同期を導入しないようにバリアを避けてください。

編集:矛盾する他の答えを考えると、ここに標準(MPI 3.1、セクション5.1)の引用(私の強調)があります。

集合通信への発信者の参加が終了するとすぐに、集合操作を完了することができます(必須ではありません)。呼び出しが戻るとすぐに、ブロック操作が完了します。非ブロッキング(即時)呼び出しには、個別の完了呼び出しが必要です(セクション3.7を参照)。集合操作の完了は、呼び出し元が通信バッファー内の場所を自由に変更できることを示します。グループ内の他のプロセスが操作を完了した、または開始したことを示すものではありません(操作の説明で特に暗示されていない限り)。したがって、集合的な通信操作は、すべての呼び出しプロセスを同期する効果がある場合とない場合があります。もちろん、このステートメントはバリア操作を除外します。

最近の編集に対処するには:いいえ、この場合、データサイズは正確性に影響を与えません。MPIのデータサイズは、誤ったMPIプログラムがデッドロックするかどうかに影響を与える場合があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

2つの異なるサイズのデータセットをマージし、同じ行を小さいデータセットから大きいデータセットの複数の行に条件付きでコピーします

ML:データセットのサイズ小、中、大

SQLiteAssetHelperを使用したAndroidのアセット/データサイズの制限?

MPI_Bcastの代わりにMPI_IsendとMPI_Irecvを使用して、ブロードキャストされたメッセージをすべてのプロセッサにタイミングを合わせる

空のデータセットを使用した Spark SQL 結合により、出力ファイルのサイズが大きくなる

データセットをより小さなサイズに縮小し、データセット内の情報の要点を維持します

Yより大きいまたは小さいX値に基づいてデータフレームしきい値をサブセット化する

チャートのパフォーマンスを向上させるために、サンプリング/補間によって大きなデータセットのサイズを縮小します

boost :: mpiを使用したmpiのメッセージサイズに制限はありますか?

データサイズよりも多くの反復のために小さなデータセットをサンプリングする方法は?

どのベクトルとマップがより少ないメモリを使用するか(大量のデータセットと不明なサイズ)

小さなアセットを追加すると、スタンドアロンのデータフォルダサイズが指数関数的に増加します

VOCBboxDatasetをデータセットに適用すると、誤ったデータセットサイズが返されます

MPIデータ型を使用して配列のサブセットを受信する際の問題

fortran派生データ型を使用したmpi_gatherのセグメンテーション違反

異なるサイズの独立したデータセットをRでプロットする

2つの異なるサイズのデータセット(および論理関係)の変数を使用して、新しい変数を作成します

Tensorflow-keras-'strided_slice 'の形状エラー(サイズ変更されたMNISTデータセットを使用)

C ++いくつかの小さい、異なるサイズのデータブロックを1つの大きいデータブロックにコピーしようとしています

BallTreeは、不規則なデータを使用したカスタマイズされたメトリックをサポートしていますか?

templateUrlを使用すると、「最大呼び出しスタックサイズを超えました」というメッセージが表示されます

Pythonで大きなデータセットを小さなサブセットに分割する

データセットを使用した固定サイズのバッチ(最後のバッチを破棄する可能性がある)

printfを追加すると、データセグメントのサイズが大きくなります

GooglePlayストアでパッチとアップデートを使用してAPKサイズを縮小する

サプライズで事前定義されたフォールドからデータをロードするときに完全なトレインセットを構築するにはどうすればよいですか?

別の小さなデータセットに類似したデータセットからインスタンスを分類するアルゴリズム。この小さなデータセットは単一のクラスを表します。

Python:任意のサイズのデータセットから同じサイズのリストを作成する

データフレームの別のサブセットと等しいサンプルサイズで、グループごとにデータフレームのサブセットをサンプリングします

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Railsで宝石のレイアウトを使用するにはどうすればよいですか?

  3. 3

    Chromeウェブアプリのウェブビューの高さの問題

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    アンドロイド9 - キーストア例外android.os.ServiceSpecificException

  6. 6

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  7. 7

    CSSのみを使用して三角形のアニメーションを作成する方法

  8. 8

    Google Playストア:アプリページにリーダーボードと実績のアイコン/バッジが表示されない

  9. 9

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  10. 10

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  11. 11

    Windows 7では、一部のプログラムは「ビジュアルテーマを無効にする」レジストリ設定を行いませんか?

  12. 12

    Get-ADGroupMember:このリクエストのサイズ制限を超えました

  13. 13

    Pyusb can't find a device while libusb can

  14. 14

    MySQLでJSON_LENGTHとJSON_EXTRACTを組み合わせる方法は?

  15. 15

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  16. 16

    Swiftのブロックのパラメーターに関するドキュメントのマークアップ形式は何ですか?

  17. 17

    Reactでclsxを使用する方法

  18. 18

    追加後、ブートストラップマルチセレクトがテーブルで機能しない

  19. 19

    MongoDB Compass: How to select Distinct Values of a Field

  20. 20

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  21. 21

    複数行ヘッダーのJTableヘッダーテキストの折り返し(カスタムTableCellRenderer)

ホットタグ

アーカイブ