私はMPIで簡単な問題を解決しようとしています。実装はMPICH2で、私のコードはfortranにあります。私はブロッキング送信と受信を使用して、アイデアはとてもシンプルですが、私がそれを実行するとクラッシュします!何が間違っているのか全く分かりません。誰でもこの問題に引用してくださいできますか?コードの一部があります:私は奇妙なものが正常に送信が完了している間、私はそれを見た上で何が起こっているかを観察するためにいくつかの印刷を追加した場合でも、プロセスはいくつかのケースでは、何も受けていない理解されるように単純な奇妙な送信でデッドロックをキャッチ
integer, parameter :: IM=100, JM=100
REAL, ALLOCATABLE :: T(:,:), TF(:,:)
CALL MPI_COMM_RANK(MPI_COMM_WORLD,RNK,IERR)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD,SIZ,IERR)
prv = rnk-1
nxt = rnk+1
LIM = INT(IM/SIZ)
IF (rnk==0) THEN
ALLOCATE(TF(IM,JM))
prv = MPI_PROC_NULL
ELSEIF(rnk==siz-1) THEN
NXT = MPI_PROC_NULL
LIM = LIM+MOD(IM,SIZ)
END IF
IF (MOD(RNK,2)==0) THEN
CALL MPI_SEND(T(2,:),JM+2,MPI_REAL,PRV,10,MPI_COMM_WORLD,IERR)
CALL MPI_RECV(T(1,:),JM+2,MPI_REAL,PRV,20,MPI_COMM_WORLD,STAT,IERR)
ELSE
CALL MPI_RECV(T(LIM+2,:),JM+2,MPI_REAL,NXT,10,MPI_COMM_WORLD,STAT,IERR)
CALL MPI_SEND(T(LIM+1,:),JM+2,MPI_REAL,NXT,20,MPI_COMM_WORLD,IERR)
END IF
変数NXTは送信中に変化しています!!!たとえば、すべての奇妙なプロセスは、次のプロセスではなく、プロセス0にメッセージを送信していました。
コードを提供する際には、コード行を4つの空白でインデントします。また、「質問の質問」ページの右側に書式設定情報が表示されます。 – canavanin