From 546c333b64db7c06eeb5f21a733d5ed1236d1dda Mon Sep 17 00:00:00 2001
From: mahen <rayzamgh>
Date: Sat, 29 Feb 2020 21:21:08 +0700
Subject: [PATCH] DONE

---
 src/10nodes_output.txt      |  10 +++
 src/4nodes_output.txt       |   4 +
 src/Makefile                |   2 +
 src/data_structure.c        | 105 ++++++++++++++++++++++++
 src/data_structure.h        |  29 +++++++
 src/data_structure_serial.c |  79 ++++++++++++++++++
 src/data_structure_serial.h |  28 +++++++
 src/main_omp_v1             | Bin 0 -> 18152 bytes
 src/main_omp_v1.c           | 156 +++++++++++++++++++++++++++++++++++
 src/mainserial              | Bin 0 -> 13448 bytes
 src/mainserial.c            | 159 ++++++++++++++++++++++++++++++++++++
 11 files changed, 572 insertions(+)
 create mode 100644 src/10nodes_output.txt
 create mode 100644 src/4nodes_output.txt
 create mode 100644 src/Makefile
 create mode 100644 src/data_structure.c
 create mode 100644 src/data_structure.h
 create mode 100644 src/data_structure_serial.c
 create mode 100644 src/data_structure_serial.h
 create mode 100755 src/main_omp_v1
 create mode 100644 src/main_omp_v1.c
 create mode 100755 src/mainserial
 create mode 100644 src/mainserial.c

