Praktikum 03
CUDA - Radix Sort
How To
Run make
then open the executable file by typing ./radix_sort_cuda
Pembagian Tugas
13516067 - Dinda Yora Islami
- Counting Sort
- Radix Sort
- Convert to parallel
- Testing
- Doc and README
13516091 - Yasya Rusyda Aslina
- Counting Sort
- GetMax
- Convert to parallel
- Testing
- Doc and README
Deskripsi Solusi Paralel
CUDA (Compute Unified Device Architecture) merupakan platform parallel computing dan programming model yang dibat oleh NVIDIA dan diimplementasi dari graphics processing units (GPUs) yang diproduksi. Perlu dibuat sebuah solusi radix sort yang menggunakan sistem pengiriman pesan antar proses. Salah satu cara termudahnya adalah
- Data akan dibagi menjadi array-array berdasarkan digitnya
- Hitung nilai count dari setiap data yang akan di sort
- Sort data lokal pada tiap-tiap proses (per digit)
- Gabungkan semua data lokal yang ada dari proses (count_sort)
- Gabungkan nilai count dari tiap proses
- Lakukan sort secara global
- Ulangi langkah 1
Dari langkah-langkah tersebut langkah countsort (penghitungan jumlah digit dari data ) dapat dilakukan secara parallel dengan mendesain sedemikian rupa menggunakan CUDA. Hal ini dapat dicapai dengan mengalokasikan memori host dan menginisalisasinya, kemudian mengalokasikan memori device, transfer input data, eksekusi kernels, dan transfer output dari device
Analisis Solusi
Setelah penulis menulis kode diatas, penulis menemukan banyak hal yang dapat diefektifkan. Salah satunya adalah bagaimana program ini melakukan sorting. Jika kita melihat langkah yang telah dideskripsikan diatas, maka kita menemukan bahwa:
- counting terhadap angka digital 0-9, seharusnya dapat menggunakan operasi bitwise sehingga cukup menghitung digit 0-1
- kemungkinan ada operasi yang dapat dibuat paralel mengingat proses penghitungan dan assign masing-masing bisa dibuat operasi parallel yang berbeda pada countosrt
Jumlah Thread yang Digunakan
32
Ketika melakukan pengerjaan kami menemukan bahwa program yang kami modifikasi menjadi paralel lebih cocok pada saat thread 32.
Pengukuran Kinerja
Pada pengukuran ini kami membandingkan program radix sort paralel di cuda dengan program radix sort serial di cuda
Jenis | Size | 1 | 2 | 3 |
---|---|---|---|---|
paralel | 5000 | 243994 | 243994 | 244032 |
serial | 5000 | 179938 | 181242 | 181150 |
paralel | 50000 | 229224 | 215969 | 215769 |
serial | 50000 | 1807999 | 1784899 | 1807166 |
paralel | 100000 | 3588490 | 3.553063 | 3553063 |
serial | 100000 | 217054 | 197716 | 150975 |
paralel | 200000 | 172296 | 170046 | 171914 |
serial | 200000 | 3757676 | 4537993 | 3835774 |
paralel | 400000 | 337847 | 366193 | 335076 |
serial | 400000 | 6430453 | 5501653 | 5491221 |
*perhitungan waktu dalam microsecond |
Analisis Pengukuran Kinerja
Dari hasil pengukuran diatas dapat kita lihat bahwa radix sort paralel dengan cuda lebih cepat dari pada radix sort secara serial. Selain itu dengan bertambahnya ukuran array maka kecepatan radix sort paralel makin lebih cepat dari serial.