From eb93ff67601b84e6d43d5406a789c6bf2766f993 Mon Sep 17 00:00:00 2001 From: 13513066 <13513066@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 19:14:12 +0700 Subject: [PATCH] Bucket Sort Done --- bucketsort | Bin 0 -> 13485 bytes bucketsort.c | 117 ++++++++++++++++++++++++++++++++++++++++++--------- mpi_hostfile | 7 +++ 3 files changed, 105 insertions(+), 19 deletions(-) create mode 100755 bucketsort create mode 100644 mpi_hostfile diff --git a/bucketsort b/bucketsort new file mode 100755 index 0000000000000000000000000000000000000000..ee64757457fee41b229fb2cd763c25f103ed3b3c GIT binary patch literal 13485 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 literal 0 HcmV?d00001 diff --git a/bucketsort.c b/bucketsort.c index abf4d3c..8d835c7 100644 --- a/bucketsort.c +++ b/bucketsort.c @@ -1,5 +1,7 @@ -include "mpi.h" +#include "mpi.h" #include <stdlib.h> +#include <stdio.h> +#include <time.h> void insertionSort(int n, int* array) { @@ -49,30 +51,107 @@ int main() { double time_bucket= 0.0; double time_insert= 0.0; + int* bucket; + int* array; + float div; + float upperbound; + int n, c, d, t; if(rank==0) { - printf("Enter number of elements\n"); - scanf("%d", &n); - - printf("Enter %d integers\n", n); - int *array = (int*)malloc(sizeof(int)*n); - - for (c = 0; c < n; c++) { - scanf("%d", &array[c]); + printf("Enter number of elements\n"); + scanf("%d", &n); + + printf("Enter %d integers\n", n); + array =(int*)malloc(sizeof(int)*n); + srand(time(NULL)); + for (c = 0; c < n; c++) { + array[c] = rand()%100; + } } - float div = (float)(max(array, n) - min(array, n)/(float)size); - printf("%f", div); - - - insertionSort(n, array); - printf("Sorted list in ascending order:\n"); - - for (c = 0; c <= n - 1; c++) { - printf("%d\n", array[c]); + MPI_Barrier(MPI_COMM_WORLD); + time_bucket -= MPI_Wtime(); + MPI_Bcast(&n, 1, MPI_INT, 0 , MPI_COMM_WORLD); + + + if(rank!=0) { + array=(int*)malloc(sizeof(int)*n); } + + + MPI_Bcast(array, n, MPI_INT, 0 , MPI_COMM_WORLD); + + + + bucket = (int*)malloc(sizeof(int)*n); + + int i; + + div = (float)(max(array, n) - min(array, n))/(float)size; + if(div==0) div=1; + int j=0; + for(i=0; i<n; i++) { + int bucket_no = (int)((array[i]-min(array,n))/div); + if(rank==bucket_no) { + bucket[j]=array[i]; + j++; + } + else if (bucket_no>=size) { + if (rank==size-1){ + bucket[j]=array[i]; + j++; + } + } + } + + insertionSort(j,bucket); + + int *result; + if(rank==0) { + result = (int*)malloc(sizeof(int) * n); + } + + int *counts = (int*) malloc (sizeof(int) * size); + + // Each process tells the root how many elements it holds + MPI_Gather(&j, 1, MPI_INT, counts, 1, MPI_INT, 0, MPI_COMM_WORLD); + + // Displacements in the receive buffer for MPI_GATHERV + int *disps = (int*) malloc (sizeof(int) * size); + // Displacement for the first chunk of data - 0 + for (i = 0; i < size; i++) + disps[i] = (i > 0) ? (disps[i-1] + counts[i-1]) : 0; + + // Collect everything into the root + MPI_Gatherv(bucket, j, MPI_INT, + result, counts, disps, MPI_INT, 0, MPI_COMM_WORLD); + + MPI_Barrier(MPI_COMM_WORLD); + time_bucket += MPI_Wtime(); + + if (rank==0) { + + printf("Sorted list in ascending order with BucketSort:\n"); + + for (c = 0; c <= n - 1; c++) { + printf("%d ", result[c]); + } + printf("\nTime : %lf\n", time_bucket); } + + if(rank==0) { + time_insert -= MPI_Wtime(); + insertionSort(n, array); + time_insert+= MPI_Wtime(); + printf("Sorted list in ascending order with Insertion Sort:\n"); + + for (c = 0; c <= n - 1; c++) { + printf("%d ", result[c]); + } + printf("\nTime : %lf\n", time_insert); + } + MPI_Finalize(); -return 0; + return 0; } diff --git a/mpi_hostfile b/mpi_hostfile new file mode 100644 index 0000000..1aab781 --- /dev/null +++ b/mpi_hostfile @@ -0,0 +1,7 @@ +#daftar host +localhost +167.205.35.26 +167.205.35.28 +167.205.35.29 +167.205.35.30 +167.205.35.31 -- GitLab