2016-08-23 1 views
1

MPI_Sendを開始する前に、(特定の送信元とタグの)非ブロック受信が送信されているかどうかを確認する方法はありますか?私は、送信者と受信者の両方が、誰が彼らとやりとりしたいのか分からない状況があります。私の考えは最初にすべての選択された受信者にオープンIrecvを投稿することでした。送信者は、特定のランクが受信を送信したかどうかをチェックし、真の場合のみ送信します(そうでない場合は続行します)。すべての送信が成功した後、受信者は未処理のIrecvを取り消します。MPIで "ハンドシェイク"を確認しますか?

  • これは、現在、集合ブロードキャスト(MPI_COMM_WORLD)の配列ブロードキャストで動作します。私は別の方法があるかどうか疑問に思っています

  • MPI_IsendMPI_Probeと私はこれを逆にすることができると思います。この場合、私は未受信の送信バッファに何が起こるか心配です(そして送信のためにMPI_Cancelは悪いニュースであることを聞いたことがある)ものの任意の提案のための

感謝。

+1

MPIではこのようなオプションは提供されていません。片面通信とも呼ばれるMPI RMAを使用することができます。 –

答えて

0

ソースコードMPI_ANYを使用して、MPI_Irecvにデータ転送の異なるタグを付けることができます。ブロックMPI_Recvを使用することもやります。メッセージ(MPI_Testのフラグ== 1)を取得すると、MPI_Status.MPI_SOURCE(ステータスパラメータがMPI_STATUS_IGNOREの場合は使用できません)と表示され、実際の送信元を確認できます。

あなたが明示的に転送が送信者、受信にちょうどプットそのデータを(はるかに効率的かもしれない一方的な通信を使用して、同期させる必要があることを必要としない場合。

追加情報:Introducing One-Sided Communication

関連する問題