各プロセスの変数の値を一つの配列に集める
OPT=-r8 -O2 -heap-arrays 1024FCC=ifortF90=$(FCC) $(OPT)F90P=mpiifort $(OPT)FLIB=.SUFFIXES : .cc .f90 .o#all: trace_lorenz96 generate96dataall: mg mg2mg : 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 *.modprogram 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