#include #include #include #include #define N 100000 #define MASTER 0 /* taskid of first task */ void showVector(int *v, int n, int id); int * merge(int *A, int asize, int *B, int bsize); void m_sort(int *A, int min, int max); double startT, stopT; double startTime; /*function to print a vector*/ void showVector(int *v, int n, int id) { int i; printf("%d: ",id); for(i=0;i= asize) /*if A is shorter*/ for (i = ci; i < csize; i++, bi++) C[i] = B[bi]; else if (bi >= bsize) /*if B is shorter*/ for (i = ci; i < csize; i++, ai++) C[i] = A[ai]; for (i = 0; i < asize; i++) A[i] = C[i]; for (i = 0; i < bsize; i++) B[i] = C[asize+i]; /* showVector(C, csize, 0); */ return C; } void m_sort(int *A, int min, int max) { int *C; /* dummy, just to fit the function */ int mid = (min+max)/2; int lowerCount = mid - min + 1; int upperCount = max - mid; /* If the range consists of a single element, it's already sorted */ if (max == min) { return; } else { /* Otherwise, sort the first half */ m_sort(A, min, mid); /* Now sort the second half */ m_sort(A, mid+1, max); /* Now merge the two halves */ C = merge(A + min, lowerCount, A + mid + 1, upperCount); } } int main(int argc, char **argv) { int *data; int *chunk; int *other; int m,n=N; int id,p; int s = 0; int i,r; int step; MPI_Status status; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&id); MPI_Comm_size(MPI_COMM_WORLD,&p); startT = MPI_Wtime(); /**************************** master task ************************************/ if(id == MASTER) { srandom(MPI_Wtime()); s = n/p; r = n%p; data = (int *)malloc((n+p-r)*sizeof(int)); for(i=0;i