From f4338702df36d9d1b5a661fff82abf2e70fa1975 Mon Sep 17 00:00:00 2001
From: Ft-N <ftnfata@gmail.com>
Date: Sat, 22 Feb 2020 23:49:00 +0700
Subject: [PATCH] Debug, and a lot of trash/junk, please clean up and submit

---
 ae                                            |   9 +
 dijkstra.c                                    |   2 +-
 mpi.c                                         | 144 ++++
 reset.c                                       |  29 +-
 ser.c                                         |  98 +++
 sr.c                                          |  64 ++
 test/a                                        | Bin 0 -> 13376 bytes
 test/a.c                                      |  66 ++
 test/aingcupu/.Xdefaults                      |  30 +
 test/aingcupu/.bash_history                   | 669 ++++++++++++++++++
 test/aingcupu/.bash_logout                    |   7 +
 test/aingcupu/.bashrc                         | 117 +++
 test/aingcupu/.cache/motd.legal-displayed     |   0
 test/aingcupu/.config/Trolltech.conf          |   5 +
 .../4/user/registrymodifications.xcu          |   4 +
 test/aingcupu/.profile                        |  27 +
 test/aingcupu/.ssh/asd                        |  27 +
 test/aingcupu/.ssh/asd.pub                    |   1 +
 test/aingcupu/.ssh/authorized_keys            |   1 +
 test/aingcupu/.ssh/id_ed25519                 |   7 +
 test/aingcupu/.ssh/id_ed25519.pub             |   1 +
 test/aingcupu/.ssh/id_rsa                     |  27 +
 test/aingcupu/.ssh/id_rsa.pub                 |   1 +
 test/aingcupu/.ssh/known_hosts                |  15 +
 test/aingcupu/.xscreensaver                   |   2 +
 test/aingcupu/a.out                           | Bin 0 -> 12840 bytes
 test/aingcupu/all                             |   3 +
 test/aingcupu/asd                             | Bin 0 -> 13224 bytes
 test/aingcupu/c.c                             | 144 ++++
 test/aingcupu/comp                            |   1 +
 test/aingcupu/cop                             |   2 +
 test/aingcupu/hellompi.c                      |  17 +
 test/aingcupu/mpi_hostfile                    |   7 +
 test/aingcupu/run                             |   1 +
 test/aingcupu/share                           |   5 +
 test/br.c                                     |  65 ++
 test/c                                        | Bin 0 -> 12744 bytes
 test/c.c                                      | 108 +++
 test/comm.c                                   |  31 +
 test/reduce.c                                 |  47 ++
 test/sg.c                                     |  65 ++
 41 files changed, 1829 insertions(+), 20 deletions(-)
 create mode 100644 ae
 create mode 100644 mpi.c
 create mode 100644 ser.c
 create mode 100644 sr.c
 create mode 100644 test/a
 create mode 100644 test/a.c
 create mode 100644 test/aingcupu/.Xdefaults
 create mode 100644 test/aingcupu/.bash_history
 create mode 100644 test/aingcupu/.bash_logout
 create mode 100644 test/aingcupu/.bashrc
 create mode 100644 test/aingcupu/.cache/motd.legal-displayed
 create mode 100644 test/aingcupu/.config/Trolltech.conf
 create mode 100644 test/aingcupu/.config/libreoffice/4/user/registrymodifications.xcu
 create mode 100644 test/aingcupu/.profile
 create mode 100644 test/aingcupu/.ssh/asd
 create mode 100644 test/aingcupu/.ssh/asd.pub
 create mode 100644 test/aingcupu/.ssh/authorized_keys
 create mode 100644 test/aingcupu/.ssh/id_ed25519
 create mode 100644 test/aingcupu/.ssh/id_ed25519.pub
 create mode 100644 test/aingcupu/.ssh/id_rsa
 create mode 100644 test/aingcupu/.ssh/id_rsa.pub
 create mode 100644 test/aingcupu/.ssh/known_hosts
 create mode 100644 test/aingcupu/.xscreensaver
 create mode 100644 test/aingcupu/a.out
 create mode 100644 test/aingcupu/all
 create mode 100644 test/aingcupu/asd
 create mode 100644 test/aingcupu/c.c
 create mode 100644 test/aingcupu/comp
 create mode 100644 test/aingcupu/cop
 create mode 100644 test/aingcupu/hellompi.c
 create mode 100644 test/aingcupu/mpi_hostfile
 create mode 100644 test/aingcupu/run
 create mode 100644 test/aingcupu/share
 create mode 100644 test/br.c
 create mode 100644 test/c
 create mode 100644 test/c.c
 create mode 100644 test/comm.c
 create mode 100644 test/reduce.c
 create mode 100644 test/sg.c

diff --git a/ae b/ae
new file mode 100644
index 0000000..7c2b92a
--- /dev/null
+++ b/ae
@@ -0,0 +1,9 @@
+0 4 0 0 0 0 0 8 0
+4 0 8 0 0 0 0 11 0
+0 8 0 7 0 4 0 0 2
+0 0 7 0 9 14 0 0 0
+0 0 0 9 0 10 0 0 0
+0 0 4 14 10 0 2 0 0
+0 0 0 0 0 2 0 1 6
+8 11 0 0 0 0 1 0 7
+0 0 2 0 0 0 6 7 0
\ No newline at end of file
diff --git a/dijkstra.c b/dijkstra.c
index 308ec15..e5e12d4 100644
--- a/dijkstra.c
+++ b/dijkstra.c
@@ -140,7 +140,7 @@ int main(int argc, char *argv[]) {
     } else {
         for (int vertex = (rank - 1) * numOfTaskPerProcess; vertex < (rank - 1) * numOfTaskPerProcess + numOfTaskPerProcess; vertex++) {
             long* dataSend = dijkstra(graph, vertex);
-            MPI_Send(dataSend, N, MPI_LONG, destinationRank, tag, MPI_COMM_WORLD);
+            MPI_Send(dataSend, N, MPI_LONG, 0, tag, MPI_COMM_WORLD);
         }
     }
 
diff --git a/mpi.c b/mpi.c
new file mode 100644
index 0000000..861df39
--- /dev/null
+++ b/mpi.c
@@ -0,0 +1,144 @@
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+
+int N = 1000;
+
+int getmin_index(long **graph, bool pickedVertices[N], int sourceVertex) {
+    int minDistance = CHAR_MAX;
+    int min_index = -1;
+
+    for (int j = 0; j < N; j++) {
+        if (!pickedVertices[j] && graph[sourceVertex][j] <= minDistance) {
+            minDistance = graph[sourceVertex][j];
+            min_index = j;
+        }
+    }
+    return min_index;
+}
+
+void print(long **graph){
+    printf("Matrix: \n");
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            printf("%ld ", graph[i][j]);
+        }
+        printf("\n");
+    }
+}
+
+void dijkstra(long** graph, int sourceVertex) {
+
+    // Distance from single source to all of the nodes
+    bool pickedVertices[N];
+
+    for (int vertex = 0; vertex < N; vertex++) {
+        pickedVertices[vertex] = false;
+    }
+
+    for (int i = 0; i < N - 1; i++) {
+        // Get minimum distance
+        int min_index = getmin_index(graph, pickedVertices, sourceVertex);
+
+        // Mark the vertice as picked
+        pickedVertices[min_index] = true;
+
+        // Update distance value
+        for (int vertex = 0; vertex < N; vertex++) {
+            if ((!pickedVertices[vertex]) && 
+                (graph[min_index][vertex]) && 
+                (graph[sourceVertex][min_index] != INT_MAX) &&
+                (graph[sourceVertex][min_index] + graph[min_index][vertex] < graph[sourceVertex][vertex])) {
+                
+                graph[sourceVertex][vertex] = graph[sourceVertex][min_index] + graph[min_index][vertex];
+            }
+        }
+    }
+    return;
+}
+
+int main(int argc, char *argv[]) {
+	
+    // Get matrix size from argument vector in , convert to int
+    N = strtol(argv[1], NULL, 10);
+
+    long** graph;
+    graph = (long**) malloc(sizeof(long*) * N);
+    for (int i = 0; i < N; ++i)
+    {
+        graph[i] = (long*) malloc(sizeof(long) * N);
+    }
+    int numtasks, rank, dest, source, rc, count, tag=1;
+    double start_time, end_time, total_time;
+
+    srand(13517115);
+	// Fill the matrix with rand() function
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            // Mod by 100 so the result won't be too big.
+            graph[i][j] = rand() % 100;
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (!(i == j || graph[i][j])){
+                graph[i][j] = INT_MAX;
+            }
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (i == j){
+                graph[i][j] = 0;
+            }
+        }
+    }
+
+    MPI_Status Stat;
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Barrier(MPI_COMM_WORLD);
+    start_time = MPI_Wtime();
+
+    int jobs = N/(numtasks-1);
+    long* dataRecv;
+    int destinationRank = 0;
+    count = 0;
+    if (!rank){
+        dataRecv = (long*) malloc(sizeof(long) * N*jobs);
+        while(count<numtasks-1){
+            MPI_Recv(dataRecv, N*jobs, MPI_LONG, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &Stat);
+            printf("Received from process %d ", Stat.MPI_SOURCE);
+            for (int i = 0; i < N*jobs; ++i)
+            {
+                graph[Stat.MPI_SOURCE*jobs-jobs][i] = dataRecv[i];
+            }
+            count++;
+        }
+        free(dataRecv);
+    }
+    else{
+        for (int i = rank*jobs-jobs; i < rank*jobs; ++i)
+        {
+            dijkstra(graph, i);
+            // printf("Print job %d from rank %d\n", i, rank);
+        }
+        MPI_Send(graph[rank*jobs-jobs], N*jobs, MPI_LONG, destinationRank, tag, MPI_COMM_WORLD);
+    }
+    
+    MPI_Barrier(MPI_COMM_WORLD);
+    end_time = MPI_Wtime();
+    total_time = end_time - start_time;
+    MPI_Finalize();
+    if (rank == 0) {
+        printf("%f\n", total_time);
+    }
+    for (int i = 0; i < N; ++i)
+    {
+        free(graph[i]);
+    }
+    free(graph);
+}
\ No newline at end of file
diff --git a/reset.c b/reset.c
index caa26b1..971b136 100644
--- a/reset.c
+++ b/reset.c
@@ -6,8 +6,8 @@
 
 int N = 10;
 
