From 91338c362c090e73a30f6f36f5ab6342cf8bc05a Mon Sep 17 00:00:00 2001 From: 13513079 <13513079@hpc.if.itb.ac.id> Date: Fri, 19 Feb 2016 11:38:31 +0700 Subject: [PATCH] Bucket sort (omp) done --- bucket_sort | Bin 0 -> 17011 bytes bucket_sort_omp.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100755 bucket_sort create mode 100644 bucket_sort_omp.c diff --git a/bucket_sort b/bucket_sort new file mode 100755 index 0000000000000000000000000000000000000000..ba6e36936b16ffb9602c03cc83bae53725e60764 GIT binary patch literal 17011 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 literal 0 HcmV?d00001 diff --git a/bucket_sort_omp.c b/bucket_sort_omp.c new file mode 100644 index 0000000..1967e72 --- /dev/null +++ b/bucket_sort_omp.c @@ -0,0 +1,107 @@ +//Nama File : bucket_sort_omp.c +//Oleh : Jessica Handayani 13513069 & Asanilta Fahda 13513079 + + +#include <omp.h> +#include <stdio.h> +#include <stdlib.h> +#include <time.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] = (rand() % (int)num_elements); + } + return rand_nums; +} + +int** create_bucket_arrays(int num_buckets, int num_elements) { + int i; + int** bucket_arrays = (int**)malloc(sizeof(int*) * num_buckets); + for (i = 0; i < num_buckets; i++) { + bucket_arrays[i] = (int *)malloc(sizeof(int) * num_elements); + } + return bucket_arrays; +} + +int* insertion_sort(int* elements, int num_elements){ + int i,j; + int temp; + for(i = 0; i < num_elements; i++){ + j = i; + while (j > 0 && elements[j] < elements[j-1]) { + temp = elements[j]; + elements[j] = elements[j-1]; + elements[j-1] = temp; + + j--; + } + } + + return elements; + +} + +int main(int argc, char* argv[]) { + if (argc != 2){ + fprintf(stderr, "Usage: num_elements\n"); + exit(1); + } + + double time = 0.0; + int thread_count = strtol(argv[1], NULL, 10); + int N; + printf("Enter N\n"); + scanf("%d", &N); + int i; + int j; + + //create array of N random numbers + int* rand_nums = create_rand_nums(N); + int** bucket_arrays = create_bucket_arrays(thread_count,N); + int* last_index = (int *)malloc(sizeof(int) * thread_count); + + for (i = 0; i < thread_count; i ++) { + last_index[i] = 0; + } + + int bucket_range = (N%thread_count == 0) ? N/thread_count : N/thread_count+1; + + time -= omp_get_wtime(); + + int bucket; + //insert numbers to appropriate bucket arrays + for (i = 0; i < N; i++) { + bucket = rand_nums[i]/bucket_range; + bucket_arrays[bucket][last_index[bucket]++] = rand_nums[i]; + } + + + //sort arrays in parallel + # pragma omp parallel for num_threads(thread_count) + for (i = 0; i < thread_count; i++) { + bucket_arrays[i] = insertion_sort(bucket_arrays[i],last_index[i]); + } + + + //combine sorted arrays + int* sorted_array = (int *)malloc(sizeof(int) * N); + int last_sorted_index = 0; + for (i = 0; i < thread_count; i++) { + for (j = 0; j < last_index[i]; j++) { + sorted_array[last_sorted_index++] = bucket_arrays[i][j]; + } + } + time += omp_get_wtime(); + printf("Sorted: "); + for (i = 0; i < N; i++) { + printf("%d ",sorted_array[i]); + } + printf("\nTime : %lf s\n", time); + + +} + -- GitLab