From 938f5102d7a37c225973530953fd6da36522042e Mon Sep 17 00:00:00 2001 From: 13513096 <13513096@ld5-01.if.itb.ac.id> Date: Fri, 12 Feb 2016 11:01:54 +0700 Subject: [PATCH] not finished --- a | Bin 0 -> 13634 bytes broadcast.c | 71 ++++++++++++++++++++++++++++++++++++ mpi_hostfile | 11 ++++++ scatgat.c | 76 +++++++++++++++++++++++++++++++++++++++ sendrec.c | 30 ++++++++++++++++ tes.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 287 insertions(+) create mode 100755 a create mode 100644 broadcast.c create mode 100644 mpi_hostfile create mode 100644 scatgat.c create mode 100644 sendrec.c create mode 100644 tes.c diff --git a/a b/a new file mode 100755 index 0000000000000000000000000000000000000000..530e3c15ceeaea09bb140e8f812cefd9353a441b GIT binary patch literal 13634 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 PkhSEfVjwTVmcj!7TctN6 literal 0 HcmV?d00001 diff --git a/broadcast.c b/broadcast.c new file mode 100644 index 0000000..7eabc79 --- /dev/null +++ b/broadcast.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <stdlib.h> +#include <mpi.h> +#include <assert.h> + +void my_bcast(void* data, int count, MPI_Datatype datatype, int root, MPI_Comm communicator) { + int world_rank; + MPI_Comm_rank(communicator, &world_rank); + int world_size; + MPI_Comm_size(communicator, &world_size); + + if (world_rank == root) { + // If we are the root process, send our data to everyone + int i; + for (i = 0; i < world_size; i++) { + if (i != world_rank) { + MPI_Send(data, count, datatype, i, 0, communicator); + } + } + } else { + // If we are a receiver process, receive the data from the root + MPI_Recv(data, count, datatype, root, 0, communicator, MPI_STATUS_IGNORE); + } +} + +int main(int argc, char** argv) { + if (argc != 3) { + fprintf(stderr, "Usage: compare_bcast num_elements num_trials\n"); + exit(1); + } + + int num_elements = atoi(argv[1]); + int num_trials = atoi(argv[2]); + + MPI_Init(NULL, NULL); + + int world_rank; + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); + + double total_my_bcast_time = 0.0; + double total_mpi_bcast_time = 0.0; + int i; + int* data = (int*)malloc(sizeof(int) * num_elements); + assert(data != NULL); + + for (i = 0; i < num_trials; i++) { + // Time my_bcast + // Synchronize before starting timing + MPI_Barrier(MPI_COMM_WORLD); + total_my_bcast_time = MPI_Wtime(); + my_bcast(data, num_elements, MPI_INT, 0, MPI_COMM_WORLD); + // Synchronize again before obtaining final time + MPI_Barrier(MPI_COMM_WORLD); + total_my_bcast_time = MPI_Wtime(); + // Time MPI_Bcast + MPI_Barrier(MPI_COMM_WORLD); + total_mpi_bcast_time = MPI_Wtime(); + MPI_Bcast(data, num_elements, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Barrier(MPI_COMM_WORLD); + total_mpi_bcast_time += MPI_Wtime(); + } + + // Print off timing information + if (world_rank == 0) { + printf("Data size = %d, Trials = %d\n", num_elements * (int)sizeof(int), num_trials); + printf("Avg my_bcast time = %lf\n", total_my_bcast_time / num_trials); + printf("Avg MPI_Bcast time = %lf\n", total_mpi_bcast_time / num_trials); + } + + MPI_Finalize(); +} 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 + diff --git a/scatgat.c b/scatgat.c new file mode 100644 index 0000000..2f3719a --- /dev/null +++ b/scatgat.c @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <mpi.h> +#include <assert.h> + +float *create_consecutive(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] = i+1; + } + 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_consecutive(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(); +} diff --git a/sendrec.c b/sendrec.c new file mode 100644 index 0000000..59046f1 --- /dev/null +++ b/sendrec.c @@ -0,0 +1,30 @@ +#include <mpi.h> +#include <stdio.h> + +int main(int argc, char *argv[]) { + int numtasks, rank, dest, source, rc, count, tag=1; + char inmsg, outmsg='x'; + MPI_Status Stat; + + MPI_Init(&argc,&argv); + MPI_Comm_size(MPI_COMM_WORLD, &numtasks); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + if (rank == 0) { + dest = 1; + source = 1; + rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); + rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); + } + else if (rank == 1) { + dest = 0; + source = 0; + rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); + rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); + } + + rc = MPI_Get_count(&Stat, MPI_CHAR, &count); + printf("Task %d: Received %d char(s) from task %d with tag %d \n", rank, count, Stat.MPI_SOURCE, Stat.MPI_TAG); + + MPI_Finalize(); +} diff --git a/tes.c b/tes.c new file mode 100644 index 0000000..d1f860b --- /dev/null +++ b/tes.c @@ -0,0 +1,99 @@ +#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; +} + +// n adalah jumlah element +float *insertion_sort(float array[], int n) { + float tarray[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--; + } + } + int i; + for (i = 0 ; i < n; i++) { + tarray[i] = array[i]; + } + return tarray; +} + +int main(int argc, char** argv) { + if (argc != 2) { + fprintf(stderr, "Usage: avg num_elements_per_proc\n"); + exit(1); + } + + int num_elements = 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 num_elements_per_proc = world_size; + + float *rand_nums = NULL; + if (world_rank == 0) { + rand_nums = create_rand_nums(num_elements); + } + int i; + for (i = 0; i < num_elements; i++) { + printf("BBB %f \n", rand_nums[i]); + } + + 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_rand_numss = insertion_sort(sub_rand_nums, num_elements_per_proc); + + float *sub_avgs = NULL; + if (world_rank == 0) { + sub_avgs = (float *)malloc(sizeof(float) * num_elements); + assert(sub_avgs != NULL); + } + + for (i = 0; i < 3; i++) { + printf("AAAA %f\n",sub_rand_numss[i]); + } + //MPI_Gather(&sub_avg, 1, MPI_FLOAT, sub_avgs, 1, MPI_FLOAT, 0, MPI_COMM_WORLD); + + //Concat + /*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