From 5b0726f20958aab85739a24b0e0d74be50aaaeb2 Mon Sep 17 00:00:00 2001
From: 13513039 <13513039@ld5-01.if.itb.ac.id>
Date: Fri, 12 Feb 2016 21:31:52 +0700
Subject: [PATCH] bucketsort

---
 bucketsort   | Bin 13621 -> 13586 bytes
 bucketsort.c | 235 +++++++++++++++++++++++++++++++++------------------
 mpi_hostfile |   7 ++
 3 files changed, 158 insertions(+), 84 deletions(-)
 create mode 100644 mpi_hostfile

diff --git a/bucketsort b/bucketsort
index 312e0c6cd112f55f320d962c10984ea65836599b..a9dd48c1944c1c36b1222002c0339ad5f19dbfb2 100755
GIT binary patch
literal 13586
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
Cc20W$

delta 4246
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

diff --git a/bucketsort.c b/bucketsort.c
index 8db1f93..b2f89d6 100644
--- a/bucketsort.c
+++ b/bucketsort.c
@@ -1,93 +1,160 @@
-#include <stdio.h>
 #include <stdlib.h>
-#include <mpi.h>
-#include <assert.h>
-
- 
-int *create_rand_nums(int num_elements) { 
-	int *rand_nums = (int *)malloc(sizeof(int) * num_elements); 
-	assert(rand_nums != NULL); 
-	int i; 
-	for (i = 0; i < num_elements; i++) { 
-		rand_nums[i] = (int)(rand() / (int)RAND_MAX); 
-	}
-	return rand_nums; 
-}
- 
+#include <time.h>
+#include <stdio.h>
+#include <string.h>
+#include "mpi.h"
 
+#ifndef ElmtMaks
+#define ElmtMaks 100
+#endif
 
