#include "slice.h" // main represents code shared by all processes: 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);} // 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); if (rank==0) master(); else worker(); MPI_Finalize(); } // Called by root to record relative ranks of each process in WORKERS. // That is, if a process has rank 2 in MPI_COMM_WORLD and void registerworkers() { int i, y; MPI_Status stat; // needs to know how to contact each proc in WORKERS for(i=0;i=YDIM) k=YDIM-1; if (j+U=YDIM) kr=YDIM-1; drawline(graph,3*j,k,i,3*(j+U),kr,i,mc); } if (i+U=YDIM) kd=YDIM-1; drawline(graph,3*j,k,i,3*j,kd,i+U,mc); } } // for for MPE_Update(graph); if (mousesynch) MPE_Get_mouse_press( graph, &i, &j, &k ); } //visualize // Master function void master() { int i, j, x, y, r, c; int resume = 1; int vote = 0; // 0 means should not resume static MPI_Status stat[P*P]; static MPI_Request req[P][P]; registerworkers(); // sets locate[] matrix // create Data matrix Data = (NROW *)malloc(sizeof(double)*(N+2)*(N+2)); Q = (NROW *)malloc(sizeof(double)*(N+2)*M); // for comm // GENERATE Data matrix // interior for(i=1;i