program example13 include 'mpif.h' integer ierr, rank, size, MAXPROC, NTIMES, i, it parameter (MAXPROC = 128, NTIMES = 10000) integer ibuf(MAXPROC) double precision time_start, time_finish integer req(2*MAXPROC), statuses(MPI_STATUS_SIZE, MAXPROC) call MPI_INIT(ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) if(rank .eq. 0) then do i = 1, size-1 call MPI_RECV_INIT(ibuf(i), 0, MPI_INTEGER, i, 5, & MPI_COMM_WORLD, req(i), ierr) call MPI_SEND_INIT(rank, 0, MPI_INTEGER, i, 6, & MPI_COMM_WORLD, req(size+i), & ierr) end do time_start = MPI_WTIME(ierr) do it = 1, NTIMES call MPI_STARTALL(size-1, req, ierr) call MPI_WAITALL(size-1, req, statuses, ierr) call MPI_STARTALL(size-1, req(size+1), ierr) call MPI_WAITALL(size-1, req(size+1), statuses, & ierr) end do else call MPI_RECV_INIT(ibuf(1), 0, MPI_INTEGER, 0, 6, & MPI_COMM_WORLD, req(1), ierr) call MPI_SEND_INIT(rank, 0, MPI_INTEGER, 0, 5, & MPI_COMM_WORLD, req(2), ierr) time_start = MPI_WTIME(ierr) do it = 1, NTIMES call MPI_START(req(2), ierr) call MPI_WAIT(req(2), statuses, ierr) call MPI_START(req(1), ierr) call MPI_WAIT(req(1), statuses, ierr) end do end if time_finish = MPI_WTIME(ierr)-time_start print *, 'rank = ', rank, ' all time = ', & (time_finish)/NTIMES time_start = MPI_WTIME(ierr) do it = 1, NTIMES call MPI_BARRIER(MPI_COMM_WORLD,ierr) enddo time_finish = MPI_WTIME(ierr)-time_start print *, 'rank = ', rank, ' barrier time = ', & (time_finish)/NTIMES call MPI_FINALIZE(ierr) end