From 1468f7f4294c956ffe6259f103e419b26e55fa8f Mon Sep 17 00:00:00 2001
From: Yasya Rusyda <yasyars@Yasyas-MacBook-Pro.local>
Date: Thu, 11 Apr 2019 15:26:12 +0700
Subject: [PATCH] add parallel

---
 .DS_Store             | Bin 10244 -> 14340 bytes
 src/radix_sort_par.cu |  26 +++++++++++++++++++++-----
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/.DS_Store b/.DS_Store
index 7f2c3626fa7975b0cc99ec4639f8484e750d0428..a25a91b1e8784e41ca95a57840ba1b72224c793c 100644
GIT binary patch
delta 523
zcmZn(Xem%&U|?W$DortDU@!nOIe-{M3-ADmHU<U-o{0+T(#${(BM{32F_105z>r)P
zT$GoSpO-!{QFXF`3X3I3nguLf%us}o28uA=aRAHdF{CqOGL+=zySOCf<R<~eI6ggN
zS-&ySnSC=m2MY%y_vTr`xjY*SCNVP#Pv#MjjJ3tDbE5u1M^uwjP)tUbFUT+qPR`FQ
z0P102aG2aAaB%WDA@9k3f_oTGOg<pcpdnseZDgRMU}jXSqfl*VWCmoL8<^DAa&m~P
z8rpg$<W^Qy*VNX{n4BpnuR0TG2r~oNvpMNV1~W+LB4jpqh%IAchbr4_E}6?T*-%*6
zp0B8XN*~1aP`TWEgxfJ?QC!ZTurV=(U6K{#3t(h%0|{5;2-}$Wo_R9AiY_N8N)7-q
d!(<yC>B$Ky?5q}GUV+NQ$$k<KkesE!1OW4acUu4e

delta 349
zcmZoEXbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~3gIoZI3MHI+qkOg8!pg2QLx?yl~
zes00$i4s-p6CdbqX6InxV3eKAqaYc}^DhmkjD<muA)O(Up(Hoo#U&{xKM5$t!Bj81
zg;W2aBdUA~UipFyh*dy63=Djen-mT*8JSJ~DBwQ1M{(ceY=N`l%nZd0MGVO>H-Qy0
zaC=Yo(-3p8tJyjyA7Ud^S#CbUK1^8@+khUOI6-VPk3cSuATz{R1#Tei3JRKy7r!%4
j<~Px0WSDHiqdYmmgq>3Zqy`v129tA4CT=bkWM&2cSO88W

diff --git a/src/radix_sort_par.cu b/src/radix_sort_par.cu
index 9a572ba..61e7d59 100644
--- a/src/radix_sort_par.cu
+++ b/src/radix_sort_par.cu
@@ -47,16 +47,31 @@ void countSort(int arr[], int n, int exp)
 // The main function to that sorts arr[] of size n using  
 // Radix Sort
 
-void radixsort(int arr[], int n) 
+void radixsort(int *arr, int n) 
 { 
+    int *d_arr;
+
     // Find the maximum number to know number of digits 
     int m = getMax(arr, n); 
   
     // Do counting sort for every digit. Note that instead 
     // of passing digit number, exp is passed. exp is 10^i 
     // where i is current digit number 
+
+    // allocate device memory
+    cudaMalloc((void**)&d_arr,sizeof(int)*n);
+
+    cudaMemcpy(d_arr, arr, sizeof(int)*n,cudaMemcpyHostToDevie);
     for (int exp = 1; m/exp > 0; exp *= 10) 
-        countSort<<1,32>>(arr, n, exp); 
+        countSort<<<1,32>>>(d_arr, n, exp); 
+
+    //transfer data back to host memory
+    cudaMemcpy(arr, d_arr, sizeof(int)*n, cudaMemcpyDeviceToHost);
+
+    //deallocate device memory
+    cudaFree(d_arr);
+
+
 } 
   
 // A utility function to print an array 
@@ -89,13 +104,12 @@ timespec diff(timespec start, timespec end)
 }
 
 // Driver program to test above functions 
-int main() 
+int main(int argc, char *argv[]) 
 { 
     timespec start, stop;
     
     int n;
-    cout<<"Masukkan nilai N\n";
-    cin>>n;
+    n= atoi(argv[1]);
     int arr[n];
     rng(arr,n);
     clock_gettime(CLOCK_REALTIME, &start);
@@ -107,5 +121,7 @@ int main()
     long time = duration.tv_sec * 1000000 + duration.tv_nsec/1000;
     printf("\n%d.%09d s\n", duration.tv_sec, duration.tv_nsec);
     
+    //deallocate host memory
+    free(arr);
     return 0; 
 } 
\ No newline at end of file
-- 
GitLab