-int *sort(int * array, int n){
+typedef struct Bucket {
+    int* content;
+    int n_elmt;
+} Bucket;
 
-  int c,d,t;
-  for (c = 1 ; c <= n - 1; c++) {
-    d = c;
- 
-    while ( d > 0 && array[d] < array[d-1]) {
-      t          = array[d];
-      array[d]   = array[d-1];
-      array[d-1] = t;
-      d--;
-    }
-  }
- 
-  printf("Sorted list in ascending order:\n");
- 
-  for (c = 0; c <= n - 1; c++) {
-    printf("%d\n", array[c]);
-  }
- 
-  return array;
+int *copyArray(int const * oldArray, size_t size) {
+   int * newArray = malloc(sizeof(int) * size);
+   memcpy(newArray, oldArray, sizeof(int) * size);
+   return newArray;
 }
 
+int *sort(int *array,int n){
+    int d,c,t;
+    for (c = 1 ; c <= n - 1; c++) {
+        d = c;
+        while ( d > 0 && array[d] < array[d-1]) {
+            t          = array[d];
+            array[d]   = array[d-1];
+            array[d-1] = t;
+            d--;
+        }
+    }
+    return array;
+}
 
-int main(int argc, char** argv){
-	if(argc != 2){
-		fprintf(stderr, "Usage: bucketsort N M\n");
-		exit(1);
-	}
-	
-	int num_elmt = atoi(argv[1]);
-    int m = atoi(argv[2]);
-    
-	MPI_Init(NULL, NULL);
-	
-	int world_rank;
-	MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
-	int world_size;
-	MPI_Comm_size(MPI_COMM_WORLD, &world_size);
-	
-	int * rand_nums = NULL;
-	if(world_rank == 0){
-			create_rand_nums(num_elmt);
-	}
-	
-	int *sub_rand_nums = (int *) malloc(sizeof(int) * num_elmt);
-	assert(sub_rand_nums != NULL);
-	
-	MPI_Scatter(rand_nums, num_elmt, MPI_INT, sub_rand_nums, num_elmt, MPI_INT, 0, MPI_COMM_WORLD);
-	
-	int * sub_sort = sort(sub_rand_nums,num_elmt);
-	
-	int * sub_sorts = NULL;
-	if(world_rank == 0){
-			sub_sorts = (int *)malloc(sizeof(int) * world_size);
-			assert(sub_sorts != NULL);
-	}
-	MPI_Gather(&sub_sort, 1, MPI_INT, sub_sorts, 1, MPI_INT, 0, MPI_COMM_WORLD);
-	
-	if(world_rank == 0){
-			int * sorted = sort(sub_sorts, num_elmt);
-		    printf("Sorted elmt = ");
-		
-	}
-	
-	if(world_rank == 0){
-			free(rand_nums);
-			free(sub_sorts);
-		
-	}
-	
-	MPI_Barrier(MPI_COMM_WORLD);
-	MPI_Finalize();
+void printElmt (int *array, int size) {
+    int i;
+    for (i = 0; i < size; i++) {
+        printf("%d\n", array[i]);
+    }
 }
 
+
+int main(int argc, char *argv[]) {
+    if(argc != 3){
+        fprintf(stderr, "Usage: bucketsort N(jumlah elemen) M(jumlah bucket)\n");
+        exit(1);
+    }
+
+    /* get input */
+    int N = atoi(argv[1]);
+    int M = atoi(argv[2]);
+
+    /* timer variable */
+    double start_time, end_time;
+    start_time = end_time = 0;
+
+    /* MPI */
+    MPI_Init(NULL, NULL);
+    int world_rank, world_size;
+    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
+
+    /* Bucket */
+    int *random_numbers = NULL;
+    Bucket *myBucket = NULL;
+
+    if (world_rank == 0) {
+        int i;
+        int *randomNumbers = (int *) malloc(sizeof(int) * N);
+        srand(time(NULL));
+        for (i = 0; i < N; i++ ) {
+            randomNumbers[i] = (rand() % ElmtMaks) + 1;
+        }
+        random_numbers = randomNumbers;
+
+
+        myBucket = (Bucket *) malloc(sizeof(Bucket) * M);
+
+        int n = (ElmtMaks / M) + 1;
+
+        int j,k;
+        for (i = 0; i < M; i++) {
+            k = 0;
+            int *t = (int *) malloc(sizeof(int) * N);
+            for (j = 0; j < N; j++) {
+                if (( random_numbers[j] >= i * n ) &&( random_numbers[j] < (i * n) + n )){
+                    t[k] = random_numbers[j];
+                    k++;
+                }
+            }
+            myBucket[i].n_elmt = k;
+            myBucket[i].content = copyArray(t, k);
+            free(t);
+        }
+
+        i = 0;
+
+        if(M < world_size)
+            world_size = M;
+
+        int *sorted_nums[world_size];
+        int sorted_size[world_size];
+
+        int *sorted_zero = sort(myBucket[0].content, myBucket[0].n_elmt);
+        sorted_nums[0] = copyArray(sorted_zero, myBucket[0].n_elmt);
+        sorted_size[0] = myBucket[0].n_elmt;
+
+        /* start counting time */
+        start_time = MPI_Wtime();
+
+        if(M == 1){
+            sorted_nums[0] = sort(random_numbers,N);
+        } else {
+            for (i = 1; i < world_size; i++) {
+                MPI_Send(&myBucket[i].n_elmt, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
+                MPI_Send(myBucket[i].content, myBucket[i].n_elmt, MPI_INT, i, 1, MPI_COMM_WORLD);
+            }
+            for (i = 1; i < world_size; i++) {
+                int received_elmts = 0;
+                int *received_array = (int *) malloc(sizeof(int) * N);
+
+                MPI_Recv(&received_elmts, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); 
+                MPI_Recv(received_array, received_elmts, MPI_INT, i, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
+                
+                sorted_nums[i] = copyArray(received_array, received_elmts);
+                sorted_size[i] = received_elmts;
+            }
+        }
+
+        /* End counting time */
+        end_time = MPI_Wtime();        
+        double elapsed_time = end_time-start_time;
+
+        /* Print Sorted */
+        for (i = 0; i < world_size; i++) {
+            //printf("Hasil dari bucket ke-%d",i);
+            printElmt(sorted_nums[i], sorted_size[i]);
+        }
+
+        /* Print waktu */
+        printf("Total Waktu: %G detik\n", elapsed_time);
+        //printf("Jumlah Elemen %d, Jumlah Bucket %d", N, M);
+    } else {
+        int received_elmts;
+        int *received_array = (int *) malloc(sizeof(int) * N);
+        
+        /* Get partitioned array from root */
+        MPI_Recv(&received_elmts, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); 
+        MPI_Recv(received_array, received_elmts, MPI_INT, 0, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE );
+        
+        /* Sort Array */
+        int *sorted_array = sort(received_array, received_elmts);
+        
+        /* Send sorted to root */
+        MPI_Send(&received_elmts, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
+        MPI_Send(sorted_array, received_elmts, MPI_INT, 0, 1, MPI_COMM_WORLD);
+    }
+    MPI_Finalize();
+}
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