diff --git a/.swp b/.swp new file mode 100644 index 0000000000000000000000000000000000000000..e69c7d4cda884694ea480c90b4f7d66104cd4cff Binary files /dev/null and b/.swp differ diff --git a/a b/a new file mode 100755 index 0000000000000000000000000000000000000000..051132f2e423803a08736493c09679c59d6ef85e Binary files /dev/null and b/a differ diff --git a/bucket.c b/bucket.c new file mode 100644 index 0000000000000000000000000000000000000000..e5448eba86dacfe67bfe490fe046af54fbce42b0 --- /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 0000000000000000000000000000000000000000..820eec6734fb3e7fc699d427076dbf7df8f7c7a1 --- /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 0000000000000000000000000000000000000000..533d2215b819def46e7aa666b2531f42e1dfd7ae --- /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(); +} +