From fb07ca540602ac417257cb1eb24e6601a8405a3f Mon Sep 17 00:00:00 2001 From: 13513063 <13513063@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 19:18:44 +0700 Subject: [PATCH] Finish Bucket Sort --- bucketsort.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ laporan.txt | 66 ++++++++++++++++++++++++++++++ main | Bin 0 -> 13784 bytes 3 files changed, 177 insertions(+) create mode 100644 bucketsort.c create mode 100644 laporan.txt create mode 100755 main diff --git a/bucketsort.c b/bucketsort.c new file mode 100644 index 0000000..164f570 --- /dev/null +++ b/bucketsort.c @@ -0,0 +1,111 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <math.h> +#include <mpi.h> +#include <assert.h> + +int *create_rand_nums(int num_elements) { + int *rand_nums = (int *)malloc(sizeof(int) * (num_elements+5)); + 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 insertionSort(int *arr, int size){ + int i,j; + int value; + for(i=1;i<size;i++) + { + value=arr[i]; + if(value == -1) break; + j=i-1; + while(j>=0 && value<arr[j]) + { + arr[j+1]=arr[j]; + j=j-1; + } + arr[j+1]=value; + } +} + +int main(int argc, char** argv) { + if (argc != 2) { +fprintf(stderr, "Usage: avg num_elements\n"); +exit(1); + } + + int num_elements = atoi(argv[1]); + srand(time(NULL)); + + MPI_Init(NULL, NULL); + + int world_rank; + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); + int world_size; + MPI_Comm_size(MPI_COMM_WORLD, &world_size); + + int *rand_nums = NULL; + if (world_rank == 0) { +rand_nums = create_rand_nums(num_elements); +assert(rand_nums != NULL); + } + + time_t start_t; + int bucketSize = num_elements; + int *bucket = NULL; + int * indeks = NULL; + int range = (bucketSize+world_size)/world_size; + if (world_rank == 0){ + start_t = clock(); + bucket = (int *)malloc(sizeof(int) * (world_size+5) * bucketSize); + indeks = (int *)malloc(sizeof(int) * (world_size+5)); + memset(bucket,-1,sizeof(int) * world_size * bucketSize); + int i; + for(i = 0; i < world_size; i++) { + indeks[i] = i*bucketSize; + } + for(i = 0; i < bucketSize; i++) { + int no_group = rand_nums[i]/range; + bucket[indeks[no_group]++] = rand_nums[i]; + } + } + int *sub_rand_nums = (int *)malloc(sizeof(int) * bucketSize); + assert(sub_rand_nums != NULL); + MPI_Scatter(bucket, bucketSize, MPI_INT, sub_rand_nums, bucketSize, MPI_INT, 0, MPI_COMM_WORLD); + + insertionSort(sub_rand_nums,bucketSize); + + int *nums_sorted = NULL; + if (world_rank == 0) { +nums_sorted = (int *)malloc(sizeof(int) * (world_size+5) * bucketSize); +assert(nums_sorted != NULL); + } + MPI_Gather(sub_rand_nums, bucketSize, MPI_INT, nums_sorted, bucketSize, MPI_INT, 0, +MPI_COMM_WORLD); + + if (world_rank == 0) { + int i; + for(i = 0; i < bucketSize*world_size; ++i){ + if(nums_sorted[i] >= 0) printf("%d\n",nums_sorted[i]); + } + time_t finish_t = clock(); + printf("Waktu eksekusi %d data : %d process : %.5f ms\n", bucketSize, world_size, (double)(finish_t-start_t)*1000/CLOCKS_PER_SEC); + } + + if (world_rank == 0) { +free(rand_nums); +free(bucket); +free(nums_sorted); +free(indeks); + } + free(sub_rand_nums); + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); +} + diff --git a/laporan.txt b/laporan.txt new file mode 100644 index 0000000..dba86e4 --- /dev/null +++ b/laporan.txt @@ -0,0 +1,66 @@ +Perbandingan waktu kinerja program + +1) +N = 50.000, M = 1 +t = 2050 ms + +N = 50.000, M = 4 +t = 370 ms + +N = 50.000, M = 8 +t = 250 ms + +N = 50.000, M = 16 +t = 270 ms + +N = 50.000, M = 32 +t = 180 ms + +2) +N = 100.000, M = 1 +t = 8070 ms + +N = 100.000, M = 4 +t = 890 ms + +N = 100.000, M = 8 +t = 410 ms + +N = 100.000, M = 16 +t = 370 ms + +N = 100.000, M = 32 +t = 310 + +3) +N = 200.000, M = 1 +t = 32880 ms + +N = 200.000, M = 4 +t = 2500 ms + +N = 200.000, M = 8 +t = 1070 ms + +N = 200.000, M = 16 +t = 900 ms + +N = 200.000, M = 32 +t = 760 + +4) +N = 400.000, M = 1 +t = 128580 ms + +N = 400.000, M = 4 +t = 9230 ms + +N = 400.000, M = 8 +t = 3190 ms + +N = 400.000, M = 16 +t = 1970 ms + +N = 400.000, M = 32 +t = 1770 + diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..92ea49e0f18d038b9ecf1f2a2b38b30f7d9313bf GIT binary patch literal 13784 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 G`u_pp$se)+ literal 0 HcmV?d00001 -- GitLab