From afde91bb525fb5aa23f2c28399d59364a64dd648 Mon Sep 17 00:00:00 2001
From: 13513073 <13513073@hpc.if.itb.ac.id>
Date: Fri, 19 Feb 2016 11:36:33 +0700
Subject: [PATCH] add bucket_sort OpenMP and laporan

---
 LaporanOpenMP.txt |  39 +++++++++++++++++++
 bucket            | Bin 0 -> 16971 bytes
 bucket_sort.c     |  93 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 132 insertions(+)
 create mode 100644 LaporanOpenMP.txt
 create mode 100755 bucket
 create mode 100644 bucket_sort.c

diff --git a/LaporanOpenMP.txt b/LaporanOpenMP.txt
new file mode 100644
index 0000000..e522c0f
--- /dev/null
+++ b/LaporanOpenMP.txt
@@ -0,0 +1,39 @@
+Moch Ginanjar Busiri 13513041
+Wiwit Rifa'i 13513073
+
+
+Laporan Perbandingan Waktu Bucket Sort OpenMP :
+Thread : 1
+	Data 50000 : 3690 ms
+	Data 100000 : 14260 ms
+	Data 200000 : 61810 ms
+	Data 400000 : 222600 ms
+Thread : 8
+        Data 50000 : 590 ms
+        Data 100000 : 2170
+        Data 200000 : 8140 ms
+        Data 400000 : 30600 ms
+Thread : 16
+        Data 50000 : 390 ms
+        Data 100000 : 1020 ms
+        Data 200000 : 4190 ms
+        Data 400000 : 15900 ms
+Thread : 32
+        Data 50000 : 360 ms
+        Data 100000 : 1020 ms
+        Data 200000 : 2540 ms
+        Data 400000 : 11810 ms
+Thread : 64
+        Data 50000 : 500 ms
+        Data 100000 : 1020 ms
+        Data 200000 : 2690 ms
+        Data 400000 : 8560 ms
+Thread : 128
+        Data 50000 : 60 ms  
+        Data 100000 : 290 ms
+        Data 200000 : 1260 ms
+        Data 400000 : 3360 ms
+
+
+
+
diff --git a/bucket b/bucket
new file mode 100755
index 0000000000000000000000000000000000000000..d646e97d713a3f6e3f7b59b2537067334fc95317
GIT binary patch
literal 16971
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
YpvI!pyN>m0-sku+3VSBz60aTmZzye~g#Z8m

literal 0
HcmV?d00001

diff --git a/bucket_sort.c b/bucket_sort.c
new file mode 100644
index 0000000..f384700
--- /dev/null
+++ b/bucket_sort.c
@@ -0,0 +1,93 @@
+#include <stdio.h> 
+#include <stdlib.h> 
+#include <string.h>
+#include <time.h> 
+#include <omp.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] = (abs((int)rand()) % num_elements); 
+        } 
+        return rand_nums; 
+}
+
+void insertion_sort(int *array, int a, int b)
+{
+  int c, d, t;
+  for (c = a ; c < b; c++) {
+    d = c;
+ 
+    while ( d > a && array[d] < array[d-1]) {
+      t          = array[d];
+      array[d]   = array[d-1];
+      array[d-1] = t;
+ 
+      d--;
+    }
+  }
+}
+
+ 
+int main(int argc, char** argv) { 
+        if (argc != 3) { 
+                fprintf(stderr, "Usage: bucket num_threads num_elements\n"); 
+                exit(1); 
+        } 
+ 
+        int num_elements = atoi(argv[2]);
+	int num_threads = atoi(argv[1]);
+	int range_size = (num_elements + num_threads - 1) / num_threads;
+        srand(time(NULL)); 
+ 
+        int *rand_nums = NULL; 
+        rand_nums = create_rand_nums(num_elements);
+	int * bucket_nums;
+	bucket_nums = (int *) malloc(sizeof(int) * num_elements);
+        
+	int *str, *fsh;
+	str = (int *)malloc(sizeof(int) * num_threads);
+	fsh = (int *)malloc(sizeof(int) * num_threads);
+	        
+	memset(fsh, 0, sizeof(int) * num_threads);
+	
+	time_t start_time = clock();
+
+	int i;
+	for(i = 0; i<num_elements; i++) {
+		fsh[rand_nums[i]/range_size]++;
+	}
+	int now = 0;
+	for(i = 0; i<num_threads; i++) {
+		str[i] = now;
+		now += fsh[i];
+		fsh[i] = str[i];
+	}
+	for(i = 0; i<num_elements; i++) {
+		int no_bucket = rand_nums[i]/range_size;
+		bucket_nums[fsh[no_bucket]++] = rand_nums[i];
+	}
+	
+	// Implementasi bucket sort dengan OMP
+	#pragma omp parallel for num_threads(num_threads) private(i) shared(bucket_nums,str, fsh)
+    	for (i = 0; i < num_threads; i++)
+    	{
+       		insertion_sort(bucket_nums, str[i], fsh[i]);
+    	}
+
+	
+	time_t finish_time = clock();
+	
+	for(i = 0; i<num_elements; i++)
+		printf("%d\n", bucket_nums[i]);
+        
+        printf("Bucket sort of %d with %d thread need time : %.5lf ms\n", num_elements, num_threads, (double)(finish_time-start_time)*1000/CLOCKS_PER_SEC);
+	free(str);
+	free(fsh);
+	free(rand_nums);
+	free(bucket_nums);
+	return 0;
+}
-- 
GitLab