GitLab now enforces expiry dates on tokens that originally had no set expiration date. Those tokens were given an expiration date of one year later. Please review your personal access tokens, project access tokens, and group access tokens to ensure you are aware of upcoming expirations. Administrators of GitLab can find more information on how to identify and mitigate interruption in our documentation.
- Program akan otomatis terkompilasi dan akan langsung dijalankan
- Untuk mengubah jumlah prosesor dapat dilakukan dengan mengedit file makefile, dan untuk mengubah ukuran matriks dapat dilakukan dengan mengedit variabel V pada file dijkstramp.c
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.
## Pembagian Tugas
### Irfan Haris Widyadhana 13517041
- Fungsi Dijkstra
- Fungsi Generate Matrix
- Fungsi Paralel OpenMP
### Marsa Thoriq Ahmada 13517071
- Fungsi Generate Matrix
- Fungsi Output File Matrix
- Fungsi Paralel OpenMP
## Laporan Pengerjaan
#### Deskripsi solusi paralel.
Program algoritma dijkstra dengan paralelisasi openmp yang berbasis shared memory multiprocessing, menghasilkan keluaran berupa jarak terdekat dari setiap titik ke seluruh titik yang ada pada graf. Program dijalankan dengan melakukan iterasi terhadap algoritma dijkstra dengan titik origin/mulai yang berbeda, program akan melakukan paralelisasi dengan membagi semua titik yang ada pada graf yang akan menjadi titik origin/mulai dibagi secara seimbang ke thread yang telah disediakan, pembagian resource ke setiap thread dilakukan olen openmp api, selanjutnya tiap thread akan menjalankan algoritma dijkstra dengan titik origin yang telah diassign ke thread tersebut, kemudian hasil dari algoritma dijkstra akan langsung di write ke file output oleh setiap thread dimana proses ini merupakan proses yang critical sehingga saat proses write berlangsung ke output file proses lain tidak bisa melakukan write hingga proses yang pertama selesai.
#### Analisis solusi yang anda berikan. Apakah mungkin terdapat solusi yang memberikan kinerja lebih baik?
Program dijkstra ini dapat dioptimalkan agar bisa berjalan lebih cepat lagi dengan cara melakukan paralelisasi di dalam algoritma dijkstra nya, tetapi cara ini sulit dilakukan dengan openmp api karena untuk menerapkan algoritma yang ini diperlukan memory lebih besar dikarenakan perlu menyimpan data yang lebih banyak untuk saling berkoordinasi
#### Jumlah thread yang digunakan. Kenapa anda memilih angka tersebut?
Thread yang digunakan sebanyak 5 buah thread, Karena jika menggunakan thread lebih banyak akan tidak jauh berbeda dan akan memakan resource yang lebih banyak sehingga menghambat mahasiswa lain yang sedang menjalankan server. Selain itu jika menggunakan thread yang lebih banyak juga akan membutuhkan koordinasi antar thread yang banyak sehingga akan lebih lambat.
#### Pengukuran kinerja untuk tiap kasus uji (jumlah N pada graf) dibandingkan dengan dijkstra algorithm serial.
#### 100 Vertex
##### Paralel

##### Serial

#### 500 Vertex
##### Paralel

##### Serial

#### 1000 Vertex
##### Paralel

##### Serial

#### 3000 Vertex
##### Paralel

##### Serial

#### Analisis perbandingan kinerja serial dan paralel. Analisis yang diharapkan adalah analisis yang minimal dapat menjelaskan setiap hasil pengukuran kinerja sebelumnya.
Program dijkstra menggunakan openmp api dijalankan secara serial sedikit lebih cepat daripada jika dijalankan dengan menggunakan paralel, hal ini disebabkan karena jika menggunakan paralelisasi maka setiap thread perlu bergantian melakukan bagian proses yang critical karena jika satu thread mengakses bagian yang critical maka thread yang lain akan terjadi blocking.