You are on page 1of 8

CompS 525 HW 2

Peter Finzell
Source code
use mpi
implicit none
integer, parameter :: dp=mpi_double_precision, comm = mpi_comm_world
integer :: i, j, ierror, p, rank, status(mpi_status_size), left, right
integer, parameter :: n = 250
double precision :: A(n,n), t1, t2, time, max_time
call mpi_init(ierror)
call mpi_comm_size(comm, p, ierror)
call mpi_comm_rank(comm, rank, ierror)
if (rank == 0) then
print*,'The value of n used was n = ', n
endif
! initialize A
A(1:n,1:n)=0.d0
! move A to the right for until rank is greater than p-1
if (rank == 0) then
left=mpi_proc_null
else
left=rank-1
endif
if (rank == p-1) then
right=mpi_proc_null
else
right=rank+1
endif
do i = 1, n
!
do j = 1,n
A(j,i) = rank + i + j!
!
end do
end do
call mpi_barrier(comm,ierror)

t1 = mpi_wtime()
! Time Version 1
call MPI_SsEND(A,1,dp,right,0,comm,ierror)
call MPI_RECV(A,1,dp,left,0,comm,mpi_status_ignore,ierror)
t2=mpi_wtime()
time = t2 - t1
call mpi_reduce(time, max_time, 1, dp, mpi_max, 0, comm, ierror)
if (rank == 0) then
print*,' maximum time = ', max_time,' seconds'
print*,' Time Version 1 '
endif
call mpi_barrier(comm,ierror)
t1 = mpi_wtime()
! Time Version 2
call MPI_SEND(A,1,dp,right,0,comm,ierror)
call MPI_RECV(A,1,dp,left,0,comm,mpi_status_ignore,ierror)
t2=mpi_wtime()
time = t2 - t1
call mpi_reduce(time, max_time, 1, dp, mpi_max, 0, comm, ierror)
if (rank == 0) then
print*,' maximum time = ', max_time,' seconds'
print*,' Time Version 2 '
endif
call mpi_barrier(comm,ierror)
t1 = mpi_wtime()
! Time Version 3
call MPI_SENDRECV_replace(A,1,dp,right,0,left,0,comm,mpi_status_ignore,ierror)
t2=mpi_wtime()
time = t2 - t1
call mpi_reduce(time, max_time, 1, dp, mpi_max, 0, comm, ierror)
if (rank == 0) then
print*,' maximum time = ', max_time,' seconds'
print*,' Time Version 3 '
endif
call mpi_finalize(ierror)
end

Results
n=10
Script4
The value of n used was n =

10

Time Version 1
!
maximum time = 2.942085266113281E-004 seconds
!
maximum time = 2.839565277099609E-004 seconds
!
maximum time = 3.027915954589844E-004 seconds
Time Version 2
!
maximum time = 2.288818359375000E-005 seconds
!
maximum time = 1.692771911621094E-005 seconds
!
maximum time = 1.502037048339844E-005 seconds
Time Version 3
!
maximum time = 1.502037048339844E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
Script8
Time Version 1
!
maximum time = 4.260540008544922E-004 seconds
!
maximum time = 3.941059112548828E-004 seconds
!
maximum time = 4.160404205322266E-004 seconds
Time Version 2
!
maximum time = 3.004074096679688E-005 seconds
!
maximum time = 2.789497375488281E-005 seconds
!
maximum time = 3.194808959960938E-005 seconds
Time Version 3
!
maximum time = 2.980232238769531E-005 seconds
!
maximum time = 2.789497375488281E-005 seconds
!
maximum time = 2.694129943847656E-005 seconds

Script16
Time Version 1
!
maximum time = 9.260177612304688E-004 seconds
!
maximum time = 8.828639984130859E-004 seconds
!
maximum time = 8.728504180908203E-004 seconds
Time Version 2
!
maximum time = 4.005432128906250E-005 seconds
!
maximum time = 3.194808959960938E-005 seconds
!
maximum time = 3.504753112792969E-005 seconds
Time Version 3
!
maximum time = 3.600120544433594E-005 seconds
!
maximum time = 3.004074096679688E-005 seconds
!
maximum time = 3.504753112792969E-005 seconds
Script32
Time Version 1
!
maximum time = 1.834869384765625E-003 second
!
maximum time = 1.841068267822266E-003 seconds
!
maximum time = 1.913070678710938E-003 seconds
Time Version 2
!
maximum time = 4.005432128906250E-005 seconds
!
maximum time = 3.910064697265625E-005 seconds
!
maximum time = 4.291534423828125E-005 seconds
Time Version 3
!
maximum time = 5.292892456054688E-005 seconds
!
maximum time = 3.409385681152344E-005 seconds
!
maximum time = 3.695487976074219E-005 seconds

