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.
> A non-comparative integer sorting algorithm that sorts data with integer keys by grouping keys by the individual digits which share the same significant position and value.
## Table Of Contents
-[Introduction](#introduction)
-[Requirements](#requirements)
-[Run Radix Sort](#run-radix-sort)
-[Details of Radix Sort (Indonesian)](#details-of-radix-sort-(indonesian))
-[Author](#author)
-[Words From Author](#words-from-author)
## Introduction
This is the implementation of parallel radix sort algorithm using OpenMPI.
## Requirements
* GCC Compiler
## Run Radix Sort
Follow these steps to run Parallel Radix Sort on your local:
1. Compile Radix Sort Program with `make`.
2. Run `./serial_radix_sort <array_length>` for serial radix sort.
3. Run `mpirun -np <processors> --hostfile mpi_hostfile parallel_radix_sort <array_length>` for parallel radix sort.
4. You will see the performance for each radix sort.
Radix sort adalah algoritma sorting yang termasuk dalam kelas non-comparison karena pada dasarnya radix sort hanya melakukan counting sort terhadap tiap digit pada masing-masing elemen input. Disanalah letak tantangan untuk mengembangkan solusi parallel untuk radix sort karena counting sort tidak dapat dikonversi menjadi paralel dengan mudah. Hal ini dikarenakan saat melakukan counting sort, perhitungan setiap iterasinya dependen terhadap perhitungan pada iterasi sebelumnya.
Berangkat dari permasalahan tersebut, kami menggunakan bantuan OpenMPI untuk melakukan parallel radix sort, dimana kami menggunakan scatter & reduce untuk proses subroutine counting sort yang dilakukan. Proses count yang kami terapkan menyimpan jumlah kemunculan untuk tiap digit dalam array statik yang berisi 10 elemen. Kami membagi (dengan scatter) proses perhitungan ini pada setiap process dan menjumlahkan hasilnya menggunakan reduce. Setelah itu kami melakukan prefix sum untuk array ini yang dilakukan secara serial. Walaupun serial, namun seharusnya tidak terlalu berdampak pada performa karena jumlah elemen array hanya 10.
Sebelum itu, diperlukan juga untuk tahu nilai terbesar dalam array guna menentukan jumlah digit maksimum. Kami juga memparalelkan fungsi get_max ini dengan menggunakan scatter & reduce.
### Analisis Solusi Parallel
Kompleksitas dari solusi Parallel kami adalah O((n/c) + n + 10), 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 counting sort dan get_max saja, sehingga dalam Big O solusi Parallel kami terdapat tambahan sejumlah n, yang merupakan waktu pemindahan elemen dari indeks lama ke indeks yang sudah sorted dimana proses ini masih berjalan secara serial. Sehingga batas peningkatan performa solusi parallel kami adalah 2x.
Jumlah process (C) yang digunakan pada solusi paralel kami adalah sebanyak-banyaknya asalkan jumlah elemen dalam array (n) dapat dibagi dengan C. Hal ini dikarenakan semakin banyak jumlah process yang digunakan (C mendekati tak hingga), performa solusi parallel semakin mendekati 2x performa solusi serial.
### 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:
Parallel radix sort finished, time taken: 180987.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/c) + n + 10), 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. Perlu diingat bahwa kami hanya memparallelkan fungsi counting sort dan get_max saja, sehingga dalam Big O solusi Parallel kami terdapat tambahan sejumlah n, yang merupakan waktu pemindahan elemen dari indeks lama ke indeks yang sudah sorted dimana proses ini masih berjalan secara serial.
## Author
### Faza Fahleraz
```
Email: 13516095@std.stei.itb.ac.id
Github: https://github.com/ffahleraz
Task:
* Membuat counting sort parallel
* Membuat parallel radix sort
* Membuat serial radix sort
* Membuat Dokumentasi
```
### Nicholas Rianto Putra
```
Email: 13516020@std.stei.itb.ac.id
Github: https://github.com/nicholaz99
Task:
* Membuat Main Program
* Membuat Program mengoutputkan hasil ke dalam file .txt pada folder output
* Memparallelkan fungsi get_max dengan scatter dan reduce