diff --git a/README.md b/README.md index c446aa9d2054def146d382b244c49e516ea683e3..627cad8b72cde6ae591182b5cae317983eb9b4d1 100644 --- a/README.md +++ b/README.md @@ -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.