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