diff --git a/src/10nodes_output.txt b/src/10nodes_output.txt
new file mode 100644
index 0000000..aaf259b
--- /dev/null
+++ b/src/10nodes_output.txt
@@ -0,0 +1,10 @@
+0	8	9	7	1	1	5	9	8	3	
+8	0	10	7	7	9	3	1	6	9	
+9	10	0	11	9	10	12	11	9	11	
+7	7	11	0	6	8	4	8	7	6	
+1	7	9	6	0	2	4	8	7	2	
+1	9	10	8	2	0	6	10	9	4	
+5	3	12	4	4	6	0	4	3	6	
+9	1	11	8	8	10	4	0	7	10	
+8	6	9	7	7	9	3	7	0	9	
+3	9	11	6	2	4	6	10	9	0	
diff --git a/src/4nodes_output.txt b/src/4nodes_output.txt
new file mode 100644
index 0000000..6a5c68b
--- /dev/null
+++ b/src/4nodes_output.txt
@@ -0,0 +1,4 @@
+0	10	9	11	
+10	0	1	1	
+9	1	0	2	
+11	1	2	0	
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..6396eab
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,2 @@
+main_omp_v1: main_omp_v1.c
+	gcc main_omp_v1.c data_structure.c -lm -o main_omp_v1 -fopenmp
diff --git a/src/data_structure.c b/src/data_structure.c
new file mode 100644
index 0000000..903a150
--- /dev/null
+++ b/src/data_structure.c
@@ -0,0 +1,105 @@
+#include "data_structure.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+void createMatrix(int r, int c, matrix* M){
+	mem(*M) =(int*) malloc(((r * c) + 2) * sizeof(int));
+	row(*M) = r;
+	column(*M) = c;
+}
+
+void resetMatrix(matrix *M, int value){
+	for (int i = 0; i < row(*M); i++){
+		for (int j = 0; j < row(*M); j++){
+			if (i == j){
+				setValue(M, i, j, ZERO);
+			}
+			else{
+				setValue(M, i, j, value);
+			}
+		}
+	}
+}
+
+void printMatrix(matrix M){
+	for (int i = 0; i < row(M); i++){
+		for (int j = 0; j < column(M); j++){
+			printf("%d\t", value(M, i, j));
+		}
+		printf("\n");
+	}
+}
+
+void setValue(matrix *M, int i, int j, int value){
+	value(*M, i, j) = value;
+}
+
+void updateMatrix(matrix *M, int* distance){
+	int src = distance[0];
+	for (int dest = 0; dest < row(*M); dest++){
+		if (distance[3 + dest] < value(*M, src, dest) && src != dest){
+			value(*M, src, dest) = distance[3 + dest];
+			value(*M, dest, src) = distance[3 + dest];
+		}
+	}
+}
+
+// void updateDistance(matrix *M, int* distance){
+
+// }
+
+int* serializeMatrix(matrix M){
+	return mem(M);	
+}
+
+void printSerializedMatrix(int* SM){
+	for (int i = 0; i < SM[0]; i++){
+		for (int j = 0; j < SM[1]; j++){
+			printf("%d ", SM[2 + (i * SM[0]) + j]);
+		}
+		printf("\n");
+	}
+}
+
+void setMatrix(matrix *M){
+	setValue(M, 0, 1, 4);
+	setValue(M, 0, 7, 8);
+	
+	setValue(M, 1, 0, 4);
+	setValue(M, 1, 2, 8);
+	setValue(M, 1, 7, 11);
+
+	setValue(M, 2, 1, 8);
+	setValue(M, 2, 3, 7);
+	setValue(M, 2, 5, 4);
+	setValue(M, 2, 8, 2);
+
+	setValue(M, 3, 2, 7);
+	setValue(M, 3, 4, 9);
+	setValue(M, 3, 5, 14);
+
+	setValue(M, 4, 3, 9);
+	setValue(M, 4, 5, 10);
+	
+	setValue(M, 5, 2, 4);
+	setValue(M, 5, 3, 14);
+	setValue(M, 5, 4, 10);
+	setValue(M, 5, 6, 2);
+
+	setValue(M, 6, 5, 2);
+	setValue(M, 6, 7, 1);
+	setValue(M, 6, 8, 6);
+
+	setValue(M, 7, 0, 8);
+	setValue(M, 7, 1, 11);
+	setValue(M, 7, 6, 1);
+	setValue(M, 7, 8, 7);
+
+	setValue(M, 8, 2, 2);
+	setValue(M, 8, 6, 6);
+	setValue(M, 8, 7, 7);
+}
+
+void destroyMatrix(matrix *M){
+	free(mem(*M));
+}
\ No newline at end of file
diff --git a/src/data_structure.h b/src/data_structure.h
new file mode 100644
index 0000000..deef19b
--- /dev/null
+++ b/src/data_structure.h
@@ -0,0 +1,29 @@
+#ifndef DATA_STRUCTURE_H
+#define DATA_STRUCTURE_H
+
+
+typedef struct {
+	int* mem;
+} matrix;
+
+// Selektor
+#define mem(M) (M).mem
+// Ukuran
+#define row(M) (M).mem[0]
+#define column(M) (M).mem[1]
+#define value(M, i, j) (M).mem[2 + (i*row(M)) + (j)]
+#define INF 99999
+#define ZERO 0
+
+void createMatrix(int r, int c, matrix* M);
+void printMatrix(matrix M);
+void resetMatrix(matrix *M, int value);
+void setValue(matrix *M, int i, int j, int value);
+void updateMatrix(matrix *M, int* distance);
+void setMatrix(matrix *M);
+
+int* serializeMatrix(matrix M);
+void printSerializedMatrix(int* SM);
+void destroyMatrix(matrix *M);
+
+#endif
\ No newline at end of file
diff --git a/src/data_structure_serial.c b/src/data_structure_serial.c
new file mode 100644
index 0000000..999b926
--- /dev/null
+++ b/src/data_structure_serial.c
@@ -0,0 +1,79 @@
+#include "data_structure_serial.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+void createMatrix(int r, int c, matrix *M)
+{
+	row(*M) = r;
+	column(*M) = c;
+	Mem(*M) = (int **)malloc(row(*M) * sizeof(int *));
+
+	for (int i = 0; i < row(*M); i++)
+	{
+		M->mem[i] = (int *)malloc(column(*M) * sizeof(int));
+	}
+}
+
+void destroyMatrix(matrix *M)
+{
+	for (int i = 0; i < row(*M); i++)
+	{
+		free(M->mem[i]);
+	}
+	free(M->mem);
+}
+
+void resetMatrix(matrix *M, int value)
+{
+	for (int i = 0; i < row(*M); i++)
+	{
+		for (int j = 0; j < column(*M); j++)
+		{
+			if (i == j)
+			{
+				setValue(M, i, j, ZERO);
+			}
+			else
+			{
+				setValue(M, i, j, value);
+			}
+		}
+	}
+}
+
+void printMatrix(matrix M)
+{
+	for (int i = 0; i < row(M); i++)
+	{
+		for (int j = 0; j < column(M); j++)
+		{
+			
+			printf("%d ", value(M, i, j));
+			// printf("Ngeprint col %d\n", j);
+			// printf("Ngeprint row %d\n", i);
+			// printf("%d ", M.mem[i][j]);
+		}
+		printf("\n");
+	}
+}
+
+void setValue(matrix *M, int i, int j, int value)
+{
+	value(*M, i, j) = value;
+}
+
+void updateMatrix(matrix *M, matrix m, int src)
+{
+	for (int dest = 0; dest < row(m); dest++)
+	{
+		// printf("VALUE DISTANCE %d %d \n", dest, (value(m, dest, 0)));
+		// printf("MATRIX SOLU %d %d %d \n", src, dest, (value(*M, src, dest)));
+		if ((value(m, dest, 0) < value(*M, src, dest)) && (src != dest))
+		{
+			setValue(M, src, dest, value(m, dest, 0));
+			setValue(M, dest, src, value(m, dest, 0));
+			// value(*M, src, dest) = value(m, dest, 0);
+			// value(*M, dest, src) = value(m, dest, 0);
+		}
+	}
+}
diff --git a/src/data_structure_serial.h b/src/data_structure_serial.h
new file mode 100644
index 0000000..da637ce
--- /dev/null
+++ b/src/data_structure_serial.h
@@ -0,0 +1,28 @@
+#ifndef DATA_STRUCTURE_SERIAL_H
+#define DATA_STRUCTURE_SERIAL_H
+
+typedef struct
+{
+	int **mem;
+	int row;
+	int column;
+} matrix;
+
+// Selektor
+#define Mem(M) (M).mem
+// Ukuran
+#define row(M) (M).row
+#define column(M) (M).column
+#define value(M, i, j) (M).mem[(i)][(j)]
+#define INF 99999
+#define ZERO 0
+
+void createMatrix(int r, int c, matrix *M);
+void destroyMatrix(matrix *M);
+void printMatrix(matrix M);
+void resetMatrix(matrix *M, int value);
+void setValue(matrix *M, int i, int j, int value);
+
+void updateMatrix(matrix *M, matrix m, int src);
+
+#endif
diff --git a/src/main_omp_v1 b/src/main_omp_v1
new file mode 100755
index 0000000000000000000000000000000000000000..bfc79f91db7a7a60d8fbe5ee1cadd22b91f14f1d
GIT binary patch
literal 18152
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
aOu>NTdRdWP!;9HJqc$|ou%e=c_Wujor6r;O

