From c577de86a933574899799cb520d885b33e203587 Mon Sep 17 00:00:00 2001 From: Jonas Oppenheim Date: Sun, 19 Sep 2021 01:42:50 -0400 Subject: [PATCH 1/2] Implement parts 1-4 and bonus part 7 --- README.md | 137 ++++++++++++++++++-- img/compaction.jpg | Bin 0 -> 42158 bytes img/download.png | Bin 0 -> 32864 bytes src/main.cpp | 61 +++++---- stream_compaction/cpu.cu | 38 +++++- stream_compaction/efficient.cu | 229 +++++++++++++++++++++++++++++++-- stream_compaction/efficient.h | 4 +- stream_compaction/naive.cu | 66 +++++++++- stream_compaction/thrust.cu | 19 ++- 9 files changed, 497 insertions(+), 57 deletions(-) create mode 100644 img/compaction.jpg create mode 100644 img/download.png diff --git a/README.md b/README.md index 0e38ddb..52e95dc 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,133 @@ -CUDA Stream Compaction -====================== +**University of Pennsylvania, CIS 565: GPU Programming and Architecture** +# Project 2 - CUDA Stream Compaction -**University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** +* Jonas Oppenheim ([LinkedIn](https://www.linkedin.com/in/jonasoppenheim/), [GitHub](https://github.com/oppenheimj/), [personal](http://www.jonasoppenheim.com/)) +* Tested on: Windows 10, Ryzen 9 5950x, 32GB, RTX 3080 (personal machine) -* (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) +Star Wars trash compactor scene -### (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 is the second project of my GPU Programming course at UPenn. The goal of this project was to implement two different algorithms both on the CPU and GPU and compare performance. Specifically, we were tasked with implementing the scan and stream compaction algorithms. Brief descriptions of both follow. +The [scan](https://en.wikipedia.org/wiki/Prefix_sum) algorithm involves summing array elements up to each index. For example, given array X=[x1, x2, ..., xn], the output would be [x1, x1+x2, x1+x2+x3, ..., x1+..+xn]. The two variations of this algorithm are _inclusive_ and _exclusive_ scan and the distinction between these variations is uninteresting. The stream compaction algorithm is essentially a high performance filter operation that is commonly used to remove zeros from an array. Stream compaction uses the scan algorithm as one of its steps. What these two algorithms have in common is that they are simple to understand, trivial to implement on the CPU, but _embarassingly parallel_, meaning that they're begging to be implemented on the GPU. The details underling both algorithms and their parallel implementations are provided in [Chapter 39 of GPU Gems 3](https://developer.nvidia.com/gpugems/gpugems3/part-vi-gpu-computing/chapter-39-parallel-prefix-sum-scan-cuda). + +I implemented parts 1 - 4, and bonus part 7 using shared memory in the GPU Efficient Scan kernel. + +The next section covers a performance overview of the various implementations and the final section contains my concluding thoughts about the assignment. + +## Performance analysis +The plot below shows that as the problem size increases, most implementations take longer. The abrupt jump of some of the lines shows that most of the time taken by some algorithms is due to overhead instead of solving the problem. The Thrust library is clearly (and unsurprisingly) the most optimized. These tests were done with a block size of 256 becuase that seemed to work best up to 2^20. + +It is seen that most of the GPU implementations are slower than the CPU equivalents. The two major GPU slowdowns that come to mind are a) copying data to the GPU with `cudamemcpy()` and accessing global memory inside the kernals, which was sometimes necessary. Clearly an optimized implementation on the GPU _far_ outperforms the CPU equivalent, since GPU Thrust does best. + +graph + +Two things that made performance analysis difficult were that +- Efficient stream compaction (`Eff Comp`) used the efficient scan (`Efficient Scan`) code between its two kernels. I ended up only measuring the time it took to run the first kernel, `kernMapToBoolean`. +- Efficient scan (`Efficient Scan`) is a recursive algorithm with a lot of memory allocation at each recursive call. I ended up only measuring the duration of the kernels at the top level of recursion. + +I would have liked to test arrays beyond 2^20 but I had a bug that I described on Piazza. +## Program output +``` +**************** +** SCAN TESTS ** +**************** + [ 8 18 44 9 36 16 44 17 6 39 36 19 10 ... 42 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 0.0061ms (std::chrono Measured) + +==== cpu scan, non-power-of-two ==== + elapsed time: 0.007ms (std::chrono Measured) + passed + +==== naive scan, power-of-two ==== + elapsed time: 0.591936ms (CUDA Measured) + passed + +==== naive scan, non-power-of-two ==== + elapsed time: 0.576512ms (CUDA Measured) + passed + +==== work-efficient scan, power-of-two ==== + +paddedN: 16384 +grid size: 32 +block size: 256 + +paddedN: 32 +grid size: 1 +block size: 16 + elapsed time: 0ms (CUDA Measured) + passed + +==== work-efficient scan, non-power-of-two ==== + +paddedN: 16384 +grid size: 32 +block size: 256 + +paddedN: 32 +grid size: 1 +block size: 16 + elapsed time: 0ms (CUDA Measured) + passed + +==== thrust scan, power-of-two ==== + elapsed time: 0.195584ms (CUDA Measured) + passed + +==== thrust scan, non-power-of-two ==== + elapsed time: 0.041984ms (CUDA Measured) + passed + + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 0 0 1 0 2 2 3 1 3 3 0 3 2 ... 2 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 0.0285ms (std::chrono Measured) + passed + +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 0.0255ms (std::chrono Measured) + passed + +==== cpu compact with scan ==== + elapsed time: 0.0806ms (std::chrono Measured) + passed + +==== work-efficient compact, power-of-two ==== + +paddedN: 16384 +grid size: 32 +block size: 256 + +paddedN: 32 +grid size: 1 +block size: 16 + elapsed time: 0.045056ms (CUDA Measured) + [ 1 2 2 3 1 3 3 3 2 3 1 1 2 ... 1 2 ] + passed + +==== work-efficient compact, non-power-of-two ==== + +paddedN: 16384 +grid size: 32 +block size: 256 + +paddedN: 32 +grid size: 1 +block size: 16 + elapsed time: 0.041984ms (CUDA Measured) + [ 1 2 2 3 1 3 3 3 2 3 1 1 2 ... 1 3 ] + passed + +Press any key to continue . . . +``` + +## Concluding thoughts +- The work-efficient parallel scan algorithm was the most complicated code I've ever written. While coding, I felt as though I was building a card castle in my mind and any distraction would knock it over and I'd have to start over. It just required a large mental cache in order to make progress. I'm proud of my solution, but there is an odd off-by-1 error (that I reported on Piazza) when n gets larger than 2^20, for certain block sizes. But my recursion and parallelism clearly work, even when the block size is 4 with 2^18 elements. +- I think that well-written CPU code is self-documenting; if you use descriptive variable and function names, and give each function a single purpose, then there is little need for code comments. I'm starting to believe that no matter how nicely written CUDA code is, it will always require comments for a future reader. With CPU code, I may sacrifice some performance for readability. With GPU code, I'm realizing that all readability is sacrificed for performance. Machine-efficient code is simply not readable. +- I think this may be a good assignment to start with because it allows us to discover clearly how to take a simple CPU algorithm and implement it on the GPU for maximum performance. Also, we were shown how there are many ways the algorithms can be optimized, but I was a little frustrated that that lecture was *the day before* this was due. I think we could get a lot out of spending time optimizing this algorithm. \ No newline at end of file diff --git a/img/compaction.jpg b/img/compaction.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9fe6423e2a7641c5c40fb17a8cb3205885a66247 GIT binary patch literal 42158 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

