From afde91bb525fb5aa23f2c28399d59364a64dd648 Mon Sep 17 00:00:00 2001 From: 13513073 <13513073@hpc.if.itb.ac.id> Date: Fri, 19 Feb 2016 11:36:33 +0700 Subject: [PATCH] add bucket_sort OpenMP and laporan --- LaporanOpenMP.txt | 39 +++++++++++++++++++ bucket | Bin 0 -> 16971 bytes bucket_sort.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 LaporanOpenMP.txt create mode 100755 bucket create mode 100644 bucket_sort.c diff --git a/LaporanOpenMP.txt b/LaporanOpenMP.txt new file mode 100644 index 0000000..e522c0f --- /dev/null +++ b/LaporanOpenMP.txt @@ -0,0 +1,39 @@ +Moch Ginanjar Busiri 13513041 +Wiwit Rifa'i 13513073 + + +Laporan Perbandingan Waktu Bucket Sort OpenMP : +Thread : 1 + Data 50000 : 3690 ms + Data 100000 : 14260 ms + Data 200000 : 61810 ms + Data 400000 : 222600 ms +Thread : 8 + Data 50000 : 590 ms + Data 100000 : 2170 + Data 200000 : 8140 ms + Data 400000 : 30600 ms +Thread : 16 + Data 50000 : 390 ms + Data 100000 : 1020 ms + Data 200000 : 4190 ms + Data 400000 : 15900 ms +Thread : 32 + Data 50000 : 360 ms + Data 100000 : 1020 ms + Data 200000 : 2540 ms + Data 400000 : 11810 ms +Thread : 64 + Data 50000 : 500 ms + Data 100000 : 1020 ms + Data 200000 : 2690 ms + Data 400000 : 8560 ms +Thread : 128 + Data 50000 : 60 ms + Data 100000 : 290 ms + Data 200000 : 1260 ms + Data 400000 : 3360 ms + + + + diff --git a/bucket b/bucket new file mode 100755 index 0000000000000000000000000000000000000000..d646e97d713a3f6e3f7b59b2537067334fc95317 GIT binary patch literal 16971 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 YpvI!pyN>m0-sku+3VSBz60aTmZzye~g#Z8m literal 0 HcmV?d00001 diff --git a/bucket_sort.c b/bucket_sort.c new file mode 100644 index 0000000..f384700 --- /dev/null +++ b/bucket_sort.c @@ -0,0 +1,93 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <omp.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] = (abs((int)rand()) % num_elements); + } + return rand_nums; +} + +void insertion_sort(int *array, int a, int b) +{ + int c, d, t; + for (c = a ; c < b; c++) { + d = c; + + while ( d > a && array[d] < array[d-1]) { + t = array[d]; + array[d] = array[d-1]; + array[d-1] = t; + + d--; + } + } +} + + +int main(int argc, char** argv) { + if (argc != 3) { + fprintf(stderr, "Usage: bucket num_threads num_elements\n"); + exit(1); + } + + int num_elements = atoi(argv[2]); + int num_threads = atoi(argv[1]); + int range_size = (num_elements + num_threads - 1) / num_threads; + srand(time(NULL)); + + int *rand_nums = NULL; + rand_nums = create_rand_nums(num_elements); + int * bucket_nums; + bucket_nums = (int *) malloc(sizeof(int) * num_elements); + + int *str, *fsh; + str = (int *)malloc(sizeof(int) * num_threads); + fsh = (int *)malloc(sizeof(int) * num_threads); + + memset(fsh, 0, sizeof(int) * num_threads); + + time_t start_time = clock(); + + int i; + for(i = 0; i<num_elements; i++) { + fsh[rand_nums[i]/range_size]++; + } + int now = 0; + for(i = 0; i<num_threads; i++) { + str[i] = now; + now += fsh[i]; + fsh[i] = str[i]; + } + for(i = 0; i<num_elements; i++) { + int no_bucket = rand_nums[i]/range_size; + bucket_nums[fsh[no_bucket]++] = rand_nums[i]; + } + + // Implementasi bucket sort dengan OMP + #pragma omp parallel for num_threads(num_threads) private(i) shared(bucket_nums,str, fsh) + for (i = 0; i < num_threads; i++) + { + insertion_sort(bucket_nums, str[i], fsh[i]); + } + + + time_t finish_time = clock(); + + for(i = 0; i<num_elements; i++) + printf("%d\n", bucket_nums[i]); + + printf("Bucket sort of %d with %d thread need time : %.5lf ms\n", num_elements, num_threads, (double)(finish_time-start_time)*1000/CLOCKS_PER_SEC); + free(str); + free(fsh); + free(rand_nums); + free(bucket_nums); + return 0; +} -- GitLab