From f70acef007ccff162cdd1525c8777a3b22863e3d Mon Sep 17 00:00:00 2001 From: MauKMu Date: Sun, 17 Sep 2017 02:01:00 -0400 Subject: [PATCH 01/15] Add code for CPU algos and naive GPU scan --- src/main.cpp | 5 +-- stream_compaction/cpu.cu | 36 +++++++++++++++--- stream_compaction/naive.cu | 75 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 105 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 7305641..f010dab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,13 +13,12 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 18; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int a[SIZE], b[SIZE], c[SIZE]; int main(int argc, char* argv[]) { // Scan tests - printf("\n"); printf("****************\n"); printf("** SCAN TESTS **\n"); @@ -49,7 +48,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); zeroArray(SIZE, c); diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 05ce667..5c6b894 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -2,6 +2,7 @@ #include "cpu.h" #include "common.h" +#define TEST_TIME_IN_SCAN 0 namespace StreamCompaction { namespace CPU { @@ -18,9 +19,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) { +#if TEST_TIME_IN_SCAN timer().startCpuTimer(); - // TODO +#endif + odata[0] = 0; + for (int i = 1; i < n; ++i) { + odata[i] = idata[i - 1] + odata[i - 1]; + } +#if TEST_TIME_IN_SCAN timer().endCpuTimer(); +#endif } /** @@ -29,10 +37,15 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithoutScan(int n, int *odata, const int *idata) { + int nextEmptyIdx = 0; timer().startCpuTimer(); - // TODO + for (int i = 0; i < n; ++i) { + if (idata[i]) { + odata[nextEmptyIdx++] = idata[i]; + } + } timer().endCpuTimer(); - return -1; + return nextEmptyIdx; } /** @@ -41,10 +54,23 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + int *temp = (int*) malloc(n * sizeof(int)); + int *scannedTemp = (int*)malloc(n * sizeof(int)); timer().startCpuTimer(); - // TODO + // calculate temp array + for (int i = 0; i < n; ++i) { + temp[i] = (idata[i]) ? 1 : 0; + } + // scan + scan(n, scannedTemp, temp); + // scatter + for (int i = 0; i < n; ++i) { + if (temp[i]) { + odata[scannedTemp[i]] = idata[i]; + } + } timer().endCpuTimer(); - return -1; + return scannedTemp[n - 1] + (temp[n - 1] ? 1 : 0); } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 9218f8e..958fde8 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -11,15 +11,84 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } + +#define blockSize 32 +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) +#define USE_CUDA_DEV_SYNC 0 + // TODO: __global__ + __global__ void map(int n, int *odata, const int *idata) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; // TODO? + if (idx < n) { + odata[idx] = (idata[idx] != 0) ? 1 : 0; + } + } + + __global__ void shiftRight(int n, int *odata, const int *idata) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x;; // TODO? + if (idx < n) { + odata[idx] = (idx == 0) ? 0 : idata[idx - 1]; + } + } + + __global__ void scanIteration(int n, int *odata, const int *idata, const int offset) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x;; // TODO? + if (idx < n) { + odata[idx] = idata[idx] + ((idx >= offset) ? idata[idx - offset] : 0); + } + } + + int *dev_bufA; + int *dev_bufB; /** * 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(); + cudaMalloc((void**)&dev_bufA, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_bufA error!!!"); + cudaMalloc((void**)&dev_bufB, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_bufB error!!!"); + cudaMemcpy(dev_bufB, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_bufB error!!!"); + dim3 numBlocks((n + blockSize - 1) / blockSize); + + timer().startGpuTimer(); + // TODO + // shift right by one, set [0] to 0 + shiftRight<<>>(n, dev_bufA, dev_bufB); +#if USE_CUDA_DEV_SYNC + cudaDeviceSynchronize(); + checkCUDAErrorWithLine("sync error"); +#endif + + // start scan iterations + int pingPongCount = 0; + for (int offset = 1; offset < n; offset *= 2) { + ++pingPongCount; + if (pingPongCount % 2) { + scanIteration << > >(n, dev_bufB, dev_bufA, offset); + } + else { + scanIteration << > >(n, dev_bufA, dev_bufB, offset); + } +#if USE_CUDA_DEV_SYNC + cudaDeviceSynchronize(); + checkCUDAErrorWithLine("sync error"); +#endif + } + timer().endGpuTimer(); + + if (pingPongCount % 2) { + // output is in bufB + cudaMemcpy(odata, dev_bufB, n * sizeof(int), cudaMemcpyDeviceToHost); + } + else { + // output is in bufA + cudaMemcpy(odata, dev_bufA, n * sizeof(int), cudaMemcpyDeviceToHost); + } + cudaFree(dev_bufA); + cudaFree(dev_bufB); } } } From 74faa5beeb7a31157734f80cf23dd9954c717f94 Mon Sep 17 00:00:00 2001 From: MauKMu Date: Sun, 17 Sep 2017 23:45:11 -0400 Subject: [PATCH 02/15] Finish up to part 4 (maybe 5?) --- src/main.cpp | 6 +- stream_compaction/efficient.cu | 200 ++++++++++++++++++++++++++++++++- stream_compaction/efficient.h | 2 +- stream_compaction/naive.cu | 8 -- stream_compaction/thrust.cu | 36 +++++- 5 files changed, 230 insertions(+), 22 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f010dab..acf4fac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 18; // feel free to change the size of array +const int SIZE = 1 << 4; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int a[SIZE], b[SIZE], c[SIZE]; @@ -48,7 +48,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); zeroArray(SIZE, c); @@ -76,7 +76,7 @@ int main(int argc, char* argv[]) { 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); diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 36c5ef2..bc42999 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -12,13 +12,130 @@ namespace StreamCompaction { return timer; } +#define blockSize 32 +#define MAX_BLOCK_SIZE 32 +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) +#define USE_CUDA_DEV_SYNC 0 + + __global__ void upSweepIteration(int n, int *odata, const int offset, const int halfOffset) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; + int nodeIdx = (idx + 1) * offset - 1; + if (nodeIdx < n) { + odata[nodeIdx] = odata[nodeIdx] + odata[nodeIdx - halfOffset]; + } + } + + __global__ void setRootToZero(int n, int *odata) { + odata[n - 1] = 0; + } + + __global__ void downSweepIteration(int n, int *odata, const int offset, const int halfOffset) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; + int nodeIdx = (idx + 1) * offset - 1; + if (nodeIdx < n) { + int originalNodeValue = odata[nodeIdx]; + odata[nodeIdx] = odata[nodeIdx] + odata[nodeIdx - halfOffset]; + odata[nodeIdx - halfOffset] = originalNodeValue; + } + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. + * internalUse specifies whether this is used as a helper function, + * for example, in compact. If so, it assumes idata and odata are in + * device memory and does not use gpuTimer. */ - void scan(int n, int *odata, const int *idata) { + void scan(int n, int *odata, const int *idata, bool internalUse) { + // nearest power of two + const int bufSize = 1 << ilog2ceil(n); + + int *dev_buf; + if (internalUse) { + dev_buf = odata; + } + else { + cudaMalloc((void**)&dev_buf, bufSize * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_buf error!!!"); + + if (n != bufSize) { + cudaMemset(dev_buf, 0, bufSize * sizeof(int)); + checkCUDAErrorWithLine("memset dev_buf to 0 error!!!"); + } + + cudaMemcpy(dev_buf, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_buf error!!!"); + } + + if (!internalUse) { timer().startGpuTimer(); - // TODO + } + + int halfOffset = 1; + int numThreads = bufSize / 2; + dim3 numBlocks; + int threadsPerBlock; + // skip offset = n because we overwrite root's value anyway + for (int offset = 2; offset < bufSize; offset *= 2) { + if (numThreads > MAX_BLOCK_SIZE) { + numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); + threadsPerBlock = MAX_BLOCK_SIZE; + } + else { + numBlocks = dim3(1); + threadsPerBlock = numThreads; + } + upSweepIteration<<>>(bufSize, dev_buf, offset, halfOffset); + checkCUDAErrorWithLine("upSweep error!!!"); + halfOffset = offset; + numThreads /= 2; + } + + setRootToZero << > > (bufSize, dev_buf); + + int offset = bufSize; + numThreads = 1; + for (int halfOffset = bufSize / 2; halfOffset >= 1; halfOffset /= 2) { + if (numThreads > MAX_BLOCK_SIZE) { + numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); + threadsPerBlock = MAX_BLOCK_SIZE; + } + else { + numBlocks = dim3(1); + threadsPerBlock = numThreads; + } + downSweepIteration << > >(bufSize, dev_buf, offset, halfOffset); + checkCUDAErrorWithLine("downSweep error!!!"); + offset = halfOffset; + numThreads *= 2; + } + + if (!internalUse) { timer().endGpuTimer(); + cudaMemcpy(odata, dev_buf, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy dev_buf to host error!!!"); + cudaFree(dev_buf); + checkCUDAErrorWithLine("free dev_buf error!!!"); + } + + } + + __global__ void map(int n, int *odata, const int *idata) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; // TODO? + if (idx < n) { + odata[idx] = (idata[idx] != 0) ? 1 : 0; + } + } + + __global__ void scatter(int n, int *odata, const int *postMapData, const int *postScanData, const int *originalData) { + int idx = (blockIdx.x * blockDim.x) + threadIdx.x; // TODO? + if (idx < n && postMapData[idx]) { + odata[postScanData[idx]] = originalData[idx]; + } + } + + __global__ void getCompactedSize(int n, int *odata, const int *postMapData, const int *postScanData) { + *odata = postScanData[n - 1] + (postMapData[n - 1] ? 1 : 0); + printf("size: %d\n", *odata); } /** @@ -31,10 +148,81 @@ namespace StreamCompaction { * @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 *dev_originalData; + int *dev_postMapBuf; + int *dev_postScanBuf; + int *dev_postScatterBuf; + int *dev_scatteredSize; + + cudaMalloc((void**)&dev_originalData, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_originalData error!!!"); + + cudaMalloc((void**)&dev_postMapBuf, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_postMapBuf error!!!"); + + // needs to be power of 2 for scan to work + const int postScanBufSize = 1 << ilog2ceil(n); + + cudaMalloc((void**)&dev_postScanBuf, postScanBufSize * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_postScanBuf error!!!"); + + if (postScanBufSize != n) { + cudaMemset(dev_postScanBuf, 0, postScanBufSize * sizeof(int)); + checkCUDAErrorWithLine("memset dev_postScanBuf to 0 error!!!"); + } + + cudaMalloc((void**)&dev_postScatterBuf, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_postScatterBuf error!!!"); + + cudaMalloc((void**)&dev_scatteredSize, sizeof(int)); + checkCUDAErrorWithLine("malloc dev_scatteredSize error!!!"); + + cudaMemcpy(dev_originalData, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_originalData from host error!!!"); + + dim3 numBlocks((n + blockSize - 1) / blockSize); + + timer().startGpuTimer(); + + map<<>>(n, dev_postMapBuf, dev_originalData); + checkCUDAErrorWithLine("map error!!!"); + + cudaMemcpy(dev_postScanBuf, dev_postMapBuf, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorWithLine("memcpy map to scan error!!!"); + + scan(n, dev_postScanBuf, dev_postMapBuf, true); + checkCUDAErrorWithLine("scan error!!!"); + scatter << > > (n, dev_postScatterBuf, dev_postMapBuf, dev_postScanBuf, dev_originalData); + checkCUDAErrorWithLine("scatter error!!!"); + getCompactedSize<<>>(n, dev_scatteredSize, dev_postMapBuf, dev_postScanBuf); + checkCUDAErrorWithLine("get size error!!!"); + + timer().endGpuTimer(); + + int scatteredSize; + + cudaMemcpy(&scatteredSize, dev_scatteredSize, sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy dev_scatteredSize to host error!!!"); + + cudaMemcpy(odata, dev_postScatterBuf, scatteredSize * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy dev_postScatterBuf to host error!!!"); + + cudaFree(dev_originalData); + checkCUDAErrorWithLine("free dev_originalData error!!!"); + + cudaFree(dev_postMapBuf); + checkCUDAErrorWithLine("free dev_postMapBuf error!!!"); + + cudaFree(dev_postScanBuf); + checkCUDAErrorWithLine("free dev_postScanBuf error!!!"); + + cudaFree(dev_postScatterBuf); + checkCUDAErrorWithLine("free dev_postScatterBuf error!!!"); + + cudaFree(dev_scatteredSize); + checkCUDAErrorWithLine("free dev_scatteredSize error!!!"); + + return scatteredSize; } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..afca471 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 internalUse = false); int compact(int n, int *odata, const int *idata); } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 958fde8..9faee2b 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -16,14 +16,6 @@ namespace StreamCompaction { #define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) #define USE_CUDA_DEV_SYNC 0 - // TODO: __global__ - __global__ void map(int n, int *odata, const int *idata) { - int idx = (blockIdx.x * blockDim.x) + threadIdx.x; // TODO? - if (idx < n) { - odata[idx] = (idata[idx] != 0) ? 1 : 0; - } - } - __global__ void shiftRight(int n, int *odata, const int *idata) { int idx = (blockIdx.x * blockDim.x) + threadIdx.x;; // TODO? if (idx < n) { diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 36b732d..b265dfe 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -6,6 +6,8 @@ #include "common.h" #include "thrust.h" +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) + namespace StreamCompaction { namespace Thrust { using StreamCompaction::Common::PerformanceTimer; @@ -18,11 +20,37 @@ namespace StreamCompaction { * 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: + int *dev_idata; + int *dev_odata; + + cudaMalloc((void **)&dev_idata, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_idata!!!"); + + cudaMalloc((void **)&dev_odata, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_odata!!!"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_idata from host!!!"); + + thrust::device_ptr dev_thrust_idata(dev_idata); + thrust::device_ptr dev_thrust_odata(dev_odata); + + thrust::device_vector dev_vector_idata(dev_thrust_idata, dev_thrust_idata + n); + thrust::device_vector dev_vector_odata(dev_thrust_odata, dev_thrust_odata + n); + + timer().startGpuTimer(); + thrust::exclusive_scan(idata, idata + n, odata);//dev_vector_idata.begin(), dev_vector_idata.end(), dev_vector_odata.begin()); // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); - timer().endGpuTimer(); + timer().endGpuTimer(); + + //cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + //checkCUDAErrorWithLine("memcpy dev_odata to host!!!"); + + cudaFree(dev_idata); + checkCUDAErrorWithLine("free dev_idata!!!"); + + cudaFree(dev_odata); + checkCUDAErrorWithLine("free dev_odata!!!"); } } } From 8fb2c31ff532f65faa7d65fe32ef379804782968 Mon Sep 17 00:00:00 2001 From: MauKMu Date: Mon, 18 Sep 2017 18:29:28 -0400 Subject: [PATCH 03/15] Add radix sort --- src/main.cpp | 40 ++++++- stream_compaction/CMakeLists.txt | 2 + stream_compaction/cpu.cu | 27 +++-- stream_compaction/cpu.h | 4 +- stream_compaction/efficient.cu | 30 +++-- stream_compaction/radixSort.cu | 191 +++++++++++++++++++++++++++++++ stream_compaction/radixSort.h | 12 ++ stream_compaction/thrust.cu | 5 +- 8 files changed, 288 insertions(+), 23 deletions(-) create mode 100644 stream_compaction/radixSort.cu create mode 100644 stream_compaction/radixSort.h diff --git a/src/main.cpp b/src/main.cpp index acf4fac..0a5ee82 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,11 +11,12 @@ #include #include #include +#include #include "testing_helpers.hpp" -const int SIZE = 1 << 4; // feel free to change the size of array +const int SIZE = 1 << 16; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two -int a[SIZE], b[SIZE], c[SIZE]; +int a[SIZE], b[SIZE], c[SIZE], sorted[SIZE]; int main(int argc, char* argv[]) { // Scan tests @@ -138,5 +139,40 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + printf("\n"); + printf("****************\n"); + printf("** SORT TESTS **\n"); + printf("****************\n"); + + genArray(SIZE - 1, a, 256); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + zeroArray(SIZE, sorted); + printDesc("cpu std::sort, power-of-two"); + StreamCompaction::CPU::sort(SIZE, sorted, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(SIZE, sorted, true); + + zeroArray(SIZE, b); + printDesc("gpu radix sort, power-of-two"); + StreamCompaction::RadixSort::radixSort(SIZE, b, a, true); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(SIZE, b, true); + printCmpResult(SIZE, b, sorted); + + zeroArray(SIZE, sorted); + printDesc("cpu std::sort, non-power-of-two"); + StreamCompaction::CPU::sort(NPOT, sorted, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(NPOT, sorted, true); + + zeroArray(SIZE, b); + printDesc("gpu radix sort, non-power-of-two"); + StreamCompaction::RadixSort::radixSort(NPOT, b, a, true); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(NPOT, b, true); + printCmpResult(NPOT, b, sorted); + system("pause"); // stop Win32 console from closing on exit } diff --git a/stream_compaction/CMakeLists.txt b/stream_compaction/CMakeLists.txt index cdbef77..77c4ea8 100644 --- a/stream_compaction/CMakeLists.txt +++ b/stream_compaction/CMakeLists.txt @@ -7,6 +7,8 @@ set(SOURCE_FILES "naive.cu" "efficient.h" "efficient.cu" + "radixSort.h" + "radixSort.cu" "thrust.h" "thrust.cu" ) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 5c6b894..57db0e6 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -18,17 +18,18 @@ namespace StreamCompaction { * For performance analysis, this is supposed to be a simple for loop. * (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) { -#if TEST_TIME_IN_SCAN - timer().startCpuTimer(); -#endif + void scan(int n, int *odata, const int *idata, bool internalUse) { + if (!internalUse) { + timer().startCpuTimer(); + } + odata[0] = 0; for (int i = 1; i < n; ++i) { odata[i] = idata[i - 1] + odata[i - 1]; } -#if TEST_TIME_IN_SCAN - timer().endCpuTimer(); -#endif + if (!internalUse) { + timer().endCpuTimer(); + } } /** @@ -62,7 +63,7 @@ namespace StreamCompaction { temp[i] = (idata[i]) ? 1 : 0; } // scan - scan(n, scannedTemp, temp); + scan(n, scannedTemp, temp, true); // scatter for (int i = 0; i < n; ++i) { if (temp[i]) { @@ -72,5 +73,15 @@ namespace StreamCompaction { timer().endCpuTimer(); return scannedTemp[n - 1] + (temp[n - 1] ? 1 : 0); } + + /** + * CPU sort function. + * + * @returns the number of elements remaining after compaction. + */ + void sort(int n, int *odata, const int *idata) { + memcpy(odata, idata, n * sizeof(int)); + std::sort(odata, odata + n); + } } } diff --git a/stream_compaction/cpu.h b/stream_compaction/cpu.h index 236ce11..1248ccd 100644 --- a/stream_compaction/cpu.h +++ b/stream_compaction/cpu.h @@ -6,10 +6,12 @@ namespace StreamCompaction { namespace CPU { StreamCompaction::Common::PerformanceTimer& timer(); - void scan(int n, int *odata, const int *idata); + void scan(int n, int *odata, const int *idata, bool internalUse = false); int compactWithoutScan(int n, int *odata, const int *idata); int compactWithScan(int n, int *odata, const int *idata); + + void sort(int n, int *odata, const int *idata); } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index bc42999..bcfd7a8 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -14,7 +14,8 @@ namespace StreamCompaction { #define blockSize 32 #define MAX_BLOCK_SIZE 32 -#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) +#define checkCUDAErrorWithLine(msg) ((void)0) + //checkCUDAError(msg, __LINE__) #define USE_CUDA_DEV_SYNC 0 __global__ void upSweepIteration(int n, int *odata, const int offset, const int halfOffset) { @@ -46,6 +47,7 @@ namespace StreamCompaction { * device memory and does not use gpuTimer. */ void scan(int n, int *odata, const int *idata, bool internalUse) { + // TODO: handle n <= 2 ??? // nearest power of two const int bufSize = 1 << ilog2ceil(n); @@ -66,22 +68,29 @@ namespace StreamCompaction { checkCUDAErrorWithLine("memcpy dev_buf error!!!"); } - if (!internalUse) { - timer().startGpuTimer(); - } + int halfOffset = 1; int numThreads = bufSize / 2; - dim3 numBlocks; + dim3 numBlocks(1); int threadsPerBlock; + + cudaDeviceSynchronize(); + checkCUDAErrorWithLine("cuda sync error!!!"); + + if (!internalUse) { + timer().startGpuTimer(); + } // skip offset = n because we overwrite root's value anyway for (int offset = 2; offset < bufSize; offset *= 2) { if (numThreads > MAX_BLOCK_SIZE) { - numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); + numBlocks.x = numThreads / MAX_BLOCK_SIZE; + //numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); threadsPerBlock = MAX_BLOCK_SIZE; } else { - numBlocks = dim3(1); + numBlocks.x = 1; + //numBlocks = dim3(1); threadsPerBlock = numThreads; } upSweepIteration<<>>(bufSize, dev_buf, offset, halfOffset); @@ -96,11 +105,13 @@ namespace StreamCompaction { numThreads = 1; for (int halfOffset = bufSize / 2; halfOffset >= 1; halfOffset /= 2) { if (numThreads > MAX_BLOCK_SIZE) { - numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); + numBlocks.x = numThreads / MAX_BLOCK_SIZE; + //numBlocks = dim3(numThreads / MAX_BLOCK_SIZE); threadsPerBlock = MAX_BLOCK_SIZE; } else { - numBlocks = dim3(1); + numBlocks.x = 1; + //numBlocks = dim3(1); threadsPerBlock = numThreads; } downSweepIteration << > >(bufSize, dev_buf, offset, halfOffset); @@ -135,7 +146,6 @@ namespace StreamCompaction { __global__ void getCompactedSize(int n, int *odata, const int *postMapData, const int *postScanData) { *odata = postScanData[n - 1] + (postMapData[n - 1] ? 1 : 0); - printf("size: %d\n", *odata); } /** diff --git a/stream_compaction/radixSort.cu b/stream_compaction/radixSort.cu new file mode 100644 index 0000000..f634555 --- /dev/null +++ b/stream_compaction/radixSort.cu @@ -0,0 +1,191 @@ +#include +#include +#include "common.h" +#include "radixSort.h" +#include "efficient.h" + +namespace StreamCompaction { + namespace RadixSort { + // access to "efficient" scan + using StreamCompaction::Efficient::scan; + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + +#define blockSize 32 +#define MAX_BLOCK_SIZE 32 +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) +#define USE_CUDA_DEV_SYNC 0 +#define BITS_IN_INT (sizeof(int) * 8) +#define INT_WITH_HIGHEST_BIT_SET (1 << (BITS_IN_INT - 1)) + + /* Sorts a tile of size _tileSize_ using radix sort in ascending order + * if _ascending_ is true, descending otherwise. + * This kernel should be called in blocks with size == tileSize, due to + * the use of __syncthreads(). */ + /* could do the whole thing at once, instead of tiles then merge?? */ + __global__ void radixSortTile(int tileSize, int *odata, const int *idata, bool ascending) { + + } + + __global__ void computeEnumerate(int n, int *enumBuf, const int *originalData, const int passMask) { + int idx = threadIdx.x + (blockDim.x * blockIdx.x); + if (idx < n) { + // idata[idx] & passMask is bit, so "negate" it + enumBuf[idx] = (originalData[idx] & passMask) == 0 ? 1 : 0; + } + } + + __global__ void computeTotalFalses(int n, int *totalFalsesBuf, const int *enumBuf, const int *falseBuf) { + *totalFalsesBuf = enumBuf[n - 1] + falseBuf[n - 1]; + } + + __global__ void computeTrueAndScatter(int n, int *odata, const int *falseBuf, const int *originalData, const int *totalFalsesBuf, const int passMask, bool ascending) { + int idx = threadIdx.x + (blockDim.x * blockIdx.x); + if (idx < n) { + int originalValue = originalData[idx]; + // if masked bit is 0 and sorting by ascending, or if bit is 1 and sorting by descending + if (((originalValue & passMask) == 0) == ascending) { + // write to false idx + odata[falseBuf[idx]] = originalValue; + } + else { + // write to true idx + odata[idx - falseBuf[idx] + *totalFalsesBuf] = originalValue; + } + } + } + + __global__ void findFirstHighBit(int n, int *highBits, const int *idata) { + int idx = threadIdx.x + (blockDim.x * blockIdx.x); + if (idx < n) { + int val = idata[idx]; + if (val == 0) { + return; + } + int mask = INT_WITH_HIGHEST_BIT_SET; + for (int i = BITS_IN_INT - 1; i >= 0; --i) { + if (val & mask) { + highBits[i] = 1; + return; + } + mask >>= 1; + } + } + } + + __global__ void findLargestHighBit(int *result, const int *highBits) { + for (int i = BITS_IN_INT - 1; i >= 0; --i) { + if (highBits[i]) { + *result = i; + return; + } + } + } + void radixSort(int n, int *odata, const int *idata, bool ascending) { + int *dev_highBitsBuf; + int *dev_originalData; + int *dev_enumBuf; + int *dev_falseBuf; + int *dev_totalFalsesBuf; + int *dev_postScatterBuf; + + cudaMalloc((void**)&dev_highBitsBuf, BITS_IN_INT * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_highBitsBuf error!!!"); + + cudaMemset(dev_highBitsBuf, 0, BITS_IN_INT * sizeof(int)); + checkCUDAErrorWithLine("memset dev_highBitsBuf to 0 error!!!"); + + cudaMalloc((void**)&dev_originalData, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_originalData error!!!"); + + cudaMalloc((void**)&dev_enumBuf, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_enumBuf error!!!"); + + // needs to be power of 2 for scan to work + const int falseBufSize = 1 << ilog2ceil(n); + + cudaMalloc((void**)&dev_falseBuf, falseBufSize * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_falseBuf error!!!"); + + if (falseBufSize != n) { + cudaMemset(dev_falseBuf, 0, falseBufSize * sizeof(int)); + checkCUDAErrorWithLine("memset dev_falseBuf to 0 error!!!"); + } + + cudaMalloc((void**)&dev_totalFalsesBuf, sizeof(int)); + checkCUDAErrorWithLine("malloc dev_totalFalsesBuf error!!!"); + + cudaMalloc((void**)&dev_postScatterBuf, n * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_postScatterBuf error!!!"); + + cudaMemcpy(dev_originalData, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_originalData from host error!!!"); + + dim3 numBlocks((n + blockSize - 1) / blockSize); + + int bitIdx; + int passMask = 1; + int maxBitIdx; + + timer().startGpuTimer(); + + // find how many bits to search + findFirstHighBit << > > (n, dev_highBitsBuf, dev_originalData); + // store result in dev_highBitsBuf itself -- no race conditions + findLargestHighBit<<>>(dev_highBitsBuf, dev_highBitsBuf); + + cudaMemcpy(&maxBitIdx, dev_highBitsBuf, sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy maxBitIdx error!!!"); + + for (bitIdx = 0; bitIdx <= maxBitIdx; ++bitIdx) { + // compute enumerate + computeEnumerate << > >(n, dev_enumBuf, dev_originalData, passMask); + // scan + cudaMemcpy(dev_falseBuf, dev_enumBuf, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorWithLine("memcpy enum to false error!!!"); + + scan(n, dev_falseBuf, dev_enumBuf, true); + checkCUDAErrorWithLine("scan error!!!"); + // compute totalFalses + computeTotalFalses<<>>(n, dev_totalFalsesBuf, dev_enumBuf, dev_falseBuf); + // compute trues and scatter + computeTrueAndScatter << > > (n, dev_postScatterBuf, dev_falseBuf, dev_originalData, dev_totalFalsesBuf, passMask, ascending); + + cudaMemcpy(dev_originalData, dev_postScatterBuf, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorWithLine("memcpy postScatter to originalData error!!!"); + + // move passMask to next bit + passMask <<= 1; + } + + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_postScatterBuf, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy dev_postScatterBuf to host error!!!"); + + cudaFree(dev_highBitsBuf); + checkCUDAErrorWithLine("free dev_highBitsBuf error!!!"); + + cudaFree(dev_originalData); + checkCUDAErrorWithLine("free dev_originalData error!!!"); + + cudaFree(dev_enumBuf); + checkCUDAErrorWithLine("free dev_enumBuf error!!!"); + + cudaFree(dev_falseBuf); + checkCUDAErrorWithLine("free dev_falseBuf error!!!"); + + cudaFree(dev_totalFalsesBuf); + checkCUDAErrorWithLine("free dev_scatteredSize error!!!"); + + cudaFree(dev_postScatterBuf); + checkCUDAErrorWithLine("free dev_postScatterBuf error!!!"); + + } + + } +} diff --git a/stream_compaction/radixSort.h b/stream_compaction/radixSort.h new file mode 100644 index 0000000..1b72397 --- /dev/null +++ b/stream_compaction/radixSort.h @@ -0,0 +1,12 @@ +#pragma once + +#include "common.h" + +namespace StreamCompaction { + namespace RadixSort { + StreamCompaction::Common::PerformanceTimer& timer(); + + void radixSort(int n, int *odata, const int *idata, bool ascending); + + } +} diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index b265dfe..f58d7f2 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -35,8 +35,9 @@ namespace StreamCompaction { thrust::device_ptr dev_thrust_idata(dev_idata); thrust::device_ptr dev_thrust_odata(dev_odata); - thrust::device_vector dev_vector_idata(dev_thrust_idata, dev_thrust_idata + n); - thrust::device_vector dev_vector_odata(dev_thrust_odata, dev_thrust_odata + n); + // pass in cpu pointers here + thrust::device_vector dev_vector_idata(idata, idata + n); + thrust::device_vector dev_vector_odata(odata, odata + n); timer().startGpuTimer(); thrust::exclusive_scan(idata, idata + n, odata);//dev_vector_idata.begin(), dev_vector_idata.end(), dev_vector_odata.begin()); From 330d7e2391ff871e958f60257a88992c7e20703f Mon Sep 17 00:00:00 2001 From: MauKMu Date: Tue, 19 Sep 2017 21:00:49 -0400 Subject: [PATCH 04/15] Add radix sort, efficient scan w/ shared memory --- src/main.cpp | 43 +++++++-- stream_compaction/CMakeLists.txt | 2 + stream_compaction/common.h | 2 +- stream_compaction/efficient.cu | 8 +- stream_compaction/efficientShared.cu | 127 +++++++++++++++++++++++++++ stream_compaction/efficientShared.h | 12 +++ stream_compaction/naive.cu | 6 +- stream_compaction/radixSort.cu | 12 ++- stream_compaction/thrust.cu | 16 +--- 9 files changed, 197 insertions(+), 31 deletions(-) create mode 100644 stream_compaction/efficientShared.cu create mode 100644 stream_compaction/efficientShared.h diff --git a/src/main.cpp b/src/main.cpp index 0a5ee82..f0149b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,15 +10,18 @@ #include #include #include +#include #include #include #include "testing_helpers.hpp" -const int SIZE = 1 << 16; // 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[SIZE], b[SIZE], c[SIZE], sorted[SIZE]; int main(int argc, char* argv[]) { + // dummy thrust run to get rid of slow first run + StreamCompaction::Thrust::scan(2, c, a); // Scan tests printf("\n"); printf("****************\n"); @@ -59,6 +62,28 @@ int main(int argc, char* argv[]) { //printArray(SIZE, c, true); printCmpResult(NPOT, b, c); + if (SIZE <= (1 << 11)) { + + zeroArray(SIZE, c); + printDesc("EFFICIENT SHARED scan, NON-power-of-two"); + StreamCompaction::EfficientShared::scan(NPOT, c, a); + printElapsedTime(StreamCompaction::EfficientShared::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(NPOT, c, true); + printCmpResult(NPOT, b, c); + + + zeroArray(SIZE, c); + printDesc("EFFICIENT SHARED scan, power-of-two"); + StreamCompaction::EfficientShared::scan(SIZE, c, a); + printElapsedTime(StreamCompaction::EfficientShared::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); + + } + else { + printDesc("(Skipping efficient shared tests due to large array size..."); + } + zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); @@ -73,13 +98,6 @@ int main(int argc, char* argv[]) { //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); - printCmpResult(SIZE, b, c); - zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); StreamCompaction::Thrust::scan(NPOT, c, a); @@ -87,6 +105,13 @@ int main(int argc, char* argv[]) { //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); + printCmpResult(SIZE, b, c); + printf("\n"); printf("*****************************\n"); printf("** STREAM COMPACTION TESTS **\n"); @@ -174,5 +199,5 @@ int main(int argc, char* argv[]) { printArray(NPOT, b, true); printCmpResult(NPOT, b, sorted); - system("pause"); // stop Win32 console from closing on exit + //system("pause"); // stop Win32 console from closing on exit } diff --git a/stream_compaction/CMakeLists.txt b/stream_compaction/CMakeLists.txt index 77c4ea8..7fea251 100644 --- a/stream_compaction/CMakeLists.txt +++ b/stream_compaction/CMakeLists.txt @@ -7,6 +7,8 @@ set(SOURCE_FILES "naive.cu" "efficient.h" "efficient.cu" + "efficientShared.h" + "efficientShared.cu" "radixSort.h" "radixSort.cu" "thrust.h" diff --git a/stream_compaction/common.h b/stream_compaction/common.h index 55f1b38..1b33d57 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -27,7 +27,7 @@ inline int ilog2(int x) { } inline int ilog2ceil(int x) { - return ilog2(x - 1) + 1; + return (x == 1) ? 0 : ilog2(x - 1) + 1; } namespace StreamCompaction { diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index bcfd7a8..347155a 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -13,7 +13,7 @@ namespace StreamCompaction { } #define blockSize 32 -#define MAX_BLOCK_SIZE 32 +#define MAX_BLOCK_SIZE 16 #define checkCUDAErrorWithLine(msg) ((void)0) //checkCUDAError(msg, __LINE__) #define USE_CUDA_DEV_SYNC 0 @@ -47,6 +47,10 @@ namespace StreamCompaction { * device memory and does not use gpuTimer. */ void scan(int n, int *odata, const int *idata, bool internalUse) { + if (n == 1) { + odata[0] = 0; + return; + } // TODO: handle n <= 2 ??? // nearest power of two const int bufSize = 1 << ilog2ceil(n); @@ -60,7 +64,7 @@ namespace StreamCompaction { checkCUDAErrorWithLine("malloc dev_buf error!!!"); if (n != bufSize) { - cudaMemset(dev_buf, 0, bufSize * sizeof(int)); + cudaMemset(dev_buf + n, 0, (bufSize - n) * sizeof(int)); checkCUDAErrorWithLine("memset dev_buf to 0 error!!!"); } diff --git a/stream_compaction/efficientShared.cu b/stream_compaction/efficientShared.cu new file mode 100644 index 0000000..02c2302 --- /dev/null +++ b/stream_compaction/efficientShared.cu @@ -0,0 +1,127 @@ +#include +#include +#include "common.h" +#include "efficient.h" + +namespace StreamCompaction { + namespace EfficientShared { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + +#define blockSize 32 +#define MAX_BLOCK_SIZE 32 +#define MAX_CHUNK_SIZE 32 +#define checkCUDAErrorWithLine(msg) ((void)0) + //checkCUDAError(msg, __LINE__) +#define USE_CUDA_DEV_SYNC 0 + +/* Macros below adapated from: + * https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch39.html/ + * Example 39-3 */ +#define NUM_BANKS 32 +#define LOG_NUM_BANKS 5 +#define CONFLICT_FREE_OFFSET(n) \ + ((n) >> NUM_BANKS + (n) >> (2 * LOG_NUM_BANKS)) + + __global__ void scanChunk(int n, int *g_odata, const int *g_idata) { + extern __shared__ float sharedBuf[]; + int idx = threadIdx.x; + int offset = 1; + // compute indices and offsets to write to banks without conflict + int aIdx = idx; + int bIdx = idx + n / 2; + int bankOffsetA = CONFLICT_FREE_OFFSET(aIdx); + int bankOffsetB = CONFLICT_FREE_OFFSET(bIdx); + sharedBuf[aIdx + bankOffsetA] = g_idata[aIdx]; + sharedBuf[bIdx + bankOffsetB] = g_idata[bIdx]; + // begin up-sweep + for (int d = n / 2; d > 0; d /= 2) { + __syncthreads(); + if (idx < d) { + aIdx = offset * (2 * idx + 1) - 1; + bIdx = aIdx + offset;//offset * (2 * idx + 2) - 1; + aIdx += CONFLICT_FREE_OFFSET(aIdx); + bIdx += CONFLICT_FREE_OFFSET(bIdx); + + sharedBuf[bIdx] += sharedBuf[aIdx]; + } + + offset *= 2; + } + + // set last idx to 0 + if (idx == 0) { + sharedBuf[n - 1 + CONFLICT_FREE_OFFSET(n - 1)] = 0; + } + + for (int d = 1; d < n; d *= 2) { + offset /= 2; + __syncthreads(); + if (idx < d) { + aIdx = offset * (2 * idx + 1) - 1; + bIdx = aIdx + offset;//offset * (2 * idx + 2) - 1; + aIdx += CONFLICT_FREE_OFFSET(aIdx); + bIdx += CONFLICT_FREE_OFFSET(bIdx); + + float originalNodeValue = sharedBuf[aIdx]; + sharedBuf[aIdx] = sharedBuf[bIdx]; + sharedBuf[bIdx] += originalNodeValue; + } + } + + __syncthreads(); + + g_odata[aIdx] = sharedBuf[aIdx + bankOffsetA]; + g_odata[bIdx] = sharedBuf[bIdx + bankOffsetB]; + } + + /** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + * internalUse specifies whether this is used as a helper function, + * for example, in compact. If so, it assumes idata and odata are in + * device memory and does not use gpuTimer. + */ + void scan(int n, int *odata, const int *idata, bool internalUse) { + if (n == 1) { + odata[0] = 0; + return; + } + // TODO: handle n <= 2 ??? + // nearest power of two + const int bufSize = 1 << ilog2ceil(n); + + int *dev_buf; + + cudaMalloc((void**)&dev_buf, bufSize * sizeof(int)); + checkCUDAErrorWithLine("malloc dev_buf error!!!"); + + if (n < bufSize) { + cudaMemset(dev_buf + n, 0, (bufSize - n) * sizeof(int)); + checkCUDAErrorWithLine("memset dev_buf to 0 error!!!"); + } + + cudaMemcpy(dev_buf, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorWithLine("memcpy dev_buf error!!!"); + + timer().startGpuTimer(); + + scanChunk<<>>(bufSize, dev_buf, dev_buf); + checkCUDAErrorWithLine("scan chunk error!!!"); + + timer().endGpuTimer(); + + + cudaMemcpy(odata, dev_buf, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAErrorWithLine("memcpy dev_buf to host error!!!"); + cudaFree(dev_buf); + checkCUDAErrorWithLine("free dev_buf error!!!"); + + + } + + } +} diff --git a/stream_compaction/efficientShared.h b/stream_compaction/efficientShared.h new file mode 100644 index 0000000..9b81825 --- /dev/null +++ b/stream_compaction/efficientShared.h @@ -0,0 +1,12 @@ +#pragma once + +#include "common.h" + +namespace StreamCompaction { + namespace EfficientShared { + StreamCompaction::Common::PerformanceTimer& timer(); + + void scan(int n, int *odata, const int *idata, bool internalUse = false); + + } +} diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 9faee2b..a189c17 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -57,8 +57,8 @@ namespace StreamCompaction { // start scan iterations int pingPongCount = 0; for (int offset = 1; offset < n; offset *= 2) { - ++pingPongCount; - if (pingPongCount % 2) { + pingPongCount = 1 - pingPongCount; + if (pingPongCount) { scanIteration << > >(n, dev_bufB, dev_bufA, offset); } else { @@ -71,7 +71,7 @@ namespace StreamCompaction { } timer().endGpuTimer(); - if (pingPongCount % 2) { + if (pingPongCount) { // output is in bufB cudaMemcpy(odata, dev_bufB, n * sizeof(int), cudaMemcpyDeviceToHost); } diff --git a/stream_compaction/radixSort.cu b/stream_compaction/radixSort.cu index f634555..013f4dc 100644 --- a/stream_compaction/radixSort.cu +++ b/stream_compaction/radixSort.cu @@ -85,6 +85,7 @@ namespace StreamCompaction { } } } + void radixSort(int n, int *odata, const int *idata, bool ascending) { int *dev_highBitsBuf; int *dev_originalData; @@ -155,11 +156,14 @@ namespace StreamCompaction { // compute trues and scatter computeTrueAndScatter << > > (n, dev_postScatterBuf, dev_falseBuf, dev_originalData, dev_totalFalsesBuf, passMask, ascending); - cudaMemcpy(dev_originalData, dev_postScatterBuf, n * sizeof(int), cudaMemcpyDeviceToDevice); - checkCUDAErrorWithLine("memcpy postScatter to originalData error!!!"); + if (bitIdx < maxBitIdx) { + // if not last iteration + cudaMemcpy(dev_originalData, dev_postScatterBuf, n * sizeof(int), cudaMemcpyDeviceToDevice); + checkCUDAErrorWithLine("memcpy postScatter to originalData error!!!"); - // move passMask to next bit - passMask <<= 1; + // move passMask to next bit + passMask <<= 1; + } } timer().endGpuTimer(); diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index f58d7f2..f095ebe 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -21,37 +21,29 @@ namespace StreamCompaction { */ void scan(int n, int *odata, const int *idata) { int *dev_idata; - int *dev_odata; cudaMalloc((void **)&dev_idata, n * sizeof(int)); checkCUDAErrorWithLine("malloc dev_idata!!!"); - cudaMalloc((void **)&dev_odata, n * sizeof(int)); - checkCUDAErrorWithLine("malloc dev_odata!!!"); - cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); checkCUDAErrorWithLine("memcpy dev_idata from host!!!"); thrust::device_ptr dev_thrust_idata(dev_idata); - thrust::device_ptr dev_thrust_odata(dev_odata); // pass in cpu pointers here - thrust::device_vector dev_vector_idata(idata, idata + n); - thrust::device_vector dev_vector_odata(odata, odata + n); + + thrust::device_vector dev_vec_idata(dev_idata, dev_idata + n); timer().startGpuTimer(); - thrust::exclusive_scan(idata, idata + n, odata);//dev_vector_idata.begin(), dev_vector_idata.end(), dev_vector_odata.begin()); + thrust::exclusive_scan(dev_vec_idata.begin(), dev_vec_idata.end(), dev_vec_idata.begin()); // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); timer().endGpuTimer(); - //cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); - //checkCUDAErrorWithLine("memcpy dev_odata to host!!!"); + thrust::copy(dev_vec_idata.begin(), dev_vec_idata.end(), odata); cudaFree(dev_idata); checkCUDAErrorWithLine("free dev_idata!!!"); - cudaFree(dev_odata); - checkCUDAErrorWithLine("free dev_odata!!!"); } } } From 8942024fd0f702ddca4d4555480220726a5e416c Mon Sep 17 00:00:00 2001 From: MauKMu Date: Tue, 19 Sep 2017 21:13:31 -0400 Subject: [PATCH 05/15] Start README --- README.md | 25 ++++++++++++++++++++----- img/block-naive.png | Bin 0 -> 38401 bytes img/block-workeff.png | Bin 0 -> 46995 bytes 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 img/block-naive.png create mode 100644 img/block-workeff.png diff --git a/README.md b/README.md index b71c458..65e2fdf 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,26 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Mauricio Mutai +* Tested on: Windows 10, i7-7700HQ @ 2.2280GHz 16GB, GTX 1050Ti 4GB (Personal Computer) -### (TODO: Your README) +### Overview -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +#### Introduction + +The main aim of this project was to implement a few simple, but crucial GPU algorithms, understand their performance and how to improve it. The algorithms implemented were: exclusive scan, stream compaction, and radix sort. + +For the exclusive scan (hereafter referred to as simply "scan"), multiple different implementations were made. A serial CPU version was created to check for correctness and as a comparison point. Then, a "naive" GPU version and a more "work-efficient" GPU version were implemented. Finally, a version of the work-efficient implementation was modified to use shared memory. + +### Performance Analysis + +#### Rough optimization of block size + +Below are two graphs showing some measurements of the runtime of the naive and work-efficient GPU scans, taken at different block sizes (that is, how many threads at most would be allocated to each block). The measurements were made with an array of size 1024. + +![](img/block-naive.png) + +![](img/block-workeff.png) + +For the naive scan, the optimal block size appears to be 32, while for the work-efficient version, it is 16. diff --git a/img/block-naive.png b/img/block-naive.png new file mode 100644 index 0000000000000000000000000000000000000000..51ce3b7e1905a2ba6ba552b77b2325aa377cf005 GIT binary patch literal 38401 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㕯 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 literal 0 HcmV?d00001 diff --git a/img/thrust-zoom.png b/img/thrust-zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..259093dfdbdff98a9ba9d33824ced0947824e84f GIT binary patch literal 143606 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�t7uh#(LPJUSM5bj0!^ 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 B$uIx_ literal 0 HcmV?d00001 From 2cd689a3eab93e04103455239139342104ccd01d Mon Sep 17 00:00:00 2001 From: MauKMu Date: Tue, 19 Sep 2017 23:23:02 -0400 Subject: [PATCH 11/15] Add more analysis and EC --- README.md | 29 ++++++++++++++++++++++++++++ src/main.cpp | 2 +- stream_compaction/efficientShared.cu | 2 +- stream_compaction/efficientShared.h | 2 +- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 95d8ae4..d784aae 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,28 @@ We can clearly see that using the much faster on-chip shared memory greatly impr Unfortunately, this specific implementation is limited in that it only correctly runs if executed in a single block. It is definitely possible to expand this to use multiple blocks ("scan of scans"), though. +### Optimization to improve work-efficient GPU approach ("Part 5") + +I noticed I could invoke my up-sweep and down-sweep kernels with a different number of blocks and threads per block at each iteration, since each iteration operates on a different number of elements in the array. This, together with a calculation of a "nodeIdx" in those kernels, allow me to invoke fewer kernels when the algorithm allows for it (i.e. when the sweeps are closer to the root). + +### Radix Sort ("Part 6") + +I implemented a GPU radix sort using my work-efficient GPU scan with global memory. It may be invoked with: + +` +StreamCompaction::RadixSort::radixSort(size, out, in, ascending); +` + +### GPU scan with shared memory ("Part 7") + +The performance of the work-efficient GPU scan with shared memory has been analyzed above. It may be invoked as follows: + +` +StreamCompaction::EfficientShared::scan(size, out, in); +` + +In my GPU, it can only handle arrays of size up to 2^11. + ### Output of test program The output below was generated with an array size of 2^20. It includes tests for the **GPU radix sort**, but not the work-efficient with shared memory GPU scan, due to limited memory. @@ -250,3 +272,10 @@ The output below was generated with a size of 2^10, and does include the **share passed Press any key to continue . . . ``` + +### Miscellaneous details + +I added a "dummy" run of Thrust's scan at the beginning of the test. Nothing is printed or checked from this test, but it is used to avoid a problem where the runtime of the first run of Thrust's scan is much higher than it should be (on the order of tens of milliseconds). + +The naive and work-efficient, global memory GPU scans take an optional parameter `internalUse` that specifies whether the scan will be used on its own, or as part of another GPU algorithm, such as compact or radix sort. + diff --git a/src/main.cpp b/src/main.cpp index a5cfec9..20ab6c4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -166,7 +166,7 @@ int main(int argc, char* argv[]) { printf("** SORT TESTS **\n"); printf("****************\n"); - genArray(SIZE - 1, a, 256); // Leave a 0 at the end to test that edge case + genArray(SIZE - 1, a, 257); // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; printArray(SIZE, a, true); diff --git a/stream_compaction/efficientShared.cu b/stream_compaction/efficientShared.cu index 02c2302..9ddf6f8 100644 --- a/stream_compaction/efficientShared.cu +++ b/stream_compaction/efficientShared.cu @@ -85,7 +85,7 @@ namespace StreamCompaction { * for example, in compact. If so, it assumes idata and odata are in * device memory and does not use gpuTimer. */ - void scan(int n, int *odata, const int *idata, bool internalUse) { + void scan(int n, int *odata, const int *idata) { if (n == 1) { odata[0] = 0; return; diff --git a/stream_compaction/efficientShared.h b/stream_compaction/efficientShared.h index 9b81825..466a40b 100644 --- a/stream_compaction/efficientShared.h +++ b/stream_compaction/efficientShared.h @@ -6,7 +6,7 @@ namespace StreamCompaction { namespace EfficientShared { StreamCompaction::Common::PerformanceTimer& timer(); - void scan(int n, int *odata, const int *idata, bool internalUse = false); + void scan(int n, int *odata, const int *idata); } } From f77f786a735c1362d094a199d2b4f761e0206e50 Mon Sep 17 00:00:00 2001 From: MauKMu Date: Tue, 19 Sep 2017 23:45:02 -0400 Subject: [PATCH 12/15] Add radix sort analysis --- README.md | 8 ++++++++ img/radix.png | Bin 0 -> 42829 bytes stream_compaction/cpu.cu | 2 ++ 3 files changed, 10 insertions(+) create mode 100644 img/radix.png diff --git a/README.md b/README.md index d784aae..50a14de 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,14 @@ I implemented a GPU radix sort using my work-efficient GPU scan with global memo StreamCompaction::RadixSort::radixSort(size, out, in, ascending); ` +The radix sort is tested in the main test program by comparing its output with std::sort. Below is a graph comparing the runtimes of the GPU radix sort and the CPU std::sort: + +![](img/radix.png) + +We can see the CPU sort starts out faster, but the parallel nature of the GPU sort allows it to scale better and peform better for larger arrays. Again, this is likely due to the overhead of launching multiple threads and accessing global memory slowing down the GPU approach initially, but as the arrays grow, more warps can be launched in order to amortize those costs. + +It should be noted the elements in the array were all <= 256. This is perhaps an advantage for the radix sort, as it thrives when it has to compare keys that that require fewer bits to be represented in memory. + ### GPU scan with shared memory ("Part 7") The performance of the work-efficient GPU scan with shared memory has been analyzed above. It may be invoked as follows: diff --git a/img/radix.png b/img/radix.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fa8f9e31d1fa44bbd686d346c02483b221ce4b GIT binary patch literal 42829 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

b3}ed|E2I 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 Date: Tue, 19 Sep 2017 23:47:35 -0400 Subject: [PATCH 13/15] Fix parameter --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50a14de..dd26901 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ I noticed I could invoke my up-sweep and down-sweep kernels with a different num I implemented a GPU radix sort using my work-efficient GPU scan with global memory. It may be invoked with: ` -StreamCompaction::RadixSort::radixSort(size, out, in, ascending); +StreamCompaction::RadixSort::radixSort(size, out, in, true); ` The radix sort is tested in the main test program by comparing its output with std::sort. Below is a graph comparing the runtimes of the GPU radix sort and the CPU std::sort: From dd47df87a875a855c015239676f0f3d55b1397ef Mon Sep 17 00:00:00 2001 From: MauKMu Date: Tue, 19 Sep 2017 23:50:41 -0400 Subject: [PATCH 14/15] Replace radix sort graph --- img/radix.png | Bin 42829 -> 46314 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/img/radix.png b/img/radix.png index c2fa8f9e31d1fa44bbd686d346c02483b221ce4b..fcdcaa818c91b66a1da366726c78ae561398b816 100644 GIT binary patch literal 46314 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 OWV6|B6Muu-@&5v=M^;w= literal 42829 zcmeFZbyQXD*Dkyj6bn#LKq-}$Qlwi!5GfS}5dlR?I;7L2K}l(qZs{&*kZv}xkre5U zO?-3h?e9JBIp2TZAKy4C|vo>R6GIyJ85xO-5P~r{0sk09(hSOM~y-y9?D7IdSo9pKSC_|$fn|O z* zsW&H;=*}J-82OPRB!caczUs8#_fRpmLwf6VK^|-Uk1wX9Zr)t#cP#c;!?uQVuSr^q z@3~fXCw}{O3+WsR<-U^FS&I7;3MD9GL4f~ zQLf$s+$buFYGTw~At51kb@jz9fpCQzH*P$5@Ze>Gzn`z~y5@^z6&o9y&dyE>pE}#5 zz%i6XqY1yZW!;75!f}Cxm5BzMbRrb$-Q}Vq?)u~`lX|LygM;VJoofl>4)F8qEoG%@ z3}ljzi04N=ds^<8zfd@?_~_xoz^JHnH8B*5iV)tNch}T(0fs=qttI-h{!F>CW&iwO zF8r8E<+yU_#2h{8Wk*R)pYG1fk^CGRn`I)gHEcaQJ1a~PcSB2p^Y>o)#pQ$T1_}Pb zT-$}GZ>d|Cr;nj(u0n_8b#--psRh~`Vi(YbOQYpZy{V6zW75+(R&MlbD_w7HX^GDJ z=;48Va6(U#kB_g}_Vw%6_Y?TZvSLFm4@S?JJbwH*KR?`gO4lm|e0+SSh=ZDVU3OpV4GjJ5O_L)>p>Fw)9Y=|tzj#so>C>S?b8QDc z@|DL?&#Bz(?>v4SGRj2wIa9OrujbJ`8EBzZKR2+4k%h&>!$Ve9w&jNEix*d5CNDRh z8%DX$+?JA}c2k|-Lia48*SLRnn?f{83>A#16;6SCq9L!%ZjQ&3Ro z$q+=L))BA3$@9DlrH3}*7kHJCntF*x*RyQF>d3@72ASZHkS4TZD06=Ky-X{bZ0oh@ zR#;+8v2~K@U)c(!omwyQ1s2mm)$b=xo_tVHXo_Z5K9ai-{^`^Gr%(Up1eTPPeES{a;jQ9vWL};n#*nMyVnyzl@BGv|M+lG)ryS0s@`iCnqOkmnt!( zl$&IvKNA%r=a<+;MV%)bKa;dyq1AdM-g0lJZ~uZp-OCH-&RsEQ56CU@QPXm`A(>~YkBmUx;k5%jVa3r@74n{30F(YZ2QDuKG{i@M`fAMGWo|RH>?|I?N}dYJS*;M zinu>c^q@XRj-R`2nv68gKERVmdN^w}_b#2-zt-Ktvzx$vh9l|d1`$WU%9N*QEDC+Sgh2`bGCL^jvpAUJ&?2X zXi$z?(>@?^s}q{p6Nm||>^f3~L6)q4+sx$@_L-FPq|4-ISrdt1dH#Mj$|R<&irrMA z*ln@o`1p9RtK6pEtSO!tw*!ZjPVEY>ATu8dPO=#)rPK>ESH=qp=ocetu84?eI1f|K zJm)<8Tt{GB`uaf-HZWbyw`=Uu^5%}GJ)sG=>SJwfO#C~+46=aunwC#!@q66m>w!UE z6r!S)!g=a!f19Eiz9=M?m5ByW{-*Ho^Y;&Be_g@cGhA#PLN6_v5hK>4)OIt3NV zw*o|08~tfTf^$9FqD5M!*lMif&uPi%|D%SA?M?Y<ON5H{%QR-KLcCpM}Z8_xATIM+rX2@%K8L zq_KKZE{Lbr#cS>RNpj}9ee!!svErJG%XkS*`ntaB@$V*O1 z$v<$&bHbCT&o(D=dnJrR{p#Xf(R71SyAy~c;TBDu_@milkB-RLW;PZSk&G*;W9jw|JCT5p<3D_~}4ZUrtB zT|*bug6U$xbVChd2M+|Bua{4AJ(%C)oN#Rqtt_tPJ~FlS&HiCj);oRd+rns$X%cM- z%bV#@uMK%>R*Gk0tOsOswP#Uh@18J2RauYUOy2HDaTal0HzZzsM3>Fob|WH+&eQtj zj!M2&;MiPUV4d9CShePJD@xzM)BwB&_ya6eeuD(_~4$Lhf`8x1A@EN>n?9g*3n5b2EO;o8A}L z=hX<#k){iNP-#o4Rf%IXJhh@j!Oh9iaBjcu{UUZAOo~x+3KI-c3X8F^e-i5x}EuXlaz3<=EM8O%hQ)`>ie#q+L@p~{4;51 zrKuUc+D4}A-LerM(Xs87E1=hW9)0B{iQ7X?w*&&o%U6nyph&&QM<58X#@=GMdR0^l z8>e0?=G}cJpEM^WC8Z!v(^=C?u+(B(#V26CfMK&&ycVs>uJkk_&s(g(&D(Bu(52q@ zV)M`MBq}GvY8}#7ExeMtc3dt{P&BiYk28;dte|V+cD)+Z6mP4;rsd(1Zo4?lrqtBa zW>RMwV*R{HnCV-S6te5kL0tJ010>-qzD3%WNB61-NbmOLu6+M~b*g=P{Gyr`sZrKN zyMavCg~^cX=A)u31Hw_i|M>L3Tbt=*uazrWsHI`aO)!~}|gsHPu~fI4NwFG?pcv3`vs|aE{L*`9-R5QLf$WZ>((2dkMg4Nh`)BB z$4!qrOpm*M5cds+0D%X#;@J7zhzr+Ehj{auEl+)mVl=F>t@@n7Y{0zfb~nt+C}d3m z8)15Q{%|r#SvX5tl)2f8k!yxwAXhBFra15YpRWq5WCA_UPkuCragbR!|7hOMx~E;! zZY05kUifvg++1IVMu=(tjQlIp-=`I#Q0#MU`g(d^YUz7a*HnTgAAb@PKL8gzMV$X3 zNO%03O6gy}04-9b7+G_$zQD_Z;hcI-{v+|qE%ahrgIx0SKOU_-mjV33vb>mnF3#fc zTi;l#9yXMXmG!=pDf?PHjs6p^S39+Q4^&j*%8tF?nClmDzMGHpbsxdkadl4awwgUH zwn~U}JGFUgOQIX=DC!wWWS8?qDpuSj;u*C(0NHOQrOx(K`J8$oAt9~%!P;6{nI;&A zndmkVv=)JDf2L+@2}8U6RQrTx$!p6lBkYL*@h_WEg(a^BbM(gPrv9kJya2@dJ!;td zCOUNQjpn1|GZq#_wt@2Ej$(#CTpa+tkPRodhUP@G=wZH1;k|~cQ@f+>(Ip6T)sZc> z*>o$PgwL44%IoRs+TVW{svO0cJGj@#5WtENE2RC&t;SZxM8y`#PGab;>3zB#qKRp^ULF zOPf2(jgd}j$Ew9DXlPGlYmmg^?984wcTCp;x3g zXKFaz)`xXPEb9*(Cr_aV`gbnfC>VB2&fi(c_?19rPUDf{y&#&B{j$N)f-*wPQc)qC z=g!W;m4mo3-6Jpm%M4M9o0< z?1tS?b>Tk*_tR2R&QU9Jq2{9&7{=O0*xbbd$&2D#1G1y z4&&C&eDuYf$)ARvo}QA@ZYJ7J*bTk=XQN|P;B6$cVnlq|F`Bl}obt_2`%;}hW!qf} z$PFT%1q_Flz4d*TYcE%t8mn(c0gj%0mziFd4x zfVGV!Hz!AwM8$;u2xm}rQmpIKsExrGg0u|(&S&FK~||8>X_WL^!U@pp2>c) z%bjz#av_j;db`N{u$++5%L^V_72|YRA69$vB-sS56)+rA#LZ-Kjf>0n;&2hpZ3Yf< zJusSaxAaRP`fOBN9HTlW+dr}Am#%ptA1L#JDSKl5x{ZK^(38{3k%;crDg{$`O zJv}|ATEYtVyc<6{ioN&nU^kXPw}%e>c=0YLqhLGuc)%z`TT_Bk_RON6t<>JwXaVyW zebORI%(DWO@Cc5+mmsR*+ zDI`Z_!)o&y%8ogvUWTtvL?@~Br1Gv zzf$+|iIx`E=)G0+HFoxvq|v~zzXM>nh1*Im=8?4Y z`z5ZUQz0x$s%mOs;o&LHr8;%q(+3-G)1;3`S_5N}%+)h6@L5yXiBgF=FSa@Ga?yF{ zV7*&8IxnJinnFukXqna6;a*?(32`yy+;Z+I?%zfxYJS^qqXk$?y z;4;%`-#mpG|Dn`YTRYMHi--0{IaTY=52x!!I5i3s95fUocxMr;xKl28g)R+HYlRE8 zd5d*%sGwI_o3y}$a(yKGrN^GgJ-P6ppdbw%riPuknZSjdS^y?yF`MYja}#Z3b)1uR z0%5nyKACX$aVc{{q?mFjUVQbNoQ2$Gh|6@sbs!$Mfv>{`?l2kWt+5RmXNh%QrL5fk zP!q6Gkh^QDOfWylrF3!-sB^k=GbZmvB^F1i$GFyv!T#QChqVs)}9&_=o)#1_rWh~Mu8 zInOVN&$P!C$xf9_D}F?6&(2kc3P!8`EFz}n_cS-1k@KSw>S{98*#0AAP|9HmG7k0~ zpGm)G=W{O|?uud)#YlcdEdkjWPNqR$ZFxmSQ`hjY}m1EfXeOk@& zM0i1t5<(cJ-pQXj#(JJxYgY+MSk(( z#Z~1ir0Mr%J_v>fPK3y|3!(MAz)vn55Hm&c=`dorAI!sga-yd^K(Wx%a|78(K2*MY z%quAUTjXkmh4m|Hji(3qh}=<9Aga*iXeJCa$tCh!*K&TSR(h%ze2Y!^+L9HCXGN`n zqvbSPte>YWHyc|@US7}d20Kf-t554*vTDz(n(%I^R1|URQB@Wd+spKXx}H^RmWyCj z#w4WF1*Aj~dWVJAusjkK{H|~5osizj_~_9iUUk&KX4E}V5+)`ll3Z#uJ?7@P=GVPm zmzD84#ZwfdrS>h2b~h}?YiUJndACx|Cpk3lW{sQlHIdPQk8K_}V(Ds#j>pbbvoEzm zz;8|(Tpc6Pd*m6!CZy%C9`!>r^hw$4NTV^!m>y`;2R(iS`)?upV!q z^dQT6+}_7RVNlu3$hKmLj>UMFsxT`EU2K_tZ!bAXubv|wFmBTA$`dzG?6_fs{w4+d z)7Xk;L7P;|&D`54q{ZgK`SYwx=U7y%$~OL_WNU^Fyfc1)K9DY;)L%VkUS14B6bn<< zmVJgH`k~8ity~zFY0&4-zXua)ak%%*dqgEPD7}}xedg~nPyINJob!EE@pnoEMqRRW z)?DHbjn57b+w^NT7YNEf`q<2^RW>l!|J+Q-vhM-tVM^hXME9dYNYs z#`uNp>@T@x?VZ|~|9*FIZ9K9i)O3&0`1jLJo>+0qf{E9Rb1hA_AHPPJq6_$nPyY|j z*v_Y(@Wf=m|Nf_@SQUDQ$#eNl_s0p+1QmNZj-H*VDhS)WE^ZmfphN{&!qm7xnYeZ~ z$e!!z7cnm^nR2K-T?m%U;M`_Fh&@W|3-cI*;_9)cOxS0vZGR@;oIG5UI9vn%*NCk< z{m^xGNb7iMUf%1y?G+<#(v{0TZR1Sqzdh(3&+<%9PO>UT?K84zjMLt*7?X5x`uYAO z5ebc9->Z!MwPYDl!FF+M`qS(2EBFbZPLbQ?f7Qh}Be2pJXMhms6{q&xYMybHhi@YT z1Ic1Rg{TuyBQID9>iPAV+sJvV)*%eXAD-j*!vO3tbv4iPNfnB_p6w|jw)0QQ9XBHQ zjDss#y_FMIR#xI<12#>n9OTQ^yX5cOxpQxD74r#^UMw#zk|!yTKgdW)aoCv(vs)O_ z!>Xw}c!%3lmFGJq*yq%`fQK+0%99%oTacz&VTFhNXhr%APZM}KlF$fVuB-}vTUT?H zE{d7^x@GF-?p#(&?ppk5iQt8Alk+lBq*9Sso)T>>uSje5H*=#vE((^)NYbhj_QAfLqh}z z8v4l1xsw~yB5!}UFUapTdq9h!p`k@C9d@#@f{JB}N$CnmDv=>YgROe`-gnsrL<;Yx zhcp!095z{fS0}QZImRrXXEn+)*epjxswFXAY}}{Z^V2TDDoM+sHE(jGV;Bg(L=mTl zv3YUL+)@!4JBGFan0TMDYrlAfRaT0yT$`TiJn{-h1P94)LBLdtMKCt4i08j z(|uV)jH*(^W%u08dwY91)pMl78TEL=0oWy(%b`$iw{Qu+ZD|nIoL^v>!6CL!WgbD9 zLD~fOKAv#Z^e4Ypj!hpy-SWhBYuO8QQaur2VPSFcgW055{d8i~S9SbrWA7Gpm7YSm zyWzWrLS1Kl3z<*k_YU9U|Go78WhTs1Q&WKga&dEKWn_eGF)}hr-?@{JmXJ{YU_u@#>R$)&0O~k z7jv?OOx6OOPhC#4(QH=&{E%!_I)25dsH*+!e5r1HFDZFC+Sb^JWVp&SpFDY@p<$f; zOq3u+ z+CW`D{+61Xm4hQ#04&rza;OmuSnc6Mo$Mz@#>U1*M!_WVp&XwDR##UehOhDR=E2V# zQ!%aziIIDXih3QyxK_Y|6BGXa{X2Q*1L%i3FJCT*y#M&IzP1*!T3!n(NlI*3`Fr;m z=Pal_j4_@XUi&*cI}|>84gR!>(@&87fO3B>Y0>@g_wV1t#Kii!JIlXo7BR3k%{tkh zet@&{#TjJ%gJ+(UZ}e&W%c&Dyc}u-?BHwB-1E}q4eT)B__&@dIFEr^26O;Wqx+p-Y;+n5?0O4&5ezBS)!N9 z)|4Eiin)r)U9g)?)F1(lvg0RVn;6z4IVHtXBLAE;QD?VKc5ql&WUIc1JS7sGMvLY$ zOUpF5aSbmM5DI8L=Z~BiA7?C7p;niXk%3K9r^9ybTEvZ)GC_U7#vRT@fk;wYE1lJU z2KSI}z*zn1>9%P0ESWNk-?s%+sIR~bNl0i9TXcTE^Nxtr-_P%H#4mko;7(;?K!UR< z@el4DtyYu=M?Ez&(}LdE*gzBlVUG_V*w`r`$2&7M1sSd<9HCdFK0-=+eQ`uX+>_>y zC*=GIS=edt)=?z`7Aosc^Pm94s3bT&&-MG8>mFYiq4A;qnk7F_hO-)UZ z=ZDS1hW9P$r>ANg8kD1jdu>@j{%o}l_?;;8>U z%SPU6-rf5dNEBIepQ+<(ilEz9)%^ zHyny_i&K?+!mJF+JGdYzoSyz`{{XfNn2+LSn0jlJ&`oY`ZXuyTv>v|r=TOpOf)-a4 z0@WXB>H=N?0b#O(5KI)J1hWm=W2{sxEiGMLE9!Kh6^IA&Iy&E#y>U()RWAe2g7l-F zZxk{B#{Q(jc?Z0Yrhh4Hgg})@NK6ANMJIxCTe?&s!o+mPL}F($=s!-71vZ?Z<@o#U z68n|$o}Nbnl!7qJe_WCBIMI3g1g9gc`9`z(SH8t>MG;E;!;zzi9F8??;{D)ac$N{n(;Qv>r zlJ(o7*tkEdsHqh?Zv4IDL*Zo_)Rbqxq7!`@*+@s9I`CZ)$cRMSM`CK{9>n3EIL=+ZpI_6%Jl;&QphPq9h52}~}4OfB1G$hjo?-?EyHNR>IzWw!@s{nX=R|9D6GS%L4 z_h7@pL3&N%U;r^~xJ6|BhM||l+)?o9agmV0X-R3dZWjxSi7`W;r=|uHF;G+_=u;O6 zOHEE*^PUYFsj{=`U&x8t9d&i9%}>M-zBVGL+CE{n4!Ifz=eQBNV7lPzXrP$mlIZ!o_9xsZ5oNW;d^uD9))~q9i~mo*kxA zQ&jXT0}`PETxPL|I`c44c~wA=ePKg!pAOoqO2*vhADrI|eo((N@bVhb^@ z8l#^6{(Z?DNVAQ}B!v#F!g=yUem+M~PJ{xxcNG*MNKyDCKqbr9uT`!t;}H=NQ1jD_ z20qnSB91(DB6w+6caA7l#3Vu(dC{3S5Dfq&6qsYoN@svQugX9bim3`+nTShufy83L-}*06%lda)gd$y zEq`_iF>2y67%bfXhJZ*lORHSJH6mKXu35^2(YS*A!UaB9bBLxc?1b>#(Z`D=nj~8i zJd@LChRnVqD%5>|BFAo~ilZsFRP3cWY-ehV+0r3JQYA_p#rfV*!cC9SM*>wjp=trvPzqhhhNxfskh7i#1m zIPiSt))l+xi8Oa*+6yBatDA_${bNjLxA_;-M=G{{)G#Br^WblPqikBFI7CqBq1k(9 zLI+jlg73-EVGSn|bH}8<7u`J%keM?4cRdPbD&7f;ajXeJ+HSp#V`-N^xopo0FqzNW z46GBTLF=ObT30YFYTdVckKy~8R9}a}3FF8dKJoC6;jrJ=^icdaTgxc?INd`^M^`K& ztM{|yeZ4wh8vpYTRgVrANQ>uEY58vqA9t^WVm@f+>=)SK!fQ3{n^>Y}Zg=iIb6c2$ zRQ$h%QZQPJr!pg`3i$VT$>KR%7n{Aj{eu{_*D<22w#d!x|M^E4H=p5-lmp(WK1mk30*=q(3o zEvQkh9{;XBpf(EcX0 zPoM6E(Hjck=kdsR`B0XcIkpk(_SrEScQ*(x72xZB{Zc?SAr!MwP*cyXGDDmyE-s#$ znp(}cdiCn~!~}?nbaZr!YgRB_?vmg5ho=E^?2S*;A)V2>Wig=$rIP^I_4M=>F|{WA zplawr31Wc=aF?|VRlIv%;6a{7J=*H^`rdU3*6bq8s`^n>(aJOYtV?VB5=dEKP!ObOwIF!GjDTMR$3g!H*;$01!yBcp zyF2Oo2aU^Vbmdrm#460MK=_9GzB(UD0d}pyGKbu<^DB^Zq16`yDyo%+z|0fRBx1#q z#D|&hA^WBjK*3AM#I=?;4dok8`Tef(a4Nn8w_W}+nTfVZKM=w0muD>s&mO#q2!l~W zV2p%{m8KGAlKwpe$UMDjCkBC-5Vo<)msWj;m`6|`z&K}9>*MVW@g^-TjmbEIoSt3+ zYR3i!p5PH@{MhXz`1h;|>Nu!lC-W;MbRL z)*vELf8ONx*8Tu4t( z2kHC=2?;#w0igyCJuKF`RShp8 zWQ9t#)2;Ha#i3g*CW8Nsa@pe5-$&2*1Em06&q%SEDFG6TDUXGa5xFHFY`5g2C2Wy> z2#)In4MfsE{aLYPmdj(e!lF&N1ra1A`A~ag`gf_BZ^gEIFS8v<8QBV zU-|=?L8uXj`efkNAS}&k(806MSrM0Q0{iay$B+gAQetAo!c`qm4pEY0JLvi?acs$` z>tTqdh}8uP)Ehi+a(8Rg%n}|>v`IUQETbvj`7aZ2R~9erm&9#i(fOvW;JuId;=H#z z{e8_5{YQ_s+QN|4F+@swU^Y8L9`~DKm#sY%ksb`-g9cSJcw)eP6@iBWN{Ios-x#4TGVl?l>iS{I;d~~5H&I6^k+c+f)fqDqKhZ8 z!|4BAe@JacPH$5)QuqmHKZn?Y=4>=q%!*}JM#7Y$mUC|yMo&aBO1pWSlk5KOC zqQ%$Zo?6tv0IQKoOc=_!sZ5N`?yrDNtoh;v;THp(NTe&lN7v`lFgz3<#<(Ausw}|z zyiA(k(ngne2S0#t_4Wk5Yc)-p?a-tlKD1Rm@n+wg-=F`of8f7>CL2bb;KzqH-#YL) zn!*MBV7ncZ_(usGTpFs~masoxkR!ei1S#kg>iBp5VdnieXeZ4<1d||`8oBKI{claX zeA*lh0s$l~@T%?e^AJuRj_+c+u=kK9W%$?k6H9JZuX`i0Fpso#(7Rjz4B$#KaiN^A z7nLXukhtH%TR;cKKz8o1U`5PBG2M*d@)yY8!>=P2=CSnndfB1>38Zbnqlj1fnoFMK zcK@^)U<+J1J94M`;_lxix4l8vL(cLng^I#TWP@4$Yg|R@-Ct2Q*dch3gA$v{%sPOr zynmpjW-I45h65r}NEIP8&I0$jgA_IjB4S{8_^a$EwVMT|XpjUWZPp-i0T^yZ(+$(W zy~_;TW(Q*vH4T7MW(Q(mMHzw2rh;7g>lX(*yK&PkC_I|XaD-b??^YrGfEheYzyU>f-?4g;M1}AiL<?U&eCZvGgj#bOBaIFlkQup@Qd zH|li-@FEM=gW|ec)ENsMx&Gp)UZ z0OJQiSAiMmbIfQy(gATb?37n!SozWqFW99Wgb)W$ojNty@&Lfs2XIlENYop%F1`j} zrCz3}~6R9|#kZle*x4m8~~Y9X_}!G`*Q+yuzZA+RS$ujQ$I zGN_u{$v2Vq?$n7?9PG>sVfTNlY1yjpR})i{7-^H?I%#HQWi^>5o1tAP&YPFeFG3?^ z6(1?~UzEDa2T;y%?Nqz4NyNt7HwIa0qi3Xy2kED&=&Jq1;b=onPEKuox_T~H+6EUK zm_c>iUfeZWYq|-(p(s(~S_&~r@U}%R~8g%!EASwQowzZ46tWVt#>Tq-T{^T z`?vnXdR_mgPiI-gJkDIaYR;imW)G3*>3O8h?fTORd^XxKKQNebYa&=1plL|dlssKL z_t*oSXWac1F&yo)!+*YNSGuALOs%`V0ka2z(nJ&v)esy%bCz1nalIoM4uqhph_pru z4oBW;qnFG_QZIlDsXFH!%l#d=iW_zit3rWXd0jTdcjr{rZCqPI(PGnU(BEc4F>u`rM-0{q?^DaT?M5

