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.
@@ -23,7 +23,7 @@ This is a simple implementation of parallel radix sort algorithm using CUDA.
## Run Radix Sort
1. Compile Radix Sort Program with `make`.
2. Run `./serial_radix_sort <array_length>` for serial radix sort.
3. Run `./parallel_radix_sort <array_length>` for parallel radix sort.
3. Run `./radix_sort <array_length>` for parallel radix sort.
4. You will see the performance for each radix sort implementations.
## Details of Radix Sort (Indonesian)
...
...
@@ -37,14 +37,14 @@ Radix sort adalah algoritma sorting yang termasuk dalam kelas non-comparison kar
Berangkat dari permasalahan tersebut, kami menggunakan bantuan CUDA untuk melakukan parallel radix sort, dimana kami mencoba untuk memparalelkan beberapa aspek dari subroutine counting sort yang dilakukan dalam radix sort. Bagian yang kami paralelkan adalah pembuatan flag (0 atau 1) untuk tiap elemen array dan proses scatter untuk menyusun ulang posisi elemen-elemen dalam array. Namun, pada solusi kami, masih ada beberapa bagian yang dilakukan oleh host secara serial yaitu proses prefix sum.
Jumlah thread per block yang kami pakai adalah 64 karena
Jumlah thread per block yang kami pakai adalah 128 karena kami mencoba pada server ITB dan hasil parallel radix sortnya lebih cepat. Untuk pemetaan thrad sendiri, program kami akan dibagi menjadi beberapa thread, dimana seperti yang kita tahu bahwa block terdiri dari thread, dan block yang kami pakai sebanyak 128.
### Analisis Solusi Parallel
Kompleksitas dari solusi Parallel kami adalah O(n + 2n/c), sedangkan kompleksitas solusi Serial adalah O(2n + 10). C disini adalah jumlah proses yang dilakukan. Dapat dilihat bahwa semakin banyak process yang tersedia dalam solusi parallel yang kami buat, performanya semakin mendekati 2x lebih cepat dari performa solusi serial. Hal ini dikarenakan kami hanya memparallelkan fungsi pembuatan flags dan scatter saja, sehingga dalam Big O solusi Parallel kami terdapat tambahan sejumlah n, yang merupakan waktu perhitungan prefix sum dimana proses ini masih berjalan secara serial. Sehingga batas peningkatan performa solusi parallel kami adalah 2x.
Solusi ini sebenarnya bisa dibuat lebih efisien apabila proses prefix scan dilakukan secara paralel sepenuhnya misalkan dengan Blelloch Scan.
Pada bagian paralel dari solusi ini, setiap thread melakukan komputasi untuk n/c elemen, misalnya menentukan flag.
Pada bagian paralel dari solusi ini, setiap thread melakukan komputasi untuk n/c elemen, misalnya menentukan flag.
### Pengukuran Kinerja Solusi Parallel
Kami menggunakan metode perbandingan waktu performa untuk mengukur kinerja solusi parallel yang telah kami buat. Kami membandingkan waktu yang dibutuhkan oleh solusi radix sort parallel kami dengan waktu yang dibutuhkan oleh radix sort serial pada array yang isi dan jumlahnya sama persis. Berikut adalah snippet code yang kami pakai untuk mengukur performa solusi kami:
...
...
@@ -69,50 +69,152 @@ Berikut ini adalah hasil pengukuran kinerja solusi kami pada server ITB:
Parallel radix sort finished, time taken: 785813.000000 μs
13516020@housting:~/cuda$ ./radix_sort 400000
Sorting in parallel...
Parallel radix sort finished, time taken: 786641.000000 μs
13516020@housting:~/cuda$ ./radix_sort 400000
Sorting in parallel...
Parallel radix sort finished, time taken: 811905.000000 μs
```
### Analisis Kinerja Solusi Parallel
Kinerja solusi Parallel kami berjalan lebih cepat dari Serial untuk seluruh n yang diujikan, yaitu 5000, 50000, 100000, 200000, dan 400000. Kompleksitas dari solusi Parallel kami adalah O(n + 2n/c),, sedangkan kompleksitas solusi Serial adalah O (2n + 10). C disini adalah jumlah proses yang dilakukan. Dari kompleksitas parallel kami, dapat disimpulkan bahwa solusi Parallel yang kami buat maksimal lebih cepat 2x dari kecepatan solusi Serial.
Memang pada pengujian pada jumlah N yang diberikan, solusi parallel kami tidak ada yang lebih cepat dari serial. Hanya saja, jika kita lihat trend dari waktu pengujian, waktu yang dibutuhkan parallel radix sort selalu sama, berkisar pada angka 600000 - 700000 μs, sedangkan waktu yang dibutuhkan serial radix sort linear, naik seiring dengan jumlah N. Dapat disimpulkan bahwa untuk nilai N yang besar, maka solusi parallel akan jauh lebih cepat dari solusi serial radix sort.