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