//Author Antonio-Gabriel Sturzu #include #include #include #include #define inf 1001 int main(int argc,char *argv[]) { int rc,numtasks,rank,**m,n,*line,dim,next=0,strip,*key,*viz,*prev,minl=0,iminl,ming,iming,costl=0,prod,costg,sup; int i,j,temp; double time1,time2; FILE *f; MPI_Status status; //MPI Initialization rc = MPI_Init(&argc,&argv); if (rc != MPI_SUCCESS) { printf ("Error starting MPI program. Terminating.\n"); MPI_Abort(MPI_COMM_WORLD, rc); } MPI_Comm_size(MPI_COMM_WORLD,&numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&rank); //Reading from file is done by process 0 if(rank==0) { f=fopen("apm2.in","r"); fscanf(f,"%i",&n); } //Broadcast n's value to all processes MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD); dim=n/numtasks; strip=dim; if(rank==numtasks-1 && n%numtasks!=0) dim=n-dim*(numtasks-1); m=(int **) calloc(n*dim,sizeof(int *)); for(i=0;i1) MPI_Send(&line[next],n-next,MPI_INT,numtasks-1,1,MPI_COMM_WORLD); } } else for(i=0;i=prod && iming