From 5548ed8a4c376ab8dc818f09d80eaca41fa89c07 Mon Sep 17 00:00:00 2001
From: azkanab <azkanabilah@gmail.com>
Date: Thu, 11 Apr 2019 21:54:55 +0700
Subject: [PATCH] final ya

---
 README.md                  | 72 ++++++++++++++++++++++----------------
 src/radix_sort_parallel.cu |  2 +-
 2 files changed, 42 insertions(+), 32 deletions(-)

diff --git a/README.md b/README.md
index a5b63bf..eaedc66 100644
--- a/README.md
+++ b/README.md
@@ -13,63 +13,73 @@ Program ini dapat melakukan pengurutan elemen array dengan menggunakan algoritma
 ## Laporan Pengerjaan
 
 ### 1. Deskripsi Solusi Parallel
+Radix sort dilakukan dengan cara mencari bilangan terbesar sesuai dengan digit - digitnya terurut dari digit terbesar hingga digit terkecil, dengan menggunakan fungsi `getMax` dengan setiap threadnya membandingkan 2 elemen array dan kemudian akan di-<i>sort</i> dengan menggunakan fungsi `countSort` pada setiap digitnya dengan memanfaatkan fungsi `storeCount`. Fungsi `countSort` pada `main` akan dilakukan secara parallel dan melakukan rangkain algoritma cuda. 
 
 ### 2. Analisis Solusi
+Solusi algoritma <i>Radix Sort</i> secara parallel dapat 	mempercepat waktu eksekusi program dan meningkatkan performanya. Proses eksekusi program dapat menjadi lebih cepat karena pada proses `countSort` dipecah - pecah sejumlah jumlah prosesor agar pecahan tersebut dapat dikerjakan secara bersamaan untuk kemudian digabung.
+Program ini akan dapat lebih dipercepat jika pada fungsi `getMax` dilakukan juga secara parallel, sehingga setiap kali program mencari nilai terbesar waktunya menjadi lebih cepat.
+Selain itu, program juga dapat dikembangkan dan dipercepat dengan mengubah angka yang digunakan dalam array menjadi bitwise. Jika `countSort` dilakukan secara bitwise maka perhitungan sorting perdigitnya hanya membandingkan 2 angka yaitu 0 dan 1, sehingga perhitungan juga akan menjadi lebih cepat karena kompleksitas program berkurang.
 
 ### 3. Jumlah Pemetaan Thread
+jumlah thread atau block_size yang dignunakan adalah 1024 hal ini berdasarkan ujicoba yang dilakukan mulai dari 256 , 512 dan 1024 dan hasil yang paling cepat adalah 1024 sehingga kami memilih untuk menggunakan threads sebanyak 1024
 
 ### 4. Pengukuran Kinerja
 
 #### Serial
 
 **N = 5.000**
-Pengujian 1:
-Pengujian 2:
-Pengujian 3:
+Pengujian 1: Executed in 3612.000000 ms
+Pengujian 2: Executed in 2787.000000 ms
+Pengujian 3: Executed in 3611.000000 ms
 **N = 50.000**
-Pengujian 1:
-Pengujian 2:
-Pengujian 3:
+Pengujian 1: Executed in 23920.000000 ms
+Pengujian 2: Executed in 23209.000000 ms
+Pengujian 3: Executed in 23968.000000 ms
 **N = 100.000**
-Pengujian 1:
-Pengujian 2:
-Pengujian 3:
+Pengujian 1: Executed in 44727.000000 ms
+Pengujian 2: Executed in 41470.000000 ms
+Pengujian 3: Executed in 41497.000000 ms
 **N = 200.000**
-Pengujian 1:
-Pengujian 2:
-Pengujian 3:
+Pengujian 1: Executed in 105366.000000 ms
+Pengujian 2: Executed in 111099.000000 ms
+Pengujian 3: Executed in 84916.000000 ms
 **N = 400.000**
-Pengujian 1:
-Pengujian 2:
-Pengujian 3:
+Pengujian 1: Executed in 145486.000000 ms
+Pengujian 2: Executed in 238636.000000 ms
+Pengujian 3: Executed in 147823.000000 ms
 
 #### Parallel
 
 **N = 5.000**
