diff --git a/README.md b/README.md index f77e0e810edfc34916acba1e68f804cc665adacd..5195fcaa95ac127d503db0658ec18443aa73f83b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,109 @@ +# OpenMPI +### Penggunaan: +* Download repo +```shell +git clone +``` +* Masuk folder repo +```shell +cd openmpi/src +``` +* Compile +```shell +make +``` +* Run +```shell +./runparalel100; +./runparalel500; +./runparalel1000; +./runparalel3000; +``` + +## Analisis +1. Analisis solusi. Apakah terdapat solusi lain yang lebih baik? + + Melihat implementasi algoritma Dijkstra, untuk melakukan paralelisasi di dalam tubuh algoritma Dijkstra relatif lebih sulit. Hal ini dikarenakan terdapat dependensi pada pemrosesan simpul sebelumnya. + + Kami memutuskan untuk paralelisasi perhitungan tiap simpul asal sebagai satu entitas. Kedua simpul asal tidak saling membutuhkan, hanya bergantung pada 1 matriks, yaitu matriks bobot sisi / antar simpul. + + Walaupun begitu, terdapat beberapa **drawback** pada pemilihan paralelisasi ini. Salah satunya tidak adanya **shared memory**, menyebabkan setiap proses harus menyediakan matriks adjacency sendiri. Selain itu, terdapat kemungkinan terjadinya race condition ketika hendak update matriks pada RANK 0, update matriks jarak terdekat antar simpul + + Solusi lebih baik yang dapat kami pikirkan adalah menggunakan broadcast daripada menggunakan send dan recv karena secara bawaan bcast lebih optimized untuk pengiriman data secara paralel ke banyak thread + + Solusi lain adalah dengan menginisialisasi matriks dalam satu proses root yang kemudian dibagikan ke proses lain, hal ini belum begitu kami eksplor, implementasi dari kami adalah inisialisasi matriks di seluruh proses + +2. Jumlah **thread** yang digunakan + + Kami menggunakan 6 thread (Maksimal) untuk seluruh kasus, hal ini karena dalam pembagian load untuk seluruh proses sudah merata sehingga scaling load akan berjalan sesuai jumlah proses yang dialokasikan. + + +3. Pengukuran kinerja untuk setiap kasus uji + + Dalam seluruh kasus Uji dapat dilihat di gambar dibawah bahwa rata - ratanya adalah: + 100 Node: + * Paralel: 532000.231 microsecond + * Serial : 11232.002 microsecond + 500 Node: + * Paralel: 9413021.300 microsecond + * Serial : 1203030.114 microsecond + 1000 Node: + * Paralel: 79231449.799 microsecond + * Serial : 17321333.442 microsecond + 3000 Node: + * Paralel: 93222113.004 microsecond + * Serial : 152000321.221 microsecond + + +4. Analisis perbandingan kinerja **serial** dan **paralel** + + Dapat dilihat bahwa untuk uji load 100 hingga 1000 node, dijsktra serial unggul dengan margin yang cukup tinggi, namun margin ini lama terlihat mengecil secara eksponensial, + dengan waktu komputasi serial : + 53x lebih cepat pada 100 node + 8.5x lebih cepat pada 500 node + 6x lebih cepat pada 1000 node, dan + 2x lebih lambat pada 3000 node + Pada uji load terakhir dapat dilihat justru paralel menjadi lebih cepat dari serial hal ini karena efek percepatan waktu komputasi dari persebaran load yang merata mulai melampaui waktu overhead yang terjadi saat alokasi thread + terlihat bahwa kecepatan program serial bertambah secara eksponen terhadap jumlah node + namun kecepatan program paralel justru bertambah secara logaritmik yang berarti pertambahan node akan berpengaruh semakin kecil secara persentase pada waktu komputasi, semakin besar jumlah nodenya + + + +### Pembagian Tugas: +#### Arvin +* Mengerjakan Struktur Data matriks **adjacency** +* Mengerjakan Adaptasi program **Dijsktra** seri dengan struktur data +* Mengerjakan Program parallel dasar (setting up, pembagian job pada masing-masing process) +* **Debug** + +#### Mahen +* Mengerjakan Setting up repo +* Mengerjakan Fungsi Randomizer +* Mengerjakan Lanjutan dan implementasi program parallel +* Mengerjakan Makefile & bashfile +* **Debug** + + +### Komparasi serial dan paralel 100 node +* + + +### Komparasi serial dan paralel 500 node +* + + +### Komparasi serial dan paralel 1000 node +* + + +### Dikarenakan VM yang tidak memiliki space yang cukup dibuktikan dengan gambar dibawah ini, kami menggunakan mesin lokal +* + + +### Komparasi serial dan paralel 3000 node +* + + # Announcement Beberapa file yang harus ada dalam repositori tersebut diantaranya: