diff --git a/README.md b/README.md index f77e0e810edfc34916acba1e68f804cc665adacd..c5026ad3db14204dc8f2bb5eecb9fa724433a1ac 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,98 @@ Beberapa file yang harus ada dalam repositori tersebut diantaranya: * 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. + +# PRAKTIKUM II IF3230 SISTEM PARALEL TERDISTRIBUSI +# OpenMP - Dijkstra Algorithm + +## <u>Cara Menjalankan Program</u> + +Requirement: <br> +* Folder src sudah berada di VM instance +* File serial.c, paralel.c berada dalam folder src +* File makefile ada di luar folder src + +Sequential Dijkstra: +* <b>make</b> compile <br> +* <b>make</b> runs NODE=[Insert Many Node] + +Paralel Dijkstra: +* <b>make</b> compile +* <b>make</b> share +* <b>make</b> runp NP=[Insert Many Processor] NODE=[Insert Many Node] + +## <u>Pembagian Tugas</u> +| NIM | Nama | Pembagian Tugas | +|-----|------|-----------------| +|13517050 | Christopher Billy Setiawan | Paralelisasi, Makefile, Laporan| +|13517131 | Jan Meyer Saragih | Paralelisasi, | + +## <u>Deskripsi Solusi</u> +Solusi paralel yang dikerjakan adalah dengan membagi tugas algoritma Djikstra. Jadi processor menerima sejumlah node yang harus diberikan hasil dari algoritma dijkstra-nya. Hasilnya diberikan kepada node root yang nanti akan mengumpulkan semua hasilnya dan dituliskan ke dalam file. +Jadi paralelisasi yang dilakukan adalah paralelisasi data (*data parallelism*). Alasannya adalah data dibagi-bagi kepada processor-processor yang ada untuk diproses sebelum dikumpulkan kembali di node master untuk dituliskan ke file. +File yang dihasilkan ada 2 buah: +- *graph.txt* yang merupakan file yang berisi graph yang di-*generate* +- *result.txt* yang merupakan hasil algoritma Dijkstra. + +Solusi dilakukan pertama kali dengan meng-*generate* graph pada setiap processor. Graph yang dihasilkan pada tiap processor pasti sama dikarenakan seed untuk srand yang sama. +Jadi, setelah semua graph selesai di-*generate*, maka perhitungan waktu dimulai. Waktu hanya dihitung dari node ke-0. +Pembagian tugas setiap node adalah sebagai berikut: +- Node 0 (*root*) berfungsi sebagai node yang menerima semua hasil perhitungan Dijkstra dari node lain +- Node lain berfungsi untuk menjalankan algoritma Dijkstra, lalu mengirimkan hasilnya di node root. +Jadi terdapat (n - 1) node yang mengerjakan algoritma Dijkstra disebabkan karena node *root* hanya menerima hasil eksekusi Dijkstra. Setelah semua hasil dari Dijkstra diterima oleh node *root*, maka hasilnya akan dituliskan pada file *result.txt*. + +Terdapat pengecualian, yaitu saat jumlah node hanya 1. Di saat seperti itu, maka cara solusi yang digunakan adalah dengan menggunakan Dijkstra serial. + +## <u>Analisis Solusi</u> +Kelebihan dari solusi ini adalah: +- Dipastikannya ada node yang menerima hasil MPI_Send. Dengan demikian, setiap hasil MPI_Send yang diberikan oleh node selain *root* pasti ditangani oleh node *root*. +- Lebih cepat setup karena graph sudah diinstansiasi terlebih dahulu dan tidak menggunakan malloc untuk graph awal dan graph solusi. +- Dari segi proses, lebih hemat pada sisi memori karena melakukan malloc dan free. + +Kelemahan dari solusi ini adalah: +- Utilisasi processor yang tidak maksimal. +- Boros memori saat setup (graph yang digunakan pasti berukuran 3000 x 3000 karena sudah diset dari awal), tidak menggunakan malloc dan free. +- Tidak terlalu cepat dalam prosesnya karena malloc digunakan pada passing parameter di MPI_Send dan MPI_Receive. +- Graph dibuat oleh semua processor (tidak menggunakan MPI_Broadcast untuk graph). + +Terdapat beberapa perbaikan yang dapat dilakukan, yaitu: +- Melakukan inisiasi graph di node master dan melakukan broadcast untuk diterima di node lain. +- Menggunakan malloc (jika ingin keseluruhan setup dan proses hemat memori) atau menggunakan array untuk passing parameter MPI_Send (jika ingin kecepatan setup dan proses cepat) +- Melakukan paralelisasi task di Dijkstra. Paralelisasi ini sebenarnya lebih baik namun tidak terlalu berefek. Hal ini disebabkan jumlah processor yang memproses Dijkstra tidak sebanyak jumlah value yang sedang dihitung. + +## <u>Jumlah thread yang digunakan</u> +Setelah pengujian yang dilakukan berulang-ulang, kami memutuskan untuk menggunakan 6 thread pada tugas ini. karena dapat dilihat dari hasil pengujian yang dilakukan, waktu terefisien dapat terlihat di pengujian paralel dengan 6 thread. Kenapa angka 6? karena tugas ini hanya memungkinkan untuk memecah task menjadi 6 proses karena hanya tersedia 6 VM instance. +### <b>Pengukuran Kinerja</b> +|Jenis Pemrosesan|Thread|Jumlah titik|Percobaan 1 (microsec)|Percobaan 2 (microsec)|Percobaan 3 (microsec)|Rata-Rata (microsec)| +|----------------|------|------------|----------------------|----------------------|----------------------|--------------------| +|SERIAL|1|100||||| +||1|500||||| +||1|1000||||| +||1|3000||||| +|PARALEL|2|100||||| +||2|500||||| +||2|1000||||| +||3|100||||| +||3|500||||| +||3|1000||||| +||4|100||||| +||4|500||||| +||4|1000||||| +||5|100||||| +||5|500||||| +||5|1000||||| +||6|100||||| +||6|500||||| +||6|1000||||| +||6|3000||||| + +## Analisis Perbandingan Kinerja Serial dan Paralel +Kami tidak melakukan pengukuran paralel dengan processor berjumlah 2, 3, 4, dan 5 untuk jumlah node = 3000 dikarenakan node 6 sudah ditentukan sebagai node terbaik. +Dari hasil yang diberikan, maka disimpulkan sebagai berikut: +- Serial masih menang melawan paralel dengan jumlah processor sedikit namun kalah melawan paralel dengan processor yang lebih banyak. +- Semakin banyak jumlah value (node) yang diproses, proses paralel semakin baik dibandingkan dengan proses serial. + +Penjelasan dari kedua kesimpulan di atas adalah sebagai berikut: +Solusi serial masih lebih baik melawan solusi paralel yang memiliki jumlah processor sedikit karena solusi serial tidak memiliki overhead berisi waktu yang dibutuhkan untuk berkomunikasi antar processor. Sementara solusi paralel membutuhkan waktu untuk komunikasi antar processor. Overhead tersebut yang membuat solusi paralel lebih buruk. +Semakin banyak jumlah node yang diproses, maka solusi paralel akan semakin baik dibandingkan dengan solusi serial. Hal ini disebabkan karena pembagian tugas akan semakin efektif bersamaan dengan bertambahnya ukuran task yang diberikan atau bertambahnya jumlah task yang diberikan (penambahan node menambahkan jumlah task dan ukuran task (jumlah node yang terhubung dari node yang dimasukkan ke dijkstra) di saat yang bersamaan). \ No newline at end of file