mpi_gather
各プロセスの変数の値を一つの配列に集める
OPT=-r8 -O2 -heap-arrays 1024
FCC=ifort
F90=$(FCC) $(OPT)
F90P=mpiifort $(OPT)
FLIB=
.SUFFIXES : .cc .f90 .o
#all: trace_lorenz96 generate96data
all: mg mg2
mg : mg.o
$(F90P) $^ -o $@ $(FLIB)
mg2 : mg2.o
$(F90P) $^ -o $@ $(FLIB)
.f90.o:
$(F90P) -c $(MOD) $<
.cc.o:
$(CXX) -c $(MOD) $<
clean :
rm -f *.o *.mod
program mg
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/12.Work11/31.PF_Sample/13.mpi_renshu
!
! Revision history:
! 2011-04-16 15:57
! Initial Version
! use
! implicit none
include 'mpif.h'
integer irecv(3)
write(*,'(a)')'Program mg starts.'
! write(*,*)''
call mpi_init(ierr)
call mpi_comm_size(mpi_comm_world,nprocs,ierr)
call mpi_comm_rank(mpi_comm_world,myrank,ierr)
isend= myrank + 1
write(*,'(a,2i5)')'myrank,isend= ',myrank,isend
call mpi_gather(isend,1,mpi_integer,irecv,1,mpi_integer,0, &
& mpi_comm_world,ierr)
if(myrank == 0) print *,'irecv = ',irecv
call mpi_finalize(ierr)
write(*,'(a,i5)')'Done program mg. myrank= ',myrank
write(*,*)
end program mg
$ make
make: Warning: File `mg.f90' has modification time 4.2e+02 s in the future
mpiifort -r8 -O2 -heap-arrays 1024 -c mg.f90
mpiifort -r8 -O2 -heap-arrays 1024 mg.o -o mg
$ mpirun -np 3 mg
WARNING: Unable to read mpd.hosts or list of hosts isn't provided. MPI job will be run on the current machine only.
Program mg starts.
Program mg starts.
Program mg starts.
myrank,isend= 0 1
myrank,isend= 2 3
irecv = 1 2 3
myrank,isend= 1 2
Done program mg. myrank= 0
Done program mg. myrank= 2
Done program mg. myrank= 1
program mg2
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/12.Work11/31.PF_Sample/13.mpi_renshu
!
! Revision history:
! 2011-04-16 16:03
! Initial Version
! use
! implicit none
include 'mpif.h'
integer,parameter :: ndim=2,npr=3
integer isend(ndim)
integer irecv(ndim*npr)
write(*,'(a)')'Program mg2 starts.'
! write(*,*)''
call mpi_init(ierr)
call mpi_comm_size(mpi_comm_world,nprocs,ierr)
call mpi_comm_rank(mpi_comm_world,myrank,ierr)
do i=1,ndim
isend(i)= myrank*ndim + i
enddo !i
do i=1,ndim
write(*,'(a,2i5)')'myrank,isend(i)= ',myrank,isend(i)
enddo !i
! call mpi_gather(isend,1,mpi_integer,irecv,1,mpi_integer,0, &
! & mpi_comm_world,ierr)
call mpi_gather(isend,ndim,mpi_integer,irecv,ndim,mpi_integer,0, &
& mpi_comm_world,ierr)
if(myrank == 0) then
print *,'RESULT'
print *,'i, irecv'
do i=1,ndim*npr
print *,i, irecv(i)
enddo !i
print *
endif
call mpi_finalize(ierr)
! write(*,'(a)')'Done program mg2.'
! write(*,*)
end program mg2
$ make
make: Warning: File `mg2.f90' has modification time 4.1e+02 s in the future
mpiifort -r8 -O2 -heap-arrays 1024 -c mg2.f90
mpiifort -r8 -O2 -heap-arrays 1024 mg2.o -o mg2
$ mpirun -np 3 mg2
WARNING: Unable to read mpd.hosts or list of hosts isn't provided. MPI job will be run on the current machine only.
Program mg2 starts.
Program mg2 starts.
Program mg2 starts.
myrank,isend(i)= 0 1
myrank,isend(i)= 0 2
myrank,isend(i)= 2 5
myrank,isend(i)= 2 6
myrank,isend(i)= 1 3
myrank,isend(i)= 1 4
RESULT
i, irecv
1 1
2 2
3 3
4 4
5 5
6 6