5EVig`;uOZiUuzn6tay4 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

O#&j!nuSq96_+y4N9 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 OpM#lJBOgE_3p8Ae1T@zNF|E_$tTp)ofab| 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 V3g`9Ex!?$_g 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�(^IXNBKoTe`_ad6yP>Us+zT*TE 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 #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 14; const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; int *c = new int[SIZE]; int main(int argc, char* argv[]) { - // Scan tests - printf("\n"); printf("****************\n"); printf("** SCAN TESTS **\n"); printf("****************\n"); - genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case + genArray(SIZE - 1, a, 50); + // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; printArray(SIZE, a, true); - // initialize b using StreamCompaction::CPU::scan you implement - // We use b for further comparison. Make sure your StreamCompaction::CPU::scan is correct. - // At first all cases passed because b && c are all zeroes. + // This populates b, which is used for later comparisons. zeroArray(SIZE, b); printDesc("cpu scan, power-of-two"); StreamCompaction::CPU::scan(SIZE, b, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(SIZE, b, true); + //printArray(SIZE, b, true); + std::cout << std::endl; + + // We have arrays a, b, and c. + // a - This array contains the original data + // b - This array we initialized with our CPU::scan() function + // c - This array is blank and gets repeatedly populated and then wiped each test zeroArray(SIZE, c); printDesc("cpu scan, non-power-of-two"); StreamCompaction::CPU::scan(NPOT, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(NPOT, b, true); + //printArray(NPOT, b, true); printCmpResult(NPOT, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("naive scan, power-of-two"); @@ -53,12 +57,13 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(SIZE, c, true); printCmpResult(SIZE, b, c); + std::cout << std::endl; - /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan - onesArray(SIZE, c); - printDesc("1s array for finding bugs"); - StreamCompaction::Naive::scan(SIZE, c, a); - printArray(SIZE, c, true); */ + ///* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan + //onesArray(SIZE, c); + //printDesc("1s array for finding bugs"); + //StreamCompaction::Naive::scan(SIZE, c, a); + //printArray(SIZE, c, true); */ zeroArray(SIZE, c); printDesc("naive scan, non-power-of-two"); @@ -66,6 +71,7 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(SIZE, c, true); printCmpResult(NPOT, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); @@ -73,6 +79,7 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(SIZE, c, true); printCmpResult(SIZE, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); @@ -80,6 +87,7 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); @@ -87,6 +95,7 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(SIZE, c, true); printCmpResult(SIZE, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); @@ -94,15 +103,15 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); + std::cout << std::endl; printf("\n"); printf("*****************************\n"); printf("** STREAM COMPACTION TESTS **\n"); printf("*****************************\n"); - // Compaction tests - - genArray(SIZE - 1, a, 4); // Leave a 0 at the end to test that edge case + genArray(SIZE - 1, a, 4); + // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; printArray(SIZE, a, true); @@ -115,39 +124,45 @@ int main(int argc, char* argv[]) { count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); expectedCount = count; - printArray(count, b, true); + //printArray(count, b, true); printCmpLenResult(count, expectedCount, b, b); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("cpu compact without scan, non-power-of-two"); count = StreamCompaction::CPU::compactWithoutScan(NPOT, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); expectedNPOT = count; - printArray(count, c, true); + //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + std::cout << std::endl; zeroArray(SIZE, c); printDesc("cpu compact with scan"); count = StreamCompaction::CPU::compactWithScan(SIZE, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(count, c, true); + //printArray(count, c, true); printCmpLenResult(count, expectedCount, b, c); + std::cout << std::endl; zeroArray(SIZE, c); 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); + std::cout << std::endl; 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); + std::cout << std::endl; - system("pause"); // stop Win32 console from closing on exit + // stop Win32 console from closing on exit + system("pause"); delete[] a; delete[] b; delete[] c; diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..6a32a91 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -3,6 +3,7 @@ #include "common.h" +#include namespace StreamCompaction { namespace CPU { using StreamCompaction::Common::PerformanceTimer; @@ -19,7 +20,10 @@ 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(); } @@ -30,9 +34,15 @@ namespace StreamCompaction { */ int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + int o = 0; + for (int i = 0; i < n; i++) { + if (idata[i] != 0) { + odata[o] = idata[i]; + o++; + } + } timer().endCpuTimer(); - return -1; + return o; } /** @@ -42,9 +52,27 @@ namespace StreamCompaction { */ int compactWithScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + int* mask = new int[n]; + for (int i = 0; i < n; i++) { + mask[i] = idata[i] == 0 ? 0 : 1; + } + + int* scatter = new int[n]; + + scatter[0] = 0; + for (int i = 1; i < n; i++) { + scatter[i] = scatter[i - 1] + mask[i - 1]; + } + + int o = 0; + for (int i = 0; i < n; i++) { + if (mask[i] != 0) { + odata[scatter[i]] = idata[i]; + o++; + } + } timer().endCpuTimer(); - return -1; + return o; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..d8c4dbc 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -2,6 +2,7 @@ #include #include "common.h" #include "efficient.h" +#include namespace StreamCompaction { namespace Efficient { @@ -12,13 +13,193 @@ namespace StreamCompaction { return timer; } + __global__ void kernIncrement(int n, int* global_odata, int* global_blockIncrements) { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (index < n) { + global_odata[2 * index + 0] += global_blockIncrements[blockIdx.x]; + global_odata[2 * index + 1] += global_blockIncrements[blockIdx.x]; + } + } + + __global__ void kernScan(int nThreadsNeeded, int n, int* global_idata, int* global_odata, int* global_blockSums) { + // n is 2x the blockSize (total num elements being operated on by the block) + extern __shared__ int shared_array[]; + + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (index >= nThreadsNeeded) { + return; + } + + shared_array[2 * threadIdx.x + 0] = global_idata[2 * index + 0]; + shared_array[2 * threadIdx.x + 1] = global_idata[2 * index + 1]; + + // SWEEP UP + int offset = 1; + // Cute way of looping e.g. if n = 1024, then d = 512, 256, 128, 64, 32, 16, 8, 4, 2, 1 + for (int d = n >> 1; d > 0; d >>= 1) { + __syncthreads(); + + if (threadIdx.x < d) { + int thisThreadsIndex1 = offset * (2 * threadIdx.x + 1) - 1; + int thisThreadsIndex2 = offset * (2 * threadIdx.x + 2) - 1; + + shared_array[thisThreadsIndex2] += shared_array[thisThreadsIndex1]; + } + + offset *= 2; + } + + // SWEEP DOWN + if (threadIdx.x == 0) { + if (global_blockSums) { + global_blockSums[blockIdx.x] = shared_array[n - 1]; + } + + shared_array[n - 1] = 0; + } + + for (int d = 1; d < n; d *= 2) { + // offset begins at 1024 and is set to 512 + offset >>= 1; + __syncthreads(); + + if (threadIdx.x < d) { + int thisThreadsIndex1 = offset * (2 * threadIdx.x + 1) - 1; + int thisThreadsIndex2 = offset * (2 * threadIdx.x + 2) - 1; + + float tmp = shared_array[thisThreadsIndex1]; + shared_array[thisThreadsIndex1] = shared_array[thisThreadsIndex2]; + shared_array[thisThreadsIndex2] += tmp; + } + } + + __syncthreads(); + global_odata[2 * index + 0] = shared_array[2 * threadIdx.x + 0]; + global_odata[2 * index + 1] = shared_array[2 * threadIdx.x + 1]; + } + /** * 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* scan(int n, int *odata, int *idata) { + int paddedN = int(pow(2.0, ilog2ceil(n))); + int nThreadsNeeded = paddedN / 2; + int blockSize = std::min(256, nThreadsNeeded); + int nBlocks = ceil(nThreadsNeeded * 1.0 / blockSize); + int nElementsPerBlock = 2 * blockSize; + + std::cout << std::endl; + std::cout << "paddedN: " << paddedN << std::endl; + std::cout << "grid size: " << nBlocks << std::endl; + std::cout << "block size: " << blockSize << std::endl; + + + int* device_odata; + cudaMalloc((void**)&device_odata, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_odata failed!"); + cudaDeviceSynchronize(); + + if (nBlocks == 1) { + if (odata) { + int* device_idata; + cudaMalloc((void**)&device_idata, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_idata failed!"); + cudaDeviceSynchronize(); + + cudaMemcpy(device_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAError("cudaMalloc device_idata failed!"); + cudaDeviceSynchronize(); + + timer().startGpuTimer(); + kernScan << > > (nThreadsNeeded, nElementsPerBlock, device_idata, device_odata, NULL); + timer().endGpuTimer(); + checkCUDAError("kernScan failed!"); + cudaDeviceSynchronize(); + + cudaMemcpy(odata, device_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy device_odata failed!"); + cudaDeviceSynchronize(); + return NULL; + } else { + kernScan << <1, blockSize, nElementsPerBlock * sizeof(int) >> > (nThreadsNeeded, nElementsPerBlock, idata, device_odata, NULL); + checkCUDAError("kernScan failed!"); + cudaDeviceSynchronize(); + + return device_odata; + } + } else { + int* device_idata; + cudaMalloc((void**)&device_idata, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_idata failed!"); + cudaDeviceSynchronize(); + + int* device_blockSums; + cudaMalloc((void**)&device_blockSums, nBlocks * sizeof(int)); + checkCUDAError("cudaMalloc device_blockSums failed!"); + cudaDeviceSynchronize(); + + cudaMemcpy(device_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy idata failed!"); + cudaDeviceSynchronize(); + + //if (odata) { + // timer().startGpuTimer(); + //} + kernScan << > > (nThreadsNeeded, nElementsPerBlock, device_idata, device_odata, device_blockSums); + checkCUDAError("kernScan failed!"); + cudaDeviceSynchronize(); + + int* device_blockIncrements = scan(nBlocks, NULL, device_blockSums); // (blockSumScan) + checkCUDAError("Recursive call failed!"); + cudaDeviceSynchronize(); + + + kernIncrement << > > (nThreadsNeeded, device_odata, device_blockIncrements); + checkCUDAError("kernIncrement failed!"); + cudaDeviceSynchronize(); + /* if (odata) { + timer().endGpuTimer(); + }*/ + + if (!odata) { + return device_odata; + } + } + + cudaMemcpy(odata, device_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy failed!"); + cudaDeviceSynchronize(); + + return NULL; + } + + __global__ void kernMapToBoolean(int n, int* global_idata, int* global_booleanMask) { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (n <= index) { + return; + } + + global_booleanMask[index] = global_idata[index] ? 1 : 0; + } + + __global__ void kernScatter(int n, int* global_idata, int* global_odata, int* global_booleanMask, int* global_booleanMaskScan) { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (n <= index) { + return; + } + + if (global_booleanMask[index]) { + global_odata[global_booleanMaskScan[index]] = global_idata[index]; + } + + __syncthreads(); + if (index == 0) { + global_booleanMaskScan[n - 1] += global_booleanMask[n - 1]; + } } /** @@ -30,11 +211,41 @@ 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) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - return -1; + int compact(int n, int *odata, int *idata) { + int paddedN = int(pow(2, ilog2ceil(n))); + int blockSize = 256; + int nBlocks = ceil(paddedN * 1.0 / blockSize); + + int* device_idata; + cudaMalloc((void**)&device_idata, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_idata failed!"); + + int* device_booleanMask; + cudaMalloc((void**)&device_booleanMask, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_booleanMask failed!"); + + int* device_odata; + cudaMalloc((void**)&device_odata, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc device_odata failed!"); + + cudaMemcpy(device_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + cudaDeviceSynchronize(); + + timer().startGpuTimer(); + kernMapToBoolean << > > (n, device_idata, device_booleanMask); + cudaDeviceSynchronize(); + timer().endGpuTimer(); + + int* device_booleanMaskScan = scan(n, NULL, device_booleanMask); + + kernScatter << > > (n, device_idata, device_odata, device_booleanMask, device_booleanMaskScan); + + + int size; + cudaMemcpy(&size, device_booleanMaskScan + paddedN - 1, sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(odata, device_odata, paddedN * sizeof(int), cudaMemcpyDeviceToHost); + + return size; } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..068767e 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -6,8 +6,8 @@ namespace StreamCompaction { namespace Efficient { StreamCompaction::Common::PerformanceTimer& timer(); - void scan(int n, int *odata, const int *idata); + int* scan(int n, int *odata, int *idata); - int compact(int n, int *odata, const int *idata); + int compact(int n, int *odata, int *idata); } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..20fab94 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -2,6 +2,7 @@ #include #include "common.h" #include "naive.h" +#include namespace StreamCompaction { namespace Naive { @@ -11,15 +12,72 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } - // TODO: __global__ + + __global__ void kernIterateScan(int n, int d, int* srcBuffer, int* desBuffer) { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (n <= index) { + return; + } + + int p = 1 << d - 1; + if (index < n) { + desBuffer[index] = srcBuffer[index] + (p <= index ? srcBuffer[index - p] : 0); + } + } + + // This is totally amateurish, but hey, this *is* supposed to be the "naive" scan! + __global__ void kernConvertInclusiveToExclusive(int n, int* srcBuffer, int* desBuffer) { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (index && index < n) { + desBuffer[index] = srcBuffer[index-1]; + } + } /** * 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 paddedN = int(pow(2, ilog2ceil(n))); + + int blockSize = 128; + int gridSize = ceil(paddedN * 1.0 / blockSize); + int* device_flipflopA; + int* device_flipflopB; + + int* device_srcBuffer; + int* device_desBuffer; + + cudaMalloc((void**)&device_flipflopA, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc dev_A failed!"); + + cudaMalloc((void**)&device_flipflopB, paddedN * sizeof(int)); + checkCUDAError("cudaMalloc dev_B failed!"); + + cudaMemcpy(device_flipflopA, idata, n * sizeof(int), cudaMemcpyHostToDevice); + cudaDeviceSynchronize(); + + timer().startGpuTimer(); + for (int d = 1; d <= ilog2ceil(n); d++) { + device_srcBuffer = d % 2 == 0 ? device_flipflopB : device_flipflopA; + device_desBuffer = d % 2 == 0 ? device_flipflopA : device_flipflopB; + kernIterateScan << > > (n, d, device_srcBuffer, device_desBuffer); + cudaDeviceSynchronize(); + checkCUDAError("Iteration error"); + } + + kernConvertInclusiveToExclusive << > > (n, device_desBuffer, device_srcBuffer); + cudaDeviceSynchronize(); + timer().endGpuTimer(); + + cudaMemcpy(odata, device_srcBuffer, n * sizeof(int), cudaMemcpyDeviceToHost); + cudaDeviceSynchronize(); + + cudaFree(device_flipflopA); + cudaFree(device_flipflopB); + + odata[0] = 0; } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..c1a25f4 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -14,15 +14,24 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *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()); - timer().endGpuTimer(); + thrust::host_vector thrustHostVector(idata, idata+n); + thrust::device_vector thrustDeviceVector = thrustHostVector; + + timer().startGpuTimer(); + thrust::exclusive_scan(thrustDeviceVector.begin(), thrustDeviceVector.end(), thrustDeviceVector.begin()); + timer().endGpuTimer(); + + // This came from Stack Overflow. + // There is undoubtedly a better way to do this. + int i = 0; + for (thrust::device_vector::iterator iter = thrustDeviceVector.begin(); iter != thrustDeviceVector.end(); iter++) { + odata[i++] = *iter; + } } } } From 2ebbf00fdfdf2a63129cb3598d5a2b6e18e2b09b Mon Sep 17 00:00:00 2001 From: Jonas Oppenheim Date: Thu, 23 Sep 2021 23:07:31 -0400 Subject: [PATCH 2/2] Update README --- README.md | 56 ++++++++++++++++++++++++++------- img/proj2_1.png | Bin 0 -> 85162 bytes img/proj2_2.png | Bin 0 -> 84225 bytes src/main.cpp | 30 +++++++++--------- stream_compaction/efficient.cu | 19 +++++------ 5 files changed, 70 insertions(+), 35 deletions(-) create mode 100644 img/proj2_1.png create mode 100644 img/proj2_2.png diff --git a/README.md b/README.md index 52e95dc..28d3411 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,54 @@ I implemented parts 1 - 4, and bonus part 7 using shared memory in the GPU Effic The next section covers a performance overview of the various implementations and the final section contains my concluding thoughts about the assignment. ## Performance analysis -The plot below shows that as the problem size increases, most implementations take longer. The abrupt jump of some of the lines shows that most of the time taken by some algorithms is due to overhead instead of solving the problem. The Thrust library is clearly (and unsurprisingly) the most optimized. These tests were done with a block size of 256 becuase that seemed to work best up to 2^20. +The following two plots demonstrate how the Scan and Stream Compaction algorithms perform on arrays of varying sizes on both the CPU and GPU. The block size used on the GPU was 128. Array sizes were tested both with exact powers-of-two and non-powers-of-two. There was no noticable difference in performance between the two, since the algorithm begins by simply padding the non-power-of-two array. The plots below show only the power-of-two results. -It is seen that most of the GPU implementations are slower than the CPU equivalents. The two major GPU slowdowns that come to mind are a) copying data to the GPU with `cudamemcpy()` and accessing global memory inside the kernals, which was sometimes necessary. Clearly an optimized implementation on the GPU _far_ outperforms the CPU equivalent, since GPU Thrust does best. +graph +graph -graph +The left figure shows Scan runtimes. It is seen that the naive GPU implementation is essentially as inefficient as the non-parallel CPU implementation. As expected, Thrust on the GPU outperforms my "efficient" GPU implementation, but at least there is a noticable difference between my naive and efficient GPU implementations. -Two things that made performance analysis difficult were that -- Efficient stream compaction (`Eff Comp`) used the efficient scan (`Efficient Scan`) code between its two kernels. I ended up only measuring the time it took to run the first kernel, `kernMapToBoolean`. -- Efficient scan (`Efficient Scan`) is a recursive algorithm with a lot of memory allocation at each recursive call. I ended up only measuring the duration of the kernels at the top level of recursion. +The right figure shows the Stream Compaction runtimes where it is seen that both CPU implementations slow down rapidly while the GPU implementation actually suffers from an Out Of Memory error before breaking a sweat. This is a clear example of the space-time tradeoff in algorithmic efficiency. + +A few additional notes follow. +- There was an extremely pernicious bug where I used a `float` instead of an `int` and ended up with semi-determinsitic off-by-one-or-two errors with large array sizes. This same value is a `float` in GPU Gems 3, [Chapter 39](https://developer.nvidia.com/gpugems/gpugems3/part-vi-gpu-computing/chapter-39-parallel-prefix-sum-scan-cuda), which is the inspiration for this project. +- The GPU Scan function signature originally looked like + ``` + void scan(int n, int *odata, const int *idata) + ``` + This is a function that returns nothing and takes as input two pointers to CPU-side arrays. The algorithm begins by copying `idata` to the GPU and ends by copying the result from the GPU into `odata`. An issue I ran into was that for arrays of a sufficiently large size, this function would need to make a recursive call. The reason for this is covered towards the end of the aforementioned GPU Gems 3 chapter. + + I modified this function signature to look like + ``` + int* scan(int n, int *odata, int *idata) + ``` + If the number of blocks needed is greater than 1, then a recursive call is made, where `odata` is `NULL` and `idata` is a GPU-side pointer. + + The base case is when the requisite number of blocks is 1. In this case, if `odata` is supplied then it is assumed that there was no recursive call and `idata` is a CPU-side pointer. If `odata` was not supplied, then this is assumed to have been a recursive call, `idata` is assumed to be a GPU-side pointer, and the function returns another pointer to GPU memory. + + What follows is an example of the logs generated during recursive calls. + ``` + ==== work-efficient scan, power-of-two ==== + + paddedN: 16777216 + grid size: 65536 + block size: 128 + + paddedN: 65536 + grid size: 256 + block size: 128 + + paddedN: 256 + grid size: 1 + block size: 128 + ``` + This function was difficult but fun to implement and I am pleased with how well it kept up with Thrust's Scan implementation. Part of the reason may be due to the fact that I had my kernel copy global memory to shared memory, which is much faster. + +## Concluding thoughts +- The work-efficient parallel scan algorithm was the most complicated code I've ever written. While coding, I felt as though I was building a card castle in my mind and any distraction would knock it over and I'd have to start over. It just required a large mental cache in order to make progress. +- I think that well-written CPU code is self-documenting; if you use descriptive variable and function names, and give each function a single purpose, then there is little need for code comments. I'm starting to believe that no matter how nicely written CUDA code is, it will always require comments for a future reader. With CPU code, I may sacrifice some performance for readability. With GPU code, I'm realizing that all readability is sacrificed for performance. Machine-efficient code is simply not readable. +- I think this may be a good assignment to start with because it allows us to discover clearly how to take a simple CPU algorithm and implement it on the GPU for maximum performance. Also, we were shown how there are many ways the algorithms can be optimized, but I was a little frustrated that that lecture was *the day before* this was due. I think we could get a lot out of spending time optimizing this algorithm. -I would have liked to test arrays beyond 2^20 but I had a bug that I described on Piazza. ## Program output ``` **************** @@ -126,8 +163,3 @@ block size: 16 Press any key to continue . . . ``` - -## Concluding thoughts -- The work-efficient parallel scan algorithm was the most complicated code I've ever written. While coding, I felt as though I was building a card castle in my mind and any distraction would knock it over and I'd have to start over. It just required a large mental cache in order to make progress. I'm proud of my solution, but there is an odd off-by-1 error (that I reported on Piazza) when n gets larger than 2^20, for certain block sizes. But my recursion and parallelism clearly work, even when the block size is 4 with 2^18 elements. -- I think that well-written CPU code is self-documenting; if you use descriptive variable and function names, and give each function a single purpose, then there is little need for code comments. I'm starting to believe that no matter how nicely written CUDA code is, it will always require comments for a future reader. With CPU code, I may sacrifice some performance for readability. With GPU code, I'm realizing that all readability is sacrificed for performance. Machine-efficient code is simply not readable. -- I think this may be a good assignment to start with because it allows us to discover clearly how to take a simple CPU algorithm and implement it on the GPU for maximum performance. Also, we were shown how there are many ways the algorithms can be optimized, but I was a little frustrated that that lecture was *the day before* this was due. I think we could get a lot out of spending time optimizing this algorithm. \ No newline at end of file diff --git a/img/proj2_1.png b/img/proj2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbef1707dfc8aae26df3cd5f6d4b14536841bda GIT binary patch literal 85162 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 8579656..c231574 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 14; +const int SIZE = 1 << 16; const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -30,6 +30,19 @@ int main(int argc, char* argv[]) { a[SIZE - 1] = 0; printArray(SIZE, a, true); + + // We have arrays a, b, and c. + // a - This array contains the original data + // b - This array we initialized with our CPU::scan() function + // c - This array is blank and gets repeatedly populated and then wiped each test + + /////* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan + ////onesArray(SIZE, c); + ////printDesc("1s array for finding bugs"); + ////StreamCompaction::Naive::scan(SIZE, c, a); + + + ////printArray(SIZE, c, true); */ // This populates b, which is used for later comparisons. zeroArray(SIZE, b); printDesc("cpu scan, power-of-two"); @@ -38,11 +51,6 @@ int main(int argc, char* argv[]) { //printArray(SIZE, b, true); std::cout << std::endl; - // We have arrays a, b, and c. - // a - This array contains the original data - // b - This array we initialized with our CPU::scan() function - // c - This array is blank and gets repeatedly populated and then wiped each test - zeroArray(SIZE, c); printDesc("cpu scan, non-power-of-two"); StreamCompaction::CPU::scan(NPOT, c, a); @@ -59,12 +67,6 @@ int main(int argc, char* argv[]) { printCmpResult(SIZE, b, c); std::cout << std::endl; - ///* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan - //onesArray(SIZE, c); - //printDesc("1s array for finding bugs"); - //StreamCompaction::Naive::scan(SIZE, c, a); - //printArray(SIZE, c, true); */ - zeroArray(SIZE, c); printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); @@ -85,7 +87,7 @@ int main(int argc, char* argv[]) { 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); std::cout << std::endl; @@ -141,7 +143,7 @@ int main(int argc, char* argv[]) { printDesc("cpu compact with scan"); count = StreamCompaction::CPU::compactWithScan(SIZE, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - //printArray(count, c, true); + printArray(count, c, true); printCmpLenResult(count, expectedCount, b, c); std::cout << std::endl; diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index d8c4dbc..8ac9059 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -69,7 +69,7 @@ namespace StreamCompaction { int thisThreadsIndex1 = offset * (2 * threadIdx.x + 1) - 1; int thisThreadsIndex2 = offset * (2 * threadIdx.x + 2) - 1; - float tmp = shared_array[thisThreadsIndex1]; + int tmp = shared_array[thisThreadsIndex1]; shared_array[thisThreadsIndex1] = shared_array[thisThreadsIndex2]; shared_array[thisThreadsIndex2] += tmp; } @@ -86,7 +86,7 @@ namespace StreamCompaction { int* scan(int n, int *odata, int *idata) { int paddedN = int(pow(2.0, ilog2ceil(n))); int nThreadsNeeded = paddedN / 2; - int blockSize = std::min(256, nThreadsNeeded); + int blockSize = std::min(128, nThreadsNeeded); int nBlocks = ceil(nThreadsNeeded * 1.0 / blockSize); int nElementsPerBlock = 2 * blockSize; @@ -94,7 +94,6 @@ namespace StreamCompaction { std::cout << "paddedN: " << paddedN << std::endl; std::cout << "grid size: " << nBlocks << std::endl; std::cout << "block size: " << blockSize << std::endl; - int* device_odata; cudaMalloc((void**)&device_odata, paddedN * sizeof(int)); @@ -147,6 +146,7 @@ namespace StreamCompaction { //if (odata) { // timer().startGpuTimer(); //} + kernScan << > > (nThreadsNeeded, nElementsPerBlock, device_idata, device_odata, device_blockSums); checkCUDAError("kernScan failed!"); cudaDeviceSynchronize(); @@ -159,9 +159,10 @@ namespace StreamCompaction { kernIncrement << > > (nThreadsNeeded, device_odata, device_blockIncrements); checkCUDAError("kernIncrement failed!"); cudaDeviceSynchronize(); - /* if (odata) { - timer().endGpuTimer(); - }*/ + + //if (odata) { + // timer().endGpuTimer(); + //} if (!odata) { return device_odata; @@ -234,17 +235,17 @@ namespace StreamCompaction { timer().startGpuTimer(); kernMapToBoolean << > > (n, device_idata, device_booleanMask); cudaDeviceSynchronize(); - timer().endGpuTimer(); - + int* device_booleanMaskScan = scan(n, NULL, device_booleanMask); kernScatter << > > (n, device_idata, device_odata, device_booleanMask, device_booleanMaskScan); - + timer().endGpuTimer(); int size; cudaMemcpy(&size, device_booleanMaskScan + paddedN - 1, sizeof(int), cudaMemcpyDeviceToHost); cudaMemcpy(odata, device_odata, paddedN * sizeof(int), cudaMemcpyDeviceToHost); + // cudaFree(device_flipflopA); return size; } }