MPIを使用して合計4つのメッセージを8つのノードに渡しました。私は配列が意味のある結果をもたらさない2つのメッセージがあることに気づいた。私は以下のコードの抜粋をコピーしましたか?以下のコード/結果に基づいて、私が持っていた関連するいくつかの質問です:MPI_Isend/Recv-デッドロックはありますか?
- MPI_Isendにも待機が必要ですか?デッドロックがあるかどうかはわかりません。私はまた、これらの2つの変数を1つのノードから別のノードに渡すだけで、配列の値はまだNULLです。
- MPI_SendRecvはコードの効率を向上させるでしょうか?ここに示唆したようにNon Blocking communication in MPI and MPI Wait Issue. Not all information is passed correctly?もしそうなら、どのように/なぜですか?また、それを設定するためのいくつかの点を感謝します。
ありがとう!
Source Code:
if ((my_rank) == 0)
{
MPI_Irecv(A, Rows, MPI_DOUBLE, my_rank+1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[6]);
MPI_Wait(&request[6], &status[6]);
}
if ((my_rank) == 1)
{
MPI_Isend(AA, Rows, MPI_DOUBLE, my_rank-1, 0, MPI_COMM_WORLD, &request[6]);
}
if ((my_rank) == 2)
{
MPI_Isend(B, Rows, MPI_DOUBLE, my_rank+1, 0, MPI_COMM_WORLD, &request[7]);
}
if ((my_rank) == 3)
{
MPI_Irecv(BB, Rows, MPI_DOUBLE, my_rank-1, MPI_ANY_TAG, MPI_COMM_WORLD, &request[7]);
MPI_Wait(&request[7], &status[7]);
}
ここでは、何が起こっているのか把握するのに十分なコンテキストはありません。 B、BB、A、AA、ROWとは何ですか?どのような変数はここで賢明な値を持っていないのですか?配列の値がNULLであることはどういう意味ですか?問題を示す完全なコードセグメントが最適です。あなたの他の質問については、はい、IsendとIrecvの両方が待機しているか類似している必要があります。この場合、sendrecvは指定されたパターンと一致しません(上記のケースでは、 )。 –
ありがとうジョナサン。私はバグを修正することができました。それは、私がSend/recvよりも印刷していた方法と関係しています。コマンド。ご協力いただきありがとうございます。 – Ashmohan