-long getVertexWithMinDistance(long dist[], bool pickedVertices[]) {
-    long minDistance = LONG_MAX;
+int getVertexWithMinDistance(int dist[], bool pickedVertices[]) {
+    int minDistance = INT_MAX;
     int vertexWithMinDistance = -1;
 
     for (int vertex = 0; vertex < N; vertex++) {
@@ -20,27 +20,18 @@ long getVertexWithMinDistance(long dist[], bool pickedVertices[]) {
 }
 
 
-long* dijkstra(int graph[N][N], int sourceVertex) {
+void dijkstra(int graph[N][N], int sourceVertex) {
 
     // Distance from single source to all of the nodes
-    long *dist = (long*) malloc(sizeof(long) * N);
     bool pickedVertices[N];
 
     for (int vertex = 0; vertex < N; vertex++) {
-        if (vertex == sourceVertex) {
-            dist[vertex] = 0;
-        } else {
-            // Initialize all distance to be infinity.
-            dist[vertex] = LONG_MAX;
-        }
         pickedVertices[vertex] = false;
     }
 
-    dist[sourceVertex] = 0;
-
     for (int i = 0; i < N - 1; i++) {
         // Get minimum distance
-        int vertexWithMinDistance = getVertexWithMinDistance(dist, pickedVertices);
+        int vertexWithMinDistance = getVertexWithMinDistance(graph[i], pickedVertices);
 
         // Mark the vertice as picked
         pickedVertices[vertexWithMinDistance] = true;
@@ -49,17 +40,17 @@ long* dijkstra(int graph[N][N], int sourceVertex) {
         for (int vertex = 0; vertex < N; vertex++) {
             if ((!pickedVertices[vertex]) && 
                 (graph[vertexWithMinDistance][vertex]) && 
-                (dist[vertexWithMinDistance] != LONG_MAX) && 
-                (dist[vertexWithMinDistance] + graph[vertexWithMinDistance][vertex] < dist[vertex])) {
-                // Change dist[]
-                dist[vertex] = dist[vertexWithMinDistance] + graph[vertexWithMinDistance][vertex];
+                (graph[i][vertexWithMinDistance] + graph[vertexWithMinDistance][vertex] < graph[i][vertex])) {
+                
+                graph[i][vertex] = graph[i][vertexWithMinDistance] + graph[vertexWithMinDistance][vertex];
             }
         }
     }
-    return dist;
+    return;
 }
 
 int main(int argc, char *argv[]) {
+	int graph[N][N];
     int rank, numtasks;
     double start_time, end_time, total_time;
 	MPI_Status Stat;
@@ -68,7 +59,6 @@ int main(int argc, char *argv[]) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     start_time = MPI_Wtime();
 
-    int graph[N][N];
     srand(13517115);
 	// Fill the matrix with rand() function
     for (int i = 0; i < N; i++) {
@@ -93,6 +83,7 @@ int main(int argc, char *argv[]) {
     MPI_Finalize();
 
     if (rank == 0) {
+        MPI_Recv(&dataRecv, N, MPI_INT, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &Stat);
     	printf("%f\n", total_time);
 	}
 
diff --git a/ser.c b/ser.c
new file mode 100644
index 0000000..028dd9c
--- /dev/null
+++ b/ser.c
@@ -0,0 +1,98 @@
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+
+int N = 100;
+
+int getmin_index(short graph[N][N], bool pickedVertices[N], int sourceVertex) {
+    int minDistance = CHAR_MAX;
+    int min_index = -1;
+
+    for (int j = 0; j < N; j++) {
+        if (!pickedVertices[j] && graph[sourceVertex][j] <= minDistance) {
+            minDistance = graph[sourceVertex][j];
+            min_index = j;
+        }
+    }
+    return min_index;
+}
+
+void print(short graph[N][N]){
+    printf("Matrix: \n");
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            printf("%d ", graph[i][j]);
+        }
+        printf("\n");
+    }
+}
+
+void dijkstra(short graph[N][N], int sourceVertex) {
+
+    // Distance from single source to all of the nodes
+    bool pickedVertices[N];
+
+    for (int vertex = 0; vertex < N; vertex++) {
+        pickedVertices[vertex] = false;
+    }
+
+    for (int i = 0; i < N - 1; i++) {
+        // Get minimum distance
+        int min_index = getmin_index(graph, pickedVertices, sourceVertex);
+
+        // Mark the vertice as picked
+        pickedVertices[min_index] = true;
+
+        // Update distance value
+        for (int vertex = 0; vertex < N; vertex++) {
+            if ((!pickedVertices[vertex]) && 
+                (graph[min_index][vertex]) && 
+                (graph[sourceVertex][min_index] != INT_MAX) &&
+                (graph[sourceVertex][min_index] + graph[min_index][vertex] < graph[sourceVertex][vertex])) {
+                
+                graph[sourceVertex][vertex] = graph[sourceVertex][min_index] + graph[min_index][vertex];
+            }
+        }
+    }
+    return;
+}
+
+int main(int argc, char *argv[]) {
+	
+    // Get matrix size from argument vector in , convert to int
+    N = strtol(argv[1], NULL, 10);
+
+    short graph[N][N];
+
+    srand(13517115);
+	// Fill the matrix with rand() function
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            // Mod by 100 so the result won't be too big.
+            graph[i][j] = rand() % 100;
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (!(i == j || graph[i][j])){
+                graph[i][j] = CHAR_MAX;
+            }
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (i == j){
+                graph[i][j] = 0;
+            }
+        }
+    }
+
+    for (int i = 0; i < N; ++i)
+    {
+        dijkstra(graph, i);
+        printf("%d\n", i);
+    }
+    print(graph);
+}
\ No newline at end of file
diff --git a/sr.c b/sr.c
new file mode 100644
index 0000000..d66d98a
--- /dev/null
+++ b/sr.c
@@ -0,0 +1,64 @@
+
+// Copyright www.computing.llnl.gov
+#include "mpi.h"
+#include <stdio.h>
+
+
+void clean(int arr[10][10]){
+	for (int i = 0; i < 10; ++i)
+	{
+		for (int j = 0; j < 10; ++j)
+		{
+			arr[i][j] = 99;
+		}
+	}
+}
+int main(int argc, char *argv[]) {
+int numtasks, rank, dest, source, rc, count, tag=1;
+int inmsg[10][10], outmsg[10][10];
+
+for (int i = 0; i < 10; i++)
+{
+	for (int j = 0; j < 10; j++)
+	{
+		outmsg[i][j] = 10*i+j;
+	}
+}
+
+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[5], 50, MPI_INT, dest, tag, MPI_COMM_WORLD);
+	rc = MPI_Recv(&inmsg[5], 50, MPI_INT, source, tag, MPI_COMM_WORLD, &Stat);
+	for (int i = 5; i < 10; i++)
+	{
+		for (int j = 0; j < 10; j++)
+		{
+			printf("%d\n", inmsg[i][j]);
+		}
+	}
+}
+else if (rank == 1) {
+	dest = 0;
+	source = 0;
+	rc = MPI_Recv(&inmsg[5], 50, MPI_INT, source, tag, MPI_COMM_WORLD, &Stat);
+	printf("%s\n", "pass");
+	for (int i = 5; i < 10; i++)
+	{
+		for (int j = 0; j < 10; j++)
+		{
+			printf("%d\n", inmsg[i][j]);
+		}
+	}
+	clean(inmsg);
+	rc = MPI_Send(&inmsg[5], 50, MPI_INT, dest, tag, MPI_COMM_WORLD);
+}
+rc = MPI_Get_count(&Stat, MPI_INT, &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/test/a b/test/a
new file mode 100644
index 0000000000000000000000000000000000000000..f8967160b9e47a6d6c53cf8c51647889cf0a7138
GIT binary patch
literal 13376
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

literal 0
HcmV?d00001

diff --git a/test/a.c b/test/a.c
new file mode 100644
index 0000000..c30647d
--- /dev/null
+++ b/test/a.c
@@ -0,0 +1,66 @@
+// 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 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();
+}
+
diff --git a/test/aingcupu/.Xdefaults b/test/aingcupu/.Xdefaults
new file mode 100644
index 0000000..abdc96a
--- /dev/null
+++ b/test/aingcupu/.Xdefaults
@@ -0,0 +1,30 @@
+! xscreensaver ---------------------------------------------------------------
+
+!font settings
+xscreensaver.Dialog.headingFont:        -*-dina-bold-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.Dialog.bodyFont:           -*-dina-medium-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.Dialog.labelFont:          -*-dina-medium-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.Dialog.unameFont:          -*-dina-medium-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.Dialog.buttonFont:         -*-dina-bold-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.Dialog.dateFont:           -*-dina-medium-r-*-*-10-*-*-*-*-*-*-*
+xscreensaver.passwd.passwdFont:         -*-dina-bold-r-*-*-10-*-*-*-*-*-*-*
+!general dialog box (affects main hostname, username, password text)
+xscreensaver.Dialog.foreground:         #EDEDED
+xscreensaver.Dialog.background:         #202020
+xscreensaver.Dialog.topShadowColor:     #202024
+xscreensaver.Dialog.bottomShadowColor:  #202024
+xscreensaver.Dialog.Button.foreground:  #EDEDFF
+xscreensaver.Dialog.Button.background:  #444
+!username/password input box and date text colour
+xscreensaver.Dialog.text.foreground:    #EDEDFF
+xscreensaver.Dialog.text.background:    #444
+xscreensaver.Dialog.internalBorderWidth:24
+xscreensaver.Dialog.borderWidth:        0
+xscreensaver.Dialog.shadowThickness:    2
+!timeout bar (background is actually determined by Dialog.text.background)
+xscreensaver.passwd.thermometer.foreground:  #A9B7C4
+xscreensaver.passwd.thermometer.background:  #202020
+xscreensaver.passwd.thermometer.width:       8
+!datestamp format--see the strftime(3) manual page for details
+xscreensaver.dateFormat:    %I:%M%P %a %b %d, %Y
+
diff --git a/test/aingcupu/.bash_history b/test/aingcupu/.bash_history
new file mode 100644
index 0000000..5f2d540
--- /dev/null
+++ b/test/aingcupu/.bash_history
@@ -0,0 +1,669 @@
+ls
+lscpu
+htop
+exit
+top
+exit
+top
+nano
+nano mpi_hostfile
+ls
+nano hellompi.c
+mpicc hellompi.c -o a
+nano share
+ls
+nano share
+chmod +x share
+mv a asd
+ls
+./share
+ls
+scp asd 13517109@167.205.35.151
+rm -rf 13517109@167.205.35.151
+ls
+rm -rf 13517109@167.205.35.152
+rm -rf 13517109@167.205.35.153
+rm -rf 13517109@167.205.35.154
+rm -rf 13517109@167.205.35.155
+nano share
+./share
+ls
+mpirun -np 6 --hostfile mpi_hostfile asd
+top
+ls
+nano run
+chmod +x run
+./run
+nano run
+./run
+ls
+top
+./run
+ls
+top
+ls
+nano copas.c
+mpicc copas.c -o asd
+./share
+./run
+nano copas.c
+rm copas.c 
+nano c.c
+nano comp
+chmod +x comp
+./comp
+./share
+./run
+nano all
+chmod +x all
+./all
+ls
+exit
+ls
+rm share.save 
+ls
+exit
+./all
+exit
+./all
+ls
+cd /.ssh
+cd ~/.ssh
+ls
+cd 
+~ls
+ls
+ssh-keygen -t ed25519 -C "13517109@std.stei.itb.ac.id"
+exit
+ls
+git
+ls
+mpicc
+ls
+nano comp
+./all
+ls
+nano comp
+mpicc c.c
+./all
+mpicc c.c -o asd 10
+ls
+nano comp
+nano run
+./all
+mpirun -np 1 asd 10
+nano run
+./all
+nano run
+./run 1
+./run 10
+nano all
+./all 10
+nano cop
+chmod +x cop
+./cop
+./all 10
+./cop
+./all
+nano run
+nano all
+ls
+./cop
+./all 1 10
+./comp
+ls
+./comp
+./run 1
+./run 1 10
+top
+htop
+ks
+ls
+./cop
+./all 5
+./all 5 10
+ls
+mpirun -np 6 asd 1 10 10
+mpirun -np 6 asd 10 10
+mpirun -np 6 asd 10000000 1000000
+mpirun -np 6 asd 1000 1000
+top
+./cop
+./run 6 100
+./all 6 100
+./run 6 100
+mpirun -np 5 asd 100
+mpirun -np 5 asd 10000
+mpirun -np 5 asd 100000
+nano run
+./run 4 10
+./run 4 10000
+./run 2 10000
+ls
+./cop
+./all 6 100
+./all 6 1000
+./cop
+./all
+./all 1
+./all 5
+./all 3
+./cop
+./all 1
+./all 1 10
+nano all
+./cop
+ls
+./comp
+./cop
+./all
+./all 1
+./cop
+./all
+./all 1
+./cop
+./all 1
+./cop
+nano all
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./cop
+./all
+./run 6
+./share
+./run 6
+./run 1
+nano all
+./cop
+./all
+./run
+./run 6
+ls
+./cop
+./all
+./run 2
+./run 3
+./run 2
+./cop
+./all 2 x
+./run 2
+./run 2 x
+./run 2 'x'
+./run 2 "X"
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./share
+./run 2
+./cop
+./COP
+./cop
+./all 2
+nano all
+./all
+./all 2
+./run 2
+./cop
+./all 2
+./cop
+./all 2
+./cop
+./all 2
+./COP
+./cop
+./all 2
+./cop
+./all 2
+./cop
+./comp
+./cop
+./comp
+./all 2
+// Copyright www.computing.llnl.gov
+#include "mpi.h"
+#include <stdio.h>
+int main(int argc, char *argv[]) {
+int numtasks, rank, dest, source, rc, count, tag=1;
+int inmsg[10], outmsg[10][10];
+for (int i = 0; i < 10; ++i)
+{ for (int j = 0; j < 10; ++i)
+{ it(&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, 100, MPI_INT, dest, tag, MPI_COMM_WORLD);
+rc = MPI_Recv(&inmsg, 100, MPI_INT, source, tag, MPI_COMM_WORLD, &Stat);
+for (int i = 0; i < 10; ++i)
+{ t j = 0; j < 10; ++i)
+{ tf("%d\n", inmsg[i][j]);
+outmsg[i][j] = 10*i+j;
+}
+else if (rank == 1) {
+dest = 0;
+./co[
+./cop
+./all 2
+./cop
+./all 2
+./cop
+./all 2
+./cop
+./all
+./all 2
+./cop
+./all 2
+./cop
+./all 2
+./cop
+./comp
+./all 2
+./cop
+./all 1
+./cop
+./comp
+./share
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./COP
+./cop
+./COP
+./cop
+./comp
+././cop
+./comp
+./run 1
+./cop
+./comp
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./cmp
+./comp
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./COP
+./cop
+./comp
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+././cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run1
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./run 1
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./cop
+./com
+./comp
+./run 6
+./cop
+./comp
+./run 6
+./all 6
+./cop
+./all 6
+./cop
+./comp
+./all 6
+nano run
+nano all
+./cop
+./all 6 100
+./all 6 10
+./all 6 100
+./all 6 50
+./all 6 10
+./run 6 10
+./run 6 20
+./run 6 10
+./run 2 10
+./run 2 9
+./run 4 9
+./run 6 100
+./run 5 100
+./cop
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+int N = 100;
+int getmin_index(int graph[N][N], bool pickedVertices[N], int sourceVertex) {
+./cop
+./all 6 100
+./cop
+./comp
+./share
+./run 6 100
+./run 6 9
+./cop
+./comp
+./share
+./cop
+./comp
+./share
+./run 6 1000
+./cop
+./comp
+./share
+./run 6 100
+./cop
+./comp
+./share
+./run 6 100
+./run 6 1000
+./run 6 500
+./run 6 1000
+./cop
+./all 6 100
+./all 6 500
+./run 6 1000
+./cop
+./all 6 100
+./cop
+./comp
+./cop
+./comp
+./share
+./run 6 100
+./run 6 10
+./cop
+./comp
+./share
+./run 6 10
+./cop
+./all 6 100
+./cop
+./all 6 100
+./run 6 100
+./run 6 500
+./cop
+./all 6 100
+./run 6 100
+./run 6 500
+./run 6 1000
+nano run
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+int N = 100;
+int getmin_index(long graph[N][N], bool pickedVertices[N], int sourceVertex) {
+mpirun -np 6 --hostfile mpi_hostfile asd 1000
+mpirun -np 6 --hostfile mpi_hostfile asd 1000 --bind-to core:overload-allowed
+mpirun -np 6 --hostfile mpi_hostfile asd 1000 --verbose
+./cop
+./all 6 100
+./run 6 500
+./cop
+./all 6 10
+./cop
+./all 6 9
+./share
+./run 4 9
+./cop
+./comp
+./share
+./run 4 9
+./cop
+./comp
+./cop
+./comp
+./share
+./run 4 9
+./run 2 9
+./cop
+./comp
+./share
+./run 2 9
+./cop
+./comp
+./share
+./run 2 9
+./cop
+./comp
+./share
+./run 2 9
+./run 4 9
+nano c.c
+./all 6 100
+./run 2 9
+./cop
+./comp
+./share
+./run 6 100
+./cop
+./comp
+./share
+./run 2 9
+./cop
+./comp
+./share
+./run 2 9
+./run 4 9
+./cop
+./comp
+./share
+./run 2 9
+./run 4 9
+./cop
+./comp
+./share
+./run 6 0
+./run 6 100
+./run 6 1000
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./share
+./run 2 9
+./run 4 9
+./run 6 1000
+./run 6 5000
+./cop
+./comp
+./cop
+./comp
+./share
+./run 6 100
+./run 6 1000
+./cop
+./comp
+./share
+./run 6 100
+./run 6 1000
+./cop
+./comp
+./share
+./run 6 100
+./run 6 1000
+./cop
+./share
+./run 6 100
+./run 6 1000
+./run 6 5000
+./run 6 1000
+./run 6 3000
+./run 2 1000
+./cop
+./comp
+./run 1 9
+./cop
+top
+./cop
+./comp
+./run 1 9
+exit
+ulimit -a
+exit
+ulimit -s 40000
+ulimit -a
+ulimit -s 400000
+ulimit -s 80000
+ulimit -a
+ulimit -s 60000
+ulimit -s 50000
+ulimit -s 40000
+./cop
+./comp
+./run 1 10
+./run 1 100
+./run 1 1000
+./run 1 3000
+./run 1 5000
+./cop
+./comp
+./run 1 5000
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./cop
+./comp
+./run 1
+top
+htop
+./cop
+./comp
+./run 1
+./run 1 1000
+./run 2 1000
+./run 6 1000
+./cop
+./comp
+./share
+./run 6 1000
+./cop
+./comp
+./share
+./run 6 5000
+./cop
+./comp
+./share
+./run 6 5000
+nano mpi_hostfile 
+./cop
+./comp
+./cop
+./comp
+./share
+./run 5 5000
+nano mpi_hostfile 
+./cop
+./comp
+./share
+./run 6 5000
+ls
+cd ..
+ls
+cd josal
+cd 13517115
+ls -ola
+ls
+cd 13517109
+ls ..
+exit
diff --git a/test/aingcupu/.bash_logout b/test/aingcupu/.bash_logout
new file mode 100644
index 0000000..de4f5f7
--- /dev/null
+++ b/test/aingcupu/.bash_logout
@@ -0,0 +1,7 @@
+# ~/.bash_logout: executed by bash(1) when login shell exits.
+
+# when leaving the console clear the screen to increase privacy
+
+if [ "$SHLVL" = 1 ]; then
+    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
+fi
diff --git a/test/aingcupu/.bashrc b/test/aingcupu/.bashrc
new file mode 100644
index 0000000..b488fcc
--- /dev/null
+++ b/test/aingcupu/.bashrc
@@ -0,0 +1,117 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+    *i*) ;;
+      *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# If set, the pattern "**" used in a pathname expansion context will
+# match all files and zero or more directories and subdirectories.
+#shopt -s globstar
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
+    debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+    xterm-color|*-256color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+	# We have color support; assume it's compliant with Ecma-48
+	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+	# a case would tend to support setf rather than setaf.)
+	color_prompt=yes
+    else
+	color_prompt=
+    fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+    ;;
+*)
+    ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+    alias ls='ls --color=auto'
+    #alias dir='dir --color=auto'
+    #alias vdir='vdir --color=auto'
+
+    alias grep='grep --color=auto'
+    alias fgrep='fgrep --color=auto'
+    alias egrep='egrep --color=auto'
+fi
+
+# colored GCC warnings and errors
+#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# some more ls aliases
+alias ll='ls -alF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Add an "alert" alias for long running commands.  Use like so:
+#   sleep 10; alert
+alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+    . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if ! shopt -oq posix; then
+  if [ -f /usr/share/bash-completion/bash_completion ]; then
+    . /usr/share/bash-completion/bash_completion
+  elif [ -f /etc/bash_completion ]; then
+    . /etc/bash_completion
+  fi
+fi
diff --git a/test/aingcupu/.cache/motd.legal-displayed b/test/aingcupu/.cache/motd.legal-displayed
new file mode 100644
index 0000000..e69de29
diff --git a/test/aingcupu/.config/Trolltech.conf b/test/aingcupu/.config/Trolltech.conf
new file mode 100644
index 0000000..ebabedd
--- /dev/null
+++ b/test/aingcupu/.config/Trolltech.conf
@@ -0,0 +1,5 @@
+[Qt]
+font="Noto Sans,9,-1,5,50,0,0,0,0,0"
+style=GTK+
+doubleClickInterval=400
+cursorFlashTime=1200
diff --git a/test/aingcupu/.config/libreoffice/4/user/registrymodifications.xcu b/test/aingcupu/.config/libreoffice/4/user/registrymodifications.xcu
new file mode 100644
index 0000000..d87d2ea
--- /dev/null
+++ b/test/aingcupu/.config/libreoffice/4/user/registrymodifications.xcu
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="SymbolStyle" oor:op="fuse"><value>elementary</value></prop></item>
+</oor:items>
diff --git a/test/aingcupu/.profile b/test/aingcupu/.profile
new file mode 100644
index 0000000..d89ea5a
--- /dev/null
+++ b/test/aingcupu/.profile
@@ -0,0 +1,27 @@
+# ~/.profile: executed by the command interpreter for login shells.
+# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
+# exists.
+# see /usr/share/doc/bash/examples/startup-files for examples.
+# the files are located in the bash-doc package.
+
+# the default umask is set in /etc/profile; for setting the umask
+# for ssh logins, install and configure the libpam-umask package.
+#umask 022
+
+# if running bash
+if [ -n "$BASH_VERSION" ]; then
+    # include .bashrc if it exists
+    if [ -f "$HOME/.bashrc" ]; then
+	. "$HOME/.bashrc"
+    fi
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/bin" ] ; then
+    PATH="$HOME/bin:$PATH"
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/.local/bin" ] ; then
+    PATH="$HOME/.local/bin:$PATH"
+fi
diff --git a/test/aingcupu/.ssh/asd b/test/aingcupu/.ssh/asd
new file mode 100644
index 0000000..c366166
--- /dev/null
+++ b/test/aingcupu/.ssh/asd
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAxh7hf1JJARM42PNkLexgi+5PxgMvgbQxwr0Yk0OvojzJ+0Bq
+aTRiuUn515lUFWjp0Y9vv91gGU67Rq/G41GgyA4jI3VYJAM/3WnJWZivWcckA3b9
+yOcFY+hhPvffvhk4+B0L495ZQZreGV09FTG3fp6aoGzsWy0WtFO6wKRFLklppCUy
+arGe52LpnjxTBUjkikL34wvj2GtwyEXfw3tS3L7kFDXCWGp1z9HaL+BFb/lBSFny
+w7asWubxaBsv6AmPw6jPdCvtT75b5ts0hHmVUQfb8T1neCaVgawKCxWAT4ZUnhaV
+64PWq2Ob+CCBpS3n0tw371v6O/1Sa5w7uYsp9QIDAQABAoIBAB08W1xVgS5mbsId
+EJByTED59s2qlK0YMSuiiejZWSagv9GSzOEfeN4M25CEMNND+xUQjJYMjezOIHaq
+47eRyR8cbvUBkPMng5ohzTOqg13FNDxKp+KorLP0i70mCN9di3mZl7KVkihLOTEX
+ADeLcZ9+uiSoTiyaN7p+jJV26DqPGhlSnBqUtFsoJTv7I1IZ9F3TJwFIrU2/O7cu
+9U1CaYyUA7BBr9H2kdnM7HVQDXAxgXttgQiztIFV/eVAb8PNM2JPkCfiUfYclvJe
+1EfeMTbCfy0f5jUXMhkLJyTLQylSwPio6bqujB5+V4MZRqN4o8g7DTRvG8IAEe4b
+JktF6oECgYEA89qvWAYaflSbluI8Xw+fVN7TNV78XBYxgiIA+IDjVt2pTtUb3PmH
+xMtHulfbksIbyon83sxG2FQ82rvKMOeD46TwyuyHYw6YO36T+4zE3arw8XGpcPmT
+8FXnJ9YxvRtyj+eJjvBLjuD90GslxrPXBqkZIQtSDN+hb6w4zRS7/5UCgYEAz/0P
+Ue4w7L88hqP0UwKgNGCdt8HTX3VyTZAl62kJeFtflqsyxs5YGEVYpLiwlH7vBctI
+IJZ0UqKeJOGsRG3Lf2WphpiSTkKQU4YQW4vuLvsYX6Re2n0NpoPAbnouA7lVfOL4
+3ADZz6NeCfvfIMhvOd7alYPBf2yd2mDOSNvPaOECgYBAAKi+8LMpbyl7G5v+00nd
+a7KBspGH1edeoXAhySpiFUGnyDVM9U1WMIh99ytRRJMowLjW/USm6M0kF9/EoC80
+o4jzqcsLC7yW+Oz8PAE7sO8WX9+6IDddAB7wjL53ROn3rSykkJs0QAc+GbFLis4o
+GF/ZFXCOom9rsQcjhIqnVQKBgQCMNohebloTMDTIe70ZPPrtdHi+yW8Kum1tNpEp
+q2zT8510QEOB3NdsvUst+Mgpw4y1dj5Qob0XfENqj6yHkREP+GQZtb9j/OG5PPbI
+EIRoraPXzkKXvpg2Ojm/AKUGo6mrAIROJFCx9utNhbv9KMI63C61ftYyZfHgp0RJ
+v82KYQKBgQC+J+0/7WernN6JhXa0nrDrQ+jDdpLWWf9ALqbxp4QgFaEb2Mcv4uJS
+FLrfBDpKxfkZl618u5i0mpeOtVIsXXiv4lJku0VMnNisZlJAD409ENuNbpSn3KkK
+NUK9wAScTvCU62c8pANYXSCC885dHsveptwZvDV+xC2ldSx0riTP3Q==
+-----END RSA PRIVATE KEY-----
diff --git a/test/aingcupu/.ssh/asd.pub b/test/aingcupu/.ssh/asd.pub
new file mode 100644
index 0000000..cbcbf72
--- /dev/null
+++ b/test/aingcupu/.ssh/asd.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGHuF/UkkBEzjY82Qt7GCL7k/GAy+BtDHCvRiTQ6+iPMn7QGppNGK5SfnXmVQVaOnRj2+/3WAZTrtGr8bjUaDIDiMjdVgkAz/daclZmK9ZxyQDdv3I5wVj6GE+99++GTj4HQvj3llBmt4ZXT0VMbd+npqgbOxbLRa0U7rApEUuSWmkJTJqsZ7nYumePFMFSOSKQvfjC+PYa3DIRd/De1LcvuQUNcJYanXP0dov4EVv+UFIWfLDtqxa5vFoGy/oCY/DqM90K+1Pvlvm2zSEeZVRB9vxPWd4JpWBrAoLFYBPhlSeFpXrg9arY5v4IIGlLefS3DfvW/o7/VJrnDu5iyn1 ftn@FtN
diff --git a/test/aingcupu/.ssh/authorized_keys b/test/aingcupu/.ssh/authorized_keys
new file mode 100644
index 0000000..dc27eeb
--- /dev/null
+++ b/test/aingcupu/.ssh/authorized_keys
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFlg/T/xmHb9nEVZClpzeLvCxLNrtzCdLd9rzIT3ItWH55PVbLi2Mjzin2z7QqcHZ02iI0wV9f8hJHV1YzzEm9SxpmeN9RchawvIcIo2xw2Of/PKyFEVrfMjF8+TCEoT0yht6BGsLXOCssufvCxlH9sA39nOneWEJHMLXNSZGGvwu09oox6OzfAZNELLP9cNLRCjnMFR0/Tw7O5rvO6biR8Gv1J8DfI73emGHRLjeu3T1Y25feyduNwj8HtlP9UQaUzLZ3Zd2SMS8tFbryS9/RUg1xFAlr2/q1/eR25iIa3xnAZndwSJHOp45NhHmk0dKeIMcRBox+R+xHMQIZygEH ftn@FtN
diff --git a/test/aingcupu/.ssh/id_ed25519 b/test/aingcupu/.ssh/id_ed25519
new file mode 100644
index 0000000..39e082e
--- /dev/null
+++ b/test/aingcupu/.ssh/id_ed25519
@@ -0,0 +1,7 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
+QyNTUxOQAAACDI8XClk5QmpuJ6ejmM8kUSXxFij/poozutaryBlxB6PwAAAKCNsH+qjbB/
+qgAAAAtzc2gtZWQyNTUxOQAAACDI8XClk5QmpuJ6ejmM8kUSXxFij/poozutaryBlxB6Pw
+AAAECMjyGwyOafIEDqs0mcGy0myoQSWW/Yl72swphjs9HbgcjxcKWTlCam4np6OYzyRRJf
+EWKP+mijO61qvIGXEHo/AAAAGzEzNTE3MTA5QHN0ZC5zdGVpLml0Yi5hYy5pZAEC
+-----END OPENSSH PRIVATE KEY-----
diff --git a/test/aingcupu/.ssh/id_ed25519.pub b/test/aingcupu/.ssh/id_ed25519.pub
new file mode 100644
index 0000000..420a23f
--- /dev/null
+++ b/test/aingcupu/.ssh/id_ed25519.pub
@@ -0,0 +1 @@
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMjxcKWTlCam4np6OYzyRRJfEWKP+mijO61qvIGXEHo/ 13517109@std.stei.itb.ac.id
diff --git a/test/aingcupu/.ssh/id_rsa b/test/aingcupu/.ssh/id_rsa
new file mode 100644
index 0000000..e4a34e4
--- /dev/null
+++ b/test/aingcupu/.ssh/id_rsa
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAxZYP0/8Zh2/ZxFWQpac3i7wsSza7cwnS3fa8yE9yLVh+eT1W
+y4tjI84p9s+0KnB2dNoiNMFfX/ISR1dWM8xJvUsaZnjfUXIWsLyHCKNscNjn/zys
+hRFa3zIxfPkwhKE9MobegRrC1zgrLLn7wsZR/bAN/Zzp3lhCRzC1zUmRhr8LtPaK
+Mejs3wGTRCyz/XDS0Qo5zBUdP08Ozua7zum4kfBr9SfA3yO93phh0S43rt09WNuX
+3snbjcI/B7ZT/VEGlMy2d2XdkjEvLRW68kvf0VINcRQJa9v6tf3kduYiGt8ZwGZ3
+cEiRzqeOTYR5pNHSniDHEQaMfkfsRzECGcoBBwIDAQABAoIBAEO0hR32xw+y0yNE
+0rkA0LbQNzlauubTke8/UjctiglhzozK6Qf8bm9hgN2zFKCKQv0NljUPohflgj/x
+/HbpZMc5igVdG+DzwDS1lWvvXARbPzwl1VQPu1zJ/U0+slJwUeETeAEzY1qOQ7Ui
+0dNPU98jSdgCwdzPz35HgbSjpftOtm3ALSjfSz1zf6cmzyIqwattFbnYUU6bNlT2
+cVuKlRrP9bDUil+f9nWWgjva9WBO3nmLmnpe3xPSpGIDZgwpCNQCcGESTn3Aij+x
+5F35vAyzQ+4jfdkvOvULHfEGSXaEOhnXEhhW8CwOaPog9YZBHDKpuoQPpSLQaUcj
+xGiIZEECgYEA/lnJP1+36DwPpjxnMGKjhKckVuybogxPbl6BV5kzzieapfqvY9wW
+9Fl1mJKZjizw/8doBpNRvL+cVHJPoQgIWXgyj2iNU3Qgn8cwUt2sM00UVduEjiXA
+9z2/RLdsXYhsbvgvN3pYzb3TCIZTJmvWm8zmdfgCOTNKNKBJbSkEemcCgYEAxt4M
+ZOcX1c9cVvKb0pew7wVUu91L9gfG4WFfvrj3QxOhFaQU5loaxgOdSbDKbmXR8bXz
+ssl52/7z7UoKiGuE7EyLsYi44GN/w0wtVkx6/WQ6PpWrbvRhk0K79l8ipZcdJuZX
+yPHPP51BN48+jXL5nO/qkDscdLvoryRA8rinYGECgYB/WxfAir38I662TwJgINO9
+hS9V8u1Oq5lOKzXaVdSxwfTWbPpLJxW7TdvrBGSs4uXdPMxilntT5iFxyzcB65K6
+scunMPOquLfpKQSSSXqCyXKINv1da5v+cEWIM8un3bplqhGCVtmGUykK2K9jypVP
+t74hjYgXeg4K4cNCTEp4uwKBgGlz1Z6r7De0fYKdo4NIbMpSSVxVPLJ57TwWJm88
+JeGrxv9ywqJjpU7bG8y3sqBX3bwOf+uOas/9odtyJ6OvYAztiiXaGi7ilB07h877
+PzyeqUQGmaF8dUFhYcqDKBwmxY6bFnG3x+4ztSGBE+ptzW8qyXcx4SUFf51f3BDZ
+WegBAoGAfIgZVgeLWn7wmBzeyM8bbXfXWB3HIOrsRs637HVWtNd9tid8qxJFAQcP
+uVEZHMLBFe9tbtcZrFoiTaTgE+t6EG4PLnjAdDDp/G2znvBvwn5QoZDn0g13WQ9y
+eKdEDN34BkQBsl69y2qQEU4A5VI9phGLA2iVT6Qju3IKRO1w7SY=
+-----END RSA PRIVATE KEY-----
diff --git a/test/aingcupu/.ssh/id_rsa.pub b/test/aingcupu/.ssh/id_rsa.pub
new file mode 100644
index 0000000..dc27eeb
--- /dev/null
+++ b/test/aingcupu/.ssh/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFlg/T/xmHb9nEVZClpzeLvCxLNrtzCdLd9rzIT3ItWH55PVbLi2Mjzin2z7QqcHZ02iI0wV9f8hJHV1YzzEm9SxpmeN9RchawvIcIo2xw2Of/PKyFEVrfMjF8+TCEoT0yht6BGsLXOCssufvCxlH9sA39nOneWEJHMLXNSZGGvwu09oox6OzfAZNELLP9cNLRCjnMFR0/Tw7O5rvO6biR8Gv1J8DfI73emGHRLjeu3T1Y25feyduNwj8HtlP9UQaUzLZ3Zd2SMS8tFbryS9/RUg1xFAlr2/q1/eR25iIa3xnAZndwSJHOp45NhHmk0dKeIMcRBox+R+xHMQIZygEH ftn@FtN
diff --git a/test/aingcupu/.ssh/known_hosts b/test/aingcupu/.ssh/known_hosts
new file mode 100644
index 0000000..967ffb8
--- /dev/null
+++ b/test/aingcupu/.ssh/known_hosts
@@ -0,0 +1,15 @@
+|1|TpSFBPgs5x8HcpGvwEWplm4nt5A=|aBV/XRAMiNh6ZoVgqL+7qsHwWL0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPewY1WIwySjYsd3YPCLcag3IQ+r5laEPfNg/yJLFs/9FVNQCHaUUijviSnMhxhcuVhD0+lXt5jdpO6XITEpf/U=
+|1|mklDAxMbJE9Q+mdRe5bUZNNnQvY=|0Rv2mFkvyc26cNAgrZTcqUyAwaw= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDxEzA5tjbq6lHKcKFBIpilEmdRxu4cS95am2D5ik+CNVIqhzs4tkDEM44/JyyjJepKvDbvJ/TrwoyLqv6gJ8mP/Y/l9bo/Zq7i0bCy76PxM8/yBzMWXuJP868n0j4VES8WrT9UMmXJFtADcCo0TSoS9hDEgpwzTb8ZNVY+u0Ei/G2xw7iaPTG9PZsh4AJwoi4VJ3n+BueqaX48WDOr11iYRpYUXUjVOuTm5/T4SXSBCpTTWnLBidBB5iyQjvf3lh100q7KLhX0Y+/vJrlvhggLL7SkMorwHHHF/zYAOvGlSJzDxxDlfmzEqLzYV+PWexg2jNxhjdP5z7fxA6zkR5y7
+|1|je77Otrd0f9C6QObfw8/La7A3CI=|2Z35/HwE22Wc5Sgv8nohYWRMhEs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPewY1WIwySjYsd3YPCLcag3IQ+r5laEPfNg/yJLFs/9FVNQCHaUUijviSnMhxhcuVhD0+lXt5jdpO6XITEpf/U=
+|1|SuAhze265EbAkEYbzChT2t9ggA4=|rIOoF2AoL1md9XqaxYZzbK1BRcs= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINkzBXFAEYIcuqTzgtg+kbVofmmrTljZcoifK7NsKm6/
+|1|UXvAI3bNp+kfdZQ9chrD854v8jc=|eMKGLBQoiU72HMI90egZQtOBekM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE/Uba2v4/0NAdxB2xD1zLMsuW45vMFhkuWBmUWLTPsUAw7Td/1cQhLrIckUgZ07B5/8uhnzlzpLHmVVstzNVes=
+|1|jH331VGzEaqAh+cC6Upa4Kvqno0=|VCyszhed6+4w8kkta7mu9MINJVk= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBByGdN/S3y/Fb6381DfAhmw+V0dnWvz95JIkjEdhmHSXrmIJg8wwqHFydKcU5m65YNXvAx5HZAwqzEtpmwOEnuk=
+|1|5t2MQJugSAPxgR/Uq7xfqUmVeAQ=|zNIR8fQvFLz13Ae3TcYJ5NYQmY4= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGi1aAOgLy3ptdVntWoNNOyuexW+HiKCa1XwDYi3eYCkciS85xZczt8nNt5pOnnPwW1RbXdOZjaXoixpaXF2MDM=
+|1|V931SZLrY13zJV0wLw/Xh7M9EKM=|C6hh3DgXveqT7BH0rKgJ/ZMfPRY= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGi1aAOgLy3ptdVntWoNNOyuexW+HiKCa1XwDYi3eYCkciS85xZczt8nNt5pOnnPwW1RbXdOZjaXoixpaXF2MDM=
+|1|VJALaVH7G6I4o17NtdBOkotus+k=|V5JDf/CyoFXLXWNLAxF+aW1TzcA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGi1aAOgLy3ptdVntWoNNOyuexW+HiKCa1XwDYi3eYCkciS85xZczt8nNt5pOnnPwW1RbXdOZjaXoixpaXF2MDM=
+|1|bxnzxf0a2SYRY94hw6uSGvYlw8I=|+twGvPWEZoKDqBYq/mPMD59VFps= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDxEzA5tjbq6lHKcKFBIpilEmdRxu4cS95am2D5ik+CNVIqhzs4tkDEM44/JyyjJepKvDbvJ/TrwoyLqv6gJ8mP/Y/l9bo/Zq7i0bCy76PxM8/yBzMWXuJP868n0j4VES8WrT9UMmXJFtADcCo0TSoS9hDEgpwzTb8ZNVY+u0Ei/G2xw7iaPTG9PZsh4AJwoi4VJ3n+BueqaX48WDOr11iYRpYUXUjVOuTm5/T4SXSBCpTTWnLBidBB5iyQjvf3lh100q7KLhX0Y+/vJrlvhggLL7SkMorwHHHF/zYAOvGlSJzDxxDlfmzEqLzYV+PWexg2jNxhjdP5z7fxA6zkR5y7
+|1|IKEZzNCM3q/ZXb7LJkVltRyWK1k=|zmk9YbvlZmujW9AmkOXYx3nYZKM= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPewY1WIwySjYsd3YPCLcag3IQ+r5laEPfNg/yJLFs/9FVNQCHaUUijviSnMhxhcuVhD0+lXt5jdpO6XITEpf/U=
+|1|0RV9LCHU7bF27jeoO1WOkCcWPNM=|lIBnPDkta6jULeCj18T88hUTLI0= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINkzBXFAEYIcuqTzgtg+kbVofmmrTljZcoifK7NsKm6/
+|1|G6QyWnlrA1GoFzBjrlUgrrtOqgk=|rm2tlcKH+kvBduRQ36K5C3DDLjg= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWYxGOsjDSX8Ilx0rtQLU74IX8W5oPDkxOnANlbCxW7N2whYxId+L07OEsX978VcSsml9gtqmZWfnPDaa34Gl9WlkldsVnhVmKR1hp6FEUV3Qa4EbRzOGy0JckPge4DiYUY2jQDZrLHtDEjVr1PJZyhy3wOz215yz2Hi2MSxv/Lq3+3AJH77CAcckUSuVh3bwANOhazuelT0p0OR3PWYFpTMwuozoBZzXzQx4hNBtt0ee9Fu57M+LM9TrOgP/O3m1AabvZAV5Ga9MKPuM4N47kaw1O2IbqR3XIQkTHx/gDKCdZ5TBtGhj2VwT3tEcdERQeJW6+Irx4wHRNduVhQ8yT
+|1|Z4EQVCPy79bKLfxYL3JiI9N27bw=|TwWYdC4FWIoqeu+/JrG1wB6O08k= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE/Uba2v4/0NAdxB2xD1zLMsuW45vMFhkuWBmUWLTPsUAw7Td/1cQhLrIckUgZ07B5/8uhnzlzpLHmVVstzNVes=
+|1|SC9HxFx6cKW/9YLIDGKT2/HHG3U=|xPhnJQEkcMUDQfoWSHLE3d2cuXU= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILudAQYmgk4XJruuiQ50QTFaMlipymzYUszXCWKM4snQ
diff --git a/test/aingcupu/.xscreensaver b/test/aingcupu/.xscreensaver
new file mode 100644
index 0000000..e4c7ad3
--- /dev/null
+++ b/test/aingcupu/.xscreensaver
@@ -0,0 +1,2 @@
+mode:		blank
+
diff --git a/test/aingcupu/a.out b/test/aingcupu/a.out
new file mode 100644
index 0000000000000000000000000000000000000000..a84164bd8b199af692c5d8060ebe228dc19aa2ad
GIT binary patch
literal 12840
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

literal 0
HcmV?d00001

diff --git a/test/aingcupu/all b/test/aingcupu/all
new file mode 100644
index 0000000..155d756
--- /dev/null
+++ b/test/aingcupu/all
@@ -0,0 +1,3 @@
+./comp
+./share
+./run $1 $2
diff --git a/test/aingcupu/asd b/test/aingcupu/asd
new file mode 100644
index 0000000000000000000000000000000000000000..580c8afdf71ca9773dce7015333a82aaef9bfd14
GIT binary patch
literal 13224
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
Npd7!%f{Nzq|3A5vjnx1E

literal 0
HcmV?d00001

diff --git a/test/aingcupu/c.c b/test/aingcupu/c.c
new file mode 100644
index 0000000..2a08db5
--- /dev/null
+++ b/test/aingcupu/c.c
@@ -0,0 +1,144 @@
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+
+int N = 1000;
+
+int getmin_index(long **graph, bool pickedVertices[N], int sourceVertex) {
+    int minDistance = CHAR_MAX;
+    int min_index = -1;
+
+    for (int j = 0; j < N; j++) {
+        if (!pickedVertices[j] && graph[sourceVertex][j] <= minDistance) {
+            minDistance = graph[sourceVertex][j];
+            min_index = j;
+        }
+    }
+    return min_index;
+}
+
+void print(long **graph){
+    printf("Matrix: \n");
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            printf("%ld ", graph[i][j]);
+        }
+        printf("\n");
+    }
+}
+
+void dijkstra(long** graph, int sourceVertex) {
+
+    // Distance from single source to all of the nodes
+    bool pickedVertices[N];
+
+    for (int vertex = 0; vertex < N; vertex++) {
+        pickedVertices[vertex] = false;
+    }
+
+    for (int i = 0; i < N - 1; i++) {
+        // Get minimum distance
+        int min_index = getmin_index(graph, pickedVertices, sourceVertex);
+
+        // Mark the vertice as picked
+        pickedVertices[min_index] = true;
+
+        // Update distance value
+        for (int vertex = 0; vertex < N; vertex++) {
+            if ((!pickedVertices[vertex]) && 
+                (graph[min_index][vertex]) && 
+                (graph[sourceVertex][min_index] != INT_MAX) &&
+                (graph[sourceVertex][min_index] + graph[min_index][vertex] < graph[sourceVertex][vertex])) {
+                
+                graph[sourceVertex][vertex] = graph[sourceVertex][min_index] + graph[min_index][vertex];
+            }
+        }
+    }
+    return;
+}
+
+int main(int argc, char *argv[]) {
+	
+    // Get matrix size from argument vector in , convert to int
+    N = strtol(argv[1], NULL, 10);
+
+    long** graph;
+    graph = (long**) malloc(sizeof(long*) * N);
+    for (int i = 0; i < N; ++i)
+    {
+        graph[i] = (long*) malloc(sizeof(long) * N);
+    }
+    int numtasks, rank, dest, source, rc, count, tag=1;
+    double start_time, end_time, total_time;
+
+    srand(13517115);
+	// Fill the matrix with rand() function
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            // Mod by 100 so the result won't be too big.
+            graph[i][j] = rand() % 100;
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (!(i == j || graph[i][j])){
+                graph[i][j] = INT_MAX;
+            }
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (i == j){
+                graph[i][j] = 0;
+            }
+        }
+    }
+
+    MPI_Status Stat;
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Barrier(MPI_COMM_WORLD);
+    start_time = MPI_Wtime();
+
+    int jobs = N/(numtasks-1);
+    long* dataRecv;
+    int destinationRank = 0;
+    count = 0;
+    if (!rank){
+        dataRecv = (long*) malloc(sizeof(long) * N*jobs);
+        while(count<numtasks-1){
+            MPI_Recv(dataRecv, N*jobs, MPI_LONG, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &Stat);
+            printf("Received from process %d ", Stat.MPI_SOURCE);
+            for (int i = 0; i < N*jobs; ++i)
+            {
+                graph[Stat.MPI_SOURCE*jobs-jobs][i] = dataRecv[i];
+            }
+            count++;
+        }
+        free(dataRecv);
+    }
+    else{
+        for (int i = rank*jobs-jobs; i < rank*jobs; ++i)
+        {
+            dijkstra(graph, i);
+            // printf("Print job %d from rank %d\n", i, rank);
+        }
+        MPI_Send(graph[rank*jobs-jobs], N*jobs, MPI_LONG, destinationRank, tag, MPI_COMM_WORLD);
+    }
+    
+    MPI_Barrier(MPI_COMM_WORLD);
+    end_time = MPI_Wtime();
+    total_time = end_time - start_time;
+    MPI_Finalize();
+    if (rank == 0) {
+        printf("%f\n", total_time);
+    }
+    for (int i = 0; i < N; ++i)
+    {
+        free(graph[i]);
+    }
+    free(graph);
+}
diff --git a/test/aingcupu/comp b/test/aingcupu/comp
new file mode 100644
index 0000000..e4d3168
--- /dev/null
+++ b/test/aingcupu/comp
@@ -0,0 +1 @@
+mpicc c.c -o asd
diff --git a/test/aingcupu/cop b/test/aingcupu/cop
new file mode 100644
index 0000000..46104c3
--- /dev/null
+++ b/test/aingcupu/cop
@@ -0,0 +1,2 @@
+rm c.c
+nano c.c
diff --git a/test/aingcupu/hellompi.c b/test/aingcupu/hellompi.c
new file mode 100644
index 0000000..af1dd57
--- /dev/null
+++ b/test/aingcupu/hellompi.c
@@ -0,0 +1,17 @@
+
+#include "mpi.h"
+#include <stdio.h>
+int main(int argc,char *argv[]) {
+  int numtasks, rank;
+  char processor_name[MPI_MAX_PROCESSOR_NAME];
+  int name_len;
+  MPI_Status Stat;
+  MPI_Init(&argc,&argv);
+  MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Get_processor_name(processor_name, &name_len);
+  printf("Hello from processor %s, task %d of %d, \n",
+  processor_name, rank, numtasks);
+  MPI_Finalize();
+} 
+
diff --git a/test/aingcupu/mpi_hostfile b/test/aingcupu/mpi_hostfile
new file mode 100644
index 0000000..c2bdfe6
--- /dev/null
+++ b/test/aingcupu/mpi_hostfile
@@ -0,0 +1,7 @@
+#daftar host
+localhost
+167.205.35.151
+167.205.35.152
+167.205.35.153
+167.205.35.154
+167.205.35.155
diff --git a/test/aingcupu/run b/test/aingcupu/run
new file mode 100644
index 0000000..11955d4
--- /dev/null
+++ b/test/aingcupu/run
@@ -0,0 +1 @@
+mpirun -np $1 --hostfile mpi_hostfile asd $2
diff --git a/test/aingcupu/share b/test/aingcupu/share
new file mode 100644
index 0000000..79186e8
--- /dev/null
+++ b/test/aingcupu/share
@@ -0,0 +1,5 @@
+scp asd 13517109@167.205.35.151:~
+scp asd 13517109@167.205.35.152:~
+scp asd 13517109@167.205.35.153:~
+scp asd 13517109@167.205.35.154:~
+scp asd 13517109@167.205.35.155:~
diff --git a/test/br.c b/test/br.c
new file mode 100644
index 0000000..3d5a032
--- /dev/null
+++ b/test/br.c
@@ -0,0 +1,65 @@
+// Copyright 2011 www.mpitutorial.com
+// Comparison of MPI_Bcast with the my_bcast function
+#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/test/c b/test/c
new file mode 100644
index 0000000000000000000000000000000000000000..4f07d5df20a431df6420062973c3b1c1647f3542
GIT binary patch
literal 12744
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

literal 0
HcmV?d00001

diff --git a/test/c.c b/test/c.c
new file mode 100644
index 0000000..3d6abc9
--- /dev/null
+++ b/test/c.c
@@ -0,0 +1,108 @@
+#include "mpi.h"
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <limits.h>
+
+int N = 5000;
+
+int getmin_index(short **graph, bool pickedVertices[N], int sourceVertex) {
+    int minDistance = CHAR_MAX;
+    int min_index = -1;
+
+    for (int j = 0; j < N; j++) {
+        if (!pickedVertices[j] && graph[sourceVertex][j] <= minDistance) {
+            minDistance = graph[sourceVertex][j];
+            min_index = j;
+        }
+    }
+    return min_index;
+}
+
+void print(short **graph){
+    printf("Matrix: \n");
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            printf("%d ", graph[i][j]);
+        }
+        printf("\n");
+    }
+}
+
+void dijkstra(short **graph, int sourceVertex) {
+
+    // Distance from single source to all of the nodes
+    bool pickedVertices[N];
+
+    for (int vertex = 0; vertex < N; vertex++) {
+        pickedVertices[vertex] = false;
+    }
+
+    for (int i = 0; i < N - 1; i++) {
+        // Get minimum distance
+        int min_index = getmin_index(graph, pickedVertices, sourceVertex);
+
+        // Mark the vertice as picked
+        pickedVertices[min_index] = true;
+
+        // Update distance value
+        for (int vertex = 0; vertex < N; vertex++) {
+            if ((!pickedVertices[vertex]) && 
+                (graph[min_index][vertex]) && 
+                (graph[sourceVertex][min_index] != INT_MAX) &&
+                (graph[sourceVertex][min_index] + graph[min_index][vertex] < graph[sourceVertex][vertex])) {
+                
+                graph[sourceVertex][vertex] = graph[sourceVertex][min_index] + graph[min_index][vertex];
+            }
+        }
+    }
+    return;
+}
+
+int main(int argc, char *argv[]) {
+	
+    short** graph;
+    graph = (short**) malloc(sizeof(short*) * 5000);
+    for (int i = 0; i < 5000; ++i)
+    {
+        graph[i] = (short*) malloc(sizeof(short) * 5000);
+    }
+
+
+    // Get matrix size from argument vector in , convert to int
+    printf("pass\n");
+    srand(13517115);
+	// Fill the matrix with rand() function
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            // Mod by 100 so the result won't be too big.
+            graph[i][j] = 1;
+        }
+    }
+    /*for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (!(i == j || graph[i][j])){
+                graph[i][j] = CHAR_MAX;
+            }
+        }
+    }
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            if (i == j){
+                graph[i][j] = 0;
+            }
+        }
+    }*/
+
+    /*for (int i = 0; i < N; ++i)
+    {
+        dijkstra(graph, i);
+        printf("%d\n", i);
+    }*/
+    print(graph);
+    for (int i = 0; i < 5000; ++i)
+    {
+        free(graph[i]);
+    }
+    free(graph);
+}
\ No newline at end of file
diff --git a/test/comm.c b/test/comm.c
new file mode 100644
index 0000000..30820d4
--- /dev/null
+++ b/test/comm.c
@@ -0,0 +1,31 @@
+// Copyright 2015 www.mpitutorial.com
+#include <stdlib.h>
+#include <stdio.h>
+#include <mpi.h>
+int main(int argc, char **argv) {
+ MPI_Init(NULL, NULL);
+ int world_rank, world_size;
+ MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &world_size);
+ MPI_Group world_group;
+ MPI_Comm_group(MPI_COMM_WORLD, &world_group);
+ int n = 7;
+ const int ranks[7] = {1, 2, 3, 5, 7, 11, 13};
+ MPI_Group prime_group;
+ MPI_Group_incl(world_group, 7, ranks, &prime_group);
+ MPI_Comm prime_comm;
+ MPI_Comm_create_group(MPI_COMM_WORLD, prime_group, 0, &prime_comm);
+ int prime_rank = -1, prime_size = -1;
+ if (MPI_COMM_NULL != prime_comm) {
+MPI_Comm_rank(prime_comm, &prime_rank);
+MPI_Comm_size(prime_comm, &prime_size);
+ }
+ printf("WORLD RANK/SIZE: %d/%d --- PRIME RANK/SIZE: %d/%d\n", world_rank,
+world_size, prime_rank, prime_size);
+ MPI_Group_free(&world_group);
+ MPI_Group_free(&prime_group);
+ if (MPI_COMM_NULL != prime_comm) {
+MPI_Comm_free(&prime_comm);
+ }
+ MPI_Finalize();
+}
diff --git a/test/reduce.c b/test/reduce.c
new file mode 100644
index 0000000..3e346dc
--- /dev/null
+++ b/test/reduce.c
@@ -0,0 +1,47 @@
+// Copyright 2013 www.mpitutorial.com
+#include <stdio.h>
+#include <stdlib.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;
+}
+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]);
+ 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);
+ srand(time(NULL)*world_rank);
+ float *rand_nums = NULL;
+ rand_nums = create_rand_nums(num_elements_per_proc);
+ float local_sum = 0;
+ int i;
+  for (i = 0; i < num_elements_per_proc; i++) {
+local_sum += rand_nums[i];
+ }
+ printf("Local sum for process %d - %f, avg = %f\n", world_rank, local_sum,
+local_sum / num_elements_per_proc);
+ float global_sum;
+ MPI_Reduce(&local_sum, &global_sum, 1, MPI_FLOAT, MPI_SUM, 0,
+MPI_COMM_WORLD);
+ if (world_rank == 0) {
+printf("Total sum = %f, avg = %f\n", global_sum, global_sum /
+(world_size * num_elements_per_proc));
+ }
+ // Clean up
+ free(rand_nums);
+ MPI_Barrier(MPI_COMM_WORLD);
+ MPI_Finalize();
+}
diff --git a/test/sg.c b/test/sg.c
new file mode 100644
index 0000000..b86351f
--- /dev/null
+++ b/test/sg.c
@@ -0,0 +1,65 @@
+// 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 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