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