From 3198e9078924b690dfb29634dac63ee05a4805a4 Mon Sep 17 00:00:00 2001 From: Wayne Wu Date: Tue, 21 Sep 2021 23:48:15 -0400 Subject: [PATCH] project 2 completed with readme for first submission --- README.md | 187 ++++++++++++++++++- img/compact-performance.png | Bin 0 -> 22701 bytes img/efficient-blocksize.png | Bin 0 -> 16321 bytes img/naive-blocksize.png | Bin 0 -> 18161 bytes img/scan-performance-npot.png | Bin 0 -> 23457 bytes img/scan-performance.png | Bin 0 -> 24657 bytes img/thrust-timeline.png | Bin 0 -> 91053 bytes src/main.cpp | 32 +++- stream_compaction/common.cu | 13 +- stream_compaction/common.h | 6 + stream_compaction/cpu.cu | 61 ++++++- stream_compaction/efficient.cu | 316 ++++++++++++++++++++++++++++++++- stream_compaction/efficient.h | 2 + stream_compaction/naive.cu | 63 ++++++- stream_compaction/thrust.cu | 14 +- 15 files changed, 660 insertions(+), 34 deletions(-) create mode 100644 img/compact-performance.png create mode 100644 img/efficient-blocksize.png create mode 100644 img/naive-blocksize.png create mode 100644 img/scan-performance-npot.png create mode 100644 img/scan-performance.png create mode 100644 img/thrust-timeline.png diff --git a/README.md b/README.md index 0e38ddb..9c439d5 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,187 @@ 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) +* Wayne Wu + * [LinkedIn](https://www.linkedin.com/in/wayne-wu/), [Personal Website](https://www.wuwayne.com/) +* Tested on: Windows 10, AMD Ryzen 5 5600X @ 3.70GHz 32GB, RTX 3070 8GB (personal) -### (TODO: Your README) +## Background -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +This project examines two fundamental GPU programming algorithms, **Scan** and **Stream Compaction**. +### Scan +Scanning is the process of calculating the prefix sums of all elements in an array. Five different implementations are examined in this project: + +1. **CPU**: +Non-parallelized scanning in CPU. +2. **GPU Naive**: +Naively parallelized setup. +3. **GPU Work Efficient**: +Parallelized setup that reduces the amount of work required by breaking the scanning process into two phases: reduce phase and down-sweep phase. See `kernUpSweep()` and `kernDownSweep()` kernels for implementation details. +4. **GPU Work Efficient with Shared Memory (Extra Credit)**: +Based on the concept from 3, both reduction and down-sweep phases are now done in one kernel (`kernScan()`) using shared memory. In order to support **an array of arbitrary size**, the implementation uses the block-sum method to recursively divide the array into manageable chunks by each block and aggregate divided results together using an auxiliary array (See `recursiveScan()`). +5. **GPU using Thrust API**: +Uses the `inclusive_scan()` call from the Thrust library. + +### Stream Compaction +Stream compaction is the process of only keeping the elements in an array that satisfy a specific condition, thereby compacting the array. Three different implementations are examined in this project: + +1. **CPU without Scan**: +Non-parallelized compaction without using scan functions. +2. **CPU with Scan** +Non-parallelized compaction that uses the scan and scatter paradigm of stream compaction. +3. **GPU Work Efficient** +Parallelized setup that uses the scan and scatter paradigm of stream compaction. +The scan function used is identical to Implementation 3 of scanning (i.e. `kernUpSweep()` and `kernDownSweep()`). + +### Power of Two +All implementations are made to support both an array size that is a power of two and one that isn't. + +## Optimal Block Sizes + +We begin by optimizing the block sizes for each implementation such that all implementations are analyzed and compared in the optimized state. + +### GPU Naive: **128** +![Figure 1](img/naive-blocksize.png) + +*Figure 1. GPU Naive Implementation Block Size Comparison* + +### GPU Work-Efficient: **128** +![Figure 2](img/efficient-blocksize.png) + +*Figure 2. GPU Work-Efficient (w/o Shared Memory) Implementation Block Size Comparison* + +It should be noted here that the algorithm also dynamically shrinks/grows the block size depending on the iteration depth, such that the index value does not overflow. 128 is the optimal starting block size. + + +### GPU Work-Efficient with Shared Memory: **128** +This implementation does not use a `blockSize` variable unlike the previous two methods. +Instead, a `B` variable is used which is the number of elements that will be processed by each block. +The actual number of threads required is `B/2`. + +The optimal `B` value is 128, as all other `B` values fail at `N = 2^25`. + +## Sample Output +Below is the output of the test program used for testing and timing the different implementations. `N = 2^24`. +``` +**************** +** SCAN TESTS ** +**************** + [ 3 42 32 13 26 31 45 7 20 2 5 1 10 ... 1 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 9.7722ms (std::chrono Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841500 410841500 ] +==== cpu scan, non-power-of-two ==== + elapsed time: 9.9391ms (std::chrono Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841449 410841488 ] + passed +==== naive scan, power-of-two ==== + elapsed time: 9.41562ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841500 410841500 ] + passed +==== naive scan, non-power-of-two ==== + elapsed time: 9.46506ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 0 0 ] + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 4.65533ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841500 410841500 ] + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 4.6632ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841449 410841488 ] + passed +==== work-efficient scan (shared memory, recursive), power-of-two ==== + elapsed time: 0.965856ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841500 410841500 ] + passed +==== work-efficient scan (shared memory, recursive), non-power-of-two ==== + elapsed time: 1.99728ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841449 410841488 ] + passed +==== thrust scan, power-of-two ==== + elapsed time: 0.47568ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841500 410841500 ] + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 0.976416ms (CUDA Measured) + [ 3 45 77 90 116 147 192 199 219 221 226 227 237 ... 410841449 410841488 ] + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 0 2 2 1 0 0 3 2 2 2 1 1 3 ... 0 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 24.0027ms (std::chrono Measured) + [ 2 2 1 3 2 2 2 1 1 3 1 3 2 ... 3 3 ] + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 24.8678ms (std::chrono Measured) + [ 2 2 1 3 2 2 2 1 1 3 1 3 2 ... 3 3 ] + passed +==== cpu compact with scan ==== + elapsed time: 56.7523ms (std::chrono Measured) + [ 2 2 1 3 2 2 2 1 1 3 1 3 2 ... 3 3 ] + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 8.44557ms (CUDA Measured) + [ 2 2 1 3 2 2 2 1 1 3 1 3 2 ... 3 3 ] + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 8.28093ms (CUDA Measured) + [ 2 2 1 3 2 2 2 1 1 3 1 3 2 ... 3 3 ] + passed +Press any key to continue . . . + +``` + +## Performance Analysis + +### Scan +![Figure 3](img/scan-performance.png) + +*Figure 3. Scan Algorithm Performance Comparison (Power of 2)* + +From Figure 3, we can observe the following: +* **GPU Naive** implementation is equally inefficient as the CPU implementation +* **GPU Work-Efficient** implementation is better than the CPU implementation. +However the trajectory of the curve still implies that it is getting exponentially slower with larger elements. +* **GPU Work-Efficient with Shared Memory** is significantly more efficient than without shared memory. +* **GPU Thrust** implementation is the fastest out of all. + +#### GPU Work-Efficient +The work-efficient algorithm (without shared memory) is faster than the naive approach as there is overall less work to do for scanning. However, the performance bottlenecks are still noticeable as they mainly come from: +1. Accessing Global Memory - there are lots of read and write operations from/to the global memory. +2. Unused Threads - there are many threads that are unused, especially when the index offset is large. +3. Memory Random Access - global memory are accessed randomly with no particular order. + +To fix these, we can: +1. Use Shared Memory - this is essentially the shared memory scanning implementation as discussed in the next section. +2. Use Warp Partitioning - ensure that all the non-active threads are under the same warp so that the warp can be deactivated automatically once the warp is no longer in use. +3. Ensure Memory Coalescing - ensure that we're accessing memory contiguously by rearranging the data array in each iteration. + +#### GPU Work-Efficient with Shared Memory +By using shared memory, the need of accessing global memory is significantly reduced. Additionally, shared memory is faster with random memory access. Therefore, problem 1 and problem 3 from above are greatly alleviated. However, with the usage of shared memory, we also introduce a bottleneck from **bank conflicts**. As such, there is still space for improvement once we remove the bank conflicts. + +#### GPU Thrust +![Figure 4](img/thrust-timeline.png) + +*Figure 4. Nsight timeline for the Thrust implementation* + +If we look at the Nsight timeline for the Thrust implementation, we can see that it calls the `cudaMemcpyAsync` function instead of `cudaMemcpy` like all other implementations. This suggests that there may be an asynchronous process going on in Thrust's implementation that copies the buffer data while another process is running, thus having some performance gain. + +#### Non Power of 2 +![Figure 5](img/scan-performance-npot.png) + +*Figure 5. Scan Algorithm Performance Comparison (Non Power of 2)* + +There is no significant performance difference between power-of-two sized versus. non-power-of-two-sized arrays. + +### Stream Compaction +![Figure 6](img/compact-performance.png) + +*Figure 5. Stream Compaction Algorithm Performance Comparison (Non Power of 2)* + +As the stream compaction algorithm uses the GPU Work-Efficient (w/o Shared Memory) scan function, +it naturally follows the same performance result. Performance gain can be achieved by alleviating the problems discussed above. diff --git a/img/compact-performance.png b/img/compact-performance.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5133b28c7994942192565e82711024862db0da GIT binary patch literal 22701 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

xJhCub(f^y#B$)P5_4PSo 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 O^e>uRC_C@+>;C{0@1qs~ literal 0 HcmV?d00001 diff --git a/img/naive-blocksize.png b/img/naive-blocksize.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7c44ec5c4acf2d3833cecc615351d814272f54 GIT binary patch literal 18161 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 D&)8sK literal 0 HcmV?d00001 diff --git a/img/scan-performance.png b/img/scan-performance.png new file mode 100644 index 0000000000000000000000000000000000000000..05e9215e25791ffb9699e6bb6ee37df62d6a504e GIT binary patch literal 24657 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

_ocQqA-`)xpd&b@WJ- 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%0A8o*7j3Gp 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..bd99952 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 << 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]; @@ -51,7 +51,7 @@ int main(int argc, char* argv[]) { printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -64,35 +64,49 @@ int main(int argc, char* argv[]) { printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); + printCmpResult(NPOT, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient scan (shared memory, recursive), power-of-two"); + StreamCompaction::Efficient::recursiveScan(SIZE, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient scan (shared memory, recursive), non-power-of-two"); + StreamCompaction::Efficient::recursiveScan(NPOT, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); StreamCompaction::Thrust::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); StreamCompaction::Thrust::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); printf("\n"); @@ -137,14 +151,14 @@ int main(int argc, char* argv[]) { printDesc("work-efficient compact, power-of-two"); count = StreamCompaction::Efficient::compact(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); + printArray(count, c, true); printCmpLenResult(count, expectedCount, b, c); zeroArray(SIZE, c); printDesc("work-efficient compact, non-power-of-two"); count = StreamCompaction::Efficient::compact(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); + printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); system("pause"); // stop Win32 console from closing on exit diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..a6aabf3 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -23,7 +23,11 @@ namespace StreamCompaction { * which map to 0 will be removed, and elements which map to 1 will be kept. */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { - // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) + return; + + bools[index] = (idata[index] > 0) ? 1 : 0; } /** @@ -32,7 +36,12 @@ namespace StreamCompaction { */ __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { - // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) + return; + + if (bools[index] == 1) + odata[indices[index]] = idata[index]; } } diff --git a/stream_compaction/common.h b/stream_compaction/common.h index d2c1fed..0585831 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -30,6 +30,12 @@ inline int ilog2ceil(int x) { return x == 1 ? 0 : ilog2(x - 1) + 1; } +inline int imakepower2(int x) { + while ((x & (x - 1)) != 0) + ++x; + return x; +} + namespace StreamCompaction { namespace Common { __global__ void kernMapToBoolean(int n, int *bools, const int *idata); diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..bd988f8 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -19,7 +19,12 @@ namespace StreamCompaction { */ void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + + odata[0] = idata[0]; + for (int i = 1; i < n; i++) { + odata[i] = odata[i - 1] + idata[i]; + } + timer().endCpuTimer(); } @@ -30,9 +35,16 @@ namespace StreamCompaction { */ int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + + int j = 0; + for (int i = 0; i < n; i++) { + if (idata[i] > 0) { + odata[j++] = idata[i]; + } + } + timer().endCpuTimer(); - return -1; + return j; } /** @@ -41,10 +53,45 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - return -1; + + // criteria array + int* tmp = new int[n * sizeof(int)]; + int* scan_out = new int[n * sizeof(int)]; + + timer().startCpuTimer(); + + for (int i = 0; i < n; i++) { + tmp[i] = (idata[i] > 0) ? 1 : 0; + } + + // inclusive scan + scan_out[0] = tmp[0]; + for (int i = 1; i < n; i++) { + scan_out[i] = scan_out[i-1] + tmp[i]; + } + int N = scan_out[n - 1]; // total number + + // make exclusive + // shift array right + for (int i = n; i > 0; i--) { + scan_out[i] = scan_out[i-1]; + } + scan_out[0] = 0; // insert identity + + // scatter + + for (int i = 0; i < n; i++) { + if (tmp[i] > 0) { + odata[scan_out[i]] = idata[i]; + } + } + + timer().endCpuTimer(); + + free(tmp); + free(scan_out); + + return N; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..89f2ef7 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -1,8 +1,12 @@ #include #include +#include #include "common.h" #include "efficient.h" +#define blockSize 128 +#define B 128 // Number of elements processed per block + namespace StreamCompaction { namespace Efficient { using StreamCompaction::Common::PerformanceTimer; @@ -12,13 +16,252 @@ namespace StreamCompaction { return timer; } + __global__ void kernUpSweep(int N, int d, int* data) { + //parallel reduction + int index = threadIdx.x + (blockIdx.x * blockDim.x); + int k = index * 2 * d; + int r = k + 2 * d - 1; + int l = k + d - 1; + + if (r < N && r >= 0) { + // right node += left node + data[r] += data[l]; + } + } + + __global__ void kernUpdateElement(int i, int* arr, int val) { + arr[i] = val; + } + + __global__ void kernDownSweep(int N, int d, int* data) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + int k = index * 2 * d; + int r = k + 2 * d - 1; + int l = k + d - 1; + + if (r < N && r >= 0) { + int t = data[l]; //left child + data[l] = data[r]; //left child = right child (current) + data[r] += t; // right child += previous left child + } + } + + __global__ void kernMakeExclusive(int N, int* data, int auxOffset) { + + extern __shared__ int tmp[]; + + int tid = threadIdx.x; + int index = threadIdx.x + (blockDim.x * blockIdx.x); + if (index >= N) + return; + + tmp[tid] = data[auxOffset + index - 1]; + + __syncthreads(); + + data[auxOffset + index] = (index > 0) ? tmp[tid] : 0; + } + + __global__ void kernMakeInclusive(int N, int* odata, int* scan_data, int* idata) { + + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= N) { + return; + } + + if (index == N - 1) { + odata[index] = scan_data[index] + idata[index]; + } + else { + odata[index] = scan_data[index + 1]; + } + } + + __global__ void kernAddBlockSum(int N, int* data, int* aux, int dataOffset, int auxOffset) { + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < N) + data[dataOffset + index] += aux[auxOffset + blockIdx.x]; + } + + /** + * Performs the full scan inside a kernel instead of breaking it apart + */ + __global__ void kernScan(int N, int *data, int *aux, int dataOffset, int auxOffset) { + + extern __shared__ int temp[]; // dynamic shared array + + int tid = threadIdx.x; // [0 - B/2) + int idx = tid + blockDim.x * blockIdx.x; + int n = blockDim.x * 2; // B + + // NOTE: Is it fine to read and write to data arr in the same kernel? + temp[2 * tid] = data[dataOffset + 2 * idx]; + temp[2 * tid + 1] = data[dataOffset + 2 * idx + 1]; + + for (int d = 1; d < n; d <<= 1) { + + __syncthreads(); + + int k = tid * 2 * d; + int r = k + 2 * d - 1; + int l = k + d - 1; + if (r < n) { + temp[r] += temp[l]; + } + } + + __syncthreads(); + if (tid == blockDim.x - 1) + aux[auxOffset + blockIdx.x] = temp[n - 1]; + + __syncthreads(); + if (tid == 0) + temp[n - 1] = 0; // set root to 0 + + for (int d = n >> 1; d > 0; d >>= 1) { + + __syncthreads(); + + int k = tid * 2 * d; + int r = k + 2 * d - 1; + int l = k + d - 1; + if (r < n) { + int t = temp[l]; // left child + temp[l] = temp[r]; // left child = right child (current) + temp[r] += t; // right child += previous left child + } + } + + __syncthreads(); + + // make inclusive + if (tid == blockDim.x - 1) { + data[dataOffset + 2 * idx] = temp[2 * tid + 1]; + data[dataOffset + 2 * idx + 1] += temp[2 * tid + 1]; + } + else { + data[dataOffset + 2 * idx] = temp[2 * tid + 1]; + data[dataOffset + 2 * idx + 1] = temp[2 * tid + 2]; + } + } + + void recursiveScan(int n, int* dev_data, int* dev_aux, int dataOffset, int auxOffset, int *odata) { + int M = std::max(n / B, 1); + kernScan<<>> (M, dev_data, dev_aux, dataOffset, auxOffset); + checkCUDAErrorFn("kernScan Aux failed."); + + if (M > 1) { + recursiveScan(M, dev_aux, dev_aux, auxOffset, auxOffset + M, odata); + } + + int m = std::max(M / B, 1); + kernMakeExclusive<<>>(M, dev_aux, auxOffset); + checkCUDAErrorFn("kernMakeExclusive Aux failed."); + + kernAddBlockSum<<>>(n, dev_data, dev_aux, dataOffset, auxOffset); + checkCUDAErrorFn("kernAddBlockSum failed."); + } + + void recursiveScan(int n, int* odata, const int* idata) { + int N = imakepower2(n); + + int* dev_data; + int* dev_aux; + + cudaMalloc((void**)&dev_data, sizeof(int) * N); + checkCUDAErrorFn("dev_data malloc failed."); + cudaMalloc((void**)&dev_aux, sizeof(int) * N); // allocate maximum aux size + checkCUDAErrorFn("dev_aux malloc failed."); + + cudaMemcpy(dev_data, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + checkCUDAErrorFn("memCpy from idata to dev_data failed."); + + cudaMemset(dev_aux, 0, sizeof(int) * N); + checkCUDAErrorFn("aux memset failed."); + + timer().startGpuTimer(); + + recursiveScan(N, dev_data, dev_aux, 0, 0, odata); + + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_data, sizeof(int) * n, cudaMemcpyDeviceToHost); + checkCUDAErrorFn("memCpy from dev_data to odata failed."); + + cudaFree(dev_data); + cudaFree(dev_aux); + checkCUDAErrorFn("cudaFree failed."); + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); + + int N = imakepower2(n); + + int* dev_data; + int* dev_data2; + int* dev_aux; + + cudaMalloc((void**)&dev_data, sizeof(int) * N); + checkCUDAErrorFn("dev_data malloc failed."); + cudaMalloc((void**)&dev_data2, sizeof(int) * N); + checkCUDAErrorFn("dev_data malloc failed."); + + cudaMalloc((void**)&dev_aux, sizeof(int) * N); // allocate maximum aux size + checkCUDAErrorFn("dev_aux malloc failed."); + + cudaMemcpy(dev_data, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + checkCUDAErrorFn("memCpy from idata to dev_data failed."); + cudaMemcpy(dev_data2, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + checkCUDAErrorFn("memCpy from idata to dev_data2 failed."); + + cudaMemset(dev_aux, 0, sizeof(int) * N); + checkCUDAErrorFn("aux memset failed."); + + dim3 fullBlocksPerGrid((N + blockSize - 1) / blockSize); + + int T = blockSize; + int M = N / T; + + timer().startGpuTimer(); + + for (int d = 1; d < N; d <<= 1) { + while (T * d > N && T > 1) + T >>= 1; // shrink block size + kernUpSweep<<>>(N, d, dev_data); + M = std::max(M >> 1, 1); // divide by 2 + } + //cudaDeviceSynchronize(); + checkCUDAErrorFn("kernUpSweep failed."); + + // set last element to 0 + cudaMemset(dev_data + N - 1, 0, sizeof(int)); + checkCUDAErrorFn("memset failed."); + + M = 1; + for (int d = N >> 1; d > 0; d >>= 1) { + while (T * d < N && T < blockSize) + T <<= 1; // expand block size + kernDownSweep<<>>(N, d, dev_data); + M = std::min(M << 1, N / T); + } + //cudaDeviceSynchronize(); + checkCUDAErrorFn("kernDownSweep failed."); + + kernMakeInclusive<<>>(N, dev_data2, dev_data, dev_data2); + checkCUDAErrorFn("kernMakeInclusive failed."); + + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_data2, sizeof(int) * n, cudaMemcpyDeviceToHost); + checkCUDAErrorFn("memCpy from dev_data to odata failed."); + + cudaFree(dev_data); + cudaFree(dev_data2); + cudaFree(dev_aux); + checkCUDAErrorFn("cudaFree failed."); } /** @@ -31,10 +274,73 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { + int N = imakepower2(n); + + int* dev_idata; + int* dev_indices; + int* dev_bools; + int* dev_odata; + + cudaMalloc((void**)&dev_idata, sizeof(int) * N); + checkCUDAErrorFn("dev_idata malloc failed."); + cudaMalloc((void**)&dev_indices, sizeof(int) * N); + checkCUDAErrorFn("dev_indices malloc failed."); + cudaMalloc((void**)&dev_bools, sizeof(int) * N); + checkCUDAErrorFn("dev_bools malloc failed."); + + cudaMemcpy(dev_idata, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((N + blockSize - 1) / blockSize); + + int T = blockSize; + int M = N / T; + timer().startGpuTimer(); - // TODO + + StreamCompaction::Common::kernMapToBoolean<<>>(n, dev_bools, dev_idata); + checkCUDAErrorFn("kernMapToBoolean failed."); + + cudaMemcpy(dev_indices, dev_bools, sizeof(int) * n, cudaMemcpyDeviceToDevice); + + for (int d = 1; d < N; d <<= 1) { + while (T * d > N && T > 1) + T >>= 1; // shrink block size + kernUpSweep<<>>(N, d, dev_indices); + M = std::max(M >> 1, 1); // divide by 2 + } + checkCUDAErrorFn("kernUpSweep failed."); + + // grab the size + int L; + cudaMemcpy(&L, &dev_indices[N-1], sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorFn("memcpy dev_indices failed."); + cudaMalloc((void**)&dev_odata, sizeof(int) * L); + + cudaMemset(&dev_indices[N - 1], 0, sizeof(int)); + + M = 1; + for (int d = N >> 1; d > 0; d >>= 1) { + while (T * d < N && T < blockSize) + T <<= 1; // expand block size + kernDownSweep<<>>(N, d, dev_indices); + M = std::min(M << 1, N / T); + } + checkCUDAErrorFn("kernDownSweep failed."); + + StreamCompaction::Common::kernScatter<<>>(N, dev_odata, dev_idata, dev_bools, dev_indices); + checkCUDAErrorFn("kernScatter failed."); + timer().endGpuTimer(); - return -1; + + cudaMemcpy(odata, dev_odata, sizeof(int) * L, cudaMemcpyDeviceToHost); + checkCUDAErrorFn("memCpy from dev_data to odata failed."); + + cudaFree(dev_bools); + cudaFree(dev_idata); + cudaFree(dev_indices); + cudaFree(dev_odata); + + return L; } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..432f0ed 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -6,6 +6,8 @@ namespace StreamCompaction { namespace Efficient { StreamCompaction::Common::PerformanceTimer& timer(); + void recursiveScan(int n, int* odata, const int* idata); + void scan(int n, int *odata, const int *idata); int compact(int n, int *odata, const int *idata); diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..2d91428 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +#define blockSize 128 + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -11,15 +13,68 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } - // TODO: __global__ + + int* dev_odata; + int* dev_idata; + + __global__ void kernPrefixSum(int n, int offset, int *out, const int *in) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + out[index] = in[index]; + if (index >= offset) + out[index] += in[index - offset]; + } + + __global__ void kernShiftRight(int n, int* odata, const int* idata) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) + return; + + // make exclusive + odata[index] = (index > 0) ? idata[index - 1] : 0; + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); + + // TODO: see if there's better way to force power of 2 + int N = imakepower2(n); + + dim3 fullBlocksPerGrid((N + blockSize - 1) / blockSize); + + cudaMalloc((void **)&dev_odata, sizeof(int) * N); + checkCUDAErrorFn("dev_odata malloc failed."); + cudaMalloc((void **)&dev_idata, sizeof(int) * N); + checkCUDAErrorFn("dev_idata malloc failed."); + + cudaMemcpy(dev_idata, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + checkCUDAErrorFn("memCpy idata to dev_idata failed."); + + timer().startGpuTimer(); + + for (int d = 1; d < N; d *= 2) { + // Copy dev_odata to dev_idata (to be used as input for the next iteration) + kernPrefixSum<<>>(N, d, dev_odata, dev_idata); + + int* tmp = dev_idata; + dev_idata = dev_odata; + dev_odata = tmp; + } + + timer().endGpuTimer(); + checkCUDAErrorFn("kernPrefixSum failed."); + + cudaMemcpy(odata, dev_idata, sizeof(int) * n, cudaMemcpyDeviceToHost); + checkCUDAErrorFn("memCpy dev_odata1 to odata failed."); + + cudaFree(dev_odata); + cudaFree(dev_idata); + checkCUDAErrorFn("cudaFree failed."); } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..cb33e2c 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,23 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + + int N = imakepower2(n); + + thrust::device_vector dv_in(idata, idata + N); + thrust::device_vector dv_out(N); + 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::inclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); timer().endGpuTimer(); + + thrust::host_vector h_out = dv_out; + + // TODO: not sure why I can't just do odata = &h_out[0]; + for (int i = 0; i < N; i++) + odata[i] = h_out[i]; } } }