diff --git a/Makefile b/Makefile index 2206f238353d70589c8d1b785a396737acfd6d1b..e235af32cbd742719d970c6786412c06efc915fe 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ compile: - nvcc djikstra_cuda.cu -o djikstra_cuda + nvcc src/djikstra_cuda.cu -o src/djikstra_cuda run: - ./djikstra_cuda ${n} + ./src/djikstra_cuda ${n} diff --git a/README.md b/README.md index adb1a913a7f817d5912edd3dd494274b6daf68a9..b10de173fa333327e2523091ed5dc83d3117ddee 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,32 @@ -# Petunjuk Penggunaan Program +# Tugas Besar IF3230-CUDA-2020 + +## Petunjuk Penggunaan Program 1. ```make compile``` untuk melakukan kompilasi 1. ```make run n={jumlah_node}``` untuk menjalankan program -# Pembagian Tugas +## Pembagian Tugas * 13517089 mengerjakan fungsi dijkstra CUDA, Laporan, Testing, Debugging * 13517032 mengerjakan fungsi dijkstra CUDA, Testing, Laporan, Debugging -# Analisis +## Analisis -## Deskripsi Solusi Paralel +### Deskripsi Solusi Paralel Solusi paralel yang kami gunakan adalah dengan membagi pengerjaan dijkstra dilakukan oleh beberapa thread, dengan setiap thread mengerjakan satu node. Dalam proses berjalannya program, setiap thread memiliki memori sendiri, dan tidak terhubung dengan thread lainnya. -## Analisis Solusi - - - -## Jumlah Thread +### Analisis Solusi +Solusi yang kami tawarkan dengan memaksimalkan jumlah total thread, sehingga setiap node dapat dikerjakan oleh satu thread sudah tergolong efektif, Dengan solusi ini kita dapat memaksimalkan kinerja GPU seefisien mungkin, dengan menghidupkan banyak thread secara bersamaan. Pengembangan yang mungkin dapat dilakukan untuk membuat solusi kami lebih baik adalah mengatur pembagian tugas setiap thread yang masih dilakukan didalam main program dapat dipindahkan ke dalam thread, sehingga thread dapat langsung dihidupkan tanpa harus menunggu main program memberi instruksi untuk mengerjakan node tertentu. +### Jumlah Thread +jumlah thread dalam satu blok yang digunakan adalah sebanyak 256. Jumlah blok yang digunakan, kita menggunakan rumus jumlah_blok = (n + jumlah_thread - 1) / jumlah_thread. Kelompok kami menggunakan jumlah blok yang dinamis, karena semakin banyak n dari sebuah graf, maka akan semakin banyak pula total thread yang digunakan untuk mencari jarak terpendek, sehingga setiap node dapat dikerjakan oleh thread masing - masing. Dengan adanya total thread yang dinamis, dapat dilihat bahwa hasil waktu paralel dari pencarian djikstra untuk setiap n relatif sama. -## Hasil Pengujian +### Hasil Pengujian -### Serial +#### Serial | **Jumlah Node** | **Percobaan 1 (μs)** | **Percobaan 2 (μs)** | **Percobaan 3 (μs)** | **Rata-Rata (μs)** | |:-------------:|:-----------:|:-------------:|:-------------:|:-------------:| @@ -35,7 +36,7 @@ Solusi paralel yang kami gunakan adalah dengan membagi pengerjaan dijkstra dilak | 3000 | 135.388.760 | 132.192.663 | 134.560.810 | 134.047.411‬ | -### Paralel +#### Paralel | **Jumlah Node** | **Percobaan 1 (μs)** | **Percobaan 2 (μs)** | **Percobaan 3 (μs)** | **Rata-Rata (μs)** | |:-------------:|:-----------:|:-------------:|:-------------:|:-------------:| @@ -44,6 +45,6 @@ Solusi paralel yang kami gunakan adalah dengan membagi pengerjaan dijkstra dilak | 1000 | 243 | 241 | 237 | 240,3 | | 3000 | 254 | 245 | 236 | 245| -## Analisis Perbandingan Kinerja Serial dan Paralel +### Analisis Perbandingan Kinerja Serial dan Paralel Dari hasil percobaan yang telah kami lakukan, dapat dilihat bahwa proses djikstra yang dilakukan secara paralel jauh lebih cepat dibandingkan proses djikstra yang dilakukan secara serial. Hal ini dikarenakan djikstra secara paralel berjalan pada GPU yang pengerjaannya dipecah per node. Selain itu, GPU yang digunakan memiliki spesifikasi yang gahar, sehingga performa yang dihasilkan sangat memuaskan. diff --git a/djikstra_cuda.cu b/src/djikstra_cuda.cu similarity index 100% rename from djikstra_cuda.cu rename to src/djikstra_cuda.cu diff --git a/djikstra_serial.c b/src/djikstra_serial.c similarity index 100% rename from djikstra_serial.c rename to src/djikstra_serial.c