14

を使用する場合MPI_IsendMPI_Requestパラメーターを null ポインターにすることはできますか (送信者が送信後にメッセージを気にしない場合)?

4

1 に答える 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 に答える