/* Mesh skeleton: containts: graphical routines setup/visualize, master(), registercoord and registerworkers, plus stub worker() process Be sure to compile with mpicc -lm blah.c to load math library Skeleton designed to run with mpiexec -n 5 */ #include "./mesh.h" #include "./meshsocket.c" // Graphics can be disabled by setting GRAPHICS to 0 #define GRAPHICS 1 int main(int argc, char** argv) { int rank, size, i, j; int themaster = 0; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); if (size != (P*P)+1) {printf("wrong np\n"); exit(1);} CVN = 40; // interval between votes and display updates // seperate worker from master process: (must be done by all procs) MPI_Group worldgroup, workersgroup; MPI_Comm_group(MPI_COMM_WORLD,&worldgroup); MPI_Group_excl(worldgroup,1,&themaster,&workersgroup); MPI_Comm_create(MPI_COMM_WORLD,workersgroup,&WORKERS); /*** Define MPI_Datatype for sub-matrix and sub-matrix column ***/ MPI_Type_vector(M,M,N+2,MPI_DOUBLE,&QUAD); MPI_Type_vector(M,1,M,MPI_DOUBLE,&COLUMN); MPI_Type_commit(&QUAD); MPI_Type_commit(&COLUMN); if (rank==0 && GRAPHICS) { if (argc>1) srvip = argv[1]; else srvip = "127.0.0.1"; } if (rank==0) master(); else worker(); // YOU WRITE THIS MPI_Finalize(); exit(0); }//main void registerworkers() { int i, y, x; int buf[2]; MPI_Status stat; // needs to know how to contact each proc in mesh for(i=0;i