From d38328b520b5b7edfaef3d9a063c7f0ba6ab35fd Mon Sep 17 00:00:00 2001 From: 13513084 <13513084@ld5-02.if.itb.ac.id> Date: Fri, 12 Feb 2016 11:12:57 +0700 Subject: [PATCH] Bucketsort init --- bucketsort | Bin 0 -> 8618 bytes bucketsort.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100755 bucketsort create mode 100644 bucketsort.c diff --git a/bucketsort b/bucketsort new file mode 100755 index 0000000000000000000000000000000000000000..1dc7a56976e86137a387007ea2ce810e505779d3 GIT binary patch literal 8618 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 literal 0 HcmV?d00001 diff --git a/bucketsort.c b/bucketsort.c new file mode 100644 index 0000000..6cc3cb5 --- /dev/null +++ b/bucketsort.c @@ -0,0 +1,107 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <mpi.h> +#include <assert.h> + +float *create_rand_nums(int num_elements) { + float *rand_nums = (float *)malloc(sizeof(float) * num_elements); + assert(rand_nums != NULL); + int i; + for (i = 0; i < num_elements; i++) { + rand_nums[i] = (rand() / (float)RAND_MAX); + } + return rand_nums; +} + +float compute_avg(float *array, int num_elements) { + float sum = 0.f; + int i; + for (i = 0; i < num_elements; i++) { + sum += array[i]; + } + return sum / num_elements; +} + +int main(int argc, char** argv) { + if (argc != 2) { + fprintf(stderr, "Usage: avg num_elements_per_proc\n"); + exit(1); + } + MPI_Status Stat; + + int num_elements_per_proc = 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 i, j, rc; + float inmsg[range]; + + float *rand_nums = NULL; + if (world_rank == 0) { + rand_nums = create_rand_nums(num_elements_per_proc * world_size); + int range = (RAND_MAX)/world_size; + float bucket[range]; + int k; + for (i = 0; i < world_size; i++) { + k = 0; + for (j = 0; j < num_elements_per_proc * world_size; j++) { + if ((rand_nums[j] < i*range+range) && (rand_nums[j] => i*range)) { + bucket[k] = rand_nums[j]; + k++; + } + } + rc = MPI_Send(bucket, range, MPI_FLOAT, i, 1, MPI_COMM_WORLD); + } + + } + rc = MPI_Recv(inmsg, range, MPI_FLOAT, 0, 1, MPI_COMM_WORLD, &Stat); + float t; + for (i = 1 ; i <= range - 1; i++) { + j = i; + + while ( j > 0 && inmsg[j] < inmsg[j-1]) { + t = inmsg[j]; + inmsg[j] = inmsg[j-1]; + inmsg[j-1] = t; + + j--; + } + } + rc = MPI_Send(bucket, range, MPI_FLOAT, 0, 1, MPI_COMM_WORLD); + + if (world_rank == 0) { + sub_avgs = (float *)malloc(sizeof(float) * world_size); + assert(sub_avgs != NULL); + } + MPI_Gather(&sub_avg, 1, MPI_FLOAT, sub_avgs, 1, MPI_FLOAT, 0, MPI_COMM_WORLD); + + if (world_rank == 0) { + k = 0; + for (i = 0; i < world_size; i++) { + rc = MPI_Recv(bucket, range, MPI_FLOAT, i, 1, MPI_COMM_WORLD, &Stat); + for (j = 0; j < range; j++) { + if (bucket[j] >= 0) { + rand_num[k] = bucket[j]; + k++; + } + } + + } + } + + if (world_rank == 0) { + free(rand_nums); + free(sub_avgs); + } + free(sub_rand_nums); + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); +} + -- GitLab