From 50b56fada53a9dcc76345779e498b7b244cc43a0 Mon Sep 17 00:00:00 2001 From: ich0 <nithoalif@yahoo.com> Date: Fri, 12 Feb 2016 19:28:23 +0700 Subject: [PATCH] done] --- bucket_sort | Bin 0 -> 13459 bytes bucket_sort.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ mpi_hostfile | 11 +++++ 3 files changed, 131 insertions(+) create mode 100755 bucket_sort create mode 100644 bucket_sort.c create mode 100644 mpi_hostfile diff --git a/bucket_sort b/bucket_sort new file mode 100755 index 0000000000000000000000000000000000000000..1e4e663358a2dfe9eb9cbb6fed961666b918dd39 GIT binary patch literal 13459 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 literal 0 HcmV?d00001 diff --git a/bucket_sort.c b/bucket_sort.c new file mode 100644 index 0000000..a587768 --- /dev/null +++ b/bucket_sort.c @@ -0,0 +1,120 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <mpi.h> +#include <assert.h> + +void insertion_sort(int* array, int num_elements) { + // Sorting array + int i; + int d; + int t; + for (i = 1; i < num_elements; i++) { + d = i; + + while ( d > 1 && array[i] < array[d-1] ) { + t = array[d]; + array[d] = array[d-1]; + array[d-1] = t; + + d--; + } + } +} + + +int cmpfunc (const void * a, const void * b) +{ + return ( *(int*)a - *(int*)b ); +} + +int main(int argc, char const *argv[]) { + if (argc != 2) { + fprintf(stderr, "Usage: avg num_elements_per_proc\n"); + exit(1); + } + + MPI_Init(NULL, NULL); + + int BUCKET_SIZE = atoi(argv[1]); //Each Bucket size + int MAX_VALUE = atoi(argv[1]); + int i, j, k, z, iter=0; + time_t t; + + int WORLD_RANK; + int WORLD_SIZE; //Number of process / Number of bucket + MPI_Comm_rank(MPI_COMM_WORLD, &WORLD_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &WORLD_SIZE); + double begin = MPI_Wtime(); + srand((unsigned) time(&t)); + if (WORLD_RANK == 0) { //Initialize bucket + int rand_array[BUCKET_SIZE]; + + for (i = 0; i < BUCKET_SIZE; i++){ + rand_array[i] = rand() % MAX_VALUE; + // printf("%d\n", rand_array[i]); + } + int sum = 0; + int bucket[BUCKET_SIZE]; + int low, high; + for (i = 1; i < WORLD_SIZE; i++){ + for (j = 0; j < BUCKET_SIZE; j++){ + bucket[j] = -1; + } + // printf("%d\n", i); + + for (j = 0; j < BUCKET_SIZE; j++){ + low = (i - 1) * (MAX_VALUE/WORLD_SIZE+1); + high = i * (MAX_VALUE/WORLD_SIZE+1); + //printf("%d %d %d %d %d\n", MAX_VALUE, WORLD_SIZE, low, high, rand_array[j]); + if ((rand_array[j] < high) && (rand_array[j] >= low)){ + bucket[iter] = rand_array[j]; + sum++; + //printf("%d\n", bucket[iter]); + iter++; + } else { +// printf("%d\n", rand_array[j]); + } + } + //printf("AAA %d AAA\n", sum); + + MPI_Send(bucket, BUCKET_SIZE, MPI_INT, i, 0, MPI_COMM_WORLD); + iter = 0; + } + } else { + int bucket_n[BUCKET_SIZE]; + MPI_Recv(bucket_n, BUCKET_SIZE, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + qsort(bucket_n, BUCKET_SIZE, sizeof(int), cmpfunc); + int lol = 0; + + MPI_Send(bucket_n, BUCKET_SIZE, MPI_INT, 0, 0, MPI_COMM_WORLD); + } + + if (WORLD_RANK == 0){ + int bucket[BUCKET_SIZE]; + int delim = 0; + for (i = 1; i<WORLD_SIZE; i++){ + int bucket_n[BUCKET_SIZE]; + //printf("%d\n", i); + MPI_Recv(bucket_n, BUCKET_SIZE, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + //printf("Tulis dari proses %d\n", i); + for (z = 0; z < BUCKET_SIZE; z++){ + // printf("%d ", bucket_n[z]); + if (bucket_n[z] != -1){ + bucket[delim] = bucket_n[z]; + delim++; + } + } + //printf("\n"); + } + //assert(delim == BUCKET_SIZE); + for (i = 0; i < BUCKET_SIZE; i++){ + printf("%d\n", bucket[i]); + } + + double end = MPI_Wtime(); + printf("Time elapsed: %f seconds\n", end - begin); + } + MPI_Finalize(); + return 0; +} diff --git a/mpi_hostfile b/mpi_hostfile new file mode 100644 index 0000000..bffbf88 --- /dev/null +++ b/mpi_hostfile @@ -0,0 +1,11 @@ +#daftar host +localhost +167.205.35.26 +167.205.35.28 +167.205.35.29 +167.205.35.30 +167.205.35.31 +#167.205.35.32 +#167.205.35.33 +#167.205.35.34 + -- GitLab