From ffbd09262be6bcc4d277308a68000a8766979fa4 Mon Sep 17 00:00:00 2001
From: muhtarh <13513068@std.stei.itb.ac.id>
Date: Fri, 19 Feb 2016 15:45:14 +0800
Subject: [PATCH] fix bug

---
 bucket.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/bucket.c b/bucket.c
index 95332f9..c2613c4 100644
--- a/bucket.c
+++ b/bucket.c
@@ -12,10 +12,14 @@ void insert_sort(int *data, int size);
 
 int main(int argc, char** argv) {
     
-    if (argc != 2) {
+    if (argc < 2) {
         fprintf(stderr, "Usage: num_elements\n");
         exit(1);
     }
+    if (argc == 3) {
+    	omp_set_num_threads(atoi(argv[2]));
+    }
+    
     int num_thread;
     int num_elements = atoi(argv[1]);
     // Seed the random number generator to get different results each time
@@ -26,6 +30,8 @@ int main(int argc, char** argv) {
     int max = num_elements;
     int num_range;
     int *last_idx;
+    clock_t start, end;
+    start = clock();
     #pragma omp parallel
     {
             int nthrds = omp_get_num_threads();
@@ -47,25 +53,31 @@ int main(int argc, char** argv) {
             int i;
             for(i = id; i < num_elements; i += nthrds) {
                 int dest = data[i]/num_range;
+			#pragma omp critical
                 bucket[dest][last_idx[dest]] = data[i];
                 last_idx[dest]++;
+   	
             }
     #pragma omp barrier
            insert_sort(bucket[id],last_idx[id]);
     }
-    int i,j;
+    int i, j;
     int k = 0;
     for(i = 0; i< num_thread; i++) {
         for(j = 0; j < last_idx[i]; j++) {
             data[k] = bucket[i][j];
             k++;
-            printf("%d - ",data[k-1]);
         }
     }
+    
+    //end clock
+    end = clock();
+    
     for(i =0; i < num_elements; i++) {
         printf("%d - ",data[i]);
-    }
-    
+    } printf("\n");
+    printf("Jumlah thread : %d",num_thread);
+    printf( "\nTime: %f\n", (end-start)/(double)CLOCKS_PER_SEC );
     
     free(data);
     free(last_idx);
@@ -73,6 +85,7 @@ int main(int argc, char** argv) {
         free(bucket[i]);
     }
     free(bucket);
+    
     return 0;
 }
 
-- 
GitLab