From cee65af104ce0d0be72bfc49c4f760808ad39de9 Mon Sep 17 00:00:00 2001 From: 13513004 <13513004@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 21:09:49 +0700 Subject: [PATCH] karna bug setitik rusak sort sebelanga --- mergesort.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/mergesort.c b/mergesort.c index aa92d02..2830b46 100644 --- a/mergesort.c +++ b/mergesort.c @@ -51,6 +51,8 @@ int main(int argc, char *argv[]) MPI_Comm_size(MPI_COMM_WORLD, &world_size); if (!world_rank) scanf("%d", &n); + MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); + int size = (n + world_size - 1) / world_size; // equally distributed int N = size * world_size; @@ -61,7 +63,6 @@ int main(int argc, char *argv[]) } world_rank++; // 1-based - MPI_Bcast(&size, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Scatter(arr, size, MPI_INT, arr, size, MPI_INT, 0, MPI_COMM_WORLD); // scatter to buckets @@ -73,17 +74,17 @@ int main(int argc, char *argv[]) char isSend = 0; while (x < world_size) { - if (world_rank & x == x) + if ((-world_rank & world_rank & x) == x) { - MPI_Send(arr, size, MPI_INT, world_rank + x, world_rank + x, MPI_COMM_WORLD); + MPI_Send(arr, size, MPI_INT, world_rank + x - 1, world_rank + x, MPI_COMM_WORLD); isSend = 1; } else { - if (isSend) continue; - - MPI_Recv(arr, size, MPI_INT, world_rank + x, world_rank + x, MPI_COMM_WORLD, &stat); - merge(arr, arr+size, size, size); - size <<= 1; + if (!isSend) { + MPI_Recv(arr+size, size, MPI_INT, world_rank - x - 1, world_rank, MPI_COMM_WORLD, &stat); + merge(arr, arr+size, size, size); + size <<= 1; + } } x <<= 1; @@ -95,8 +96,6 @@ int main(int argc, char *argv[]) { printf("%d ", arr[i]); } - puts(""); - } free(arr); -- GitLab