回答:
あなたは、すべてのプロセッサが使用した試みることができるMPI_IProbeまたはMPI_Probeを与えられたタグを持つすべての受取メッセージがあるかどうかを確認するためにMPI_ANY_SOURCEで。一致するメッセージがある場合は、返されたステータスから送信者のランクを抽出し、すぐにMPI_Recvを呼び出すことができます。
MPI_IProbe
は、ポストするコールの数、またはプローブを継続する時間をどのようにして知っていますか?
他の人はすでにさまざまなMPI_Probeバリアントを提案していますが、1つ指摘したいことがあります。MPIはリモートプロシージャコールではありません。つまり、メッセージを受信したことをプロセスに通知する方法はありません(たとえば、シグナルを発生させることによって) )。メッセージは送信されますが、受信プロセスが実際にそれらを探しに行かなければ、何も起こりません。そのため、あなたの質問に対する答えは「いいえ」ですが、メッセージが送信されたかどうかをプロセスが積極的に把握できます。
http://mpitutorial.com/tutorials/dynamic-receiveing-with-mpi-probe-and-mpi-status/には、役立つMPI_Probeの使用方法を説明するチュートリアルがあります。
送信者が送信先を知っていても、受信者が送信者を知らない場合は、MPI_ANY_SOURCEから受信者を投稿してください。これは、受信とメッセージを送信する任意のプロセスを一致させます。
受信者が実際には何も受信しない可能性がある場合は、iRecvを投稿できます。プロセスがメッセージの送信を完了すると、いつでもIbarrierにポストできます。すべてのプロセスがIbarrierに入力して(そして要求オブジェクトでMPI_WAITを呼び出して)Ibarrierが完了すると、誰もが通信が完了し、以前のIrecvをキャンセルできることを知っています。
MPI_Probe
基本的に安いですMPI_Recv
か?