From 8196d53645d75771ab9821a9739cef439c402bd3 Mon Sep 17 00:00:00 2001
From: = <=>
Date: Fri, 19 Feb 2016 14:49:15 +0700
Subject: [PATCH] Add final code

---
 openmp_bucketsort                     | Bin 0 -> 16479 bytes
 openmp_bucketsort_13513001_13513083.c | 121 ++++++++++++++++++++++++++
 2 files changed, 121 insertions(+)
 create mode 100755 openmp_bucketsort
 create mode 100644 openmp_bucketsort_13513001_13513083.c

diff --git a/openmp_bucketsort b/openmp_bucketsort
new file mode 100755
index 0000000000000000000000000000000000000000..1ad8f707c87e81627298f7248ed965232dc8a0a5
GIT binary patch
literal 16479
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
JE6Al*{|7IBM)Lpw

literal 0
HcmV?d00001

diff --git a/openmp_bucketsort_13513001_13513083.c b/openmp_bucketsort_13513001_13513083.c
new file mode 100644
index 0000000..cc3400b
--- /dev/null
+++ b/openmp_bucketsort_13513001_13513083.c
@@ -0,0 +1,121 @@
+#include <stdio.h> 
+#include <stdlib.h> 
+#include <omp.h> 
+#include <assert.h>
+#include <time.h>
+
+void Hello(void); /* Thread function */ 
+
+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] = (rand() % num_elements); 
+	} 
+	return rand_nums; 
+} 
+
+void print_array(int *array, int count) {
+	int i;
+	for (i=0;i<count;i++) {
+		printf("%d  ",array[i]);
+	}
+	printf("\n");
+}
+
+
+void make_bucket(int *array,int *ar_result,int *num_res,int num_elements, int num_process,int total_process) {
+	int bagi = num_elements / total_process ;
+	int batas_bawah = (num_process)*bagi ;
+	int batas_atas = batas_bawah + bagi - 1 ;
+	if (num_process==total_process-1) batas_atas = num_elements-1 ;
+	
+	int i,num=0 ;
+	for (i=0;i<num_elements;i++) {
+		if (array[i]>=batas_bawah && array[i]<=batas_atas) {
+			ar_result[num] = array[i];
+			num++;
+		}
+	}
+	*num_res = num;
+}
+
+
+int *sort_array(int *array, int num_elements) {
+	int i,j ;
+	int temp_;
+	int *result = NULL ;
+	result = array ;
+	for (i=i;i<num_elements;i++) {
+		j=i;
+		while (j>0 && result[j] < result[j-1]) {
+			temp_ = result[j] ;
+			result[j] = result[j-1];
+			result[j-1 ] = temp_;
+			j--;
+		}
+	}
+	return result;
+}
+
+
+int main(int argc, char *argv[]) { 
+	//clock_t start_t,end_t,total_t ;
+	int thread_count = strtol(argv[1], NULL, 10); 
+	int counter=0 ;
+	int *flag_array = create_rand_nums(thread_count);
+	int k ;
+	for (k=0;k<thread_count;k++) flag_array[k] = 0;
+	int *rand_array = NULL ;
+	int *join_array = NULL ;
+	int num_element = atoi(argv[2]); 
+	rand_array = create_rand_nums(num_element);
+	join_array = create_rand_nums(num_element);
+	//printf("Start array : "); print_array(rand_array,num_element);
+	double start = omp_get_wtime();
+	//start_t = clock();
+	#pragma omp parallel num_threads(thread_count) shared(rand_array,join_array,flag_array)
+	{
+		int my_rank = omp_get_thread_num(); 
+		int thread_count = omp_get_num_threads();	
+		printf("Process %d now make bucket array \n",my_rank);
+		int *bucket_array = (int *)malloc(sizeof(int) * num_element);
+		int bucket_size =0; 
+		make_bucket(rand_array,bucket_array,&bucket_size,num_element,my_rank,thread_count);
+		printf("Process %d, bucket size %d . Now sorting\n ",my_rank,bucket_size);
+		//print_array(bucket_array,bucket_size);
+		//Sorting
+		int *bucket_sorted = (int *)malloc(sizeof(int) * bucket_size);
+		bucket_sorted = sort_array(bucket_array,bucket_size);
+		printf("Process %d finishing sorted \n",my_rank);
+		//print_array(bucket_sorted,bucket_size);
+		if (my_rank!=0) {
+			while (flag_array[my_rank-1]==0) {}
+			int i2 ;
+			for (i2=0;i2<bucket_size;i2++) {
+				join_array[counter] = bucket_sorted[i2];
+				counter++; 
+			}
+			flag_array[my_rank]=1;
+		}
+		else {
+			int i2 ;
+			for (i2=0;i2<bucket_size;i2++) {
+				join_array[counter] = bucket_sorted[i2];
+				counter++; 
+			}
+			flag_array[0]=1;
+		}
+	}
+		//end_t = clock();
+		double total_time ;
+		double end = omp_get_wtime();
+		printf("Time taken = %f \n", end - start);
+		//total_time = (double)(end_t - start_t) / CLOCKS_PER_SEC;
+		//printf("Total time taken by CPU: %f\n", total_time  );
+		//printf("Final array : \n");
+		//print_array(join_array,num_element);
+		return 0; 
+} 
+
-- 
GitLab