diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..08ebed660055f08e934969eebb6ab6140d901aa7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,2 @@
+make: src/radix_sort_cuda.cu
+    nvcc src/radix_sort_cuda.cu -o radix_sort
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d962a8bf7e6972cba2e416a22987ce5ab6407551
--- /dev/null
+++ b/README.md
@@ -0,0 +1,25 @@
+### Petunjuk Penggunaan:
+1. Lakukan command make pada terminal.
+```$ make```
+2. Jalankan program dengan command yang telah disediakan.
+```$./radix_sort <numnber of array elements>"```
+
+### Pengerjaan Tugas
+Muhammad Farhan - 13516093
+1. Mengerjakan semua bagian
+
+### Laporan Pengerjaan
+#### Deskripsi Solusi Paralel
+
+#### Analisis Solusi
+
+#### Pemetaan *Thread* ke Komputasi dan Jumlah *Thread per Block* yang Digunakan
+
+#### Pengukuran Kinerja
+1. N = 5000
+2. N = 50000
+3. N = 100000
+4. N = 200000
+5. N = 400000
+
+#### Analisis Perbandingan Kinerja Serial dan Paralel
diff --git a/src/radix_sort_cuda.cu b/src/radix_sort_cuda.cu
new file mode 100644
index 0000000000000000000000000000000000000000..f1be3b1442b6905e90d2f2247a75b84f2d7c274f
--- /dev/null
+++ b/src/radix_sort_cuda.cu
@@ -0,0 +1,118 @@
+#include <stdio.h>
+#include <stdio.h>
+#define SEED 13516093
+
+void rng(int* arr, int n);
+void radixSortSerial(int* arr, int n);
+void radixSortParallel(int* arr, int n);
+int isMatch(int* arr1, int* arr2, int n);
+
+int main(int argc, char** argv) {
+    int n;
+    int *arr;
+    int *arr_d;
+    cudaEvent_t startTime, stopTime;
+    float elapsedTime;
+
+    if (argc < 2) {
+        printf("Usage: ./radix_sort_cuda <number of array elements>");
+        return 0;
+    }
+
+    n = strtol(argv[1], NULL, 10);
+    arr = (int*)malloc(n*sizeof(int));
+    rng(arr, n);
+    cudaEventCreate(&startTime);
+    cudaEventCreate(&stopTime);
+
+
+    // Serial Radix Sort
+    cudaEventRecord(startTime, 0);
+
+    radixSortSerial(arr, n);
+
+    cudaEventRecord(stopTime, 0);
+    cudaEventSynchronize(stopTime);
+    cudaEventElapsedTime(&elapsedTime, startTime, stopTime);
+    printf("Serial Radix Sort: %lf\n", elapsedTime);
+
+
+    // CUDA Radix Sort
+    cudaMalloc((void**)&arr_d, sizeof(int) * n);
+    cudaMemcpy(arr_d, arr, sizeof(int)*n, cudaMemcpyHostToDevice);
+
+    cudaEventRecord(startTime, 0);
+
+    radixSortParallel(arr, n);
+
+    cudaEventRecord(stopTime, 0);
+    cudaEventSynchronize(stopTime);
+    cudaEventElapsedTime(&elapsedTime, startTime, stopTime);
+    printf("Parallel Radix Sort: %lf\n", elapsedTime);
+
+    return 0;
+}
+
+void rng(int* arr, int n) {
+    srand(SEED);
+
+    for (int i = 0; i < n; i++)
+        arr[i] = (int)rand();
+}
+
+int getMax(int* arr, int n) {
+    int temp = 0;
+
+    for (int i = 0; i < n; i++)
+        if (arr[i] > temp) temp = arr[i];
+
+    return temp;
+}
+
+// Serial Sort
+void countSortSerial(int *arr, int n, int exp) {
+    int count[10] = {0};
+    int output[n];
+
+    for (int i = 0; i < n; i++) {
+        int digit = (arr[i]/exp)%10;
+        count[digit]++;
+    }
+
+    for (int i = 1; i < 10; i++)
+        count[i] += count[i-1];
+
+    for (int i = n-1; i>= 0; i--) {
+        int digit = (arr[i]/exp)%10;
+        output[count[digit]-1] = arr[i];
+        count[digit]--;
+    }
+
+    for (int i = 0; i < n; i++)
+        arr[i] = output[i];
+}
+
+void radixSortSerial(int* arr, int n) {
+    int max = getMax(arr, n);
+
+    for (int exp = 1; max/exp > 0; exp *= 10)
+        countSortSerial(arr, n, exp);
+}
+
+// Parallel Sort
+__global__ void countSortParallel(int *arr, int n, int digit) {
+
+}
+
+void radixSortParallel(int *arr, int n) {
+    int max = getMax(arr, n);
+    int *arr_d;
+
+    cudaMalloc((void**)&arr_d, n*sizeof(int);
+    cudaMemcpy(arr_d, arr, n*sizeof(int), cudaMemcpyHostToDevice);
+
+    for (int digit = 1; max/digit > 0; digit *= 10)
+        countSort<<<1,1>>>(arr_d, n, digit);
+
+    cudaMemcpy(arr, arr_d, n*sizeof(int), cudaMemcpyDeviceToHost);
+}
diff --git a/test/README.md b/test/README.md
deleted file mode 100644
index fcb37d95caa74bc95d1cb01dea18a5eacff5d72e..0000000000000000000000000000000000000000
--- a/test/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Announcement
-
-Please place your sample input and output here.
\ No newline at end of file