From b5f0efadfd31fe8057bc25a644601f14600d2fa0 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Wed, 13 Sep 2023 21:05:23 -0400 Subject: [PATCH 1/7] finish cpu --- stream_compaction/cpu.cu | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..b203e91 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -20,6 +20,11 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + for (int i = 0; i < n; ++i) { + for (int j = 0; j < i /* exclusive prefix sum */; ++j) { + odata[i] += idata[j]; + } + } timer().endCpuTimer(); } @@ -31,8 +36,12 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int oPtr = 0; + for (int i = 0; i < n; ++i) { + if (idata[i]) odata[oPtr++] = idata[i]; + } timer().endCpuTimer(); - return -1; + return oPtr; } /** @@ -41,10 +50,20 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + int* odata_tmp = new int[n]; timer().startCpuTimer(); - // TODO + for (int i = 0; i < n; ++i) { + odata_tmp[i] = !(!idata[i]); + if (i) odata_tmp[i] += odata_tmp[i - 1]; + if (idata[i]) { + odata[odata_tmp[i] - 1] = idata[i]; + } + } + int oSize = odata_tmp[n-1]; timer().endCpuTimer(); - return -1; + delete [] odata_tmp; + + return oSize; } } } From 9a8dae9a1d53fce009fbc3764fe732c678363803 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Wed, 13 Sep 2023 21:35:31 -0400 Subject: [PATCH 2/7] finish naive --- stream_compaction/naive.cu | 40 +++++++++++++++++++++++++++++++++++++- stream_compaction/naive.h | 2 ++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..1a81e0c 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -17,9 +17,47 @@ 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 + int* dev_odata1; + cudaMalloc(&dev_odata1, n*sizeof(int)); + checkCUDAError("cudaMalloc dev_odata1 failed"); + cudaMemcpy(dev_odata1, idata, n*sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy from idata to dev_odata1 failed"); + int *dev_odata2; + cudaMalloc(&dev_odata2, n*sizeof(int)); + checkCUDAError("cudaMalloc dev_odata2 failed"); + cudaMemcpy(dev_odata2, idata, n*sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy from idata to dev_odata2 failed"); + + timer().startGpuTimer(); + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize + 1); + int k = ilog2ceil(n); + int offset = 1; + for (int i = 0; i < k; ++i) { + kernScan << > > (n, offset, dev_odata1, dev_odata2); + offset <<= 1; + cudaMemcpy(dev_odata1, dev_odata2, n*sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToDevice); + } + timer().endGpuTimer(); + cudaMemcpy(odata, dev_odata2, n*sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + for (int i = n - 1; i >= 0; --i) { + if (i == 0) odata[i] = 0; + else odata[i] = odata[i - 1]; + } + + checkCUDAError("cudaMemcpy from dev_odata1 to odata failed"); + + cudaFree(dev_odata1); + cudaFree(dev_odata2); + + } + + __global__ void kernScan(int n, int offset , int *odata1, int * odata2 ) { + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + if ((index + offset) < n) { /* no need to check if (index < n)*/ + odata2[index + offset] = odata1[index] + odata1[index + offset]; + } } } } diff --git a/stream_compaction/naive.h b/stream_compaction/naive.h index 37dcb06..de8c6d7 100644 --- a/stream_compaction/naive.h +++ b/stream_compaction/naive.h @@ -7,5 +7,7 @@ namespace StreamCompaction { StreamCompaction::Common::PerformanceTimer& timer(); void scan(int n, int *odata, const int *idata); + __global__ void kernScan(int n, int offset, int* odata1, int* odata2); + } } From 66797562c541592a8ca90c083010d9938ec2363f Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Wed, 13 Sep 2023 23:01:05 -0400 Subject: [PATCH 3/7] finish efficient --- stream_compaction/common.cu | 10 +++ stream_compaction/common.h | 2 +- stream_compaction/efficient.cu | 120 ++++++++++++++++++++++++++++++++- stream_compaction/efficient.h | 28 ++++---- 4 files changed, 143 insertions(+), 17 deletions(-) diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..1bf6708 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -24,6 +24,10 @@ namespace StreamCompaction { */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { // TODO + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + if (index < n) { + bools[index] = bool(idata[index]); + } } /** @@ -33,6 +37,12 @@ namespace StreamCompaction { __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { // TODO + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + if (index < n) { + if (bools[index]) { + odata[indices[index]] = idata[index]; + } + } } } diff --git a/stream_compaction/common.h b/stream_compaction/common.h index d2c1fed..5b11a83 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -12,7 +12,7 @@ #define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) - +#define blockSize 8 /** * Check for CUDA errors; print and exit if there was a problem. */ diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..f9f5f5e 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -15,10 +15,75 @@ namespace StreamCompaction { /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ + + void scanCore(int n, int* dev_odata) { + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + // Reduce + int offset = 1; + for (int d = 0; d < ilog2(n); d++) { + int operation_number = n / (offset * 2); + dim3 blocksPerGrid((operation_number + (blockSize - 1)) / blockSize); + //printf("%d\n", blocksPerGrid.x); + //printf("Cut off unneccessary threads\n"); + if (blocksPerGrid.x == 1) { + kernUpSweep << <1, operation_number >> > (n, offset, dev_odata); + } + else + kernUpSweep << > > (n, offset, dev_odata); + //kernUpSweep << > > (n, offset, dev_odata); // 0.31504 for power of two + checkCUDAError("kernUpSweep failed"); + offset <<= 1; + } + + // Down sweep + for (int d = ilog2(n) - 1; d >= 0; d--) { + offset = (1 << d); + int operation_number = n / (offset * 2); + dim3 blocksPerGrid((operation_number + (blockSize - 1)) / blockSize); + //printf("%d\n", blocksPerGrid.x); + //printf("Cut off unneccessary threads\n"); + if (blocksPerGrid.x == 1) { + kernDownSweep << <1, operation_number >> > (n, offset, dev_odata); + } + else + kernDownSweep << > > (n, offset, dev_odata); + //kernDownSweep << > > (n, offset, dev_odata); + checkCUDAError("kernDownSweep failed"); + } + + } void scan(int n, int *odata, const int *idata) { + int padded_n = (1 << ilog2ceil(n)); + int* dev_odata; + cudaMalloc(&dev_odata, padded_n * sizeof(int)); + cudaMemcpy(dev_odata, idata, n * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice); timer().startGpuTimer(); - // TODO + scanCore(padded_n, dev_odata); timer().endGpuTimer(); + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + cudaFree(dev_odata); + } + + __global__ void kernUpSweep(int n,int offset, int* odata1) { + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + //printf("%d, %d, %d, %d\n",n, index, offset, index*offset*2); + int arrIndex = index * (offset * 2); + if (arrIndex < n) { + odata1[arrIndex + offset * 2 - 1] += odata1[arrIndex + offset - 1]; + odata1[n-1] = 0; + } + } + + __global__ void kernDownSweep(int n, int offset, int* odata1) { + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + //printf("%d, %d, %d, %d\n",n, index, offset, index*offset*2); + int arrIndex = index * (offset * 2); + if (arrIndex < n) { + int t = odata1[arrIndex + offset - 1]; + odata1[arrIndex + offset - 1] = odata1[arrIndex + offset * 2 - 1]; + odata1[arrIndex + offset * 2 - 1] += t; + } } /** @@ -31,10 +96,59 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { - timer().startGpuTimer(); // TODO + /* + bools, indices should only be allocated on device + odata and idata needs to be copied to device + */ + int padded_n = (1 << ilog2ceil(n)); + + int* dev_bools; + /* TODO: Check if remaining part is also zero OR DOESN'T MATTER? */ + cudaMalloc(&dev_bools, padded_n * sizeof(int)); + checkCUDAError("cudaMalloc dev_bools failed"); + + int* dev_idata; + cudaMalloc(&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy from idata to dev_idata failed"); + + int* dev_indices; + cudaMalloc(&dev_indices, padded_n * sizeof(int)); + checkCUDAError("cudaMalloc dev_indices failed"); + + int* dev_odata; + cudaMalloc(&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed"); + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + StreamCompaction::Common::kernMapToBoolean<<>>(n, dev_bools, dev_idata); + checkCUDAError("kernMapToBoolean failed"); + + cudaMemcpy(dev_indices, dev_bools, padded_n * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToDevice); + + timer().startGpuTimer(); + scanCore(padded_n, dev_indices); + StreamCompaction::Common::kernScatter<<>>(n, dev_odata, dev_idata, dev_bools, dev_indices); timer().endGpuTimer(); - return -1; + checkCUDAError("kernScatter failed"); + + /* Still got problem here! */ + int length, last_element; + cudaMemcpy(&length, dev_indices + n - 1, sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + cudaMemcpy(&last_element, dev_bools + n-1, sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy from dev_indices[n-1] to length failed"); + length += last_element; + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + + cudaFree(dev_idata); + cudaFree(dev_odata); + cudaFree(dev_indices); + cudaFree(dev_bools); + + return length; } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..b3fc851 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -1,13 +1,15 @@ -#pragma once - -#include "common.h" - -namespace StreamCompaction { - namespace Efficient { - StreamCompaction::Common::PerformanceTimer& timer(); - - void scan(int n, int *odata, const int *idata); - - int compact(int n, int *odata, const int *idata); - } -} +#pragma once + +#include "common.h" + +namespace StreamCompaction { + namespace Efficient { + StreamCompaction::Common::PerformanceTimer& timer(); + void scanCore(int n, int* odata, const int* idata); + void scan(int n, int *odata, const int *idata); + + int compact(int n, int *odata, const int *idata); + __global__ void kernUpSweep(int n,int offset, int* odata1); + __global__ void kernDownSweep(int n, int offset, int* odata1); + } +} \ No newline at end of file From 0ac257be8d916bfd7ab1f79a6569dde561fc0773 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Wed, 13 Sep 2023 23:23:12 -0400 Subject: [PATCH 4/7] finish thrust --- stream_compaction/thrust.cu | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..e35697c 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,19 @@ 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(n); + thrust::device_vector dv_out(n); + for (int i = 0; i < n; i++) + { + dv_in[i] = idata[i]; + } 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(); + cudaMemcpy(odata, dv_out.data().get(), n * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); } } } From 7325f25164c630e65259d70c470f17d098b8ce6c Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Thu, 14 Sep 2023 14:26:03 -0400 Subject: [PATCH 5/7] test --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..8c7e0cc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 14; // 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]; From b9ec46ef7575bd7de0a55c802c8a5dab0121dd6a Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Thu, 14 Sep 2023 15:00:57 -0400 Subject: [PATCH 6/7] quicker cpu method --- src/main.cpp | 15 +++++++++++++-- stream_compaction/cpu.cu | 18 +++++++++++++----- stream_compaction/efficient.cu | 2 +- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8c7e0cc..ae1b7f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,13 +13,13 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 14; // feel free to change the size of array +const int SIZE = 1 << 12; // 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 main(int argc, char* argv[]) { +void scanTest() { // Scan tests printf("\n"); @@ -94,6 +94,9 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); +} + +void compactionTest() { printf("\n"); printf("*****************************\n"); @@ -146,8 +149,16 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); +} +void test() { + scanTest(); + compactionTest(); system("pause"); // stop Win32 console from closing on exit +} + +int main(int argc, char* argv[]) { + test(); delete[] a; delete[] b; delete[] c; diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index b203e91..f6f6cb4 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -12,6 +12,17 @@ namespace StreamCompaction { return timer; } + void scanCore(int n, int* odata, const int* idata) { + //for (int i = 0; i < n; ++i) { + // for (int j = 0; j < i /* exclusive prefix sum */; ++j) { + // odata[i] += idata[j]; + // } + //} + for (int i = 1; i < n; ++i) { + odata[i] = odata[i - 1] + idata[i-1]; + } + } + /** * CPU scan (prefix sum). * For performance analysis, this is supposed to be a simple for loop. @@ -20,11 +31,7 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO - for (int i = 0; i < n; ++i) { - for (int j = 0; j < i /* exclusive prefix sum */; ++j) { - odata[i] += idata[j]; - } - } + scanCore(n, odata, idata); timer().endCpuTimer(); } @@ -52,6 +59,7 @@ namespace StreamCompaction { int compactWithScan(int n, int *odata, const int *idata) { int* odata_tmp = new int[n]; timer().startCpuTimer(); + for (int i = 0; i < n; ++i) { odata_tmp[i] = !(!idata[i]); if (i) odata_tmp[i] += odata_tmp[i - 1]; diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index f9f5f5e..20dc735 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -131,8 +131,8 @@ namespace StreamCompaction { timer().startGpuTimer(); scanCore(padded_n, dev_indices); - StreamCompaction::Common::kernScatter<<>>(n, dev_odata, dev_idata, dev_bools, dev_indices); timer().endGpuTimer(); + StreamCompaction::Common::kernScatter<<>>(n, dev_odata, dev_idata, dev_bools, dev_indices); checkCUDAError("kernScatter failed"); /* Still got problem here! */ From 45be8ee2e9a04d62e8abbefc7a04bd16237e5d68 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Tue, 19 Sep 2023 14:14:09 -0400 Subject: [PATCH 7/7] finish --- README.md | 97 +++++++++++++++++++++++++++++++--- img/image.png | Bin 0 -> 106103 bytes img/scan-non-power-of-two.png | Bin 0 -> 37042 bytes img/scan-power-of-two.png | Bin 0 -> 37239 bytes src/main.cpp | 4 +- stream_compaction/common.h | 2 +- stream_compaction/naive.cu | 22 +++++--- stream_compaction/thrust.cu | 23 +++++--- tools/data_processing.py | 90 +++++++++++++++++++++++++++++++ 9 files changed, 215 insertions(+), 23 deletions(-) create mode 100644 img/image.png create mode 100644 img/scan-non-power-of-two.png create mode 100644 img/scan-power-of-two.png create mode 100644 tools/data_processing.py diff --git a/README.md b/README.md index 0e38ddb..ee30f79 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,97 @@ 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) +* Yian Chen + * [LinkedIn](https://www.linkedin.com/in/yian-chen-33a31a1a8/), [personal website](https://sydianandrewchen.github.io/) etc. +* Tested on: Windows 10, AMD Ryzen 5800 HS with Radeon Graphics CPU @ 3.20GHz 16GB, NVIDIA GeForce RTX3060 Laptop 8GB -### (TODO: Your README) +### Questions -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +* Compare all of these GPU Scan implementations (Naive, Work-Efficient, and + Thrust) to the serial CPU version of Scan. Plot a graph of the comparison + (with array size on the independent axis). + ![](img/scan-power-of-two.png) + ![](img/scan-non-power-of-two.png) + * To guess at what might be happening inside the Thrust implementation (e.g. + allocation, memory copy), take a look at the Nsight timeline for its + execution. Your analysis here doesn't have to be detailed, since you aren't + even looking at the code for the implementation. + - Timeline of `thrust::exclusive_scan`: + ![](img/image.png) + From the graph we can see that there are three scans launched at the same time and ended at the same time. + I guess probably that `thrust::exclusive_scan` implemented an algorithm that uses Up Sweep, Down Sweep and Shifting at the same time. + +* Write a brief explanation of the phenomena you see here. + - As the size of data grow exponentially, the time of CPU scanning algorithm and GPU naive scan will increase most rapidly. + - The CPU scanning algorithm can beaet GPU naive scan algorithm when data size is large. I guess that might be caused by the full exploitation of locality in the CPU scanning algorithm. On the contrary, GPU naive scan will usually cause a lot of global memory acceesses. + - The time of GPU efficient scan and `thrust` scan increase much slower. `thrust` performs the best. +* Can you find the performance bottlenecks? Is it memory I/O? Computation? Is it different for each implementation? + The performance bottlenecks should exist within the design of each implementation. + - For CPU method, the bottlenecks appear because of the lack of parallellism, comparing with GPU methods. + - For Naive Scan, the bottlenecks appear because of: + - Double buffering. On the positive side, this trick can save us a large amount of time copying memory. However, two large double-bufferr will cause a stable global memory access within each thread. + - Time complexity. + - For Efficient Scan: + - Redundant thread launching(settled). + - Shared memory. + + +* Paste the output of the test program into a triple-backtick block in your + README. + - Output of the scan (`SIZE = 1 << 26`) +``` +**************** +** SCAN TESTS ** +**************** + [ 6 12 22 4 21 5 23 32 32 36 46 37 34 ... 47 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 48.9518ms (std::chrono Measured) + [ 0 6 18 40 44 65 70 93 125 157 193 239 276 ... 1643792958 1643793005 ] +==== cpu scan, non-power-of-two ==== + elapsed time: 45.263ms (std::chrono Measured) + [ 0 6 18 40 44 65 70 93 125 157 193 239 276 ... 1643792920 1643792939 ] + passed +==== naive scan, power-of-two ==== + elapsed time: 63.2586ms (CUDA Measured) + [ 0 6 18 40 44 65 70 93 125 157 193 239 276 ... 1643792958 1643793005 ] + passed +==== naive scan, non-power-of-two ==== + elapsed time: 62.9893ms (CUDA Measured) + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 24.2463ms (CUDA Measured) + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 22.6304ms (CUDA Measured) + passed +==== thrust scan, power-of-two ==== + elapsed time: 2.46502ms (CUDA Measured) + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 2.53338ms (CUDA Measured) + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 1 0 1 1 3 0 1 0 1 0 0 3 1 ... 2 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 120.001ms (std::chrono Measured) + [ 1 1 1 3 1 1 3 1 3 3 2 3 3 ... 3 2 ] + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 123.921ms (std::chrono Measured) + [ 1 1 1 3 1 1 3 1 3 3 2 3 3 ... 3 3 ] + passed +==== cpu compact with scan ==== + elapsed time: 219.142ms (std::chrono Measured) + [ 1 1 1 3 1 1 3 1 3 3 2 3 3 ... 3 2 ] + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 22.6714ms (CUDA Measured) + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 22.6632ms (CUDA Measured) + passed +``` \ No newline at end of file diff --git a/img/image.png b/img/image.png new file mode 100644 index 0000000000000000000000000000000000000000..14b4dcdf563e71628027e1d86f67934ebbf0dad8 GIT binary patch literal 106103 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%0A^Msm| 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index ae1b7f4..3203388 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 12; // feel free to change the size of array +const int SIZE = 1 << 26; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -51,7 +51,7 @@ void scanTest() { 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 diff --git a/stream_compaction/common.h b/stream_compaction/common.h index 5b11a83..85b7665 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -12,7 +12,7 @@ #define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) -#define blockSize 8 +#define blockSize 512 /** * Check for CUDA errors; print and exit if there was a problem. */ diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 1a81e0c..88779d1 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -31,16 +31,17 @@ namespace StreamCompaction { timer().startGpuTimer(); dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize + 1); - int k = ilog2ceil(n); + int d = ilog2ceil(n); int offset = 1; - for (int i = 0; i < k; ++i) { - kernScan << > > (n, offset, dev_odata1, dev_odata2); - offset <<= 1; - cudaMemcpy(dev_odata1, dev_odata2, n*sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToDevice); + for (int k = 1; k <= d; ++k) { + //offset <<= 1; + kernScan << > > (n, (1 << (k-1)), dev_odata1, dev_odata2); + std::swap(dev_odata1, dev_odata2); } + checkCUDAError("kernScan failed"); timer().endGpuTimer(); - cudaMemcpy(odata, dev_odata2, n*sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + cudaMemcpy(odata, dev_odata1, n*sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); for (int i = n - 1; i >= 0; --i) { if (i == 0) odata[i] = 0; else odata[i] = odata[i - 1]; @@ -55,8 +56,13 @@ namespace StreamCompaction { __global__ void kernScan(int n, int offset , int *odata1, int * odata2 ) { int index = (blockDim.x * blockIdx.x) + threadIdx.x; - if ((index + offset) < n) { /* no need to check if (index < n)*/ - odata2[index + offset] = odata1[index] + odata1[index + offset]; + if (index >= n) return; + if (index >= offset) { /* no need to check if (index < n)*/ + //odata2[index + offset] = odata1[index] + odata1[index + offset]; + odata2[index] = odata1[index] + odata1[index - offset]; + } + else { + odata2[index] = odata1[index]; } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index e35697c..79c94a3 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,12 +18,21 @@ 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(n); - thrust::device_vector dv_out(n); - for (int i = 0; i < n; i++) - { - dv_in[i] = idata[i]; - } + int* dev_idata; + int* dev_odata; + + cudaMalloc(&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc(&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice); + + thrust::device_ptr dev_in_ptr(dev_idata); + thrust::device_ptr dev_out_ptr(dev_odata); + thrust::device_vector dv_in(dev_in_ptr, dev_in_ptr +n); + thrust::device_vector dv_out(dev_out_ptr, dev_out_ptr +n); + timer().startGpuTimer(); // TODO use `thrust::exclusive_scan` // example: for device_vectors dv_in and dv_out: @@ -31,6 +40,8 @@ namespace StreamCompaction { thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); timer().endGpuTimer(); cudaMemcpy(odata, dv_out.data().get(), n * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost); + cudaFree(dev_idata); + cudaFree(dev_odata); } } } diff --git a/tools/data_processing.py b/tools/data_processing.py new file mode 100644 index 0000000..e3b25bd --- /dev/null +++ b/tools/data_processing.py @@ -0,0 +1,90 @@ +import matplotlib.pyplot as plt + +N = [] +for i in range(18, 28, 2): + xlabel = "$2^{" + xlabel += str(i) + xlabel += '}$' + N.append(xlabel) +# N = [r"$2^{}$".format(i) for i in range(18, 28, 2)] + +# Drawing increasing boids, with visuals +cpu = [0.1506, 0.5339, 2.3771, 13.9042, 56.4294] +gpu_naive = [0.106496, 0.754688, 3.23482, 14.9873, 63.2361] +gpu_efficient = [0.157696, 0.443392, 1.40288, 5.29101, 20.8722] +gpu_thrust = [0.160768, 0.18832, 0.319488, 0.975808, 2.20467] +plt.xlabel("N count") +plt.ylabel("Time (ms)") +plt.plot(N, cpu, label="CPU", color="r", marker="o") +plt.plot(N, gpu_naive, label="Naive GPU", color="g", marker="o") +plt.plot(N, gpu_efficient, label="Efficient GPU", color="b", marker="o") +plt.plot(N, gpu_thrust, label="Thrust", color="y", marker="o") +plt.legend(labels=["CPU", "Naive GPU", "Efficient GPU", "Thrust"]) +plt.title("Time of scan using different method(power-of-two)") +plt.show() +plt.savefig("../img/scan-power-of-two.png") +plt.clf() + +cpu = [0.1685, 0.6555, 3.2271, 17.4222, 44.574] +gpu_naive = [0.1024, 0.765952, 3.24301, 15.574, 74.4376] +gpu_efficient = [0.166912, 0.477184, 1.41312, 6.2505, 20.8456] +gpu_thrust = [0.166944, 0.191584, 0.401504, 0.777952, 2.18931] +plt.xlabel("N count") +plt.ylabel("Time (ms)") +plt.plot(N, cpu, label="CPU", color="r", marker="o") +plt.plot(N, gpu_naive, label="Naive GPU", color="g", marker="o") +plt.plot(N, gpu_efficient, label="Efficient GPU", color="b", marker="o") +plt.plot(N, gpu_thrust, label="Thrust", color="y", marker="o") +plt.legend(labels=["CPU", "Naive GPU", "Efficient GPU", "Thrust"]) +plt.title("Time of scan using different method(non-power-of-two)") +plt.show() +plt.savefig("../img/scan-non-power-of-two.png") +plt.clf() + +exit() + +# Drawing increasing boids, no visuals +fps_brutalForce = [8297.48, 1227.13, 42.882, 0.46393, 0.0] +fps_scatteredGrid = [7666.14, 7279.71, 4348.93, 380.379, 18.6696] +fps_coherentGrid = [7383.36, 7034.57, 4743.67, 683.372, 57.848] + +plt.xlabel("N count") +plt.ylabel("FPS") +plt.plot(N, fps_brutalForce, label="brutalForce", color="r", marker="o") +plt.plot(N, fps_scatteredGrid, label="scatteredGrid", color="g", marker="o") +plt.plot(N, fps_coherentGrid, label="coherentGrid", color="b", marker="o") +plt.legend(labels=["brutalForce", "scatteredGrid", "coherentGrid"]) +plt.title("FPS of kernel under different method (No visulization)") +# plt.show() +plt.savefig("../images/boids_no_visual.png") + +plt.clf() + +# Drawing 27-cell vs 8-cell +plt.xlabel("N count") +plt.ylabel("FPS") +fps_scatteredGrid27Neighbors = [7285.03, 6472.57, 3955.12, 353.385, 18.667] +fps_scatteredGrid8Neighbors = [7666.14, 7279.71, 4348.93, 380.379, 18.6696] +plt.plot(N, fps_scatteredGrid27Neighbors, label="27-cell", marker="o") +plt.plot(N, fps_scatteredGrid8Neighbors, label="8-cell", marker="o") +plt.legend(labels=["27-cell", "8-cell"]) +plt.title("FPS of 27-cell vs 8-cell (No visualization)") +# plt.show() +plt.savefig("../images/27vs8_no_visual.png") + +plt.clf() + + +# Drawing increasing blockSize + +blockSize = [r"$2^{}$".format(i) for i in range(2, 11)] +fps_coherentGridBlockSizeChanged = [ 11.7512, 18.7417,28.524,41.9919, 57.0016, 62.4268, 64.3508, 61.0085, 59.5032] +plt.xlabel("Block size") +plt.ylabel("FPS") +plt.plot(blockSize, fps_coherentGridBlockSizeChanged, marker="o") +plt.title("FPS of coherent grid over increasing grid size (With visualization)") +# plt.show() +plt.savefig("../images/increasing_gridSize.png") + +if __name__ == "__main__": + pass \ No newline at end of file