b3}ed|E2I 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 Date: Tue, 19 Sep 2017 23:58:02 -0400 Subject: [PATCH 15/15] Update README --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd26901..1c2546f 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,8 @@ Unfortunately, this specific implementation is limited in that it only correctly I noticed I could invoke my up-sweep and down-sweep kernels with a different number of blocks and threads per block at each iteration, since each iteration operates on a different number of elements in the array. This, together with a calculation of a "nodeIdx" in those kernels, allow me to invoke fewer kernels when the algorithm allows for it (i.e. when the sweeps are closer to the root). +This adds value by improving the performance of the GPU approach enough that, even with global memory accesses, it can outperform the CPU scan for large enough arrays. + ### Radix Sort ("Part 6") I implemented a GPU radix sort using my work-efficient GPU scan with global memory. It may be invoked with: @@ -104,9 +106,11 @@ We can see the CPU sort starts out faster, but the parallel nature of the GPU so It should be noted the elements in the array were all <= 256. This is perhaps an advantage for the radix sort, as it thrives when it has to compare keys that that require fewer bits to be represented in memory. +This radix sort adds value by providing a relatively fast way of sorting small keys, while also showcasing an additional application of the GPU scan algorithm. + ### GPU scan with shared memory ("Part 7") -The performance of the work-efficient GPU scan with shared memory has been analyzed above. It may be invoked as follows: +The performance of the work-efficient GPU scan with shared memory has been analyzed above. The value added by this can be seen exactly in that performance improvement. It may be invoked as follows: ` StreamCompaction::EfficientShared::scan(size, out, in);