From 6ca6f081e59bde1310b49a135b84227a5f483583 Mon Sep 17 00:00:00 2001 From: 13518104 Kevin Austin Stefano <13518104@std.stei.itb.ac.id> Date: Thu, 4 Mar 2021 19:47:02 +0700 Subject: [PATCH] make openmpi.c --- src/MST_OpenMP | Bin 13608 -> 0 bytes src/MST_OpenMP.c | 2 +- src/MST_OpenMP.out | Bin 12968 -> 0 bytes src/MST_OpenMPI.c | 259 +++++++++++++++++++++++++++++++++++++++++++++ src/MST_Serial | Bin 12968 -> 0 bytes src/hello | Bin 0 -> 8600 bytes 6 files changed, 260 insertions(+), 1 deletion(-) delete mode 100755 src/MST_OpenMP delete mode 100755 src/MST_OpenMP.out create mode 100644 src/MST_OpenMPI.c delete mode 100755 src/MST_Serial create mode 100755 src/hello diff --git a/src/MST_OpenMP b/src/MST_OpenMP deleted file mode 100755 index 31321e2fd1b102ccd7c68b1d6467c0d5478aa3f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13608 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 Z;c(n8^Im~WF8SYl!Q!~UjEZK;|1Z2gt<3-c diff --git a/src/MST_OpenMP.c b/src/MST_OpenMP.c index 6b8963f..757d567 100644 --- a/src/MST_OpenMP.c +++ b/src/MST_OpenMP.c @@ -245,7 +245,7 @@ int main() int t = clock(); KruskalMST(graph, result, &e); t = clock() - t; - printf("Waktu Eksekusi: %f ms \n", ((double)t) / CLOCKS_PER_SEC * 1000); printResult(result, e); + printf("Waktu Eksekusi: %f ms \n", ((double)t) / CLOCKS_PER_SEC * 1000); return 0; } \ No newline at end of file diff --git a/src/MST_OpenMP.out b/src/MST_OpenMP.out deleted file mode 100755 index 81f11debdaf328022fa25db0eb3d50a202cea1f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12968 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 diff --git a/src/MST_OpenMPI.c b/src/MST_OpenMPI.c new file mode 100644 index 0000000..ed877db --- /dev/null +++ b/src/MST_OpenMPI.c @@ -0,0 +1,259 @@ +// IF3230 - Sistem Paralel dan Terdistribusi +// Michael Hans / 13518056 +// Kevin Austin Stefano / 13518104 + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <mpi.h> + +// Edge structure +typedef struct +{ + int src; + int dest; + int weight; +} Edge; + +// Graph structure +typedef struct +{ + int V; // number of vertices + int E; // number of edges + Edge *edge; +} Graph; + +// Create new Graph based on V vertices and E edges +Graph *CreateGraph(int V, int E) +{ + Graph *graph = (Graph *)(malloc(sizeof(Graph))); + graph->V = V; + graph->E = E; + graph->edge = (Edge *)(malloc(E * sizeof(Edge))); + return graph; +} + +// Print all graph component to the CLI +void PrintGraph(Graph *graph) +{ + printf("Vertices : %d\n", graph->V); + printf("Edges : %d\n", graph->E); + for (int i = 0; i < graph->E; i++) + { + printf("%d -- %d = %d\n", graph->edge[i].src, graph->edge[i].dest, graph->edge[i].weight); + } +} + +// A function to implement bubble sort +void bubbleSort(Edge arr[], int n, int type) +{ + //Jika type ==1, maka diurutkan berdasarkan weight + //Jika type ==2, maka diurutkan berdasarkan src + int i, j; +// #pragma omp parallel num_threads(thread_count) default(none) private(i, j) shared(type, arr, n) + for (i = 0; i < n - 1; i++) + + for (j = 0; j < n - i - 1; j++) + if (type == 1) + { + if (arr[j].weight > arr[j + 1].weight) + { +// #pragma omp critical + { + Edge temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + else + { + if (arr[j].src > arr[j + 1].src) +// #pragma omp critical + { + Edge temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + else if (arr[j].src == arr[j + 1].src && arr[j].dest > arr[j + 1].dest) +// #pragma omp critical + { + Edge temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } +} + +/// Create graph based from the adjacency matrix in file +Graph *ReadArguments() +{ + Graph *graph = (Graph *)(malloc(sizeof(Graph))); + + int V, weight; + scanf("%d", &V); + graph->V = V; + graph->edge = (Edge *)(malloc(((V * V - V) / 2) * sizeof(Edge))); + + // Read the adjacency matrix + int E = 0; + for (int i = 0; i < V; i++) + { + for (int j = 0; j < V; j++) + { + scanf("%d", &weight); + // printf("%d ", weight); + if ((weight != -1) && (i <= j)) + { + graph->edge[E].src = i; + graph->edge[E].dest = j; + graph->edge[E].weight = weight; + E += 1; + } + } + // printf("\n"); + } + graph->E = E; + return graph; +} + +// Structure to represent a subset for union-find +typedef struct +{ + int parent; + int rank; +} Subset; + +// Create new subset +Subset *CreateSubset(int V) +{ + Subset *subsets = (Subset *)(malloc(V * sizeof(Subset))); + +// Create V subsets with single elements +// #pragma omp parallel for num_threads(thread_count) + for (int i = 0; i < V; i++) + { + subsets[i].parent = i; + subsets[i].rank = 0; + } + return subsets; +} + +int find(Subset subsets[], int i) +{ + // find root and make root as parent of i + // (path compression) + if (subsets[i].parent != i) + subsets[i].parent = find(subsets, subsets[i].parent); + return subsets[i].parent; +} + +void Union(Subset subsets[], int x, int y) +{ + int xroot = find(subsets, x); + int yroot = find(subsets, y); + + // Attach smaller rank tree under root of high + // rank tree (Union by Rank) + if (subsets[xroot].rank < subsets[yroot].rank) + subsets[xroot].parent = yroot; + else if (subsets[xroot].rank > subsets[yroot].rank) + subsets[yroot].parent = xroot; + + // If ranks are same, then make one as root and + // increment its rank by one + else + { + subsets[yroot].parent = xroot; + subsets[xroot].rank++; + } +} + +// Compare two edges according to their weights. +int compare(const void *a, const void *b) +{ + Edge *a1 = (Edge *)a; + Edge *b1 = (Edge *)b; + return a1->weight > b1->weight; +} + +int compare_src(const void *a, const void *b) +{ + Edge *a1 = (Edge *)a; + Edge *b1 = (Edge *)b; + return a1->src > b1->src; +} + +// Minimum Spanning Tree using Kruskal's Algorithm +void KruskalMST(Graph *graph, Edge result[], int *e) +{ + int V = graph->V; + int i = 0; + + // Step 1: Sort all the edges into correspondent sorted edges + // qsort(graph->edge, graph->E, sizeof(graph->edge[0]), compare); + + bubbleSort(graph->edge, graph->E, 1); + // Step 2: Allocate memory for creating V subsets + Subset *subsets = CreateSubset(V); + + while (((*e) < V - 1) && (i < graph->E)) + { + // Pick the smallest edge of the graph + Edge next_edge = graph->edge[i++]; + + int x = find(subsets, next_edge.src); + int y = find(subsets, next_edge.dest); + if (x != y) + { + result[(*e)++] = next_edge; + Union(subsets, x, y); + } + } + + bubbleSort(result, (*e), 2); + return; + // qsort(result, e, sizeof(result[0]), compare_src); +} + +void printResult(Edge *result, int e) +{ + // printf("%d\n", e); + int minimumCost = 0; +// #pragma omp parallel for + for (int i = 0; i < e; i++) + { +// #pragma omp critical + minimumCost += result[i].weight; + } + printf("%d\n", minimumCost); + for (int i = 0; i < e; i++) + { + printf("%d-%d\n", result[i].src, result[i].dest); + } +} + +// Driver program to test above functions +int main(int argc, char** argv) +{ + MPI_Init(NULL, NULL); + // Get the number of processes + int world_size; + MPI_Comm_size(MPI_COMM_WORLD, &world_size); + + // Get the rank of the process + int world_rank; + MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); + + + Graph *graph = ReadArguments(); + Edge result[graph->V]; + int e = 0; + int t = clock(); + KruskalMST(graph, result, &e); + t = clock() - t; + printResult(result, e); + printf("Waktu Eksekusi: %f ms \n", ((double)t) / CLOCKS_PER_SEC * 1000); + MPI_Finalize(); +} \ No newline at end of file diff --git a/src/MST_Serial b/src/MST_Serial deleted file mode 100755 index 3927436b13eb5c70e4182cc7a394f42e3bebbc5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12968 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 C=8?w$ diff --git a/src/hello b/src/hello new file mode 100755 index 0000000000000000000000000000000000000000..1de23036653bc3c34fc555ce1c6d1e0e66f45edb GIT binary patch literal 8600 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 JQBkM;zX8%^JNN(q literal 0 HcmV?d00001 -- GitLab