Do Loops (without information exchange between arrays)
!mpif90 block_loop.f90
!mpirun -np 4 ./a.out
PROGRAM main
INCLUDE 'mpif.h'
PARAMETER (n = 10)
DIMENSION a(n),b(n)
real, allocatable :: loc(:)
CALL MPI_INIT(ierr)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierr)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr)
!print*, nprocs, myrank
root = 0
m = n / nprocs
allocate(loc(m))
if (myrank == root) then
DO i = 1, n
a(i) = float(i)
print*, i,a(i),"IN"
ENDDO
endif
call MPI_SCATTER( a, m, MPI_REAL, loc, m, MPI_REAL, root, &
MPI_COMM_WORLD, ierr )
print*,
DO i = 1,m
loc(i) = loc(i) + 1
print*, i+m*myrank,loc(i),myrank
ENDDO
print*,
call MPI_GATHER( loc, m, MPI_REAL, b, m, MPI_REAL, root, &
MPI_COMM_WORLD, ierr )
if (myrank == root) then
DO i = 1, n
print*, i,b(i),"OUT"
ENDDO
endif
CALL MPI_FINALIZE(ierr)
END