literal 0
HcmV?d00001

diff --git a/src/main_omp_v1.c b/src/main_omp_v1.c
new file mode 100644
index 0000000..88a95cf
--- /dev/null
+++ b/src/main_omp_v1.c
@@ -0,0 +1,156 @@
+#include "data_structure.h"
+#include <omp.h>
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+int minDistance(int* distance, int visitedNodes[], int sz){
+	int min_value = INF;
+	int min_index = 0;
+	for (int i = 0; i < sz; i++){
+		if ((distance[3 + i] <= min_value) && (visitedNodes[i] != 1)){
+			min_index = i;
+			min_value = distance[3 + i];
+		}
+	}
+	return min_index;
+}
+
+int normalize(int rand){
+	
+	rand = (rand % (20 - 1)) + 1;
+
+	return rand;
+}
+
+void randomize(matrix *M, int NIM){
+	srand(NIM);
+
+	for (int row = 0; row < row(*M); row++){
+		for (int column = 0; column < column(*M); column++){
+			if (column > row){
+				int temp = normalize(rand());
+
+				value(*M, row, column) = temp;
+				value(*M, column, row) = temp;
+			}
+		}	
+	}
+}
+
+void dijsktra(matrix graph, int* distance, int src){
+
+	int nNodes = row(graph);
+	// Current Node with minimum distance to SRC
+	int currentNode;
+	int visitedNodes[nNodes];
+
+
+	// Init distance to INFINITY
+	for (int j = 0; j < nNodes; j++){
+		distance[3 + j] = INF;
+		visitedNodes[j] = 0;
+	}
+
+	// Distance to itself is 0
+	distance[3 + src] = 0;
+
+	for (int n = 0; n < nNodes - 1; n++){
+		// Pick the minimum distance from current nodes
+		currentNode = minDistance(distance, visitedNodes, nNodes);
+
+		visitedNodes[currentNode] = 1;
+
+		for (int v = 0; v < nNodes; v++){
+			if (visitedNodes[v] == 0 &&
+				value(graph, currentNode, v) != INF &&
+				distance[3 + currentNode] != INF &&
+				distance[3 + currentNode]+ value(graph, currentNode, v) < distance[3 + v]
+				){
+				distance[3 + v] = distance[3 + currentNode] + value(graph, currentNode, v);
+			}
+		}
+	}
+	distance[2] = 1;
+}
+
+void filewrite(matrix *M, int nNodes){
+   	FILE * fp;
+   	int i;
+   	/* open the file for writing*/
+	char strint[10];
+	sprintf(strint, "%d", nNodes);
+   	fp = fopen (strcat(strint,"nodes_output.txt"),"w");
+	
+	for (int i = 0; i < row(*M); i++){
+		for (int j = 0; j < column(*M); j++){
+			fprintf (fp, "%d\t", value(*M, i, j));
+		}
+		fprintf(fp, "\n");
+	}
+   	/* close the file*/  
+   	fclose (fp);
+   
+}
+
+
+void parallelDijsktra(int nNodes, int NUM_THREADS){
+	
+	double startTime = 0.0, totalTime = 0.0;
+	int buff, temp;
+
+	matrix M;
+	matrix Solu;
+	createMatrix(nNodes, nNodes, &M);
+	resetMatrix(&M, INF);
+
+	createMatrix(nNodes, nNodes, &Solu);
+	resetMatrix(&Solu, INF);	
+	randomize(&M, 13517124);
+
+	startTime = omp_get_wtime();
+	int factor = ceil((double) nNodes/(NUM_THREADS));
+
+# pragma omp parallel num_threads(NUM_THREADS) shared(Solu, M, factor, startTime, nNodes)
+{
+	int i = 0;
+
+	int currentNode = (omp_get_thread_num() * factor);
+
+	int* distance;
+	distance = (int *) malloc((3 + nNodes) * sizeof(int));
+	distance[1] = nNodes;
+	distance[2] = 0;
+
+	//printf("Thread #%d ngurus node: ", omp_get_thread_num());
+	while (i < factor && currentNode < nNodes){
+		distance[0] = currentNode;
+		dijsktra(M, distance, currentNode);
+		updateMatrix(&Solu, distance);
+		i += 1;
+		currentNode = i + (omp_get_thread_num() * factor);
+	}
+
+	//printf("thread #%d finished\n", omp_get_thread_num());
+	free(distance);
+}
+# pragma omp barrier
+	totalTime = omp_get_wtime() - startTime;
+	printf("PEPEG\n");
+	// printMatrix(Solu);
+	printf("Process completed in %f microseconds\n", totalTime*1000);
+	filewrite(&Solu, nNodes);
+	destroyMatrix(&Solu);
+}
+
+int main(){
+	// Banyak Nodes, Banyak Threads
+	int N, NUM_THREADS;
+	printf("Banyak Node: ");
+	scanf("%d", &N);
+	printf("Banyak Threads: ");
+	scanf("%d", &NUM_THREADS);
+	parallelDijsktra(N, NUM_THREADS);
+	return 0;
+}
\ No newline at end of file
diff --git a/src/mainserial b/src/mainserial
new file mode 100755
index 0000000000000000000000000000000000000000..2816c63d8ce344ee776ff3d0ccc7e9f8b2f4809c
GIT binary patch
literal 13448
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

