//Author Antonio-Gabriel Sturzu #include #include #include #include #define lim 100001 int main(int argc,char *argv[]) { int **m,n,i,j,k,rc,numtasks,rank,dim,next,strip,*line,root,rap; MPI_Status status; double time1,time2; //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) { FILE *f=fopen("royfloyd.in","r"); fscanf(f,"%i",&n); m=(int **) calloc(n*n,sizeof(int *)); for(i=0;i0) { m=(int **) calloc(dim*n,sizeof(int *)); for(i=0;i1) { if(n%numtasks!=0) strip=n-dim*(numtasks-1); else strip=dim; for(i=0;inumtasks-1) root=numtasks-1; if(root==rank) { MPI_Bcast(m[k-root*rap],n,MPI_INT,root,MPI_COMM_WORLD); memmove(line,m[k-root*rap],n*sizeof(int)); } else MPI_Bcast(line,n,MPI_INT,root,MPI_COMM_WORLD); for(i=0;i1) { next=dim; for(i=1;i