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