CALL mpi_comm_rank(comm, rank, ierr)
IF (rank .EQ. 0 ) THEN
CALL mpi_bsend(buf1, count, MPI_REAL, 1, tag, comm, ierr)
CALL mpi_bsend(buf1, count, MPI_REAL, 1, tag, comm, ierr)
ELSE ! rank .EQ. 1
CALL mpi_recv(buf1, count, MPI_REAL, 0, MPI_ANY_TAG, comm, status, ierr)
CALL mpi_recv(buf2, count, MPI_REAL, 0, tag, comm, status, ierr)
END IF
CALL mpi_comm_rank(comm, rank, ierr)
IF (rank .EQ. 0) THEN
CALL mpi_bsend(buf1, count, MPI_REAL, 1, tag1, comm, ierr)
CALL mpi_ssend(buf2, count, MPI_REAL, 1, tag2, comm, ierr)
ELSE ! rank .EQ. 1
CALL mpi_recv(buf1, count, MPI_REAL, 0, tag2, comm, status, ierr)
CALL mpi_recv(buf2, count, MPI_REAL, 0, tag1, comm, status, ierr)
END IF
MPI_BUFFER_ATTACH( BUFFER, SIZE, IERROR )and detach them with
MPI_BUFFER_DETACH( BUFFER_ADDR, SIZE, IERROR )
CALL mpi_comm_rank( comm, rank, ierr ) IF ( rank .EQ. 0 ) THEN CALL mpi_send(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) CALL mpi_recv(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) ELSE ! rank .EQ. 1 CALL mpi_recv(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) CALL mpi_send(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) END IFthis program will succeed even if no buffer is available. Standard
SENDs can be replaced with synchronous
ones.
CALL mpi_comm_rank( comm, rank, ierr ) IF ( rank .EQ. 0 ) THEN CALL mpi_recv(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) CALL mpi_send(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) ELSE ! rank .EQ. 1 CALL mpi_recv(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) CALL mpi_send(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) END IFThis program will always deadlock, for all
SEND modes.
CALL mpi_comm_rank( comm, rank, ierr ) IF ( rank .EQ. 0 ) THEN CALL mpi_send(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) CALL mpi_recv(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) ELSE ! rank .EQ. 1 CALL mpi_send(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) CALL mpi_recv(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) END IFThis program will succeed only if communication system can buffer at least
count reals.