Skip to content
Snippets Groups Projects
Commit 98f14ebb authored by Azka Nabilah Mumtaz's avatar Azka Nabilah Mumtaz
Browse files

tes

parent cf59c514
No related merge requests found
#include <cuda.h>
#include <cuda_runtime.h>
#include "radix_sort_parallel.h"
#include <stdio.h>
#include <stdlib.h>
// #include <omp.h>
#include <sys/time.h>
void generateArray(int arr[], int n,int seed);
void radixsort(int arr[], int n);
void print(int arr[], int n);
int main(int argc, char *argv[]) {
struct timeval stop, start;
// int thread_count = 5;
int array_size = strtol(argv[1], NULL, 10);
//printf("NUM THREADS : %d\n", omp_get_num_threads());
int *arr,*d_arr;
arr = (int*)malloc(sizeof(int)* array_size);
cudaMalloc((void **)&d_arr, sizeof(int) * array_size);
// cudaMemcpy(d_arr, arr, sizeof(int) * array_size, cudaMemcpyHostToDevice);
int seed = 13516127;
generateArray(arr,array_size,seed);
cudaMemcpy(d_arr, arr, sizeof(int) * array_size, cudaMemcpyHostToDevice);
gettimeofday(&start, NULL);
radixsort(arr, array_size);
gettimeofday(&stop, NULL);
print(arr,array_size);
printf("Sorting selesai\n");
printf("took %lu microsecond for parallel radix sort\n", ((stop.tv_sec - start.tv_sec)*1000000)+(stop.tv_usec - start.tv_usec));
cudaFree(d_arr);
free(arr);
return 0;
}
__global__
void getMax(int arr[], int n, int max[]) {
......@@ -29,13 +58,23 @@ int temp = arr[0];
}
}
}
}
// __global__
void generateArray(int arr[], int n,int seed){
int *output;
output = (int*)malloc(sizeof(int) * n);
srand(seed);
for(long i = 0; i < n; i++) {
output[i] = (int)rand();
}
for(long i = 0; i < n; i++) {
arr[i] = output[i];
}
}
__global__
void countSort(int arr[], int n, int digit) {
// int my_rank = omp_get_thread_num();
// int thread_count = omp_get_num_threads();
//printf("NUMBER OF THREAD NYA BOY %d\n",thread_count);
int *output;
output = (int*)malloc(sizeof(int)*n);
long i;
......@@ -53,8 +92,7 @@ void countSort(int arr[], int n, int digit) {
arr[i] = output[i];
}
void radix_sort(int arr[], int n)
{
void radixsort(int arr[], int n) {
int *max,*d_max,*d_arr;
max = (int*)malloc(sizeof(int)* 1);
cudaMalloc((void **)&d_max, sizeof(int) * 1);
......@@ -67,55 +105,13 @@ void radix_sort(int arr[], int n)
countSort<<<1,1>>>(d_arr, n, digit);
}
cudaMemcpy(arr,d_arr, sizeof(int) *n, cudaMemcpyDeviceToHost);
}
void print(int arr[], int n)
{
for (int i = 0; i < n; i++)
printf("%d: %d\n",i, arr[i]);
}
void rng(int *arr, int n) {
int seed = 13516013;
srand(seed);
for(long i = 0; i < n; i++) {
arr[i] = (int)rand();
}
}
int main(int argc, char *argv[]) {
int N;
int *arr;
int *d_arr;
if (argc == 2) {
N = strtol(argv[1], NULL, 10);
} else {
printf("ERROR: ./radix_sort <array_length>\n");
return 1;
}
// Allocate host memory
arr = (int*)malloc(N * sizeof(int));
// Initialize host memory
rng(arr,N);
// Allocate device memory
cudaMalloc((void**)&d_arr, N * sizeof(int));
// Transfer data from host to device memory
cudaMemcpy(d_arr, arr, N * sizeof(int), cudaMemcpyHostToDevice);
clock_t begin = clock();
radix_sort(arr, N);
clock_t end = clock();
double time = (double)(end - begin) * 1000 / CLOCKS_PER_SEC;
print(arr,N);
printf("Executed in %lf ms\n",time);
cudaFree(d_arr);
free(arr);
return 0;
}
void print(int arr[], int n) {
for (long i = 0; i < n; i++) {
printf("%d \n",arr[i]);
}
printf("\n");
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment