Ich versuche, ein einfaches Problem mit MPI zu lösen, meine Implementierung ist MPICH2 und mein Code ist in Fortran. Ich habe das blockierende Senden und Empfangen verwendet, die Idee ist so einfach, aber wenn ich es starte, stürzt es ab !!! Ich habe absolut keine Ahnung was falsch ist? Kann jemand bitte ein Zitat zu diesem Thema machen? gibt es ein Stück des Codes:ein Deadlock in einem einfachen Odd-Even Senden
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
als ich selbst Prozesse verstanden nichts erhalten, während die ungeraden erfolgreich fertig zu senden, in einigen Fällen, wenn ich etwas Druck hinzugefügt, um zu beobachten, was auf I wird gesehen, dass die Variable NXT ändert sich während des Sendevorgangs !!! zum Beispiel alle ungeraden Prozess wurde Nachricht an Prozess 0 senden, nicht ihre nächste!
Wenn Sie Code bereitstellen, stellen Sie bitte sicher, dass es als solches formatiert ist. Ziehen Sie Ihre Codezeilen um vier Leerzeichen ein. Sie erhalten auch Formatierungsinformationen auf der rechten Seite der Seite "Frage stellen". – canavanin