From 4388a23b6fd3666f0ef575a4e4812bf015caf5a8 Mon Sep 17 00:00:00 2001 From: 13513044 <13513044@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 11:16:36 +0700 Subject: [PATCH] draft 1 --- .swp | Bin 0 -> 4096 bytes a | Bin 0 -> 13684 bytes bucket.c | 162 ++++++++++++++++++++++++++++++++++++++++++++++++ mpi_hostfile | 7 +++ scattergather.c | 80 ++++++++++++++++++++++++ 5 files changed, 249 insertions(+) create mode 100644 .swp create mode 100755 a create mode 100644 bucket.c create mode 100644 mpi_hostfile create mode 100644 scattergather.c diff --git a/.swp b/.swp new file mode 100644 index 0000000000000000000000000000000000000000..e69c7d4cda884694ea480c90b4f7d66104cd4cff GIT binary patch literal 4096 zcmYc?2=nw+FxN9-00IFJ0RgK685j(WO%06=Ou$kwacp!>im9%FAvT#&vC$A14S~TE z0-T}7Mur9;_b4kVDhLaO4j!kCx@0s2MnhmU1V%$(Gz3ONU^E0qLtr!nMniz+Apii) CA_$NG literal 0 HcmV?d00001 diff --git a/a b/a new file mode 100755 index 0000000000000000000000000000000000000000..051132f2e423803a08736493c09679c59d6ef85e GIT binary patch literal 13684 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 literal 0 HcmV?d00001 diff --git a/bucket.c b/bucket.c new file mode 100644 index 0000000..e5448eb --- /dev/null +++ b/bucket.c @@ -0,0 +1,162 @@ +/* Copyrights http://www.programmingsimplified.com/c/source-code/c-program-insertion-sort */ +/* insertion sort ascending order */ + +#include <stdio.h> +// Copyright 2012 www.mpitutorial.com + +// Program yang menghitung rataÂrata dari array secara paralel menggunakan Scatter dan Gather. +#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* bucketSort(int array[], int n, int argc) { + int i, j; + int data[1000][1000]; + int size[1000]; + for (i=0;i<n;i++) { + size[i] = 0; + } + for (i=0;i<n;i++) { + if (array[i] < 10) + data[0][size[i]] = array[i]; + size[i]++; + } + + 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); + + MPI_Scatter(data, num_elements_per_proc, MPI_FLOAT, sub_rand_nums, + num_elements_per_proc, MPI_FLOAT, 0, MPI_COMM_WORLD); + + MPI_Gather(&sub_avg, 1, MPI_FLOAT, sub_avgs, 1, MPI_FLOAT, 0, + MPI_COMM_WORLD); + + if (world_rank == 0) { + float avg = compute_avg(sub_avgs, world_size); + printf("Avg of all elements is %f\n", avg); + } + + if (world_rank == 0) { + free(rand_nums); + free(sub_avgs); + } + free(sub_rand_nums); + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); + + + 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); + + float *rand_nums = NULL; + if (world_rank == 0) { + rand_nums = create_rand_nums(num_elements_per_proc * world_size); + } + + float *sub_rand_nums = (float *)malloc(sizeof(float) * + num_elements_per_proc); + assert(sub_rand_nums != NULL); + + MPI_Scatter(rand_nums, num_elements_per_proc, MPI_FLOAT, sub_rand_nums, + num_elements_per_proc, MPI_FLOAT, 0, MPI_COMM_WORLD); + + float sub_avg = compute_avg(sub_rand_nums, num_elements_per_proc); + + float *sub_avgs = NULL; + 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) { + float avg = compute_avg(sub_avgs, world_size); + printf("Avg of all elements is %f\n", avg); + } + + if (world_rank == 0) { + free(rand_nums); + free(sub_avgs); + } + free(sub_rand_nums); + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); +} + + +int main(int argc, char** argv) +{ + + int n, array[1000], c, d, t; + int array1[1000]; + + if (argc != 2) { + fprintf(stderr, "Usage: avg num_elements_per_proc\n"); + exit(1); + } + + printf("Enter number of elements\n"); + scanf("%d", &n); + + printf("Enter %d integers\n", n); + + for (c = 0; c < n; c++) { + scanf("%d", &array[c]); + } + array1 = bucketSort(array[1000], n, argc); + /* + 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", array1[c]); + } + + return 0; +} diff --git a/mpi_hostfile b/mpi_hostfile new file mode 100644 index 0000000..820eec6 --- /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 diff --git a/scattergather.c b/scattergather.c new file mode 100644 index 0000000..533d221 --- /dev/null +++ b/scattergather.c @@ -0,0 +1,80 @@ +// Copyright 2012 www.mpitutorial.com + +#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); +} + +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); + +float *rand_nums = NULL; +if (world_rank == 0) { +rand_nums = create_rand_nums(num_elements_per_proc * world_size); +} + +float *sub_rand_nums = (float *)malloc(sizeof(float) * +num_elements_per_proc); +assert(sub_rand_nums != NULL); + +MPI_Scatter(rand_nums, num_elements_per_proc, MPI_FLOAT, sub_rand_nums, +num_elements_per_proc, MPI_FLOAT, 0, MPI_COMM_WORLD); + +float sub_avg = compute_avg(sub_rand_nums, num_elements_per_proc); + +float *sub_avgs = NULL; +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) { +float avg = compute_avg(sub_avgs, world_size); +printf("Avg of all elements is %f\n", avg); +} + +if (world_rank == 0) { +free(rand_nums); +free(sub_avgs); +} +free(sub_rand_nums); + +MPI_Barrier(MPI_COMM_WORLD); +MPI_Finalize(); +} + -- GitLab