From f0bcc44173a4f21b34a9d637e3f3f3c6759dc2f8 Mon Sep 17 00:00:00 2001 From: adinb <you@example.com> Date: Fri, 19 Feb 2016 11:33:36 +0700 Subject: [PATCH] fixes --- omp_bucket | Bin 0 -> 15424 bytes omp_bucket.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ omp_hello | Bin 0 -> 15440 bytes 3 files changed, 90 insertions(+) create mode 100755 omp_bucket create mode 100644 omp_bucket.c create mode 100755 omp_hello diff --git a/omp_bucket b/omp_bucket new file mode 100755 index 0000000000000000000000000000000000000000..36f09b9d2ef0b1b9f5598333201e7f95f2378f90 GIT binary patch literal 15424 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 Zy$dc{cl7+m=Ubuny>dXCY?b!*{}+zYD8B#z literal 0 HcmV?d00001 diff --git a/omp_bucket.c b/omp_bucket.c new file mode 100644 index 0000000..8a9b800 --- /dev/null +++ b/omp_bucket.c @@ -0,0 +1,90 @@ +#include <stdio.h> +#include <stdlib.h> +#include <omp.h> +#define MAX_VALUE 10000 + +void bucket_sort(int* sorted_array, int element_num); /* Thread function */ +void insertion_sort(int* sorted_array, int size); + + +int main(int argc, char *argv[]) { + + int i; + + // Num of threads + int thread_count = atoi(argv[1]); + // Num of elements + int element_num = atoi(argv[2]); + + int range = MAX_VALUE / thread_count; + + // Seed + srand(time(NULL)); + + // Bucket + //int* bucket = (int *)malloc(sizeof(int) * element_num); + //memset (bucket, 0, (sizeof(int) * element_num)); + + // Sorted Array + int* sorted_array = (int *)malloc(sizeof(int) * element_num); + memset (sorted_array, 0, (sizeof(int) * element_num)); + + // Do bucket sort + #pragma omp parallel num_threads(thread_count) + bucket_sort(sorted_array, element_num); + + for (i=0;i<element_num;i++){ + printf("%d ", sorted_array[i]); + } + return 0; +} + +void insertion_sort(int* sorted_array, int size) +{ + int n, array[size], c, d, t; + + + int my_rank = omp_get_thread_num(); + int thread_count = omp_get_num_threads(); + n = thread_count+1; + + printf("%d\n", my_rank); + + for (c = 0; c < size; c++) { + array[c] = rand() % (size) + (my_rank)*size; + printf("before sort : %d\n", array[c]); + } + + // Sorting + for (c = 1 ; c <= size - 1; c++) { + d = c; + + while ( d > 0 && array[d] < array[d-1]) { + t = array[d]; + array[d] = array[d-1]; + array[d-1] = t; + + d--; + } + } + + for (c=0;c<size;c++){ + printf("%d",array[c]); + +} + + memcpy(&array, sorted_array+(my_rank * size), size); + +} + +void bucket_sort(int* sorted_array, int element_num) { + int my_rank = omp_get_thread_num(); + int thread_count = omp_get_num_threads(); + + int bucket_size = element_num / thread_count; + + insertion_sort(sorted_array, bucket_size); + + + +} diff --git a/omp_hello b/omp_hello new file mode 100755 index 0000000000000000000000000000000000000000..a745d655107f106dae2b35d5377a94038a452a42 GIT binary patch literal 15440 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 literal 0 HcmV?d00001 -- GitLab