From 012028e183cd54ae44b13d4d4e05257dbcbcb695 Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Fri, 15 Sep 2023 11:46:44 +0800 Subject: [PATCH 1/9] filling part1 --- stream_compaction/cpu.cu | 41 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..9b1102c 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -20,6 +20,11 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + odata[0] = 0; + for (int i = 1; i < n; i++) + { + odata[i] = odata[i - 1] + idata[i - 1]; + } timer().endCpuTimer(); } @@ -31,8 +36,17 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int count = 0; + for (int i = 0; i < n; i++) + { + if (idata[i] != 0) + { + odata[count] = idata[i]; + count++; + } + } timer().endCpuTimer(); - return -1; + return count; } /** @@ -43,8 +57,31 @@ namespace StreamCompaction { int compactWithScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + // Step1: map + int* boolmap = new int[n]; + for (int i = 0; i < n; i++) + { + boolmap[i] = (idata[i] != 0 ? 1 : 0); + } + // Step2: scan + odata[0] = 0; + for (int j = 1; j < n; j++) + { + odata[j] = odata[j - 1] + boolmap[j - 1]; + } + int count = odata[n - 1]; + // Step3: scatter + for (int k = 0; k < n; k++) + { + if (boolmap[k] != 0) + { + odata[odata[k]] = idata[k]; + } + } + delete[] boolmap; + timer().endCpuTimer(); - return -1; + return count; } } } From 5c5c710877b2bcc74624b6d4f0268eac34187bdd Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Fri, 15 Sep 2023 21:59:21 +0800 Subject: [PATCH 2/9] filling part2 --- stream_compaction/cpu.cu | 6 +---- stream_compaction/naive.cu | 45 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 9b1102c..f86e2e0 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -64,11 +64,7 @@ namespace StreamCompaction { boolmap[i] = (idata[i] != 0 ? 1 : 0); } // Step2: scan - odata[0] = 0; - for (int j = 1; j < n; j++) - { - odata[j] = odata[j - 1] + boolmap[j - 1]; - } + scan(n, odata, boolmap); int count = odata[n - 1]; // Step3: scatter for (int k = 0; k < n; k++) diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..640232a 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +#define blockSize 256 + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -12,14 +14,57 @@ namespace StreamCompaction { return timer; } // TODO: __global__ + __global__ void kernNaiveGPUScan(int n, int d, int* odata, int* idata) + { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + if (k >= n) return; + + int powerd = 1 << (d - 1); + if (k >= powerd) + { + odata[k] = idata[k - powerd] + idata[k]; + } + else + { + odata[k] = idata[k]; + } + + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int* dev_odata; + int* dev_idata; + + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_odata failed!"); + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_idata failed!"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorFn("cudaMemcpy idata to dev_idata failed!"); + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + timer().startGpuTimer(); // TODO + for (int d = 1; d <= ilog2ceil(n); d++) + { + kernNaiveGPUScan<<>>(n, d, dev_odata, dev_idata); + std::swap(dev_odata, dev_idata); + } timer().endGpuTimer(); + + cudaMemcpy(odata + 1, dev_idata, (n - 1) * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("cudaMemcpy dev_idata to odata failed!"); + odata[0] = 0; + + cudaFree(dev_odata); + checkCUDAErrorFn("cudaFree dev_odata failed!"); + cudaFree(dev_idata); + checkCUDAErrorFn("cudaFree dev_idata failed!"); } } } From d85bb6974ab1c9682a46aa8a1b78a1a043c9c27d Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 02:02:54 +0800 Subject: [PATCH 3/9] filling part3 --- stream_compaction/common.cu | 6 ++ stream_compaction/efficient.cu | 122 ++++++++++++++++++++++++++++++++- stream_compaction/naive.cu | 1 - 3 files changed, 125 insertions(+), 4 deletions(-) diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..3e5fab0 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -24,6 +24,9 @@ namespace StreamCompaction { */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { // TODO + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; + if (idx < n) + bools[idx] = (idata[idx] != 0 ? 1 : 0); } /** @@ -33,6 +36,9 @@ namespace StreamCompaction { __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { // TODO + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; + if (idx < n && bools[idx] == 1) + odata[indices[idx]] = idata[idx]; } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..cdbb521 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -3,6 +3,8 @@ #include "common.h" #include "efficient.h" +#define blockSize 256 + namespace StreamCompaction { namespace Efficient { using StreamCompaction::Common::PerformanceTimer; @@ -12,13 +14,69 @@ namespace StreamCompaction { return timer; } + __global__ void kernUpSweep(int n, int d, int* data) + { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + int powerd = 1 << d; + int powerdp1 = 1 << (d + 1); + + if (k >= n || k % powerdp1) return; + + data[k + powerdp1 - 1] = data[k + powerd - 1] + data[k + powerdp1 - 1]; + } + + __global__ void kernDownSweep(int n, int d, int* data) + { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + int powerd = 1 << d; + int powerdp1 = 1 << (d + 1); + + if (k >= n || k % powerdp1 || k + powerdp1 - 1 >= n) return; + + int t = data[k + powerd - 1]; + data[k + powerd - 1] = data[k + powerdp1 - 1]; + data[k + powerdp1 - 1] = t + data[k + powerdp1 - 1]; + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ - void scan(int n, int *odata, const int *idata) { + void scan(int n, int *odata, const int *idata) + { + int N = 1 << ilog2ceil(n); + + int* dev_data; + + cudaMalloc((void**)&dev_data, N * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_data failed!"); + cudaMemset(dev_data, 0, N * sizeof(int)); + checkCUDAErrorFn("cudaMemset dev_data to 0 failed!"); + cudaMemcpy(dev_data, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorFn("cudaMemcpy idata to dev_data failed!"); + + dim3 fullBlocksPerGrid((N + blockSize - 1) / blockSize); + timer().startGpuTimer(); // TODO + for (int d = 0; d < ilog2ceil(N); d++) + { + kernUpSweep<<>>(N, d, dev_data); + } + + cudaMemset(dev_data + N - 1, 0, sizeof(int)); + for (int d = ilog2ceil(N) - 1; d >= 0; d--) + { + kernDownSweep<<>>(N, d, dev_data); + } timer().endGpuTimer(); + + cudaMemcpy(odata, dev_data, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("cudaMemcpy dev_data to odata failed!"); + + cudaFree(dev_data); + checkCUDAErrorFn("cudaFree dev_data failed!"); } /** @@ -30,11 +88,69 @@ namespace StreamCompaction { * @param idata The array of elements to compact. * @returns The number of elements remaining after compaction. */ - int compact(int n, int *odata, const int *idata) { + int compact(int n, int *odata, const int *idata) + { + int N = 1 << ilog2ceil(n); + + int* dev_bools; + int* dev_data; + int* dev_idata; + int* dev_odata; + + cudaMalloc((void**)&dev_bools, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_bools failed!"); + cudaMalloc((void**)&dev_data, N * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_data failed!"); + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_odata failed!"); + + cudaMemset(dev_data, 0, N * sizeof(int)); + checkCUDAErrorFn("cudaMemset dev_data failed!"); + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorFn("cudaMempcy idata to dev_idata failed!"); + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + timer().startGpuTimer(); // TODO + StreamCompaction::Common::kernMapToBoolean<<>>(n, dev_bools, dev_idata); + + cudaMemcpy(dev_data, dev_bools, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorFn("cudaMempcy dev_bools to dev_data failed!"); + + for (int d = 0; d < ilog2ceil(N); d++) + { + kernUpSweep<<>>(N, d, dev_data); + } + + cudaMemset(dev_data + N - 1, 0, sizeof(int)); + for (int d = ilog2ceil(N) - 1; d >= 0; d--) + { + kernDownSweep<<>>(N, d, dev_data); + } + + StreamCompaction::Common::kernScatter<<>>(n, dev_odata, dev_idata, dev_bools, dev_data); + timer().endGpuTimer(); - return -1; + + int count = 0; + cudaMemcpy(&count, dev_data + N - 1, sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("cudaMempcy count failed!"); + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("cudaMempcy dev_odata to odata failed!"); + + cudaFree(dev_bools); + checkCUDAErrorFn("cudaFree dev_bools failed!"); + cudaFree(dev_data); + checkCUDAErrorFn("cudaFree dev_data failed!"); + cudaFree(dev_idata); + checkCUDAErrorFn("cudaFree dev_idata failed!"); + cudaFree(dev_odata); + checkCUDAErrorFn("cudaFree dev_odata failed!"); + + return count; } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 640232a..a597dae 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -28,7 +28,6 @@ namespace StreamCompaction { { odata[k] = idata[k]; } - } /** From 5cef2df53ae6ff7b1eee8caa76141b5480bd53d0 Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 02:12:48 +0800 Subject: [PATCH 4/9] filling part4 --- stream_compaction/thrust.cu | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..f24ca5c 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,18 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + thrust::device_vector dev_idata(idata, idata + n); + thrust::device_vector dev_odata = dev_idata; + timer().startGpuTimer(); // TODO use `thrust::exclusive_scan` // example: for device_vectors dv_in and dv_out: // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + thrust::exclusive_scan(dev_idata.begin(), dev_idata.end(), dev_odata.begin()); + timer().endGpuTimer(); + + thrust::copy(dev_odata.begin(), dev_odata.end(), odata); } } } From 5108f7827b761a3b45e396db890194d2cc7d9995 Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 04:22:55 +0800 Subject: [PATCH 5/9] optimize --- src/main.cpp | 2 +- stream_compaction/cpu.cu | 4 +-- stream_compaction/efficient.cu | 53 ++++++++++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..600c29f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 20; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index f86e2e0..f01c534 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -18,14 +18,14 @@ namespace StreamCompaction { * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. */ void scan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); + //timer().startCpuTimer(); // TODO odata[0] = 0; for (int i = 1; i < n; i++) { odata[i] = odata[i - 1] + idata[i - 1]; } - timer().endCpuTimer(); + //timer().endCpuTimer(); } /** diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index cdbb521..948a320 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -4,6 +4,7 @@ #include "efficient.h" #define blockSize 256 +#define OPTIMIZED 1 namespace StreamCompaction { namespace Efficient { @@ -23,7 +24,7 @@ namespace StreamCompaction { if (k >= n || k % powerdp1) return; - data[k + powerdp1 - 1] = data[k + powerd - 1] + data[k + powerdp1 - 1]; + data[k + powerdp1 - 1] += data[k + powerd - 1]; } __global__ void kernDownSweep(int n, int d, int* data) @@ -37,7 +38,33 @@ namespace StreamCompaction { int t = data[k + powerd - 1]; data[k + powerd - 1] = data[k + powerdp1 - 1]; - data[k + powerdp1 - 1] = t + data[k + powerdp1 - 1]; + data[k + powerdp1 - 1] += t; + } + + __global__ void kernOptUpSweep(int n, int d, int offset, int* data) + { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k >= n || k >= d) return; + + int i = offset * (2 * k + 1) - 1; + int j = offset * (2 * k + 2) - 1; + + data[j] += data[i]; + } + + __global__ void kernOptDownSweep(int n, int d, int offset, int* data) + { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k >= n || k >= d) return; + + int i = offset * (2 * k + 1) - 1; + int j = offset * (2 * k + 2) - 1; + + int t = data[i]; + data[i] = data[j]; + data[j] += t; } /** @@ -57,19 +84,41 @@ namespace StreamCompaction { checkCUDAErrorFn("cudaMemcpy idata to dev_data failed!"); dim3 fullBlocksPerGrid((N + blockSize - 1) / blockSize); +#if OPTIMIZED + int offset = 1; +#endif timer().startGpuTimer(); // TODO +#if OPTIMIZED + for (int d = N >> 1; d > 0; d >>= 1) + { + fullBlocksPerGrid = dim3((d + blockSize - 1) / blockSize); + kernOptUpSweep<<>>(N, d, offset, dev_data); + offset <<= 1; + } + +#else for (int d = 0; d < ilog2ceil(N); d++) { kernUpSweep<<>>(N, d, dev_data); } +#endif cudaMemset(dev_data + N - 1, 0, sizeof(int)); +#if OPTIMIZED + for (int d = 1; d < N; d <<= 1) + { + offset >>= 1; + fullBlocksPerGrid = dim3((d + blockSize - 1) / blockSize); + kernOptDownSweep<<>>(N, d, offset, dev_data); + } +#else for (int d = ilog2ceil(N) - 1; d >= 0; d--) { kernDownSweep<<>>(N, d, dev_data); } +#endif timer().endGpuTimer(); cudaMemcpy(odata, dev_data, n * sizeof(int), cudaMemcpyDeviceToHost); From af2d80ca8830a02187d811ba1a6e646f0026cc0a Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 06:35:01 +0800 Subject: [PATCH 6/9] fillin radix --- stream_compaction/efficient.cu | 109 +++++++++++++++++++++++++++++++++ stream_compaction/efficient.h | 2 + 2 files changed, 111 insertions(+) diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 948a320..43531ea 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -5,6 +5,7 @@ #define blockSize 256 #define OPTIMIZED 1 +#define TIMESCAN 1 namespace StreamCompaction { namespace Efficient { @@ -88,7 +89,9 @@ namespace StreamCompaction { int offset = 1; #endif +#if TIMESCAN timer().startGpuTimer(); +#endif // TODO #if OPTIMIZED for (int d = N >> 1; d > 0; d >>= 1) @@ -119,7 +122,10 @@ namespace StreamCompaction { kernDownSweep<<>>(N, d, dev_data); } #endif + +#if TIMESCAN timer().endGpuTimer(); +#endif cudaMemcpy(odata, dev_data, n * sizeof(int), cudaMemcpyDeviceToHost); checkCUDAErrorFn("cudaMemcpy dev_data to odata failed!"); @@ -201,5 +207,108 @@ namespace StreamCompaction { return count; } + + __global__ void kernComputeEArray(int n, int bit, int* edata, const int* idata) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index >= n) return; + + edata[index] = !((idata[index] >> bit) & 1); + } + + __global__ void kernComputeTArray(int n, int totalFalses, int* tdata, const int* fdata) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index >= n) return; + + tdata[index] = index - fdata[index] + totalFalses; + } + + __global__ void kernComputeDArray(int n, int* ddata, const int* edata, const int* tdata, const int* fdata) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index >= n) return; + + ddata[index] = edata[index] ? fdata[index] : tdata[index]; + } + + __global__ void kernScatter(int n, int* ddata, int* odata, int* idata) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index >= n) return; + + odata[ddata[index]] = idata[index]; + } + + void radixSort(int n, int* odata, const int* idata) + { + int* dev_edata; + int* dev_fdata; + int* dev_tdata; + int* dev_ddata; + + int* dev_idata; + int* dev_odata; + + cudaMalloc((void**)&dev_edata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_edata failed!"); + cudaMalloc((void**)&dev_fdata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_fdata failed!"); + cudaMalloc((void**)&dev_tdata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_tdata failed!"); + cudaMalloc((void**)&dev_ddata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_ddata failed!"); + + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAErrorFn("cudaMalloc dev_odata failed!"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorFn("cudaMempcy idata to dev_idata failed!"); + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + + int bnum = ilog2ceil(*(std::max_element(idata, idata + n))); + + timer().startGpuTimer(); + for (int d = 0; d < bnum; d++) + { + // Step1: Compute e array + kernComputeEArray<<>>(n, d, dev_edata, dev_idata); + // Step2: Scan e + scan(n, dev_fdata, dev_edata); + // Step3: Compute totalFalse + int e_last; + int f_last; + cudaMemcpy(&e_last, dev_edata + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(&f_last, dev_fdata + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + int totalFalses = e_last + f_last; + // Step4: Compute t + kernComputeTArray<<>>(n, totalFalses, dev_tdata, dev_fdata); + // Step5: scatter + kernComputeDArray<<>>(n, dev_ddata, dev_edata, dev_tdata, dev_fdata); + kernScatter<<>>(n, dev_ddata, dev_odata, dev_idata); + cudaMemcpy(dev_idata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorFn("cudaMempcy dev_odata to dev_idata failed!"); + } + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("cudaMempcy dev_odata to odata failed!"); + + cudaFree(dev_edata); + checkCUDAErrorFn("cudaFree dev_edata failed!"); + cudaFree(dev_fdata); + checkCUDAErrorFn("cudaFree dev_fdata failed!"); + cudaFree(dev_tdata); + checkCUDAErrorFn("cudaFree dev_tdata failed!"); + cudaFree(dev_ddata); + checkCUDAErrorFn("cudaFree dev_ddata failed!"); + cudaFree(dev_idata); + checkCUDAErrorFn("cudaFree dev_idata failed!"); + cudaFree(dev_odata); + checkCUDAErrorFn("cudaFree dev_odata failed!"); + } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..8efb4f4 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -9,5 +9,7 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata); int compact(int n, int *odata, const int *idata); + + void radixSort(int n, int* odata, const int* idata); } } From 3d7e7c5ca1558307a411ddb9bf315b9bd0f684e9 Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 07:08:34 +0800 Subject: [PATCH 7/9] radix test --- src/main.cpp | 18 ++++++++++++++++++ stream_compaction/efficient.cu | 15 ++++++--------- stream_compaction/efficient.h | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 600c29f..2491c67 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -147,6 +147,24 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + printf("\n"); + printf("*****************************\n"); + printf("** RADIX SORT TESTS **\n"); + printf("*****************************\n"); + + // Radixsort tests + + genArray(SIZE - 1, a, 20); // Leave a 0 at the end to test that edge case + printArray(SIZE, a, true); + + zeroArray(SIZE, b); + printDesc("Radix Sort"); + StreamCompaction::Efficient::radixSort(SIZE, b, a); + std::sort(a, a + SIZE); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(SIZE, a, true); + printCmpResult(NPOT, a, b); + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 43531ea..2346faf 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -5,7 +5,6 @@ #define blockSize 256 #define OPTIMIZED 1 -#define TIMESCAN 1 namespace StreamCompaction { namespace Efficient { @@ -71,7 +70,7 @@ namespace StreamCompaction { /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ - void scan(int n, int *odata, const int *idata) + void scan(int n, int *odata, const int *idata, bool timeScan) { int N = 1 << ilog2ceil(n); @@ -89,9 +88,8 @@ namespace StreamCompaction { int offset = 1; #endif -#if TIMESCAN - timer().startGpuTimer(); -#endif + if(timeScan) + timer().startGpuTimer(); // TODO #if OPTIMIZED for (int d = N >> 1; d > 0; d >>= 1) @@ -123,9 +121,8 @@ namespace StreamCompaction { } #endif -#if TIMESCAN - timer().endGpuTimer(); -#endif + if (timeScan) + timer().endGpuTimer(); cudaMemcpy(odata, dev_data, n * sizeof(int), cudaMemcpyDeviceToHost); checkCUDAErrorFn("cudaMemcpy dev_data to odata failed!"); @@ -277,7 +274,7 @@ namespace StreamCompaction { // Step1: Compute e array kernComputeEArray<<>>(n, d, dev_edata, dev_idata); // Step2: Scan e - scan(n, dev_fdata, dev_edata); + scan(n, dev_fdata, dev_edata, false); // Step3: Compute totalFalse int e_last; int f_last; diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 8efb4f4..2592aca 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -6,7 +6,7 @@ namespace StreamCompaction { namespace Efficient { StreamCompaction::Common::PerformanceTimer& timer(); - void scan(int n, int *odata, const int *idata); + void scan(int n, int *odata, const int *idata, bool timeScan = true); int compact(int n, int *odata, const int *idata); From c688f0dd6f1f57cf66a1e5e16890e01782013d8a Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 12:56:34 +0800 Subject: [PATCH 8/9] update readme --- README.md | 101 +++++++++++++++++++++++++++++++++--- img/out1.png | Bin 0 -> 115146 bytes img/out2.png | Bin 0 -> 57329 bytes img/out3.png | Bin 0 -> 16963 bytes src/main.cpp | 2 +- stream_compaction/thrust.cu | 3 +- 6 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 img/out1.png create mode 100644 img/out2.png create mode 100644 img/out3.png diff --git a/README.md b/README.md index 0e38ddb..ce1678c 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,101 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE - * (TODO) [LinkedIn](), [personal website](), [twitter](), etc. -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Xinyu Niu + * [personal website](https://xinyuniu6.wixsite.com/my-site-1) +* Tested on: Windows 11, i9-13980HX @ 2.20GHz 16GB, RTX 4070 16185MB (Personal) -### (TODO: Your README) -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +## Introduction +This project focuses on implementing *Scan* (*Prefix Sum*) and *Stream Compaction* algorithms in CUDA. Scan algorithms are about doing prefix sum on an array, and Stream Compaction algorithm is about removing elements that meet some given conditions from an array. In this project, the stream compaction implementations will remove `0`s from an array of `int`s. + +## Implemented Features + +In this project, I completed the following features: + +* CPU Scan & Stream Compaction +* Naive GPU Scan Algorithm +* Work-Efficient GPU Scan & Stream Compaction +* GPU Scan using Thrust +* Optimized Work-Efficient GPU Scan(Extra Credit) +* Radix Sort (Extra Credit) + +## Performance Analysis +## Output +``` +**************** +** SCAN TESTS ** +**************** + [ 18 18 46 13 26 17 26 3 8 27 14 46 5 ... 33 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 0ms (std::chrono Measured) + [ 0 18 36 82 95 121 138 164 167 175 202 216 262 ... 410791936 410791969 ] +==== cpu scan, non-power-of-two ==== + elapsed time: 0ms (std::chrono Measured) + [ 0 18 36 82 95 121 138 164 167 175 202 216 262 ... 410791854 410791889 ] + passed +==== naive scan, power-of-two ==== + elapsed time: 17.4608ms (CUDA Measured) + passed +==== naive scan, non-power-of-two ==== + elapsed time: 17.1901ms (CUDA Measured) + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 6.80093ms (CUDA Measured) + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 6.6815ms (CUDA Measured) + passed +==== thrust scan, power-of-two ==== + elapsed time: 1.46637ms (CUDA Measured) + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 1.10493ms (CUDA Measured) + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 0 2 2 3 0 3 2 3 2 3 2 0 3 ... 3 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 32.9866ms (std::chrono Measured) + [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 2 3 ] + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 32.8308ms (std::chrono Measured) + [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 3 1 ] + passed +==== cpu compact with scan ==== + elapsed time: 60.2923ms (std::chrono Measured) + [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 2 3 ] + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 11.0502ms (CUDA Measured) + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 11.5582ms (CUDA Measured) + passed + +``` +## Extra Credit +**1. Optimized GPU Efficient Scan** + +I attempted to optimize the performance by adjusting blocks launched at during the loop for upper sweep and down sweep. During upper sweep, each iteration the block number shrinks to half. During down sweep, each iteration the block number expands to twice. + +**2. Radix Sort** + +I have implemented the Radix Sort algorithm, which can be called using ```StreamCompaction::Efficient::radixSort()```. + +The below output resulted from comparing the sorted arry using my implementation and std::sort. + +``` +***************************** +** RADIX SORT TESTS ** +***************************** + [ 0 17 0 16 17 5 18 9 5 18 19 18 10 ... 3 0 ] +==== Radix Sort ==== + elapsed time: 8.7022ms (std::chrono Measured) + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 19 19 ] + passed +``` \ No newline at end of file diff --git a/img/out1.png b/img/out1.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0bff8eee7a7f5750922c825908f102d376c0e5 GIT binary patch literal 115146 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 literal 0 HcmV?d00001 diff --git a/img/out2.png b/img/out2.png new file mode 100644 index 0000000000000000000000000000000000000000..39d30af482683cf654883d12abe41b03e27af8d5 GIT binary patch literal 57329 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 X)bP>kT>IZHv^Q$1>)wLhunzk_>@%zI literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 2491c67..19c39ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 20; // feel free to change the size of array +const int SIZE = 1 << 24; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index f24ca5c..bbc2b35 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,7 +18,8 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { - thrust::device_vector dev_idata(idata, idata + n); + int N = 1 << ilog2ceil(n); + thrust::device_vector dev_idata(idata, idata + N); thrust::device_vector dev_odata = dev_idata; timer().startGpuTimer(); From 9543fc40530ede48f4b91c01ee0e254efde76c34 Mon Sep 17 00:00:00 2001 From: xinyuniu123 Date: Sat, 16 Sep 2023 16:24:38 +0800 Subject: [PATCH 9/9] update readme --- README.md | 59 ++++++++++++++++++++++++++------------- img/arraysize.png | Bin 0 -> 24887 bytes img/blocksize.png | Bin 0 -> 21525 bytes img/thrust.png | Bin 0 -> 64432 bytes src/main.cpp | 12 +++++++- stream_compaction/cpu.cu | 13 ++++++--- 6 files changed, 59 insertions(+), 25 deletions(-) create mode 100644 img/arraysize.png create mode 100644 img/blocksize.png create mode 100644 img/thrust.png diff --git a/README.md b/README.md index ce1678c..798c52b 100644 --- a/README.md +++ b/README.md @@ -24,59 +24,78 @@ In this project, I completed the following features: * Radix Sort (Extra Credit) ## Performance Analysis + +![](img/blocksize.png) + +**Figure 1:** Change on Elapsed Time influenced by increasing blocksize with fixed array size(2^25) + +From Figure 1, we can observe that before blocksize = 32 is reached, blocksize has relatively significant effect on time elapsed, and a larger blocksize leads to better performance for all three implementations. After 32 is reached, the blocksize no longer has considerable inflence on time elapsed. And we can also observe that before optimization, the efficient scan is not actually efficient. This is causing by the inefficient use of threads, since there will be idle threads as we always launch the same number of blocks for each iteration. By compacting threads, using shared memory etc. we can reduce this inefficiency. + +![](img/arraysize.png) + +**Figure 2:** Change on Elapsed Time influenced by increasing arraysize with fixed blocksize(256) + +From Figure 2, we can observe that when arraysize gets larger and over a certain number(from the data collected it's about 2^22), there will be significant increase on elapsed time and we can clearly see the difference in performance of different scan method. From faster to slower, the rank of methods is: ```thrust > efficient GPU scan > Naive GPU scan > CPU scan```. When arraysize is smaller, although it's hard to observe from the graph, CPU appears to have a bit better performance than the two algorithm I implemented while thrust is still the fastest one. + +![](img/thrust.png) + +**Figure 3:** NSight trace result of only allowing CPU scans and thrust scans + +From Figure 3, we can see that the largest part of thrust is the use of ```cudaMemcpyAsync``` and ```cudaStreamSynchronize```, which allows control to be returned to the host thread immediately so we won't need to wait until the data copy is completed. Since we are using cudaMemcpy in our implementation, this waiting time might be a bottleneck. + ## Output ``` **************** ** SCAN TESTS ** **************** - [ 18 18 46 13 26 17 26 3 8 27 14 46 5 ... 33 0 ] + [ 0 13 20 46 19 36 9 0 15 22 27 38 11 ... 18 0 ] ==== cpu scan, power-of-two ==== - elapsed time: 0ms (std::chrono Measured) - [ 0 18 36 82 95 121 138 164 167 175 202 216 262 ... 410791936 410791969 ] + elapsed time: 428.08ms (std::chrono Measured) + [ 0 0 13 33 79 98 134 143 143 158 180 207 245 ... -2015722115 -2015722097 ] ==== cpu scan, non-power-of-two ==== - elapsed time: 0ms (std::chrono Measured) - [ 0 18 36 82 95 121 138 164 167 175 202 216 262 ... 410791854 410791889 ] + elapsed time: 425.212ms (std::chrono Measured) + [ 0 0 13 33 79 98 134 143 143 158 180 207 245 ... -2015722147 -2015722135 ] passed ==== naive scan, power-of-two ==== - elapsed time: 17.4608ms (CUDA Measured) + elapsed time: 314.354ms (CUDA Measured) passed ==== naive scan, non-power-of-two ==== - elapsed time: 17.1901ms (CUDA Measured) + elapsed time: 334.496ms (CUDA Measured) passed ==== work-efficient scan, power-of-two ==== - elapsed time: 6.80093ms (CUDA Measured) + elapsed time: 96.6155ms (CUDA Measured) passed ==== work-efficient scan, non-power-of-two ==== - elapsed time: 6.6815ms (CUDA Measured) + elapsed time: 97.165ms (CUDA Measured) passed ==== thrust scan, power-of-two ==== - elapsed time: 1.46637ms (CUDA Measured) + elapsed time: 10.5397ms (CUDA Measured) passed ==== thrust scan, non-power-of-two ==== - elapsed time: 1.10493ms (CUDA Measured) + elapsed time: 12.058ms (CUDA Measured) passed ***************************** ** STREAM COMPACTION TESTS ** ***************************** - [ 0 2 2 3 0 3 2 3 2 3 2 0 3 ... 3 0 ] + [ 2 0 0 0 0 0 0 0 2 0 0 2 0 ... 0 0 ] ==== cpu compact without scan, power-of-two ==== - elapsed time: 32.9866ms (std::chrono Measured) - [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 2 3 ] + elapsed time: 425.212ms (std::chrono Measured) + [ 2 2 2 3 2 1 2 3 1 1 3 3 2 ... 1 3 ] passed ==== cpu compact without scan, non-power-of-two ==== - elapsed time: 32.8308ms (std::chrono Measured) - [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 3 1 ] + elapsed time: 425.212ms (std::chrono Measured) + [ 2 2 2 3 2 1 2 3 1 1 3 3 2 ... 1 1 ] passed ==== cpu compact with scan ==== - elapsed time: 60.2923ms (std::chrono Measured) - [ 2 2 3 3 2 3 2 3 2 3 2 2 1 ... 2 3 ] + elapsed time: 2080.47ms (std::chrono Measured) + [ 2 2 2 3 2 1 2 3 1 1 3 3 2 ... 1 3 ] passed ==== work-efficient compact, power-of-two ==== - elapsed time: 11.0502ms (CUDA Measured) + elapsed time: 202.213ms (CUDA Measured) passed ==== work-efficient compact, non-power-of-two ==== - elapsed time: 11.5582ms (CUDA Measured) + elapsed time: 188.192ms (CUDA Measured) passed ``` diff --git a/img/arraysize.png b/img/arraysize.png new file mode 100644 index 0000000000000000000000000000000000000000..98ca4f52bf644ee751c0494159d29ced16642d06 GIT binary patch literal 24887 zcmd?QXIN8R*DZ_{Q2_zH5u^yxr6|3FfYL!JB3-0Pm0m(q5Cla!kzNEMQX*YSKtZL1 z-U5UoQbGu!CIJG0v*Rs3&--5I`+NR;KQx-`z4lsj%{9lEW6m9OUr(L-Jo9-93JPjX z4K)J_ic|L~C{Bc*I}3dCzA-|Ig5vR^rrI5&0ISt$s;tYSu$`m*A$8bo#fJXv*gaHG zGKvTBZdqbR&iP0KU;p?#AA2G3`xU9n-_J-XpPo=NN(f2RwWCa& zKH*^92-!I#q5LzLL3$?rMhKn$q3ytJS&`!Yl8JnBbY@tI>rmXz!%&P2Snu#l=)GMn9LGwzmh`1F29;%lifX39k zG_eZ&-n>MS5l?ZZCj83HhvK_=77boSFpcQZH1^$I*gB(iaOGFb*5UrT6ex3phZN|4 zb7wZJ^)e$Pvb6SGJ%W`wgoH5$w{4kg>MsLNn;k&R#qj1NY|eKebt|CewqBMk?>CyPLlG`Q^FQK} zd2@q@nkgxEfgR4^zjW?hzNV}Z-_?s5NBFw2_kkIpTffS3b$G;960GAC`elRlk!+#6 zHccgWKf~5`e-zw(-LqZozi!o3GKlEat$_Pq4&8yT2bC9n_|Pe@7(z?20oX}=xb5YI zUdp6xH=^8nv#q-etatBO`G*e)bM4WYbC;p5he641&iIv42d5;OkVZ^J(?X&;TVhu- zFCy2Yh*Guja3EjRl9mOZ8Ro_=YNru0{pTYi7Fy2^E;s-{+y_FNWn zB389^?`R=ezh{21LoQ(B@!m!|t@jG`r}}g&h-!QdNRfq&-C- z43GXEVWyeaGn?vI<%oOx4QVV(7NwYmM^}tb!P_Tuy-foY&r+H zaaK|!44Q&Ksi19#5D#*#rz=|g%usdKR^qie(=+tz5DS8d0)E7BNg|)|{BMINhrYs4 z{*0o&)`P`k5Shq+g`KS01u6D45g0CM@2F31Jtc;LS8}45{jFY;WtRQO1(D`~pOuA~ zN?|Qe_kTvv_F&Ik_{Yu_&cD6XTWZ~3Qtjb*Q|nX~jcpCGX8Ew;jJy;f1cE?6PlI9O zl@33D74_5fsIGUc#&}QgLRu<2KHwUbo9 z*i^Q)c{u*r^L+{8=kgEJ{+pmZ3qpU1e(uzF{(kvwoe0D?%xtMe&V}ig!|XcnaEwG& zuJ`CjkYAHGa($m4O!C#qRh+Kzn5^k?KS>T_PEl1=qT6>0XPISZdoV{q=9pTA?Cr0` zDE5?;lmPePiElN!(U!~g?}_Dwp{nSqdfU;D#>ILdYFClggQ}G+%1EDd5{s-yM8Cj!Kl7UCz;!qtRTS1kwwnMWX4l!YN2MbKS!gn? zPLvN@C3diZdPXoUvXtK&%i1yPRoxx??dcl!*vVSFFFK3lQU*9-r#;|>wJ3GoUzOI$ zIHvjLLs<7>!vNMLo3QKjZeZWK+Ci73IKIDf*AO#-?Q?4-`ye8J|AU)O#mV2H#Ac}{ zeJP?dhsQMfy%Ves;;kr%r|27dlzGijBm^V zpPYG!@csh+wyXlD>_S&Q648juPy21LZ`1_wAIvN@R@Um#h>qE-j@Kq)*$UIZV1!66 zTu~O;Noe|21KF-Va!2~RlvY$!KoK!FS(pQADoRj2Sbx*Sc~ZXWPK_RNN_v0rk*9gf z?FmA^sXu@f)GOHtwH^2ze%)BO|7G>+P?7d<+GTHc04a3;+a~UC$u|tj!{_cRi!Ikj z5bvaf=9S>;##}(MDAhr?7coC3S%|uYY!oX}iG3lEu&Xy&pA`8{+WveNbww{zvb;sF zmE=E$U@I&)ug}0D=a;6}RG&T?s>DqeQ|8vz*5cjzq&g>JNxD9g?mO5Kv{Wq(_1ich zQ~y0Q3q8fAZd)a^4tR=e z6J#b(7uPHojc7G#kY{WRDX*So=mVc2%;O76@T-2Py4f8=;eE`2o3nWfkLL;5QztL~ zOr}Zxq*OMgMU;@rlCAed$JL@K8`;R@|p6_Z

pIY!->kdu#0qR=qCOS*TuXT04w_j$ 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 F{TqPhYux|< literal 0 HcmV?d00001 diff --git a/img/blocksize.png b/img/blocksize.png new file mode 100644 index 0000000000000000000000000000000000000000..3c80b5655ee3010eaec57a559ec4610224df30a8 GIT binary patch literal 21525 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 literal 0 HcmV?d00001 diff --git a/img/thrust.png b/img/thrust.png new file mode 100644 index 0000000000000000000000000000000000000000..9863e6de7d5fbcc809e2e574f12c330586fbb8f8 GIT binary patch literal 64432 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 qx$=7%JoWDJgMz}}+mc1eZ #include "testing_helpers.hpp" -const int SIZE = 1 << 24; // feel free to change the size of array +const int SIZE = 1 << 28; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; int *c = new int[SIZE]; +# define NOTESTTHRUST 1 + int main(int argc, char* argv[]) { // Scan tests @@ -47,6 +49,8 @@ int main(int argc, char* argv[]) { printArray(NPOT, b, true); printCmpResult(NPOT, b, c); +#if NOTESTTHRUST + zeroArray(SIZE, c); printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); @@ -81,6 +85,8 @@ int main(int argc, char* argv[]) { //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); +#endif + zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); StreamCompaction::Thrust::scan(SIZE, c, a); @@ -95,6 +101,8 @@ int main(int argc, char* argv[]) { //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); +#if NOTESTTHRUST + printf("\n"); printf("*****************************\n"); printf("** STREAM COMPACTION TESTS **\n"); @@ -165,6 +173,8 @@ int main(int argc, char* argv[]) { printArray(SIZE, a, true); printCmpResult(NPOT, a, b); +#endif + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index f01c534..07afdf4 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -3,6 +3,8 @@ #include "common.h" +int gNonCompact = 1; + namespace StreamCompaction { namespace CPU { using StreamCompaction::Common::PerformanceTimer; @@ -18,14 +20,16 @@ namespace StreamCompaction { * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. */ void scan(int n, int *odata, const int *idata) { - //timer().startCpuTimer(); + if(gNonCompact) + timer().startCpuTimer(); // TODO odata[0] = 0; for (int i = 1; i < n; i++) { odata[i] = odata[i - 1] + idata[i - 1]; } - //timer().endCpuTimer(); + if(gNonCompact) + timer().endCpuTimer(); } /** @@ -34,7 +38,7 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithoutScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); + //timer().startCpuTimer(); // TODO int count = 0; for (int i = 0; i < n; i++) @@ -45,7 +49,7 @@ namespace StreamCompaction { count++; } } - timer().endCpuTimer(); + //timer().endCpuTimer(); return count; } @@ -55,6 +59,7 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + gNonCompact = 0; timer().startCpuTimer(); // TODO // Step1: map