catching a deadlock in a simple odd-even sending

Posted by user562264 on Stack Overflow See other posts from Stack Overflow or by user562264
Published on 2011-01-04T08:50:52Z Indexed on 2011/01/04 8:53 UTC
Read the original article Hit count: 525

Filed under:
|
|

I'm trying to solve a simple problem with MPI, my implementation is MPICH2 and my code is in fortran. I have used the blocking send and receive, the idea is so simple but when I run it it crashes!!! I have absolutely no idea what is wrong? can anyone make quote on this issue please? there is a piece of the code:

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

as I understood even processes are not receiving anything while the odd ones finish sending successfully, in some cases when I added some print to observe what is going on I saw that the variable NXT is changing during the sending procedure!!! for example all the odd process was sending message to process 0 not their next one!

© Stack Overflow or respective owner

Related posts about fortran

Related posts about mpi