n=250
Script4
The value of n used was n =

250

Time Version 1
!
maximum time = 3.559589385986328E-004 seconds
!
maximum time = 3.209114074707031E-004 seconds
!
maximum time = 3.590583801269531E-004 seconds
Time Version 2
!
maximum time = 2.789497375488281E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
!
maximum time = 1.978874206542969E-005 seconds
Time Version 3
!
maximum time = 1.716613769531250E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
!
maximum time = 1.883506774902344E-005 seconds
Script8
Time Version 1
!
maximum time = 5.757808685302734E-004 seconds
!
maximum time = 5.838871002197266E-004 seconds
!
maximum time = 5.180835723876953E-004 seconds
Time Version 2
!
maximum time = 3.314018249511719E-005 seconds
!
maximum time = 3.290176391601563E-005 seconds
!
maximum time = 3.194808959960938E-005 seconds
Time Version 3
!
maximum time = 2.598762512207031E-005 seconds
!
maximum time = 3.314018249511719E-005 seconds
!
maximum time = 2.312660217285156E-005 seconds

Script16
Time Version 1
!
maximum time = 1.220941543579102E-003 seconds
!
maximum time = 1.258134841918945E-003 seconds
!
maximum time = 1.250028610229492E-003 seconds
Time Version 2
!
maximum time = 3.600120544433594E-005 seconds
!
maximum time = 4.601478576660156E-005 seconds
!
maximum time = 3.910064697265625E-005 seconds
Time Version 3
!
maximum time = 3.910064697265625E-005 seconds
!
maximum time = 3.600120544433594E-005 seconds
!
maximum time = 3.790855407714844E-005 seconds
Script32
Time Version 1
!
maximum time = 2.569198608398438E-003 seconds
!
maximum time = 2.619028091430664E-003 seconds
!
maximum time = 2.660989761352539E-003 seconds
Time Version 2
!
maximum time = 4.506111145019531E-005 seconds
!
maximum time = 4.410743713378906E-005 seconds
!
maximum time = 3.600120544433594E-005 seconds
Time Version 3
!
maximum time = 4.816055297851562E-005 seconds
!
maximum time = 4.506111145019531E-005 seconds
!
maximum time = 3.695487976074219E-005 seconds

n=3500
The value of n used was n =

3500

Script4
Time Version 1
!
maximum time = 3.099441528320312E-004 seconds
!
maximum time = 3.769397735595703E-004 seconds
!
maximum time = 3.559589385986328E-004 seconds
Time Version 2
!
maximum time = 3.004074096679688E-005 seconds
!
maximum time = 2.598762512207031E-005 seconds
!
maximum time = 2.694129943847656E-005 seconds
Time Version 3
!
maximum time = 1.597404479980469E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
!
maximum time = 1.597404479980469E-005 seconds
Script8
Time Version 1
!
maximum time = 5.900859832763672E-004 seconds
!
maximum time = 5.769729614257812E-004 seconds
!
maximum time = 6.070137023925781E-004 seconds
Time Version 2
!
maximum time = 3.290176391601563E-005 seconds
!
maximum time = 3.099441528320312E-005 seconds
!
maximum time = 3.218650817871094E-005 seconds
Time Version 3
!
maximum time = 2.789497375488281E-005 seconds
!
maximum time = 2.193450927734375E-005 seconds
!
maximum time = 2.503395080566406E-005 seconds

Script16
Time Version 1
!
maximum time = 1.244068145751953E-003 seconds
!
maximum time = 1.285076141357422E-003 seconds
!
maximum time = 1.221895217895508E-003 seconds
Time Version 2
!
maximum time = 3.600120544433594E-005 seconds
!
maximum time = 4.100799560546875E-005 seconds
!
maximum time = 3.385543823242188E-005 seconds
Time Version 3
!
maximum time = 3.504753112792969E-005 seconds
!
maximum time = 3.814697265625000E-005 seconds
!
maximum time = 3.004074096679688E-005 seconds
Script32
Time Version 1
!
maximum time = 2.503156661987305E-003 seconds
!
maximum time = 2.544879913330078E-003 seconds
!
maximum time = 2.637147903442383E-003 seconds
Time Version 2
!
maximum time = 4.506111145019531E-005 seconds
!
maximum time = 4.816055297851562E-005 seconds
!
maximum time = 4.196166992187500E-005 seconds
Time Version 3
!
maximum time = 4.315376281738281E-005 seconds
!
maximum time = 3.790855407714844E-005 seconds
!
maximum time = 3.910064697265625E-005 seconds
1.
2. The fastest version was the send_recv_replace

You might also like