Skip to content
Snippets Groups Projects
Commit df7df7e4 authored by Johanes Boas Badia's avatar Johanes Boas Badia
Browse files

Update README.md

parent 5db54baa
Branches master
No related merge requests found
......@@ -14,44 +14,53 @@ Paralel : ```make```
## Pembagian Tugas
Johanes Boas Badia - 13517009 - Fungsi matrixToArray, generateRandomArray, printMatrix, printArrayTerminal, doAllDijkstra, main
Timothy - 13517087 - Fungsi matrixToArray, generateRandomArray, printMatrix, printArrayTerminal, doAllDijkstra, main
- Johanes Boas Badia - 13517009 - Fungsi matrixToArray, generateRandomArray, printMatrix, printArrayTerminal, doAllDijkstra, main
- Timothy - 13517087 - Fungsi matrixToArray, generateRandomArray, printMatrix, printArrayTerminal, doAllDijkstra, main
## Laporan Pengerjaan
1. Deskripsi solusi paralel
Kami mengimplementasikan fungsi djikstra yang dapat mengeluarkan array yang berisi jarak terdekat
sebuah node tertentu berdasarkan parameter yang diberikan ke seluruh node lain. Penyelesaian secara
paralel dilakukan dengan membagi perhitungan djikstra tersebut ke seluruh host yang tersedia. Host
Root akan membagi pekerjaan sebesar jumlah node / jumlah host. Setelah perhitungan selesai dilakukan,
seluruh host akan mengembalikan hasil perhitungan dalam bentuk array melalui pemanggilan fungsi MPI_Gather.
Kami mengimplementasi fungsi doAllDijkstra yang akan melakukan algoritma Dijkstra untuk semua node.
Kami menggunakan *block size* berukuran 256 dan jumlah block sebesar (N + *block size* - 1) / *block size*
dengan N adalah jumlah node. Pertama, akan dilakukan cudaMallocManaged untuk
melakukan alokasi matrix random berisi jarak antar semua node dan matrix hasil.
Kemudian, akan dilakukan iterasi untuk semua node dan dilakukan dijkstra. Iterasi akan dilakukan
dengan cara
```cpp
int index = blockIdx.x * blockDim.x + threadIdx.x;
int stride = blockDim.x * gridDim.x;
for(int i= index; i < num_of_node; i += stride){
...
}
```
iterasi akan dimulai dari ```blockIdx.x * blockDim.x + threadIdx.x``` yang akan mencari thread
dan akan loncat sebanyak ```blockDim.x * gridDim.x```
2. Analisis Solusi
Solusi yang kami berikan pada permasalahan kali ini belum merupakan solusi paling optimal yang dapat dibuat.
Salah satu cara untuk meningkatkan efisiensi pengerjaan adalah dengan membagi perhitungan sebuah host ke
beberapa thread terpisah agar perhitungan dapat diselesaikan dengan lebih cepat. Selain itu, kekurangan solusi
yang kami tawarkan adalah jika terdapat sisa pembagian pekerjaan, sisa pekerjaan tersebut akan dikerjakan
sepenuhnya oleh host root. Hal ini menyebabkan pembagian pekerjaan menjadi tidak merata.
Program yang kami buat hanya memanfaatkan satu thread untuk perhitungan dijkstra. Jadi, salah satu cara untuk meningkatkan efisiensi pengerjaan
adalah dengan menjalankan dijkstra secara paralel.
3. Jumlah Thread yang digunakan
Pada pengerjaan kali ini, jumlah thread yang digunakan adalah satu thread untuk setiap node host. Alasan pemilihan
jumlah ini adalah untuk mempermudah implementasi pengerjaan program.
Pada pengerjaan kali ini, jumlah thread yang digunakan adalah satu thread untuk setiap perhitungan djikstra,
dan 256 saat menjalanakan perhitungan dijkstra tersebut secara bersamaan. Alasan pemilihan jumlah ini adalah
untuk mempermudah implementasi pengerjaan program.
4. Pengukuran Kinerja
Dibawah ini adalah hasil kinerja algoritma dijkstra yang dijalankan secara serial.
100 : 12673 microsecond
500 : 981101 microsecond
1000 : 7861553 microsecond
3000 : 227481644 microsecond
| Jumlah Node | Percobaan 1 Paralel | Percobaan 2 Paralel| Percobaan 3 Paralel | Percobaan 1 Serial | Percobaan 2 Serial | Percobaan 3 Serial | Rata-rata Paralel | Rata-rata Serial
| ------------- |---------------------| -------------------| ------------------- | ------- | ------- | ------- | ------- | ------- |
| 100 | 14863 | 14899 | 14909 | 20851 | 20638 | 21055 | **14890** | **20848** |
| 500 | 283993 | 284949 | 284925 | 1590441 | 1571528 | 1584701 | **284622** | **1582223** |
| 1000 | 1279174 | 1274443 | 1282717 | 11974309 | 11863723 | 11915837 | **1278778** | **11917956** |
| 3000 | 32905851 | 32905054 | 32904597 | 338928424 | 345815987 | 345139185 | **32905167** | **343.294.532** |
5. Perbandingan Kinerja
Secara teori, kinerja pengerjaan algoritma dijkstra dengan paralel akan lebih cepat jika dibandingkan
dengan serial. Hal ini disebabkan oleh perhitungan dijkstra paralel dari titik sumber tertentu tidak perlu menunggu hasil
perhitungan titik sumber sebelumnya.
Dapat dilihat dari hasil, pengerjaan algoritma yang sama namun dilakukan secara paralel lebih cepat dibandingkan yang dilakukan secara
serial. Hal ini terjadi karena percobaan secara paralel menjalankan banyak node di suatu saat yang sama, namun percobaan secara serial
hanya melakukan perhitungan dijkstra satu node dalam satu iterasi.
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment