to compile, use
mpif90 parallelize_loop.mpi.f90
to run, use
mpirun -np 2 ./a.out
Contents of "parallelize_loop.mpi.f90":
program exampleParallel
implicit none
include 'mpif.h'
INTEGER :: numcpu, rank, ierr
INTEGER :: loop1Indx, loop2Indx
INTEGER :: loop1Limit, loop2Limit
INTEGER :: current_val, summd_val,all_summd
loop1Limit=numcpu
loop2Limit=3
current_val=0
summd_val=0
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, numcpu, ierr)
write(*,*) 'Number of CPUs=',numcpu,' My rank=',rank
loop1Indx = rank+1
do loop2Indx = 1, loop2Limit
current_val = loop2Indx+(loop1Indx-1)*loop2Limit
write(*,*) current_val, ' from CPU ', rank
summd_val = summd_val+current_val
enddo
call MPI_REDUCE(summd_val,all_summd,1,MPI_INTEGER,MPI_SUM,0,MPI_COMM_WORLD,ierr)
if (ierr.NE.MPI_SUCCESS) then
write(*,*) 'mpi_reduce validgaincount failed, ierr=',ierr,'rank=',rank
stop
endif
if (rank.eq.0) then
write(*,*) 'all summed value is ', all_summd
endif
call mpi_finalize(ierr)
end program