1. Deskripsi solusi paralel. Berikan ilustrasi jika perlu.
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.
Karena dalam OpenMP terdapat shared memory, matriks solusi kami jadikan variable share sehingga setiap ada djikstra yang sudah selesai melakukan perhitungan jarak, langsung dilakukan update terhadap matriks solusi
2. 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
Kami tidak mendapatkan ilham mengenai solusi yang lebih baik, selain dengan refaktor program dan melakukan optimasi pada algoritma yang mungkin terlewati oleh kami
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
3. 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.
Kami menggunakan 6 thread (Maksimal) untuk seluruh kasus,
Setelah mengerjakan tugas ini kami baru menyadari bahwa sebaiknya digunakan 2 thread, kenapa? karena mesin yang digunakan hanya 1, OpenMP tidak menjalankan distributed system sehingga jumlah maksimal corenya adalah 2.