Double Ping Pong Test
The double ping pong test : (known as COMMS2 in the Parkbench suite)
If (my_rank .EQ. master) Then
CALL mpi_sendrecv (A, ilen, MPI_BYTE, nslave, 10,
B, ilen, MPI_BYTE, nslave, 20,
CALL mpi_sendrecv (A, ilen, MPI_BYTE, nslave, 10,
B, ilen, MPI_BYTE, nslave, 20,
CALL mpi_sendrecv (A, ilen, MPI_BYTE, master, 20,
B, ilen, MPI_BYTE, master, 10,
MPI_COMM_WORLD, status, ierr)
CALL mpi_sendrecv (A, ilen, MPI_BYTE, master, 20,
B, ilen, MPI_BYTE, master, 10,
If (my_rank .EQ. master) Then
CALL shmem_putmem (B, A, ilen,
CALL shmem_barrier_all ()!optional
CALL shmem_getmem (A, B, ilen,
CALL shmem_barrier_all ()!optional
CALL shmem_putmem (B, A, ilen,
CALL shmem_barrier_all ()!optional
CALL shmem_getmem (A, B, ilen,
CALL shmem_barrier_all ()!optional
Since the send/recv arrays (A & B) are independent no synchronization is
necessary in the shmem example but it simulate the best the MPI behavior.