From fae46c7af44e1f90b887d1ce006da87acb6341e9 Mon Sep 17 00:00:00 2001
From: 13513044 <13513044@ld5-01.if.itb.ac.id>
Date: Fri, 12 Feb 2016 18:01:45 +0700
Subject: [PATCH] Final + laporan

---
 a                | Bin 13684 -> 0 bytes
 bucket.c         | 162 -----------------------------------------------
 insertion_sort.c |  38 -----------
 laporan.txt      |  50 +++++++++++++++
 scattergather.c  |  80 -----------------------
 5 files changed, 50 insertions(+), 280 deletions(-)
 delete mode 100755 a
 delete mode 100644 bucket.c
 delete mode 100644 insertion_sort.c
 create mode 100644 laporan.txt
 delete mode 100644 scattergather.c

diff --git a/a b/a
deleted file mode 100755
index 051132f2e423803a08736493c09679c59d6ef85e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13684
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

diff --git a/bucket.c b/bucket.c
deleted file mode 100644
index e5448eb..0000000
--- a/bucket.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* 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/insertion_sort.c b/insertion_sort.c
deleted file mode 100644
index 42d8677..0000000
--- a/insertion_sort.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyrights http://www.programmingsimplified.com/c/source-code/c-program-insertion-sort */
-/* insertion sort ascending order */
- 
-#include <stdio.h>
- 
-int main()
-{
-  int n, array[1000], c, d, t;
- 
-  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]);
-  }
- 
-  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", array[c]);
-  }
- 
-  return 0;
-}
\ No newline at end of file
diff --git a/laporan.txt b/laporan.txt
new file mode 100644
index 0000000..39a8a8d
--- /dev/null
+++ b/laporan.txt
@@ -0,0 +1,50 @@
+N = Element array
+M = Banyak proses
+
+1) N = 50.000
+______________________
+| M  | Waktu (seconds)|
+|____|________________|
+| 1  | 6.856739       |
+| 4  | 0.672057       |
+| 8  | 0.185040       |
+| 16 | 0.391889       |
+| 32 | 0.390784       |
+|____|________________|
+
+
+2) N = 100.000
+______________________
+| M  | Waktu (seconds)|
+|____|________________|
+| 1  | 14.909016      |
+| 4  | 2.744831       |
+| 8  | 0.440783       |
+| 16 | 0.294712       |
+| 32 | 0.686711       |
+|____|________________|
+
+
+3) N = 200.000
+______________________
+| M  | Waktu (seconds)|
+|____|________________|
+| 1  | 54.440212      |
+| 4  | 6.701494       |
+| 8  | 1.613141       |
+| 16 | 0.631648       |
+| 32 | 2.975302       |
+|____|________________|
+
+
+4) N = 400.000
+______________________
+| M  | Waktu (seconds)|
+|____|________________|
+| 1  | 219.474459     |
+| 4  | 25.008242      |
+| 8  | 7.521053       |
+| 16 | 3.224539       |
+| 32 | 3.344244       |
+|____|________________|
+
diff --git a/scattergather.c b/scattergather.c
deleted file mode 100644
index 533d221..0000000
--- a/scattergather.c
+++ /dev/null
@@ -1,80 +0,0 @@
-// 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