マルチスレッドプログラムでMPI_Isend/MPI_Recv の問題が発生しました。
プログラムでは:
最初のマシンでは、1 つのスレッドが何らかの計算を行い、バッファを 2 番目のマシンに送信するための呼び出しMPI_Isend
を行い、別のスレッドが常にMPI_Recv
2 番目のマシンからデータを取得しようとしています。そして、最初のスレッドは、再度呼び出す前にMPI_Wait
最後に完了します。MPI_Isend
MPI_Isend
2 台目のマシンもまったく同じことを行います。
次に、次の結果が得られました。
最初のマシン:
スレッド0 : MPI_Isend
2 番目のマシンへのデータが正常に送信されました。MPI_Wait
しかし、最後MPI_Isend
が完了しなかったためにブロックされました。
スレッド1 : MPI_Recv
2 番目のマシンからデータを取得しようとしましたが、データがなく、ブロックされました。
2台目:
スレッド0 :MPI_Isend
最初のマシンへのデータが正常に送信されました。MPI_Wait
しかし、最後MPI_Isend
が完了しなかったためにブロックされました。
スレッド1 :MPI_Recv
最初のマシンからデータを取得しようとしましたが、データがなく、ブロックされました。
誰にもアイデアはありますか?2 日間問題を追跡しましたが、進展がなかったので、とても感謝しています。