From a76452f8f59cda8293d924fa760afc3ad444eb23 Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Sat, 14 Sep 2024 17:19:21 -0400 Subject: [PATCH 1/8] Finish cpu, naive, efficient, and thrust --- src/main.cpp | 1 + stream_compaction/common.cu | 16 ++++- stream_compaction/cpu.cu | 51 ++++++++++++-- stream_compaction/efficient.cu | 118 ++++++++++++++++++++++++++++++++- stream_compaction/naive.cu | 52 ++++++++++++++- stream_compaction/thrust.cu | 5 +- 6 files changed, 230 insertions(+), 13 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..425a6b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -39,6 +39,7 @@ int main(int argc, char* argv[]) { StreamCompaction::CPU::scan(SIZE, b, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); printArray(SIZE, b, true); + printCmpResult(SIZE, b, b); zeroArray(SIZE, c); printDesc("cpu scan, non-power-of-two"); diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..9b9f14a 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -23,7 +23,12 @@ namespace StreamCompaction { * which map to 0 will be removed, and elements which map to 1 will be kept. */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { - // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + bools[index] = idata[index] == 0 ? 0 : 1; } /** @@ -32,7 +37,14 @@ namespace StreamCompaction { */ __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { - // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + if (bools[index] == 1) { + odata[indices[index]] = idata[index]; + } } } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..4de649d 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -19,7 +19,12 @@ namespace StreamCompaction { */ void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + if (n > 0) { + odata[0] = 0; + for (int i = 1; i < n; i++) { + odata[i] = odata[i - 1] + idata[i - 1]; + } + } timer().endCpuTimer(); } @@ -30,9 +35,15 @@ namespace StreamCompaction { */ int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); - // TODO + int pos = 0; + for (int i = 0; i < n; i++) { + if (idata[i] != 0) { + odata[pos] = idata[i]; + pos++; + } + } timer().endCpuTimer(); - return -1; + return pos; } /** @@ -41,10 +52,40 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + // construct the temporary array + int *temp = new int[n]; + int *scanResult = new int[n]; + timer().startCpuTimer(); - // TODO + // map + for (int i = 0; i < n; i++) { + temp[i] = idata[i] == 0 ? 0 : 1; + } + + // scan + if (n > 0) { + scanResult[0] = 0; + for (int i = 1; i < n; i++) { + scanResult[i] = scanResult[i - 1] + temp[i - 1]; + } + } + + // scatter + int count = 0; + for (int i = 0; i < n; i++) { + if (temp[i] == 1) { + odata[scanResult[i]] = idata[i]; + count++; + } + } + count = temp[n - 1] == 1 ? count + 1 : count; timer().endCpuTimer(); - return -1; + + // free memory + delete[] temp; + delete[] scanResult; + + return count; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..fa739cb 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -12,13 +12,69 @@ namespace StreamCompaction { return timer; } + __global__ void kernUpSweep(int n, int d, int* data) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + int offset = 1 << (d + 1); // 2^(d+1) + if (index % offset == 0) { + data[index + offset - 1] += data[index + (offset >> 1) - 1]; + } + } + + __global__ void kernDownSweep(int n, int d, int* data) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + int offset = 1 << (d + 1); // 2^(d+1) + if (index % offset == 0) { + int t = data[index + (offset >> 1) - 1]; + data[index + (offset >> 1) - 1] = data[index + offset - 1]; + data[index + offset - 1] += t; + } + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 + int* dev_idata; + int* dev_odata; + int blockSize = 128; + int fullBlocksPerGrid = (enlargedSize + blockSize - 1) / blockSize; + + cudaMalloc((void**)&dev_idata, enlargedSize * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, enlargedSize * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + + // copy the input to GPU (size n data) + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + timer().startGpuTimer(); - // TODO + // up-sweep + for (int d = 0; d <= ilog2ceil(enlargedSize) - 1; d++) { + kernUpSweep<<>> (enlargedSize, d, dev_idata); + } + + // down-sweep + cudaMemset(dev_idata + enlargedSize - 1, 0, sizeof(int)); + for (int d = ilog2ceil(enlargedSize) - 1; d >= 0; d--) { + kernDownSweep<<>> (enlargedSize, d, dev_idata); + } timer().endGpuTimer(); + + // copy the result to odata (size n data) + cudaMemcpy(odata, dev_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + + // free memory + cudaFree(dev_idata); + cudaFree(dev_odata); } /** @@ -31,10 +87,66 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { + int* dev_idata; + int* dev_odata; + int* dev_temp; + int* dev_scan; + int blockSize = 128; + int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; + + int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 + int fullBlocksPerGridEnlarged = (enlargedSize + blockSize - 1) / blockSize; + + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + cudaMalloc((void**)&dev_temp, enlargedSize * sizeof(int)); + checkCUDAError("cudaMalloc dev_temp failed!"); + cudaMalloc((void**)&dev_scan, enlargedSize * sizeof(int)); + checkCUDAError("cudaMalloc dev_scan failed!"); + + // copy the input to GPU + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + timer().startGpuTimer(); - // TODO + // map + StreamCompaction::Common::kernMapToBoolean<<>> (n, dev_temp, dev_idata); + + // scan (implemented again) + cudaMemcpy(dev_scan, dev_temp, n * sizeof(int), cudaMemcpyDeviceToDevice); + // up-sweep + for (int d = 0; d <= ilog2ceil(enlargedSize) - 1; d++) { + kernUpSweep<<>> (enlargedSize, d, dev_scan); + } + + // down-sweep + cudaMemset(dev_scan + enlargedSize - 1, 0, sizeof(int)); + for (int d = ilog2ceil(enlargedSize) - 1; d >= 0; d--) { + kernDownSweep<<>> (enlargedSize, d, dev_scan); + } + + // scatter + StreamCompaction::Common::kernScatter<<>> (n, dev_odata, dev_idata, dev_temp, dev_scan); timer().endGpuTimer(); - return -1; + + // calculate count + int lastScanValue = 0; + int lastTempValue = 0; + cudaMemcpy(&lastScanValue, dev_scan + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(&lastTempValue, dev_temp + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + int count = lastScanValue + lastTempValue; + + // copy the result to odata + cudaMemcpy(odata, dev_odata, count * sizeof(int), cudaMemcpyDeviceToHost); + + // free memory + cudaFree(dev_idata); + cudaFree(dev_odata); + cudaFree(dev_temp); + cudaFree(dev_scan); + + return count; } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..c31a0a1 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -11,15 +11,63 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } - // TODO: __global__ + + __global__ void kernNaiveScan(int n, int d, int* odata, const int* idata) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + int offset = 1 << (d - 1); + if (index >= offset) { + odata[index] = idata[index - offset] + idata[index]; + } + else { + odata[index] = idata[index]; + } + } + + void ChangeToExclusive(int n, int* odata) { + for (int i = n - 1; i > 0; i--) { + odata[i] = odata[i - 1]; + } + odata[0] = 0; + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int* dev_idata; + int* dev_odata; + int blockSize = 128; + int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; + + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + + // copy the input to GPU + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + timer().startGpuTimer(); - // TODO + // outer loop + for (int d = 1; d <= ilog2ceil(n); d++) { + // parallel process + kernNaiveScan<<>> (n, d, dev_odata, dev_idata); + std::swap(dev_odata, dev_idata); + } timer().endGpuTimer(); + + cudaMemcpy(odata, dev_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + + // shift right and add 0 to the beginning to acquire the exclusive scan + ChangeToExclusive(n, odata); + + // free memory + cudaFree(dev_idata); + cudaFree(dev_odata); } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..85f2140 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,14 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + thrust::device_vector dv_in(idata, idata + n); + thrust::device_vector dv_out(n); timer().startGpuTimer(); - // TODO use `thrust::exclusive_scan` // example: for device_vectors dv_in and dv_out: // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); timer().endGpuTimer(); + thrust::copy(dv_out.begin(), dv_out.end(), odata); } } } From b8d4117a60a28397be4d2b2ba7056b802303254d Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Sun, 15 Sep 2024 03:37:17 -0400 Subject: [PATCH 2/8] Refined code, solved part 5 --- src/main.cpp | 18 ++++++++++++++++- stream_compaction/cpu.cu | 2 +- stream_compaction/efficient.cu | 36 ++++++++++++++++------------------ 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 425a6b3..e738f0d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,12 +13,14 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 20; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; int *c = new int[SIZE]; +int *d = new int[SIZE]; + int main(int argc, char* argv[]) { // Scan tests @@ -96,6 +98,19 @@ int main(int argc, char* argv[]) { //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); + // compare results between thrust array and cpu array + zeroArray(SIZE, b); + printDesc("compare thrust array and cpu array - CPU"); + StreamCompaction::CPU::scan(NPOT, b, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printCmpResult(NPOT, b, b); + + zeroArray(SIZE, d); + printDesc("compare thrust array and cpu array - Thrust"); + StreamCompaction::Thrust::scan(NPOT, d, a); + printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printCmpResult(NPOT, d, b); + printf("\n"); printf("*****************************\n"); printf("** STREAM COMPACTION TESTS **\n"); @@ -152,4 +167,5 @@ int main(int argc, char* argv[]) { delete[] a; delete[] b; delete[] c; + delete[] d; } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 4de649d..941bca7 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -78,7 +78,7 @@ namespace StreamCompaction { count++; } } - count = temp[n - 1] == 1 ? count + 1 : count; + count = scanResult[n - 1] + temp[n - 1]; timer().endCpuTimer(); // free memory diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index fa739cb..25af3d1 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -14,28 +14,28 @@ namespace StreamCompaction { __global__ void kernUpSweep(int n, int d, int* data) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - if (index >= n) { + int offset = 1 << (d + 1); // 2^(d+1) + int pos = index * offset; + + if (pos >= n) { return; } - int offset = 1 << (d + 1); // 2^(d+1) - if (index % offset == 0) { - data[index + offset - 1] += data[index + (offset >> 1) - 1]; - } + data[pos + offset - 1] += data[pos + (offset >> 1) - 1]; } __global__ void kernDownSweep(int n, int d, int* data) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - if (index >= n) { + int offset = 1 << (d + 1); // 2^(d+1) + int pos = index * offset; + + if (pos >= n) { return; } - int offset = 1 << (d + 1); // 2^(d+1) - if (index % offset == 0) { - int t = data[index + (offset >> 1) - 1]; - data[index + (offset >> 1) - 1] = data[index + offset - 1]; - data[index + offset - 1] += t; - } + int t = data[pos + (offset >> 1) - 1]; + data[pos + (offset >> 1) - 1] = data[pos + offset - 1]; + data[pos + offset - 1] += t; } /** @@ -44,14 +44,10 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 int* dev_idata; - int* dev_odata; - int blockSize = 128; - int fullBlocksPerGrid = (enlargedSize + blockSize - 1) / blockSize; + int blockSize = 64; cudaMalloc((void**)&dev_idata, enlargedSize * sizeof(int)); checkCUDAError("cudaMalloc dev_idata failed!"); - cudaMalloc((void**)&dev_odata, enlargedSize * sizeof(int)); - checkCUDAError("cudaMalloc dev_odata failed!"); // copy the input to GPU (size n data) cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); @@ -59,12 +55,14 @@ namespace StreamCompaction { timer().startGpuTimer(); // up-sweep for (int d = 0; d <= ilog2ceil(enlargedSize) - 1; d++) { + int fullBlocksPerGrid = (enlargedSize / (1 << (d + 1)) + blockSize - 1) / blockSize; kernUpSweep<<>> (enlargedSize, d, dev_idata); } // down-sweep cudaMemset(dev_idata + enlargedSize - 1, 0, sizeof(int)); for (int d = ilog2ceil(enlargedSize) - 1; d >= 0; d--) { + int fullBlocksPerGrid = (enlargedSize / (1 << (d + 1)) + blockSize - 1) / blockSize; kernDownSweep<<>> (enlargedSize, d, dev_idata); } timer().endGpuTimer(); @@ -74,7 +72,6 @@ namespace StreamCompaction { // free memory cudaFree(dev_idata); - cudaFree(dev_odata); } /** @@ -95,7 +92,6 @@ namespace StreamCompaction { int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 - int fullBlocksPerGridEnlarged = (enlargedSize + blockSize - 1) / blockSize; cudaMalloc((void**)&dev_idata, n * sizeof(int)); checkCUDAError("cudaMalloc dev_idata failed!"); @@ -117,12 +113,14 @@ namespace StreamCompaction { cudaMemcpy(dev_scan, dev_temp, n * sizeof(int), cudaMemcpyDeviceToDevice); // up-sweep for (int d = 0; d <= ilog2ceil(enlargedSize) - 1; d++) { + int fullBlocksPerGridEnlarged = (enlargedSize / (1 << (d + 1)) + blockSize - 1) / blockSize; kernUpSweep<<>> (enlargedSize, d, dev_scan); } // down-sweep cudaMemset(dev_scan + enlargedSize - 1, 0, sizeof(int)); for (int d = ilog2ceil(enlargedSize) - 1; d >= 0; d--) { + int fullBlocksPerGridEnlarged = (enlargedSize / (1 << (d + 1)) + blockSize - 1) / blockSize; kernDownSweep<<>> (enlargedSize, d, dev_scan); } From 312385961937e74a347ddf856bbedb731b8cfa3e Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Sun, 15 Sep 2024 16:31:21 -0400 Subject: [PATCH 3/8] Implementing radix sort (need improvements) --- src/main.cpp | 27 +++++- stream_compaction/CMakeLists.txt | 4 +- stream_compaction/radix.cu | 138 +++++++++++++++++++++++++++++++ stream_compaction/radix.h | 13 +++ stream_compaction/thrust.cu | 10 +++ stream_compaction/thrust.h | 2 + 6 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 stream_compaction/radix.cu create mode 100644 stream_compaction/radix.h diff --git a/src/main.cpp b/src/main.cpp index e738f0d..365965b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,9 +11,10 @@ #include #include #include +#include #include "testing_helpers.hpp" -const int SIZE = 1 << 20; // feel free to change the size of array +const int SIZE = 1 << 10; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -163,6 +164,30 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + printf("\n"); + printf("**********************\n"); + printf("** RADIX SORT TESTS **\n"); + printf("**********************\n"); + + genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); + + zeroArray(SIZE, b); + printDesc("radix sort"); + StreamCompaction::Radix::sort(SIZE, b, a, maxBits); + printElapsedTime(StreamCompaction::Radix::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +// printArray(SIZE, b, false); + + zeroArray(SIZE, c); + printDesc("thrust sort"); + StreamCompaction::Thrust::sort(SIZE, c, a); + printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +// printArray(SIZE, c, false); + printCmpResult(SIZE, b, c); + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; diff --git a/stream_compaction/CMakeLists.txt b/stream_compaction/CMakeLists.txt index e0ec27c..beb16c5 100644 --- a/stream_compaction/CMakeLists.txt +++ b/stream_compaction/CMakeLists.txt @@ -4,6 +4,7 @@ set(headers "naive.h" "efficient.h" "thrust.h" + "radix.h" ) set(sources @@ -12,7 +13,8 @@ set(sources "naive.cu" "efficient.cu" "thrust.cu" - ) + "radix.cu" +) list(SORT headers) list(SORT sources) diff --git a/stream_compaction/radix.cu b/stream_compaction/radix.cu new file mode 100644 index 0000000..1cc61ec --- /dev/null +++ b/stream_compaction/radix.cu @@ -0,0 +1,138 @@ +#include +#include +#include +#include "radix.h" + +#include "common.h" +#include "efficient.h" + +namespace StreamCompaction { + namespace Radix { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + + __global__ void kernMapToCurrBits(int n, int *odata, const int *idata, int bit) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + // get the bit-th bit of the number, but also flip the bit to produce the e array + odata[index] = !((idata[index] >> bit) & 1); + } + + __global__ void kernComputeT(int n, int *odata, const int *idata, const int totalFalses) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + odata[index] = index - idata[index] + totalFalses; + } + + __global__ void kernComputeD(int n, int *odata, const int *be, const int *t, const int *f) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + // be array is stored as e array. To access b, reverse the condition + odata[index] = be[index] ? f[index] : t[index]; + } + + __global__ void scatter(int n, int *odata, const int *idata, const int *d) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + + odata[d[index]] = idata[index]; + } + + int getMaxBits(int n, const int *idata) { + // find maximum number in the array + int maxNum = 0; + for (int i = 0; i < n; i++) { + maxNum = std::max(maxNum, idata[i]); + } + // calculate the number of bits of the maximum number + int maxBits = 0; + while (maxNum > 0) { + maxNum >>= 1; + maxBits++; + } + return maxBits; + } + + /** + * Performs radix sort on idata, storing the result into odata. + * @param n the number of elements in idata + * @param odata output data + * @param idata input data + * @param maxBits the maximum number of bits of a given number in the array + */ + void sort(int n, int *odata, const int *idata, int maxBits) { + int* dev_idata; + int* dev_odata; + int* dev_be; + int* dev_f; + int* dev_t; + int* dev_d; + int blockSize = 64; + int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; + + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + cudaMalloc((void**)&dev_be, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_b failed!"); + cudaMalloc((void**)&dev_f, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_f failed!"); + cudaMalloc((void**)&dev_t, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_t failed!"); + cudaMalloc((void**)&dev_d, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_d failed!"); + + // copy the input to GPU (size n data) + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + timer().startGpuTimer(); + for (int i = 0; i < maxBits; i++) { + // be array (b can be acquired by flipping back) + kernMapToCurrBits<<>>(n, dev_be, dev_idata, i); + // exclusive scan f array + StreamCompaction::Efficient::scan(n, dev_f, dev_be); + // calculate totalFalses + int lastFVal = 0; + int lastEVal = 0; + cudaMemcpy(&lastEVal, dev_be + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(&lastFVal, dev_f + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + int totalFalses = lastFVal + lastEVal; + // t array + kernComputeT<<>>(n, dev_t, dev_f, totalFalses); + // d array + kernComputeD<<>>(n, dev_d, dev_be, dev_t, dev_f); + // scatter + scatter<<>>(n, dev_odata, dev_idata, dev_d); + // swap + std::swap(dev_idata, dev_odata); + } + timer().endGpuTimer(); + + // copy the result to odata (size n data) + cudaMemcpy(odata, dev_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + + cudaFree(dev_idata); + cudaFree(dev_odata); + cudaFree(dev_be); + cudaFree(dev_f); + cudaFree(dev_t); + cudaFree(dev_d); + } + } +} \ No newline at end of file diff --git a/stream_compaction/radix.h b/stream_compaction/radix.h new file mode 100644 index 0000000..3942817 --- /dev/null +++ b/stream_compaction/radix.h @@ -0,0 +1,13 @@ +#pragma once + +#include "common.h" + +namespace StreamCompaction { + namespace Radix { + StreamCompaction::Common::PerformanceTimer& timer(); + + int getMaxBits(int n, const int *idata); + + void sort(int n, int *odata, const int *idata, int maxBits); + } +} diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 85f2140..8f84058 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -3,6 +3,7 @@ #include #include #include +#include #include "common.h" #include "thrust.h" @@ -27,5 +28,14 @@ namespace StreamCompaction { timer().endGpuTimer(); thrust::copy(dv_out.begin(), dv_out.end(), odata); } + + void sort(int n, int *odata, const int *idata) { + thrust::device_vector dv_in(idata, idata + n); + thrust::device_vector dv_out(n); + timer().startGpuTimer(); + thrust::sort(dv_in.begin(), dv_in.end()); + timer().endGpuTimer(); + thrust::copy(dv_in.begin(), dv_in.end(), odata); + } } } diff --git a/stream_compaction/thrust.h b/stream_compaction/thrust.h index fe98206..e12c10f 100644 --- a/stream_compaction/thrust.h +++ b/stream_compaction/thrust.h @@ -7,5 +7,7 @@ namespace StreamCompaction { StreamCompaction::Common::PerformanceTimer& timer(); void scan(int n, int *odata, const int *idata); + + void sort(int n, int *odata, const int *idata); } } From 8516f89bb7f70521c442fd6b841e7c41b482bc3e Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Mon, 16 Sep 2024 22:08:07 -0400 Subject: [PATCH 4/8] Updating Readme --- README.md | 107 +++++++++++++++++++++++++++++++-- img/Figure_1.png | Bin 0 -> 100529 bytes src/main.cpp | 48 +++++++-------- stream_compaction/efficient.cu | 4 +- stream_compaction/naive.cu | 3 +- stream_compaction/radix.cu | 7 ++- stream_compaction/thrust.cu | 2 - 7 files changed, 133 insertions(+), 38 deletions(-) create mode 100644 img/Figure_1.png diff --git a/README.md b/README.md index 0e38ddb..4b98131 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,107 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE - * (TODO) [LinkedIn](), [personal website](), [twitter](), etc. -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Kevin Dong + * [LinkedIn](www.linkedin.com/in/xingyu-dong) +* Tested on: Windows 11, Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz 2.59 GHz, GTX 2060 -### (TODO: Your README) +This repo implements several versions of parallel exclusive scan algorithms and used them to implement stream +compaction. The work-efficient scan algorithm has also been used in implementing a parallel radix sort algorithm. -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +### Features +#### CPU Scan and Compaction +The CPU scan implementation is fairly straightforward $O(n)$ algorithm. The compaction algorithms, with and without +scan, also run in $O(n)$ time. All of them perform fairly well on small input sizes and become slow as the input size +increases. +#### Naive GPU Scan +The naive parallel scan is a $O(log_n)$ algorithm that still performs $O(nlog_n)$ number of adds, which makes it not +really better than the sequential algorithm. +#### Work-Efficient GPU Scan and Compaction +The work-efficient scan improves upon the naive algorithm by changing the array into a balanced binary tree. It first +performs a parallel reduction (the up-sweep) and a down-sweep that yields the final scan result. This algorithm has +$O(n)$ number of adds and performs much better than the naive scan. To accommodate input sizes that are not powers of 2, +we enlarge the input array to the nearest power of 2 and pad the rest of the array with 0s. +#### Work-Efficient Scan Optimization (Part 5 Extra Credit) +We can further optimize the work-efficient scan by reducing the number of works needed to be done. A lot of threads +are not needed in the process because only some nodes are required to be updated during each iteration. +#### Thrust Scan +The thrust implementation calls the thrust api to perform the exclusive scan. It is very straightforward. +#### Radix Sort (Extra Credit 1) +The parallel radix sort uses the work-efficient exclusive scan as part of its implementation. We iterate through $k$ +bits and the exclusive scan take $O(log_n)$ time. The total time complexity is $O(k\cdot log_n)$ because the generation of +bit array and scatter operation are $O(1)$ due to the parallelism. + +### Performance Analysis +We will compare the performance of the different scan algorithms on different input sizes. The graph is shown below in +log scale. +![Performance Graph](img/Figure_1.png) +From the graph, we can see that the work-efficient scan algorithm performs the best among all the scan algorithms. When +the input size is small, the CPU algorithm is the fastest algorithm, but it quickly becomes slower as the input size +increases. The thrust implementation is the slowest among all GPU programs. + +#### Performance Bottlenecks +Since our timer only records the section of the implementation that is doing computation, the performance bottleneck +will not count the memory transfer time. For the naive scan algorithm, the number of adds that need to be performed +slows down the process. The work-efficient algorithm then reduces the number of adds by using a balanced binary tree. +The improved efficient algorithm further reduces the number of threads that need to be used, which speeds up the process. + +### Output +This output is generated with $2^{20}$ input size and $256$ block size. +``` +**************** +** SCAN TESTS ** +**************** +==== cpu scan, power-of-two ==== + elapsed time: 2.2409ms (std::chrono Measured) + passed +==== cpu scan, non-power-of-two ==== + elapsed time: 2.2036ms (std::chrono Measured) + passed +==== naive scan, power-of-two ==== + elapsed time: 3.0672ms (CUDA Measured) + passed +==== naive scan, non-power-of-two ==== + elapsed time: 2.01571ms (CUDA Measured) + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 1.51936ms (CUDA Measured) + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 1.31811ms (CUDA Measured) + passed +==== thrust scan, power-of-two ==== + elapsed time: 31.2554ms (CUDA Measured) + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 19.5888ms (CUDA Measured) + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** +==== cpu compact without scan, power-of-two ==== + elapsed time: 4.2505ms (std::chrono Measured) + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 4.0982ms (std::chrono Measured) + passed +==== cpu compact with scan ==== + elapsed time: 13.0274ms (std::chrono Measured) + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 3.36822ms (CUDA Measured) + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 1.09792ms (CUDA Measured) + passed + +********************** +** RADIX SORT TESTS ** +********************** +==== radix sort ==== + elapsed time: 17.0703ms (CUDA Measured) +==== thrust sort ==== + elapsed time: 46.5818ms (CUDA Measured) + passed +``` \ No newline at end of file diff --git a/img/Figure_1.png b/img/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..42c4bb86cb9825861fd8a02b6cfccd5b1d72c41c GIT binary patch literal 100529 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 #include "testing_helpers.hpp" -const int SIZE = 1 << 10; // feel free to change the size of array +const int SIZE = 1 << 20; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -55,7 +55,7 @@ int main(int argc, char* argv[]) { printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -68,49 +68,49 @@ int main(int argc, char* argv[]) { printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); StreamCompaction::Thrust::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); StreamCompaction::Thrust::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); - // compare results between thrust array and cpu array - zeroArray(SIZE, b); - printDesc("compare thrust array and cpu array - CPU"); - StreamCompaction::CPU::scan(NPOT, b, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printCmpResult(NPOT, b, b); - - zeroArray(SIZE, d); - printDesc("compare thrust array and cpu array - Thrust"); - StreamCompaction::Thrust::scan(NPOT, d, a); - printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printCmpResult(NPOT, d, b); +// // compare results between thrust array and cpu array +// zeroArray(SIZE, b); +// printDesc("compare thrust array and cpu array - CPU"); +// StreamCompaction::CPU::scan(NPOT, b, a); +// printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); +// printCmpResult(NPOT, b, b); +// +// zeroArray(SIZE, d); +// printDesc("compare thrust array and cpu array - Thrust"); +// StreamCompaction::Thrust::scan(NPOT, d, a); +// printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +// printCmpResult(NPOT, d, b); printf("\n"); printf("*****************************\n"); @@ -121,7 +121,7 @@ int main(int argc, char* argv[]) { genArray(SIZE - 1, a, 4); // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; - printArray(SIZE, a, true); +// printArray(SIZE, a, true); int count, expectedCount, expectedNPOT; @@ -132,7 +132,7 @@ 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); zeroArray(SIZE, c); @@ -140,14 +140,14 @@ int main(int argc, char* argv[]) { 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); 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); zeroArray(SIZE, c); @@ -171,7 +171,7 @@ int main(int argc, char* argv[]) { genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; - printArray(SIZE, a, true); +// printArray(SIZE, a, true); int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 25af3d1..953f664 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -3,6 +3,8 @@ #include "common.h" #include "efficient.h" +#define blockSize 256 + namespace StreamCompaction { namespace Efficient { using StreamCompaction::Common::PerformanceTimer; @@ -44,7 +46,6 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 int* dev_idata; - int blockSize = 64; cudaMalloc((void**)&dev_idata, enlargedSize * sizeof(int)); checkCUDAError("cudaMalloc dev_idata failed!"); @@ -88,7 +89,6 @@ namespace StreamCompaction { int* dev_odata; int* dev_temp; int* dev_scan; - int blockSize = 128; int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; int enlargedSize = 1 << ilog2ceil(n); // enlarge the size to the nearest power of 2 diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index c31a0a1..8cb8787 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +#define blockSize 256 + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -40,7 +42,6 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { int* dev_idata; int* dev_odata; - int blockSize = 128; int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; cudaMalloc((void**)&dev_idata, n * sizeof(int)); diff --git a/stream_compaction/radix.cu b/stream_compaction/radix.cu index 1cc61ec..e0a682b 100644 --- a/stream_compaction/radix.cu +++ b/stream_compaction/radix.cu @@ -6,6 +6,8 @@ #include "common.h" #include "efficient.h" +#define blockSize 128 + namespace StreamCompaction { namespace Radix { using StreamCompaction::Common::PerformanceTimer; @@ -71,7 +73,7 @@ namespace StreamCompaction { /** * Performs radix sort on idata, storing the result into odata. * @param n the number of elements in idata - * @param odata output data + * @param odata output.txt data * @param idata input data * @param maxBits the maximum number of bits of a given number in the array */ @@ -82,7 +84,6 @@ namespace StreamCompaction { int* dev_f; int* dev_t; int* dev_d; - int blockSize = 64; int fullBlocksPerGrid = (n + blockSize - 1) / blockSize; cudaMalloc((void**)&dev_idata, n * sizeof(int)); @@ -103,7 +104,7 @@ namespace StreamCompaction { timer().startGpuTimer(); for (int i = 0; i < maxBits; i++) { - // be array (b can be acquired by flipping back) + // b & e array (b can be acquired by flipping back) kernMapToCurrBits<<>>(n, dev_be, dev_idata, i); // exclusive scan f array StreamCompaction::Efficient::scan(n, dev_f, dev_be); diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 8f84058..b74bb69 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -22,8 +22,6 @@ namespace StreamCompaction { thrust::device_vector dv_in(idata, idata + n); thrust::device_vector dv_out(n); timer().startGpuTimer(); - // example: for device_vectors dv_in and dv_out: - // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); timer().endGpuTimer(); thrust::copy(dv_out.begin(), dv_out.end(), odata); From bf44110a808a1633e33eb48c92c1ad5db1ecb87d Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Tue, 17 Sep 2024 05:17:18 -0400 Subject: [PATCH 5/8] Continue updating README.md --- README.md | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4b98131..762d438 100644 --- a/README.md +++ b/README.md @@ -43,10 +43,33 @@ the input size is small, the CPU algorithm is the fastest algorithm, but it quic increases. The thrust implementation is the slowest among all GPU programs. #### Performance Bottlenecks -Since our timer only records the section of the implementation that is doing computation, the performance bottleneck -will not count the memory transfer time. For the naive scan algorithm, the number of adds that need to be performed -slows down the process. The work-efficient algorithm then reduces the number of adds by using a balanced binary tree. -The improved efficient algorithm further reduces the number of threads that need to be used, which speeds up the process. +Our timer for all the algorithms does not contain the memory allocation process and the process of copying the final +result array back to the host. Therefore, the execution time should mainly reflect the computation time as well as the +memory access time while doing the computation. + +The CPU implementation is fairly efficient and can hardly be further improved, since it is already a linear time +algorithm. From the runtime result we can also observe the fact that it runs very fast when the input size is small, +since comparing to its GPU counterparts it doesn't cause a lot of overheads. + +The naive algorithm generally performs worse than the work-efficient algorithm, since it requires more adds operations +even comparing to the CPU implementation and have many idle threads that are not actively working. Since our +implementation uses global memory, the memory access could also potentially slow down the algorithm. It is expected +that a shared-memory model may further improve the algorithm's performance. + +The work-efficient algorithm improves based on the naive algorithm by doing computations like a balanced binary tree. +The number of adds for both the up-sweep and the down-sweep in this case becomes $O(n)$, thus making this algorithm +more efficient. The work-efficient algorithm does require more memory access, since there are more steps involved and +all the data are stored as global memory, so changing it to a shared-memory model should greatly improve its +performance. In part 5, we implemented an optimization that reduces the number of threads generated and replaced the +modular operation with a value comparison, which should make the algorithm more efficient. + +For both the naive and the efficient algorithm, we can see that having input size as a power-of-two number yields a +better result compared to a non-power-of-two input size. This is because the non-power-of-two size requires the +algorithm to append $0's$ to the back of the array to manually make it a power-of-two size, thus creating computations +that are not relevant. + +The thrust algorithm takes much longer time that expected and becomes the slowest among all the algorithms. It is +possible that this is caused by a large size memory copy within the algorithm that causes this unexpected situation. ### Output This output is generated with $2^{20}$ input size and $256$ block size. From 6132ca15dddc9a2a7e3cade682997a549205f73f Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Tue, 17 Sep 2024 05:36:49 -0400 Subject: [PATCH 6/8] Continue updating README.md again --- README.md | 58 ++++++++-------- img/Figure_2.png | Bin 0 -> 112206 bytes src/main.cpp | 170 +++++++++++++++++++++++------------------------ 3 files changed, 117 insertions(+), 111 deletions(-) create mode 100644 img/Figure_2.png diff --git a/README.md b/README.md index 762d438..d2d5aca 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,11 @@ bit array and scatter operation are $O(1)$ due to the parallelism. ### Performance Analysis We will compare the performance of the different scan algorithms on different input sizes. The graph is shown below in log scale. -![Performance Graph](img/Figure_1.png) -From the graph, we can see that the work-efficient scan algorithm performs the best among all the scan algorithms. When -the input size is small, the CPU algorithm is the fastest algorithm, but it quickly becomes slower as the input size -increases. The thrust implementation is the slowest among all GPU programs. +![Performance Graph](img/Figure_2.png) +From the graph, we can see that the thrust scan algorithm performs the best among all the scan algorithms, followed +by the work-efficient algorithm. When the input size is small, the CPU algorithm is the fastest algorithm, +but it quickly becomes slower as the input size increases. The naive scan algorithm also becomes slow when the size +becomes very large. #### Performance Bottlenecks Our timer for all the algorithms does not contain the memory allocation process and the process of copying the final @@ -63,13 +64,9 @@ all the data are stored as global memory, so changing it to a shared-memory mode performance. In part 5, we implemented an optimization that reduces the number of threads generated and replaced the modular operation with a value comparison, which should make the algorithm more efficient. -For both the naive and the efficient algorithm, we can see that having input size as a power-of-two number yields a -better result compared to a non-power-of-two input size. This is because the non-power-of-two size requires the -algorithm to append $0's$ to the back of the array to manually make it a power-of-two size, thus creating computations -that are not relevant. - -The thrust algorithm takes much longer time that expected and becomes the slowest among all the algorithms. It is -possible that this is caused by a large size memory copy within the algorithm that causes this unexpected situation. +The thrust algorithm is the most efficient algorithm when the input size is very large. It is not hard to imagine that +the thrust implementation uses shared-memory model and properly optimizes the use of warps and registers to make the +algorithm very efficient on large scale data. ### Output This output is generated with $2^{20}$ input size and $256$ block size. @@ -77,56 +74,65 @@ This output is generated with $2^{20}$ input size and $256$ block size. **************** ** SCAN TESTS ** **************** + [ 21 48 31 3 42 0 12 14 10 46 47 33 22 ... 18 0 ] ==== cpu scan, power-of-two ==== - elapsed time: 2.2409ms (std::chrono Measured) + elapsed time: 1.5173ms (std::chrono Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] passed ==== cpu scan, non-power-of-two ==== - elapsed time: 2.2036ms (std::chrono Measured) + elapsed time: 1.5309ms (std::chrono Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] passed ==== naive scan, power-of-two ==== - elapsed time: 3.0672ms (CUDA Measured) + elapsed time: 71.0168ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] passed ==== naive scan, non-power-of-two ==== - elapsed time: 2.01571ms (CUDA Measured) + elapsed time: 1.07379ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 0 0 ] passed ==== work-efficient scan, power-of-two ==== - elapsed time: 1.51936ms (CUDA Measured) + elapsed time: 12.4552ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] passed ==== work-efficient scan, non-power-of-two ==== - elapsed time: 1.31811ms (CUDA Measured) + elapsed time: 0.667136ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] passed ==== thrust scan, power-of-two ==== - elapsed time: 31.2554ms (CUDA Measured) + elapsed time: 0.945536ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] passed ==== thrust scan, non-power-of-two ==== - elapsed time: 19.5888ms (CUDA Measured) + elapsed time: 0.505536ms (CUDA Measured) + [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] passed ***************************** ** STREAM COMPACTION TESTS ** ***************************** ==== cpu compact without scan, power-of-two ==== - elapsed time: 4.2505ms (std::chrono Measured) + elapsed time: 2.2486ms (std::chrono Measured) passed ==== cpu compact without scan, non-power-of-two ==== - elapsed time: 4.0982ms (std::chrono Measured) + elapsed time: 2.3153ms (std::chrono Measured) passed ==== cpu compact with scan ==== - elapsed time: 13.0274ms (std::chrono Measured) + elapsed time: 5.0041ms (std::chrono Measured) passed ==== work-efficient compact, power-of-two ==== - elapsed time: 3.36822ms (CUDA Measured) + elapsed time: 13.1282ms (CUDA Measured) passed ==== work-efficient compact, non-power-of-two ==== - elapsed time: 1.09792ms (CUDA Measured) + elapsed time: 1.02128ms (CUDA Measured) passed ********************** ** RADIX SORT TESTS ** ********************** ==== radix sort ==== - elapsed time: 17.0703ms (CUDA Measured) + elapsed time: 30.6645ms (CUDA Measured) ==== thrust sort ==== - elapsed time: 46.5818ms (CUDA Measured) + elapsed time: 1.46294ms (CUDA Measured) passed ``` \ No newline at end of file diff --git a/img/Figure_2.png b/img/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2686593bafe87d73b6ffdd592528a7a485d15f35 GIT binary patch literal 112206 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
  • 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�|0mI-02({ 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

    xY> zLqkd9L;u8!qnw2Ok{Dx%+SsHiF5vbzYh}R}9caA-HHjc>2o;-eJuYJd{0j!5Rc0@r zk9~ivy=n!8hGR>+DnjkWY#0R?1&(Uui~f(SY$g~x%Xh}cvzmCgLF1+ zQWQ*(i({J6xjR5pZG31~o5cx72~RWkk}X;}&&7&h*RR3>)%OPAOCR=ie!&&_*>Hpw z3=xQ;%av7J3$U)%w{H�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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 61273c7..0027480 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 20; // feel free to change the size of array +const int SIZE = 1 << 22; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -32,7 +32,7 @@ int main(int argc, char* argv[]) { genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; - printArray(SIZE, a, true); +// 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. @@ -41,21 +41,21 @@ int main(int argc, char* argv[]) { 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); printCmpResult(SIZE, b, b); 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); zeroArray(SIZE, c); printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(SIZE, c, true); +// printArray(SIZE, c, true); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -68,35 +68,35 @@ int main(int argc, char* argv[]) { printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(SIZE, c, true); +// printArray(SIZE, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(SIZE, c, true); +// printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(NPOT, c, true); +// printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); StreamCompaction::Thrust::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(SIZE, c, true); +// printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); StreamCompaction::Thrust::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(NPOT, c, true); +// printArray(NPOT, c, true); printCmpResult(NPOT, b, c); // // compare results between thrust array and cpu array @@ -112,81 +112,81 @@ int main(int argc, char* argv[]) { // printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); // printCmpResult(NPOT, d, b); - 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 - a[SIZE - 1] = 0; -// printArray(SIZE, a, true); - - int count, expectedCount, expectedNPOT; - - // initialize b using StreamCompaction::CPU::compactWithoutScan you implement - // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. - zeroArray(SIZE, b); - printDesc("cpu compact without scan, power-of-two"); - count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - expectedCount = count; -// printArray(count, b, true); - printCmpLenResult(count, expectedCount, b, b); - - 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); - printCmpLenResult(count, expectedNPOT, b, c); - - 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); - printCmpLenResult(count, expectedCount, b, c); - - 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); - printCmpLenResult(count, expectedCount, b, c); - - zeroArray(SIZE, c); - printDesc("work-efficient compact, non-power-of-two"); - count = StreamCompaction::Efficient::compact(NPOT, c, a); - printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); - printCmpLenResult(count, expectedNPOT, b, c); - - printf("\n"); - printf("**********************\n"); - printf("** RADIX SORT TESTS **\n"); - printf("**********************\n"); - - genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case - a[SIZE - 1] = 0; -// printArray(SIZE, a, true); - - int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); - - zeroArray(SIZE, b); - printDesc("radix sort"); - StreamCompaction::Radix::sort(SIZE, b, a, maxBits); - printElapsedTime(StreamCompaction::Radix::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, b, false); - - zeroArray(SIZE, c); - printDesc("thrust sort"); - StreamCompaction::Thrust::sort(SIZE, c, a); - printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, c, false); - printCmpResult(SIZE, b, c); +// 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 +// a[SIZE - 1] = 0; +//// printArray(SIZE, a, true); +// +// int count, expectedCount, expectedNPOT; +// +// // initialize b using StreamCompaction::CPU::compactWithoutScan you implement +// // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. +// zeroArray(SIZE, b); +// printDesc("cpu compact without scan, power-of-two"); +// count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); +// printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); +// expectedCount = count; +//// printArray(count, b, true); +// printCmpLenResult(count, expectedCount, b, b); +// +// 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); +// printCmpLenResult(count, expectedNPOT, b, c); +// +// 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); +// printCmpLenResult(count, expectedCount, b, c); +// +// 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); +// printCmpLenResult(count, expectedCount, b, c); +// +// zeroArray(SIZE, c); +// printDesc("work-efficient compact, non-power-of-two"); +// count = StreamCompaction::Efficient::compact(NPOT, c, a); +// printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +// //printArray(count, c, true); +// printCmpLenResult(count, expectedNPOT, b, c); +// +// printf("\n"); +// printf("**********************\n"); +// printf("** RADIX SORT TESTS **\n"); +// printf("**********************\n"); +// +// genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case +// a[SIZE - 1] = 0; +//// printArray(SIZE, a, true); +// +// int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); +// +// zeroArray(SIZE, b); +// printDesc("radix sort"); +// StreamCompaction::Radix::sort(SIZE, b, a, maxBits); +// printElapsedTime(StreamCompaction::Radix::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +//// printArray(SIZE, b, false); +// +// zeroArray(SIZE, c); +// printDesc("thrust sort"); +// StreamCompaction::Thrust::sort(SIZE, c, a); +// printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); +//// printArray(SIZE, c, false); +// printCmpResult(SIZE, b, c); system("pause"); // stop Win32 console from closing on exit delete[] a; From 9b2f2871a5eb715eea33611dbad1667f4d632f07 Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Tue, 17 Sep 2024 05:49:30 -0400 Subject: [PATCH 7/8] Continue updating README.md again again --- README.md | 57 ++++++++++------- src/main.cpp | 172 +++++++++++++++++++++++++-------------------------- 2 files changed, 119 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index d2d5aca..759d8c3 100644 --- a/README.md +++ b/README.md @@ -74,65 +74,74 @@ This output is generated with $2^{20}$ input size and $256$ block size. **************** ** SCAN TESTS ** **************** - [ 21 48 31 3 42 0 12 14 10 46 47 33 22 ... 18 0 ] + [ 28 28 11 44 31 11 4 25 23 43 12 12 28 ... 48 0 ] ==== cpu scan, power-of-two ==== - elapsed time: 1.5173ms (std::chrono Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] + elapsed time: 1.5931ms (std::chrono Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666831 25666879 ] passed ==== cpu scan, non-power-of-two ==== - elapsed time: 1.5309ms (std::chrono Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] + elapsed time: 1.4801ms (std::chrono Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666796 25666799 ] passed ==== naive scan, power-of-two ==== - elapsed time: 71.0168ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] + elapsed time: 1.85376ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666831 25666879 ] passed ==== naive scan, non-power-of-two ==== - elapsed time: 1.07379ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 0 0 ] + elapsed time: 0.916128ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666796 25666799 ] passed ==== work-efficient scan, power-of-two ==== - elapsed time: 12.4552ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] + elapsed time: 1.6073ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666831 25666879 ] passed ==== work-efficient scan, non-power-of-two ==== - elapsed time: 0.667136ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] + elapsed time: 1.02006ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666796 25666799 ] passed ==== thrust scan, power-of-two ==== - elapsed time: 0.945536ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25687063 25687081 ] + elapsed time: 0.83968ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666831 25666879 ] passed ==== thrust scan, non-power-of-two ==== - elapsed time: 0.505536ms (CUDA Measured) - [ 0 21 69 100 103 145 145 157 171 181 227 274 307 ... 25686948 25686975 ] + elapsed time: 0.6672ms (CUDA Measured) + [ 0 28 56 67 111 142 153 157 182 205 248 260 272 ... 25666796 25666799 ] passed ***************************** ** STREAM COMPACTION TESTS ** ***************************** + [ 0 2 1 2 3 2 3 2 0 3 2 2 1 ... 2 0 ] ==== cpu compact without scan, power-of-two ==== - elapsed time: 2.2486ms (std::chrono Measured) + elapsed time: 2.2588ms (std::chrono Measured) + [ 2 1 2 3 2 3 2 3 2 2 1 1 2 ... 1 2 ] passed ==== cpu compact without scan, non-power-of-two ==== - elapsed time: 2.3153ms (std::chrono Measured) + elapsed time: 2.1694ms (std::chrono Measured) + [ 2 1 2 3 2 3 2 3 2 2 1 1 2 ... 3 3 ] passed ==== cpu compact with scan ==== - elapsed time: 5.0041ms (std::chrono Measured) + elapsed time: 5.4433ms (std::chrono Measured) + [ 2 1 2 3 2 3 2 3 2 2 1 1 2 ... 1 2 ] passed ==== work-efficient compact, power-of-two ==== - elapsed time: 13.1282ms (CUDA Measured) + elapsed time: 1.83184ms (CUDA Measured) + [ 2 1 2 3 2 3 2 3 2 2 1 1 2 ... 1 2 ] passed ==== work-efficient compact, non-power-of-two ==== - elapsed time: 1.02128ms (CUDA Measured) + elapsed time: 1.1128ms (CUDA Measured) + [ 2 1 2 3 2 3 2 3 2 2 1 1 2 ... 3 3 ] passed ********************** ** RADIX SORT TESTS ** ********************** + [ 32 26 157 158 195 138 167 198 116 95 114 106 149 ... 30 0 ] ==== radix sort ==== - elapsed time: 30.6645ms (CUDA Measured) + elapsed time: 17.5402ms (CUDA Measured) + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 199 199 ] ==== thrust sort ==== - elapsed time: 1.46294ms (CUDA Measured) + elapsed time: 1.57117ms (CUDA Measured) + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 199 199 ] passed ``` \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 0027480..3418c1f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 22; // feel free to change the size of array +const int SIZE = 1 << 20; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -32,7 +32,7 @@ int main(int argc, char* argv[]) { genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case a[SIZE - 1] = 0; -// printArray(SIZE, a, true); + 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. @@ -41,21 +41,21 @@ int main(int argc, char* argv[]) { 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); printCmpResult(SIZE, b, b); 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); zeroArray(SIZE, c); printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -68,38 +68,38 @@ int main(int argc, char* argv[]) { printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); printDesc("thrust scan, power-of-two"); StreamCompaction::Thrust::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("thrust scan, non-power-of-two"); StreamCompaction::Thrust::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); -// // compare results between thrust array and cpu array + // compare results between thrust array and cpu array // zeroArray(SIZE, b); // printDesc("compare thrust array and cpu array - CPU"); // StreamCompaction::CPU::scan(NPOT, b, a); @@ -112,81 +112,81 @@ int main(int argc, char* argv[]) { // printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); // printCmpResult(NPOT, d, b); -// 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 -// a[SIZE - 1] = 0; -//// printArray(SIZE, a, true); -// -// int count, expectedCount, expectedNPOT; -// -// // initialize b using StreamCompaction::CPU::compactWithoutScan you implement -// // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. -// zeroArray(SIZE, b); -// printDesc("cpu compact without scan, power-of-two"); -// count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); -// printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); -// expectedCount = count; -//// printArray(count, b, true); -// printCmpLenResult(count, expectedCount, b, b); -// -// 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); -// printCmpLenResult(count, expectedNPOT, b, c); -// -// 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); -// printCmpLenResult(count, expectedCount, b, c); -// -// 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); -// printCmpLenResult(count, expectedCount, b, c); -// -// zeroArray(SIZE, c); -// printDesc("work-efficient compact, non-power-of-two"); -// count = StreamCompaction::Efficient::compact(NPOT, c, a); -// printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -// //printArray(count, c, true); -// printCmpLenResult(count, expectedNPOT, b, c); -// -// printf("\n"); -// printf("**********************\n"); -// printf("** RADIX SORT TESTS **\n"); -// printf("**********************\n"); -// -// genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case -// a[SIZE - 1] = 0; -//// printArray(SIZE, a, true); -// -// int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); -// -// zeroArray(SIZE, b); -// printDesc("radix sort"); -// StreamCompaction::Radix::sort(SIZE, b, a, maxBits); -// printElapsedTime(StreamCompaction::Radix::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -//// printArray(SIZE, b, false); -// -// zeroArray(SIZE, c); -// printDesc("thrust sort"); -// StreamCompaction::Thrust::sort(SIZE, c, a); -// printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); -//// printArray(SIZE, c, false); -// printCmpResult(SIZE, b, c); + 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 + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + int count, expectedCount, expectedNPOT; + + // initialize b using StreamCompaction::CPU::compactWithoutScan you implement + // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. + zeroArray(SIZE, b); + printDesc("cpu compact without scan, power-of-two"); + count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + expectedCount = count; + printArray(count, b, true); + printCmpLenResult(count, expectedCount, b, b); + + 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); + printCmpLenResult(count, expectedNPOT, b, c); + + 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); + printCmpLenResult(count, expectedCount, b, c); + + 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); + printCmpLenResult(count, expectedCount, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient compact, non-power-of-two"); + count = StreamCompaction::Efficient::compact(NPOT, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(count, c, true); + printCmpLenResult(count, expectedNPOT, b, c); + + printf("\n"); + printf("**********************\n"); + printf("** RADIX SORT TESTS **\n"); + printf("**********************\n"); + + genArray(SIZE - 1, a, 200); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + int maxBits = StreamCompaction::Radix::getMaxBits(SIZE, a); + + zeroArray(SIZE, b); + printDesc("radix sort"); + StreamCompaction::Radix::sort(SIZE, b, a, maxBits); + printElapsedTime(StreamCompaction::Radix::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(SIZE, b, true); + + zeroArray(SIZE, c); + printDesc("thrust sort"); + StreamCompaction::Thrust::sort(SIZE, c, a); + printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); system("pause"); // stop Win32 console from closing on exit delete[] a; From e10896345c89c22a67d3112d3290e79ea0a11d21 Mon Sep 17 00:00:00 2001 From: "Xingyu (Kevin) Dong" <97770858+Kleokhov@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:17:58 -0400 Subject: [PATCH 8/8] Finalize the readme --- README.md | 8 ++++++++ img/Nsight.png | Bin 0 -> 108277 bytes 2 files changed, 8 insertions(+) create mode 100644 img/Nsight.png diff --git a/README.md b/README.md index 759d8c3..9021546 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,14 @@ The thrust algorithm is the most efficient algorithm when the input size is very the thrust implementation uses shared-memory model and properly optimizes the use of warps and registers to make the algorithm very efficient on large scale data. +![Thrust Analysis](img/Nsight.png) + +From the Nsight System timeline, we can see that the thrust implementation has a very high SM Warp Occupancy, indicating +that the algorithm is very efficient in utilizing the GPU resources. There are also some DRAM read and write operations, +which could be the memory access operations during the up-sweep and down-sweep processes. Overall, the thrust +implementation looks very efficient and well optimized. + + ### Output This output is generated with $2^{20}$ input size and $256$ block size. ``` diff --git a/img/Nsight.png b/img/Nsight.png new file mode 100644 index 0000000000000000000000000000000000000000..d269e81680d2f40a01c165d9a108ccdd41a2b27a GIT binary patch literal 108277 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 A6h31-VmQE$HrEQWy;KzfkK^yFCACq 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 V>U7t#CtN(9LkH}C&9(Bl_%DNwg^d6J literal 0 HcmV?d00001