******************************************************************* * This is a program for data exchange among all processors * * Made by Dr. Xue-bin Chi * * Date: April 30, 2005 * * Supercomputing Center * * Computer Network Information Center, CAS * ******************************************************************* program data_exchange *The header file for using MPI parallel environment, which must be *included for all mpi programs. include 'mpif.h' *Variables declaration integer iam, np, comm, ierr integer maxlena, maxnp parameter ( maxlen = 200, maxnp = 10 ) integer i, m, ia(maxlen), iga(maxlen), scounts(maxnp), & rcounts(maxnp), sdispls(maxnp), rdispls(maxnp) *Enroll in MPI environment and get the MPI parameters call mpi_init(ierr) call mpi_comm_dup(mpi_comm_world, comm, ierr) call mpi_comm_rank(comm, iam, ierr) call mpi_comm_size(comm, np, ierr) print *, 'Process ', iam, ' of ', np, ' is running!' m = 10 do 10 i=1, maxlen ia(i) = i 10 continue if( iam .eq. 1 ) ia(21) = 200 if( iam .eq. 2 ) ia(21) = 300 do 20 i=1, np scounts(i) = m rcounts(i) = m sdispls(i) = 20*i - 20 rdispls(i) = 15*i - 15 20 continue rdispls(2) = 30 rdispls(3) = 15 call mpi_alltoall( ia, m, mpi_integer, iga, m, mpi_integer, & comm, ierr ) if( iam .eq. 1 ) then write(*, *) iga(1), iga(m+1) endif call mpi_alltoallv( ia, scounts, sdispls, mpi_integer, iga, & rcounts, rdispls, mpi_integer, comm, ierr ) if( iam .eq. 1 ) then write(*, *) iga(1), iga(16), iga(31) endif call mpi_comm_free( comm, ierr ) call mpi_finalize( ierr ) end

评论