Skip to content
skeleton.F90 1.36 KiB
Newer Older
Jussi Enkovaara's avatar
Jussi Enkovaara committed
program basic
  use mpi
  use iso_fortran_env, only : REAL64

  implicit none
  integer, parameter :: size = 10000000
  integer :: rc, myid, ntasks
  integer :: message(size)
  integer :: receiveBuffer(size)
  integer :: status(MPI_STATUS_SIZE)

  real(REAL64) :: t0, t1

  call mpi_init(rc)
  call mpi_comm_rank(MPI_COMM_WORLD, myid, rc)
  call mpi_comm_size(MPI_COMM_WORLD, ntasks, rc)

  message = myid

  ! Start measuring the time spent in communication
  call mpi_barrier(mpi_comm_world, rc)
  t0 = mpi_wtime()

  ! TODO: Send and receive as defined in the assignment
  if ( myid < ntasks-1 ) then

     write(*,'(A10,I3,A20,I8,A,I3,A,I3)') 'Sender: ', myid, &
          ' Sent elements: ',size, &
          '. Tag: ', myid+1, '. Receiver: ', myid+1
  end if

  if ( myid > 0 ) then

     write(*,'(A10,I3,A,I3)') 'Receiver: ', myid, &
          ' First element: ', receiveBuffer(1)
  end if

  ! Finalize measuring the time and print it out
  t1 = mpi_wtime()
  call mpi_barrier(mpi_comm_world, rc)
  call flush(6)

  if (myid == 0) then
      write(*,*)
      write(*,*) 'Timings:'
      write(*, '(A20, I3, A, F6.3)') 'Time elapsed in rank', myid, ':', t1-t0
  endif
  call mpi_barrier(mpi_comm_world, rc)
  call flush(6)
  if (myid == ntasks - 1) then
      write(*, '(A20, I3, A, F6.3)') 'Time elapsed in rank', myid, ':', t1-t0
  endif

  call mpi_finalize(rc)

end program basic