From 87176fa90a31da9d2f523e52ed497c3b73e567fd Mon Sep 17 00:00:00 2001 From: Juniardi Akbar <13517075@std.stei.itb.ac.id> Date: Tue, 3 Mar 2020 21:47:41 +0700 Subject: [PATCH] Update README.md --- README.md | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 243 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f77e0e8..58c1895 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,244 @@ -# Announcement - -Beberapa file yang harus ada dalam repositori tersebut diantaranya: -* Direktori src yang berisi source code yang anda buat. -* File output yang berisi hasil uji dijkstra algorithm pada data uji. -* Makefile. Buatlah sehingga kompilasi program dapat dilakukan hanya dengan pemanggilan command ’make’ saja. -* File README.md yang berisi: - * Petunjuk penggunaan program. - * Pembagian tugas. Sampaikan dalam list pengerjaan untuk setiap mahasiswa. Sebagai contoh: XXXX mengerjakan fungsi YYYY, ZZZZ, dan YYZZ. - * Laporan pengerjaan, dengan struktur laporan sesuai dengan deskripsi pada bagian sebelumnya. +# Dijkstra Parallel + +## Cara penggunaan +1. Masuk ke folder src +2. Jalankan perintah make pada direktori src yang akan menghasilkan executable di folder bin +3. Program kemudian akan menghasilkan keluaran waktu yang dibutuhkan untuk menjalankan algoritma dalam detik. Harap bersabar. +4. Hasil output ada di folder out/, dan dibedakan antara hasil parallel dengan sekuensial + +## Deskripsi Solusi Paralel +Terdapat dua cara mengubah Algoritma Dijkstra sekuensial menjadi algortima Dijkstra parallel : + +1. Melakukan paralelisasi dengan membagi simpul-simpul ke beberapa proses, dan tiap proses menjalankan algoritma terhadap simpul-simpulnya +2. Melakukan paralelisasi dengan membagi simpul-simpul pada Algortima Dijkstra dari sebuah simpul sumber ke beberapa proses, dan melakukan pengubahan nilai jarak minimum global dari minimum jarak minimum lokal. + +Kami berpendapat bahwa cara (2) merupakan cara yang lebih mampu menampilkan perubahan algoritma sekuensial menjadi parallel. +Algoritma Dijkstra parallel adalah sebagai berikut : +1. Membagi simpul-simpul V ke dalam proses-proses V, sehingga setiap proses memproses V/P simpul. +2. Setiap proses kemudian mencari lokal minimum +3. Prosedur Allreduce dipanggil , kemudian prosedur mengganti global minimum +4. Tiap proses kemudian mengganti nilai jarak simpul-simpulnya berdasarkan informasi global minimum baru. +Proses dilakukan sehingga seluruh simpul sudah dikunjungi. Matriks jarak sudah berisi informasi jarak terpendek dari suatu simpul ke simpul lainnya. + + +## Analisis Solusi +Solusi akan memiliki kompleksitas O(V^2/P + Vlog(P)), dengan V adalah kompleksitas ruang graf dan P adalah jumlah proses/threads. +Untuk mengunjungi tiap simpul, dibutuhkan waktu O(V), dan pada tiap kunjungan dibutuhkan waktu O(V) (untuk update) + O(log(P)) (untuk menentukan minimum global). +Secara teoretis, nilai P optimal pada P = V/log(e) , namun nilai ini dirasa aneh karena P > V. + +### Jumlah Thread +Kami mengadakan pengujian di dua buah sistem komputer, yakni : +1. Komputer lokal, dengan CPU Intel Quad-core +2. Komputer server sebanyak 5 buah. + +Oleh karena itu, kami mengambil jumlah thread sebanyak 2,4 dan 5. Berdasarkan Amdahl's law, terdapat batas maksimum efisiensi, dan kami menghindari penggunaan thread yang terlalu banyak sehingga menyebabkan overhead berlebih dalam thread synchronization dan context switching. + + +## Perbandingan Kinerja +Berikut adalah perbandingan kinerja parallel dengan sekuensial pada komputer lokal. + +<table> + <thead> + <tr> + <th>N-nodes</th> + <th>Serial</th> + <th>Parallel, P=2 (ms) </th> + <th>Parallel, P=4 (ms) </th> + <th>Parallel, P=5 (ms) </th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan=3>100</td> + <td>47.309</td> + <td>43.307</td> + <td>86.499</td> + <td>395.766</td> + </tr> + <tr> + <td>31.567</td> + <td>30.946</td> + <td>57.147</td> + <td>383.49</td> + </tr> + <tr> + <td>32.326</td> + <td>31.270</td> + <td>63.854</td> + <td>384.571</td> + </tr> + <tr> + <td rowspan=3>500</td> + <td>1408.569</td> + <td>923.586</td> + <td>1208.453</td> + <td>7606.861</td> + </tr> + <tr> + <td>1350.843</td> + <td>1032.324</td> + <td>1186.994</td> + <td>7518.716</td> + </tr> + <tr> + <td>1378.718</td> + <td>931.518</td> + <td>1276.992</td> + <td>7606.861</td> + </tr> + <tr> + <td rowspan=3>1000</td> + <td>11662.515</td> + <td>6893.559</td> + <td>8765.861</td> + <td>33437.691</td> + </tr> + <tr> + <td>14608.605</td> + <td>6866.290</td> + <td>8959.736</td> + <td>35122.012</td> + </tr> + <tr> + <td>11705.083</td> + <td>6314.995</td> + <td>8925.853</td> + <td>35882.580</td> + </tr> + <tr> + <td rowspan=3>3000</td> + <td>308214.490</td> + <td>87713.400</td> + <td>78582.652</td> + <td>344314.804</td> + </tr> + <tr> + <td>311432.521</td> + <td>87383.466</td> + <td>87188.438</td> + <td>347234.974</td> + </tr> + <tr> + <td>309983.532</td> + <td>85272.113</td> + <td>92601.908</td> + <td>349824.743</td> + </tr> + </tbody> +</table> + +Berikut diberikan tabel hasil percobaan di komputer server. Sayangnya komputer server bekerja sangat lambat ketika dicoba, sehingga hanya beberapa point data yang dapat diambil. + +<table> + <thead> + <tr> + <th>N-nodes</th> + <th>Serial</th> + <th>Parallel, P=2 (ms) </th> + <th>Parallel, P=4 (ms) </th> + <th>Parallel, P=5 (ms) </th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan=3>100</td> + <td>12.345</td> + <td>22.942</td> + <td>227.098</td> + <td>270.841</td> + </tr> + <tr> + <td>12.112</td> + <td>20.902</td> + <td>262.319</td> + <td>279.531</td> + </tr> + <tr> + <td>11.675</td> + <td>20.043</td> + <td>258.911</td> + <td>252.268</td> + </tr> + <tr> + <td rowspan=3>500</td> + <td>1349.300</td> + <td>782.624</td> + <td>6826.791</td> + <td>7056.164</td> + </tr> + <tr> + <td>1318.866</td> + <td>806.957</td> + <td>6713.547</td> + <td>7250.220</td> + </tr> + <tr> + <td>1341.243</td> + <td>770.054</td> + <td>6870.200</td> + <td>7287.790</td> + </tr> + <tr> + <td rowspan=3>1000</td> + <td>10898.800</td> + <td>4336.605</td> + <td>28275.934</td> + <td>30105.151</td> + </tr> + <tr> + <td>10842.197</td> + <td>4426.636</td> + <td>28622.676</td> + <td>29914.231</td> + </tr> + <tr> + <td>10958.058</td> + <td>4327.368</td> + <td>28412.916</td> + <td>29516.053</td> + </tr> + <tr> + <td rowspan=3>3000</td> + <td>296934.291</td> + <td>89174.651</td> + <td>314459.550</td> + <td>469177.794</td> + </tr> + <tr> + <td>297367.153</td> + <td>89543.502</td> + <td>317896.231</td> + <td>384064.668</td> + </tr> + <tr> + <td>300659.377</td> + <td>89376.745</td> + <td>318422.519</td> + <td>379724.221</td> + </tr> + </tbody> +</table> + + + +### Analisis + + +## Pembagian Tugas +Juniardi Akbar (13517075) : +1. Algoritma Dijkstra Sekuensial +2. Benchmarking +3. Laporan + +Nur Alam Hasabie (13517096) : +1. Algoritma Dijkstra Parallel +2. Membuat makefile +3. Laporan +4. Timer + + + +## Referensi +[1] Pore, A. D. I. T. Y. A. (2014). Parallel implementation of Dijkstra’s algorithm using MPI library on a cluster. +[2] Ye, Zilong. "An Implementation of Parallelizing Dijkstra’s Algorithm." -- GitLab