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