#include #include #include #include double myRand() { return rand()/double(RAND_MAX); } int mpiError_=0; int parallelStart(int& isPara,int& iProc,int& nProc,int argc,char* argv[]) { /*--Initialise MPI--------------------------------------------------------------------------------------------------------*/ mpiError_=MPI_Init(&argc,&argv); /*--Find number of processes----------------------------------------------------------------------------------------------*/ mpiError_=MPI_Comm_size(MPI_COMM_WORLD,&nProc); /*--Find rank------------------------------------------*/ mpiError_=MPI_Comm_rank(MPI_COMM_WORLD,&iProc); if (nProc>1) isPara=1; return mpiError_; } int parallelStop() { mpiError_=MPI_Finalize(); return mpiError_; } int main(int argc, char *argv[]) { int iError; int isPara,iProc,nProc,i,count; double *trans; double *local; double *global; /*--parallelStart starts MPI and returns the process index & number-------------------------------------------------------*/ iError=parallelStart(isPara,iProc,nProc,argc,argv); printf("I am process %d out of %d, isPara=%d\n",iProc,nProc,isPara);fflush(stdout); trans = new double[nProc]; local = new double[nProc]; global= new double[nProc]; srand(1234); for(count=0;count!=1;++count) { for(i=0;i!=nProc;i++) local[i]=myRand(); for(i=0;i!=nProc;i++) trans[i]=local[iProc]; MPI_Alltoall(trans,1,MPI_DOUBLE,global,1,MPI_DOUBLE,MPI_COMM_WORLD); /*--Validate everything-------------------------------------------------------------------------------*/ for(i=0;i!=nProc;i++) { if (local[i]!=global[i]) printf("%d Mismatch\n",iProc);fflush(stdout); } } delete [] trans; delete [] local; delete [] global; /*--Finalise MPI---------------------------------------------------------------------------------*/ iError=parallelStop(); return iError; }