From 884cfd27f96814060ae3ac0957ea179f6faddb46 Mon Sep 17 00:00:00 2001
From: 13518104 Kevin Austin Stefano <13518104@std.stei.itb.ac.id>
Date: Sat, 6 Mar 2021 19:33:09 +0700
Subject: [PATCH] update readme

---
 README.md | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/README.md b/README.md
index 0c7d99d..fe90209 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,27 @@ Minimum Spanning Tree merupakan suatu tree yang memiliki bobot minimum yang meng
 
 Untuk meningkatkan eksekusi pembangunan tree, maka kami memanfaatkan OpenMP dan OpenMPI sebagai library pemrograman paralel untuk kasus dengan jumlah node > 1000.
 
+## Logika Cara Paralel
+<h4>OpenMP</h4>
+OpenMP adalah standar yang kita digunakan untuk melakukan pemrograman paralel multithreading pada arsitektur shared memory. Termasuk pada compiler GCC, sehingga tidak perlu instalasi tambahan. Kompilasi program menggunakan gcc -fopenmp dan menggunakan library "omp.h".
+<br><br>
+Langkah yang dilakukan adalah dengan menggunakan #pragma omp parallel for untuk melakukan paralel pada instruksi for. Hal ini kami lakukan saat membentuk V subset inisialisasi dengan wight 0 dan parent adalah i. Selain itu kami juga melakukan omp parallel for untuk penghitungan minimum cost dari tree yang dibangun. Kami juga menggunakan #pragma omp critical untuk bagian yang tidak bisa dilakukan bersamaan saat proses paralel.
+<br><br>
+Selain itu kami juga menggunakan #pragma omp task untuk melakukan paralelisasi terhadap 2 buah instruksi rekursif saat melakukan quick sort yang dibungkus dengan #pragma omp single dan dibungkus dengan #pragma omp parallel
+<br><br>
+Kami juga memberikan alternatif memparalelkan bubble sort (ada di program namun tidak digunakan) dengan menggunakan #pragma omp parallel for dan mencegah critical section dengan #pragma omp critical. Namun karena hasil eksekusi lebih cepat menggunakan quick sort yang telah diparalelkan, maka kita tidak menggunakan bubble sort.
+
+<br><br>
+<h4>OpenMPI</h4>
+Algoritma MST yang digunakan adalah Algoritma Kruskall, dimana dalam proses pembuatannya perlu dilakukan pengurutan edge-edge terlebih dahulu dari yang terkecil hingga yang terbesar. Kemudian edge-edge yang akan dipilih dimulai dari edge terkecil dan dijamin tidak menyebabkan adanya loop dalam tree tersebut. OpenMPI sendiri merupakan teknik paralelisasi dengan memanfaatkan distributed memory dimana proses besar dipecah menjadi proses kecil-kecil yang akan dieksekusi di setiap memory. MPI sendiri berarti message passing interface yang akan mengirimkan message dari memory kecil ke memory utama yang akan menggabungkan kumpulan proses kecil itu sendiri.
+<br><br>
+Dalam algoritma MST, ide paralelisasi kami terapkan pada pengurutan edge, dimana cukup memegang kunci di dalam algoritma MST ini sendiri. Algoritma pengurutan yang digunakan adalah Quick Sort. Ide paralelisasi Quick Sort secara umum adalah sebagai berikut.
+1. Lakukan partisi suatu array of edges pada pivot tertentu sehingga terbentuk kumpulan nilai yang lebih kecil dan lebih besar dari pivot
+2. Subarray dengan ukuran lebih besar akan direkursifkan kembali, sedangkan subarray yang lebih kecil akan diberikan kepada proses lain.
+3. Diterapkan mekanisme untuk Send and Receive dimana proses lain akan menerima subarray dari proses sourcenya dan mengembalikan subarray terurut kepada proses sourcenya ini sendiri.
+4. Semua subarray yang sudah terurut akan dikembalikan ke source process terus menerus sampai menuju ke root process.
+<br>
+
 ## How to Run
 Pertama pastikan adnda berada pada bagian home (bukan pada folder src dan folder test) <br><br>
 ```
@@ -14,6 +35,7 @@ gcc -o MST_OpenMP MST_OpenMP.c
 
 ```
 <br>
+
 ```
 
 Cara menjalankan program OpenMP:
-- 
GitLab