を使用する場合MPI_Isend
、MPI_Request
パラメーターを null ポインターにすることはできますか (送信者が送信後にメッセージを気にしない場合)?
15386 次
1 に答える
30
簡単な答えはノーです。リクエスト ハンドル パラメータはNULL
.
MPI_Isend()
非同期送信操作を開始します。すべての非同期操作には、後で次のいずれかの方法で処理する必要があるリクエスト ハンドルが与えられます。
MPI_Wait()
ブロックして、友達と一緒に操作が完了するのを待ちますMPI_Test()
テストが肯定的であることが判明するまで、友人と操作を完了するためのテストを行う- でハンドルを解放します
MPI_Request_free()
待機関数とテスト関数の両方が、完了すると要求を解放します。によって返された直後に解放することもできますMPI_Isend()
。これは操作をキャンセルするのではなく、リクエストが終了したらすぐに削除のマークを付けます。ただし、送信操作のステータスを取得することはできません。
非同期操作の結果 (完了ステータス、メッセージ受信ステータス、エラー コードなど) を気にしない場合は、次のようにするのが正しい方法です。
MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...
警告: これは、送信操作が完了したことを確認する別の方法を考案できるため、非同期送信で機能します。たとえば、メッセージの受信後に宛先プロセスが応答する可能性があります。ただし、非同期受信要求を解放してはならず、操作がいつ完了したかを知る方法がないため、代わりに待機または完了をテストする必要があります。
于 2012-06-04T15:08:34.180 に答える