-Pengujian 1: Executed in 90790.1 microseconds.
-Pengujian 2: Executed in 90734.5 microseconds.
-Pengujian 3: Executed in 90782.6 microseconds.
+Pengujian 1: Executed in 90790.1 ms
+Pengujian 2: Executed in 90734.5 ms
+Pengujian 3: Executed in 90782.6 ms
 **N = 50.000**
-Pengujian 1: Executed in 44813.2 microseconds.
-Pengujian 2: Executed in 45517.9 microseconds.
-Pengujian 3: Executed in 44822.7 microseconds.
+Pengujian 1: Executed in 44813.2 ms
+Pengujian 2: Executed in 45517.9 ms
+Pengujian 3: Executed in 44822.7 ms
 **N = 100.000**
-Pengujian 1: Executed in 96373.5 microseconds.
-Pengujian 2: Executed in 84866.8 microseconds.
-Pengujian 3: Executed in 84885.2 microseconds.
+Pengujian 1: Executed in 96373.5 ms
+Pengujian 2: Executed in 84866.8 ms
+Pengujian 3: Executed in 84885.2 ms
 **N = 200.000**
-Pengujian 1: Executed in 94081.2 microseconds.
-Pengujian 2: Executed in 116638 microseconds.
-Pengujian 3: Executed in 89034.4 microseconds.
+Pengujian 1: Executed in 94081.2 ms
+Pengujian 2: Executed in 116638 ms
+Pengujian 3: Executed in 89034.4 ms
 **N = 400.000**
-Pengujian 1: Executed in 170059 microseconds.
-Pengujian 2: Executed in 171197 microseconds.
-Pengujian 3: Executed in 171990 microseconds.
+Pengujian 1: Executed in 170059 ms
+Pengujian 2: Executed in 171197 ms
+Pengujian 3: Executed in 171990 ms
 
 ###5. Analisis Perbandingan Serial dan Parallel
 
 **N = 5.000**
+pada N = 5000 serial lebih cepat dari pada parallel karena array masih dianggap lebih kecil sehingga tidak efektif bagi parallel yang menggunakan banyak blok
 **N = 50.000**
+pada N = 50000 serial lebih cepat dari pada parallel karena array masih dianggap lebih kecil sehingga tidak efektif bagi parallel yang menggunakan banyak blok namun hasil kali ini sudah mendekati hasil serial yaitu sebesar 2x waktu serial
 **N = 100.000**
+pada N = 100000 serial lebih cepat dari pada parallel karena array masih dianggap lebih kecil sehingga tidak efektif bagi parallel yang menggunakan banyak blok namun hasil kali ini sudah mendekati hasil serial yaitu sebesar 2x waktu serial
 **N = 200.000**
-**N = 400.000**
\ No newline at end of file
+pada N = 200000 waktu parallel sudah mengalahkan waktu serial , karena array yang dibangun sudah cukup besar sehingga program parallel lebih unggul karena memanfaatkan blok yang banyak dan menghasilkan waktu yang lebih cepat dari serial
+**N = 400.000**
+pada N = 400000 waktu parallel sudah mengalahkan waktu serial , karena array yang dibangun sudah cukup besar sehingga program parallel lebih unggul karena memanfaatkan blok yang banyak dan menghasilkan waktu yang lebih cepat dari serial
\ No newline at end of file
diff --git a/src/radix_sort_parallel.cu b/src/radix_sort_parallel.cu
index 1935e1d..fae9765 100644
--- a/src/radix_sort_parallel.cu
+++ b/src/radix_sort_parallel.cu
@@ -118,7 +118,7 @@ int main(int argc, char *argv[])
 		output << k << ":"<<h_arr[k] << " " ;
 	}
 	output.close();
-	cout << "Executed in " << time * 1000 << " microseconds." << endl;
+	cout << "Executed in " << time * 1000 << " ms" << endl;
 	cudaFree(d_arr);
 	curandDestroyGenerator(curand_gen);
 	cudaEventDestroy(start);
-- 
GitLab