literal 0
HcmV?d00001

diff --git a/src/mainserial.c b/src/mainserial.c
new file mode 100644
index 0000000..cbe7333
--- /dev/null
+++ b/src/mainserial.c
@@ -0,0 +1,159 @@
+#include "data_structure_serial.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+// #include "mpi.h"
+int normalize(int rand){
+	
+	rand = (rand % (20 - 1)) + 1;
+
+	return rand;
+}
+
+void randomize(matrix *M, int NIM){
+	srand(NIM);
+
+	for (int row = 0; row < row(*M); row++){
+		for (int column = 0; column < column(*M); column++){
+			if (column > row){
+				int temp = normalize(rand());
+
+				value(*M, row, column) = temp;
+				value(*M, column, row) = temp;
+			}
+		}	
+	}
+}
+void printSolution(matrix distance, int src)
+{
+	printf("Node Src: %d\n", src);
+	printf("Node Dest       Distance     from\n");
+	for (int i = 0; i < row(distance); i++)
+	{
+		printf("%d              %d         %d\n", i, value(distance, i, 0), value(distance, i, 1));
+	}
+}
+int minDistance(matrix distance, int visitedNodes[], int sz)
+{
+	int min_value = INF;
+	int min_index = 0;
+	for (int i = 0; i < sz; i++)
+	{
+		if (value(distance, i, 0) <= min_value && visitedNodes[i] != 1)
+		{
+			min_index = i;
+			min_value = value(distance, i, 0);
+		}
+	}
+	// printf("MINDEX %d\n", min_index);
+	// printf("MINVAL %d\n", min_value);
+	return min_index;
+}
+matrix dijsktra(matrix graph, int src)
+{
+	int nNodes = row(graph);
+	// Current Node with minimum distance to SRC
+	int currentNode;
+	matrix distance;
+	int visitedNodes[nNodes];
+	createMatrix(nNodes, 2, &distance);
+	// Init distance to INFINITY
+	for (int i = 0; i < nNodes; i++)
+	{
+		value(distance, i, 0) = INF;
+		value(distance, i, 1) = -1;
+		visitedNodes[i] = 0;
+	}
+	// Distance to itself is 0
+	value(distance, src, 0) = 0;
+	for (int n = 0; n < nNodes - 1; n++)
+	{
+		// Pick the minimum distance from current nodes
+		currentNode = minDistance(distance, visitedNodes, nNodes);
+		visitedNodes[currentNode] = 1;
+		for (int v = 0; v < nNodes; v++)
+		{
+			/* printf("[%d, %d]\n", n, v);
+			printf("current Nodes: %d\n", currentNode); */
+			if (visitedNodes[v] == 0 &&
+				value(graph, currentNode, v) != INF &&
+				value(distance, currentNode, 0) != INF &&
+				value(distance, currentNode, 0) + value(graph, currentNode, v) < value(distance, v, 0))
+			{
+				value(distance, v, 0) = value(distance, currentNode, 0) + value(graph, currentNode, v);
+				value(distance, v, 1) = currentNode;
+			}
+		}
+	}
+	// printSolution(distance, src);
+	return distance;
+}
+void generateSolutions(matrix graph)
+{
+	int currentNode;
+	matrix solutions;
+	matrix tempSingleSolution;
+	createMatrix(row(graph), 2, &tempSingleSolution);
+	createMatrix(row(graph), column(graph), &solutions);
+	
+    resetMatrix(&solutions, INF);
+    
+	for (currentNode = 0; currentNode < row(graph); currentNode++)
+	{
+		tempSingleSolution = dijsktra(graph, currentNode);
+		updateMatrix(&solutions, tempSingleSolution, currentNode);
+				
+	}
+	destroyMatrix(&tempSingleSolution);
+	// printMatrix(solutions);
+	destroyMatrix(&solutions);
+}
+
+void filewrite(matrix *M){
+   	FILE * fp;
+   	int i;
+   	/* open the file for writing*/
+   	fp = fopen ("outputserial.txt","w");
+	
+	for (int i = 0; i < row(*M); i++){
+		for (int j = 0; j < column(*M); j++){
+			fprintf (fp, "%d\t", value(*M, i, j));
+		}
+		fprintf(fp, "\n");
+	}
+   	/* close the file*/  
+   	fclose (fp);
+   
+}
+
+int main(int argc, char* argv[])
+{
+    clock_t start, end;
+    double cpu_time_used;
+    
+    matrix M;
+	int nNodes;
+    nNodes = atoi(argv[1]);
+    
+    
+    createMatrix(nNodes, nNodes, &M);
+	resetMatrix(&M, INF);
+
+    randomize(&M, 13517073);
+    // printMatrix(M);
+
+    start = clock();
+
+	generateSolutions(M);
+
+	destroyMatrix(&M);
+
+    end = clock();
+    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
+	
+    printf("\nSerial time Elapsed: %f\n", cpu_time_used * 1000000);
+
+    // filewrite(&M);
+
+    return 0;
+}
-- 
GitLab