From 5b0726f20958aab85739a24b0e0d74be50aaaeb2 Mon Sep 17 00:00:00 2001 From: 13513039 <13513039@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 21:31:52 +0700 Subject: [PATCH] bucketsort --- bucketsort | Bin 13621 -> 13586 bytes bucketsort.c | 235 +++++++++++++++++++++++++++++++++------------------ mpi_hostfile | 7 ++ 3 files changed, 158 insertions(+), 84 deletions(-) create mode 100644 mpi_hostfile diff --git a/bucketsort b/bucketsort index 312e0c6cd112f55f320d962c10984ea65836599b..a9dd48c1944c1c36b1222002c0339ad5f19dbfb2 100755 GIT binary patch literal 13586 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 Cc20W$ delta 4246 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 diff --git a/bucketsort.c b/bucketsort.c index 8db1f93..b2f89d6 100644 --- a/bucketsort.c +++ b/bucketsort.c @@ -1,93 +1,160 @@ -#include <stdio.h> #include <stdlib.h> -#include <mpi.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] = (int)(rand() / (int)RAND_MAX); - } - return rand_nums; -} - +#include <time.h> +#include <stdio.h> +#include <string.h> +#include "mpi.h" +#ifndef ElmtMaks +#define ElmtMaks 100 +#endif -int *sort(int * array, int n){ +typedef struct Bucket { + int* content; + int n_elmt; +} Bucket; - int c,d,t; - for (c = 1 ; c <= n - 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--; - } - } - - printf("Sorted list in ascending order:\n"); - - for (c = 0; c <= n - 1; c++) { - printf("%d\n", array[c]); - } - - return array; +int *copyArray(int const * oldArray, size_t size) { + int * newArray = malloc(sizeof(int) * size); + memcpy(newArray, oldArray, sizeof(int) * size); + return newArray; } +int *sort(int *array,int n){ + int d,c,t; + for (c = 1 ; c <= n - 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--; + } + } + return array; +} -int main(int argc, char** argv){ - if(argc != 2){ - fprintf(stderr, "Usage: bucketsort N M\n"); - exit(1); - } - - int num_elmt = atoi(argv[1]); - int m = atoi(argv[2]); - - 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){ - create_rand_nums(num_elmt); - } - - int *sub_rand_nums = (int *) malloc(sizeof(int) * num_elmt); - assert(sub_rand_nums != NULL); - - MPI_Scatter(rand_nums, num_elmt, MPI_INT, sub_rand_nums, num_elmt, MPI_INT, 0, MPI_COMM_WORLD); - - int * sub_sort = sort(sub_rand_nums,num_elmt); - - int * sub_sorts = NULL; - if(world_rank == 0){ - sub_sorts = (int *)malloc(sizeof(int) * world_size); - assert(sub_sorts != NULL); - } - MPI_Gather(&sub_sort, 1, MPI_INT, sub_sorts, 1, MPI_INT, 0, MPI_COMM_WORLD); - - if(world_rank == 0){ - int * sorted = sort(sub_sorts, num_elmt); - printf("Sorted elmt = "); - - } - - if(world_rank == 0){ - free(rand_nums); - free(sub_sorts); - - } - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); +void printElmt (int *array, int size) { + int i; + for (i = 0; i < size; i++) { + printf("%d\n", array[i]); + } } + +int main(int argc, char *argv[]) { + if(argc != 3){ + fprintf(stderr, "Usage: bucketsort N(jumlah elemen) M(jumlah bucket)\n"); + exit(1); + } + + /* get input */ + int N = atoi(argv[1]); + int M = atoi(argv[2]); + + /* timer variable */ + double start_time, end_time; + start_time = end_time = 0; + + /* MPI */ + MPI_Init(NULL, NULL); + int world_rank, world_size; + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); + MPI_Comm_size(MPI_COMM_WORLD, &world_size); + + /* Bucket */ + int *random_numbers = NULL; + Bucket *myBucket = NULL; + + if (world_rank == 0) { + int i; + int *randomNumbers = (int *) malloc(sizeof(int) * N); + srand(time(NULL)); + for (i = 0; i < N; i++ ) { + randomNumbers[i] = (rand() % ElmtMaks) + 1; + } + random_numbers = randomNumbers; + + + myBucket = (Bucket *) malloc(sizeof(Bucket) * M); + + int n = (ElmtMaks / M) + 1; + + int j,k; + for (i = 0; i < M; i++) { + k = 0; + int *t = (int *) malloc(sizeof(int) * N); + for (j = 0; j < N; j++) { + if (( random_numbers[j] >= i * n ) &&( random_numbers[j] < (i * n) + n )){ + t[k] = random_numbers[j]; + k++; + } + } + myBucket[i].n_elmt = k; + myBucket[i].content = copyArray(t, k); + free(t); + } + + i = 0; + + if(M < world_size) + world_size = M; + + int *sorted_nums[world_size]; + int sorted_size[world_size]; + + int *sorted_zero = sort(myBucket[0].content, myBucket[0].n_elmt); + sorted_nums[0] = copyArray(sorted_zero, myBucket[0].n_elmt); + sorted_size[0] = myBucket[0].n_elmt; + + /* start counting time */ + start_time = MPI_Wtime(); + + if(M == 1){ + sorted_nums[0] = sort(random_numbers,N); + } else { + for (i = 1; i < world_size; i++) { + MPI_Send(&myBucket[i].n_elmt, 1, MPI_INT, i, 0, MPI_COMM_WORLD); + MPI_Send(myBucket[i].content, myBucket[i].n_elmt, MPI_INT, i, 1, MPI_COMM_WORLD); + } + for (i = 1; i < world_size; i++) { + int received_elmts = 0; + int *received_array = (int *) malloc(sizeof(int) * N); + + MPI_Recv(&received_elmts, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); + MPI_Recv(received_array, received_elmts, MPI_INT, i, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); + + sorted_nums[i] = copyArray(received_array, received_elmts); + sorted_size[i] = received_elmts; + } + } + + /* End counting time */ + end_time = MPI_Wtime(); + double elapsed_time = end_time-start_time; + + /* Print Sorted */ + for (i = 0; i < world_size; i++) { + //printf("Hasil dari bucket ke-%d",i); + printElmt(sorted_nums[i], sorted_size[i]); + } + + /* Print waktu */ + printf("Total Waktu: %G detik\n", elapsed_time); + //printf("Jumlah Elemen %d, Jumlah Bucket %d", N, M); + } else { + int received_elmts; + int *received_array = (int *) malloc(sizeof(int) * N); + + /* Get partitioned array from root */ + MPI_Recv(&received_elmts, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); + MPI_Recv(received_array, received_elmts, MPI_INT, 0, 1, MPI_COMM_WORLD, MPI_STATUS_IGNORE ); + + /* Sort Array */ + int *sorted_array = sort(received_array, received_elmts); + + /* Send sorted to root */ + MPI_Send(&received_elmts, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); + MPI_Send(sorted_array, received_elmts, MPI_INT, 0, 1, MPI_COMM_WORLD); + } + MPI_Finalize(); +} diff --git a/mpi_hostfile b/mpi_hostfile new file mode 100644 index 0000000..1aab781 --- /dev/null +++ b/mpi_hostfile @@ -0,0 +1,7 @@ +#daftar host +localhost +167.205.35.26 +167.205.35.28 +167.205.35.29 +167.205.35.30 +167.205.35.31 -- GitLab