From b17affbf8ce8abc836d21a8baa86777db776661b Mon Sep 17 00:00:00 2001 From: xinCastle Date: Sat, 23 Sep 2017 15:49:35 -0400 Subject: [PATCH 1/5] Try to solve github push problem --- img/chart1.png | Bin 0 -> 17879 bytes img/chart2.png | Bin 0 -> 20170 bytes img/data1.png | Bin 0 -> 11743 bytes img/data2.png | Bin 0 -> 10779 bytes img/sc1.png | Bin 0 -> 28015 bytes img/sc2.png | Bin 0 -> 25113 bytes img/sc3.png | Bin 0 -> 25288 bytes src/main.cpp | 2 +- stream_compaction/common.cu | 20 +++ stream_compaction/common.h | 220 +++++++++++++++++---------------- stream_compaction/cpu.cu | 68 +++++++++- stream_compaction/efficient.cu | 175 ++++++++++++++++++++++++-- stream_compaction/naive.cu | 53 +++++++- stream_compaction/thrust.cu | 8 +- 14 files changed, 425 insertions(+), 121 deletions(-) create mode 100644 img/chart1.png create mode 100644 img/chart2.png create mode 100644 img/data1.png create mode 100644 img/data2.png create mode 100644 img/sc1.png create mode 100644 img/sc2.png create mode 100644 img/sc3.png diff --git a/img/chart1.png b/img/chart1.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7c56169a4776c32746039b049b73d515eead3d GIT binary patch literal 17879 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 F{{WC*?mhqj literal 0 HcmV?d00001 diff --git a/img/chart2.png b/img/chart2.png new file mode 100644 index 0000000000000000000000000000000000000000..d59d1297c7f39b7bc68d9ac2d5bbb87a25c5a6c3 GIT binary patch literal 20170 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 Q11nqxPgg&ebxsLQ0Lc3gsQ>@~ literal 0 HcmV?d00001 diff --git a/img/data1.png b/img/data1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b65b058a5da9fb907b058fbc00937c35b7b77b4 GIT binary patch literal 11743 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 literal 0 HcmV?d00001 diff --git a/img/data2.png b/img/data2.png new file mode 100644 index 0000000000000000000000000000000000000000..cbced7f8fefdc840a1807802db4ff7bcaac2783e GIT binary patch literal 10779 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 b5rY$23r2d9(aZ-r0oSgWUaq+481=sZv%k#P literal 0 HcmV?d00001 diff --git a/img/sc1.png b/img/sc1.png new file mode 100644 index 0000000000000000000000000000000000000000..a32f7903b2cbf9a00a0eba3e038e91bf2bfc4b19 GIT binary patch literal 28015 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 V!*5%xS+;{3*;pJlCmrzp^`C?P`2PR^ literal 0 HcmV?d00001 diff --git a/img/sc3.png b/img/sc3.png new file mode 100644 index 0000000000000000000000000000000000000000..184eb08ab3045b56fb5c2ad04cfa14c8d1a64e9c GIT binary patch literal 25288 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 OADSDVGAcE6`So8tSd2gb literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 53ef79e..89277d0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 24; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 8fc0211..bb8dae9 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -24,6 +24,11 @@ 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] = (idata[index] == 0) ? 0 : 1; + } } /** @@ -33,6 +38,21 @@ 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) + { + return; + } + + if (index == n - 1) + { + odata[indices[index]] = idata[index]; + } + + else if (indices[index] != indices[index + 1]) + { + odata[indices[index]] = idata[index]; + } } } diff --git a/stream_compaction/common.h b/stream_compaction/common.h index 693fd5e..ace62e2 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -10,123 +10,129 @@ #include #include + +#include + + #define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) +#define blockSize 1024 + /** - * Check for CUDA errors; print and exit if there was a problem. - */ +* Check for CUDA errors; print and exit if there was a problem. +*/ void checkCUDAErrorFn(const char *msg, const char *file = NULL, int line = -1); inline int ilog2(int x) { - int lg = 0; - while (x >>= 1) { - ++lg; - } - return lg; + int lg = 0; + while (x >>= 1) { + ++lg; + } + return lg; } inline int ilog2ceil(int x) { - return if x == 1 : 0 ? ilog2(x - 1) + 1; + return ilog2(x - 1) + 1; } namespace StreamCompaction { - namespace Common { - __global__ void kernMapToBoolean(int n, int *bools, const int *idata); - - __global__ void kernScatter(int n, int *odata, - const int *idata, const int *bools, const int *indices); - - /** - * This class is used for timing the performance - * Uncopyable and unmovable - * - * Adapted from WindyDarian(https://github.com/WindyDarian) - */ - class PerformanceTimer - { - public: - PerformanceTimer() - { - cudaEventCreate(&event_start); - cudaEventCreate(&event_end); - } - - ~PerformanceTimer() - { - cudaEventDestroy(event_start); - cudaEventDestroy(event_end); - } - - void startCpuTimer() - { - if (cpu_timer_started) { throw std::runtime_error("CPU timer already started"); } - cpu_timer_started = true; - - time_start_cpu = std::chrono::high_resolution_clock::now(); - } - - void endCpuTimer() - { - time_end_cpu = std::chrono::high_resolution_clock::now(); - - if (!cpu_timer_started) { throw std::runtime_error("CPU timer not started"); } - - std::chrono::duration duro = time_end_cpu - time_start_cpu; - prev_elapsed_time_cpu_milliseconds = - static_cast(duro.count()); - - cpu_timer_started = false; - } - - void startGpuTimer() - { - if (gpu_timer_started) { throw std::runtime_error("GPU timer already started"); } - gpu_timer_started = true; - - cudaEventRecord(event_start); - } - - void endGpuTimer() - { - cudaEventRecord(event_end); - cudaEventSynchronize(event_end); - - if (!gpu_timer_started) { throw std::runtime_error("GPU timer not started"); } - - cudaEventElapsedTime(&prev_elapsed_time_gpu_milliseconds, event_start, event_end); - gpu_timer_started = false; - } - - float getCpuElapsedTimeForPreviousOperation() //noexcept //(damn I need VS 2015 - { - return prev_elapsed_time_cpu_milliseconds; - } - - float getGpuElapsedTimeForPreviousOperation() //noexcept - { - return prev_elapsed_time_gpu_milliseconds; - } - - // remove copy and move functions - PerformanceTimer(const PerformanceTimer&) = delete; - PerformanceTimer(PerformanceTimer&&) = delete; - PerformanceTimer& operator=(const PerformanceTimer&) = delete; - PerformanceTimer& operator=(PerformanceTimer&&) = delete; - - private: - cudaEvent_t event_start = nullptr; - cudaEvent_t event_end = nullptr; - - using time_point_t = std::chrono::high_resolution_clock::time_point; - time_point_t time_start_cpu; - time_point_t time_end_cpu; - - bool cpu_timer_started = false; - bool gpu_timer_started = false; - - float prev_elapsed_time_cpu_milliseconds = 0.f; - float prev_elapsed_time_gpu_milliseconds = 0.f; - }; - } -} + namespace Common { + __global__ void kernMapToBoolean(int n, int *bools, const int *idata); + + __global__ void kernScatter(int n, int *odata, + const int *idata, const int *bools, const int *indices); + + /** + * This class is used for timing the performance + * Uncopyable and unmovable + * + * Adapted from WindyDarian(https://github.com/WindyDarian) + */ + class PerformanceTimer + { + public: + PerformanceTimer() + { + cudaEventCreate(&event_start); + cudaEventCreate(&event_end); + } + + ~PerformanceTimer() + { + cudaEventDestroy(event_start); + cudaEventDestroy(event_end); + } + + void startCpuTimer() + { + if (cpu_timer_started) { throw std::runtime_error("CPU timer already started"); } + cpu_timer_started = true; + + time_start_cpu = std::chrono::high_resolution_clock::now(); + } + + void endCpuTimer() + { + time_end_cpu = std::chrono::high_resolution_clock::now(); + + if (!cpu_timer_started) { throw std::runtime_error("CPU timer not started"); } + + std::chrono::duration duro = time_end_cpu - time_start_cpu; + prev_elapsed_time_cpu_milliseconds = + static_cast(duro.count()); + + cpu_timer_started = false; + } + + void startGpuTimer() + { + if (gpu_timer_started) { throw std::runtime_error("GPU timer already started"); } + gpu_timer_started = true; + + cudaEventRecord(event_start); + } + + void endGpuTimer() + { + cudaEventRecord(event_end); + cudaEventSynchronize(event_end); + + if (!gpu_timer_started) { throw std::runtime_error("GPU timer not started"); } + + cudaEventElapsedTime(&prev_elapsed_time_gpu_milliseconds, event_start, event_end); + gpu_timer_started = false; + } + + float getCpuElapsedTimeForPreviousOperation() //noexcept //(damn I need VS 2015 + { + return prev_elapsed_time_cpu_milliseconds; + } + + float getGpuElapsedTimeForPreviousOperation() //noexcept + { + return prev_elapsed_time_gpu_milliseconds; + } + + // remove copy and move functions + PerformanceTimer(const PerformanceTimer&) = delete; + PerformanceTimer(PerformanceTimer&&) = delete; + PerformanceTimer& operator=(const PerformanceTimer&) = delete; + PerformanceTimer& operator=(PerformanceTimer&&) = delete; + + private: + cudaEvent_t event_start = nullptr; + cudaEvent_t event_end = nullptr; + + using time_point_t = std::chrono::high_resolution_clock::time_point; + time_point_t time_start_cpu; + time_point_t time_end_cpu; + + bool cpu_timer_started = false; + bool gpu_timer_started = false; + + float prev_elapsed_time_cpu_milliseconds = 0.f; + float prev_elapsed_time_gpu_milliseconds = 0.f; + }; + } +} \ No newline at end of file diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 05ce667..ca9a5fa 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -17,9 +17,23 @@ namespace StreamCompaction { * For performance analysis, this is supposed to be a simple for loop. * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. */ + + void scanhelp(int n, int *odata, const int *idata) + { + odata[0] = 0; + for (int i = 1; i < n; i++) + { + odata[i] = odata[i - 1] + idata[i - 1]; + } + } + + + void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + scanhelp(n, odata, idata); + timer().endCpuTimer(); } @@ -29,22 +43,70 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithoutScan(int n, int *odata, const int *idata) { + + int counter = 0; timer().startCpuTimer(); // TODO + for (int i = 0; i < n; i++) + { + if (idata[i] != 0) + { + odata[counter++] = idata[i]; + } + } + timer().endCpuTimer(); - return -1; + return counter; + //return -1; } + + + int scatter(int n, int *odata, const int *idata, const int *ichange, const int *exSum) + { + int counter = 0; + for (int i = 0; i < n; i++) + { + if (ichange[i] == 1) + { + odata[exSum[i]] = idata[i]; + counter++; + } + } + return counter; + } + + + /** * CPU stream compaction using scan and scatter, like the parallel version. * * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + + int* iChange = new int[n]; + int* exSum = new int[n]; + timer().startCpuTimer(); // TODO - timer().endCpuTimer(); - return -1; + + for (int i = 0; i < n; i++) + { + iChange[i] = (idata[i] == 0) ? 0 : 1; + } + + //odataChanged is the exclusive prefix sum + scanhelp(n, exSum, iChange); + int counter = scatter(n, odata, idata, iChange, exSum); + + timer().endCpuTimer(); + + delete[] iChange; + delete[] exSum; + + + return counter; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 36c5ef2..696fffa 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -12,15 +12,111 @@ namespace StreamCompaction { return timer; } + + __global__ void upSweep(int n, int d, int *idata) + { + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + if (index >= n) + { + return; + } + + //based on slides + int delta = 1 << d; + int doubleDelta = 1 << (d + 1); + + if (index % doubleDelta == 0) + { + idata[index + doubleDelta - 1] += idata[index + delta - 1]; + } + } + + + __global__ void downSweep(int n, int d, int *idata) + { + //based on slides + int index = (blockDim.x * blockIdx.x) + threadIdx.x; + if (index >= n) + { + return; + } + int delta = 1 << d; + int doubleDelta = 1 << (d + 1); + + if (index % doubleDelta == 0) + { + int t = idata[index + delta - 1]; + idata[index + delta - 1] = idata[index + doubleDelta - 1]; + idata[index + doubleDelta - 1] += t; + } + } + + //helper function for scan + void helpscan(int n, int *devData) + { + int blockNum = (n + blockSize - 1) / blockSize; + + for (int d = 0; d < ilog2ceil(n) - 1; d++) + { + upSweep << > >(n, d, devData); + } + + int counter = 0; + cudaMemcpy(&devData[n - 1], &counter, sizeof(int), cudaMemcpyHostToDevice); + + for (int d = ilog2ceil(n) - 1; d >= 0; d--) + { + downSweep << > >(n, d, devData); + } + } + + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); + // TODO + //handle both conditions of PO2 and NPO2 + int num; + int *t; + int depth = ilog2ceil(n); + + if (n & (n - 1) != 0) + { + num = 1 << depth; + t = (int*)malloc(num * sizeof(int)); + memcpy(t, idata, num * sizeof(int)); + + + for (int j = n; j < num; j++) + { + t[j] = 0; + } + + } + else + { + num = n; + t = (int*)malloc(num * sizeof(int)); + memcpy(t, idata, num * sizeof(int)); + } + + int size = num * sizeof(int); + int *devi; + + cudaMalloc((void**)&devi, size); + cudaMemcpy(devi, t, size, cudaMemcpyHostToDevice); + + timer().startGpuTimer(); + helpscan(num, devi); + timer().endGpuTimer(); + + cudaMemcpy(odata, devi, size, cudaMemcpyDeviceToHost); + cudaFree(devi); } + + /** * Performs stream compaction on idata, storing the result into odata. * All zeroes are discarded. @@ -31,10 +127,75 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - return -1; + // TODO + //handle both conditions of PO2 and NPO2 + int num; + int *t; + int depth = ilog2ceil(n); + + if (n & (n - 1) != 0) + { + num = 1 << depth; + t = (int*)malloc(num * sizeof(int)); + memcpy(t, idata, num * sizeof(int)); + + + for (int j = n; j < num; j++) + { + t[j] = 0; + } + + } + else + { + num = n; + t = (int*)malloc(num * sizeof(int)); + memcpy(t, idata, num * sizeof(int)); + } + + int asize = num * sizeof(int); + int blockNum = (num + blockSize - 1) / blockSize; + int *devi; + int *devo; + int *devm; + + cudaMalloc((void**)&devi, asize); + checkCUDAError("cudaMalloc failed"); + cudaMalloc((void**)&devo, asize); + checkCUDAError("cudaMalloc failed"); + cudaMalloc((void**)&devm, asize); + checkCUDAError("cudaMalloc failed"); + + timer().startGpuTimer(); + + cudaMemcpy(devi, t, asize, cudaMemcpyHostToDevice); + StreamCompaction::Common::kernMapToBoolean << > >(num, devm, devi); + + int end; + cudaMemcpy(&end, devm + num - 1, sizeof(int), cudaMemcpyDeviceToHost); + + helpscan(num, devm); + + int size; + cudaMemcpy(&size, devm + num - 1, sizeof(int), cudaMemcpyDeviceToHost); + + StreamCompaction::Common::kernScatter << > >(num, devo, devi, devm, devm); + + timer().endGpuTimer(); + + cudaMemcpy(odata, devo, asize, cudaMemcpyDeviceToHost); + + + if (end == 1) + { + size++; + } + + cudaFree(devi); + cudaFree(devo); + cudaFree(devm); + + return size; } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 9218f8e..e733d76 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +int *devi, *devo; + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -13,13 +15,60 @@ namespace StreamCompaction { } // TODO: __global__ + __global__ void kernelNaive(int n, int delta, const int *idata, int *odata) + { + int index = (blockIdx.x *blockDim.x) + threadIdx.x; + if (index >= n) + { + return; + } + if (index - delta < 0) + { + odata[index] = idata[index]; + } + else + { + odata[index] = idata[index - delta] + idata[index]; + } + } + + + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); + // TODO - timer().endGpuTimer(); + int depth = ilog2ceil(n); + + cudaMalloc((void**)&devi, n * sizeof(int)); + cudaMalloc((void**)&devo, n * sizeof(int)); + + checkCUDAError("cudaMalloc error"); + + cudaMemcpy(devi, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + int blockNum = (n + blockSize - 1) / blockSize; + int delta; + + timer().startGpuTimer(); + for (int i = 1; i <= depth; i++) + { + delta = (1 << (i - 1)); + kernelNaive << < blockNum, blockSize >> >(n, delta, devi, devo); + std::swap(devi, devo); + } + + timer().endGpuTimer(); + + std::swap(devi, devo); + + cudaMemcpy(odata + 1, devo, (n - 1) * sizeof(int), cudaMemcpyDeviceToHost); + odata[0] = 0; + + cudaFree(devi); + cudaFree(devo); } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 36b732d..5b0df2f 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,17 @@ 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(odata, odata + 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 9c9f04710f5a6c07872965434d164a0b7a6f11a5 Mon Sep 17 00:00:00 2001 From: xinCastle Date: Sat, 23 Sep 2017 16:56:03 -0400 Subject: [PATCH 2/5] Finally after reinstalling GIT, I can push my code now --- README.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b71c458..485d632 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,66 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Xincheng Zhang +* Tested on: (TODO) Windows 10, i7-4702HQ @ 2.20GHz 8GB, GTX 870M 3072MB (Personal Laptop) -### (TODO: Your README) +### Output Screenshot +------------- +@blocksize = 128; Arraysize = 1<<9 +![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/sc1.png) +![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/sc2.png) +![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/sc3.png) + +### Description&Features +------------- +``` +1: CPU Scan; Stream Compaction +2: Naive Scan using GPU +3: Efficient GPU Scan; Stream Compaction +4: Thrust Scan +``` + +### Blocksize Optimization +------------- +@constant Arraysize = 1<<9, the performance of different methods will change accroding to the blocksize. Therefore, I modify the blocksize to find the optimized value of these methods. + +![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/chart1.png) + +**The test data of the chart above is the following:** +Block Size | Naive Scan | Efficient Scan | Thrust Scan +---|---|---|--- +32 | 0.3818 | 0.1598 |1.0674 +64 | 0.0389 | 0.1575 |1.0808 +128 | 0.0382 | 0.1373 |1.0888 +256 | 0.0387 | 0.1542 |1.0669 +512 | 0.0428 | 0.1398 |1.0899 +1024 | 0.043 | 0.1532 |1.0523 +From the data I get and the chart above, we can tell that for CPU scan, the blocksize doesn't change the performance. For naive scan, its best blocksize is 128. For efficient scan, its best blocksize is 128. As for thrust scan, its best blocksize is 1024. + + +### Performance Comparison Based on Array Size +------------- +Array Size | Naive Scan | Efficient Scan | Thrust Scan | CPU Scan +---|---|---|---|--- +2^8 | 0.3546 | 0.127 |1.0821 |0.0014 +2^12 | 0.0531 | 0.1795 |2.3651 |0.1398 +2^16 | 0.2922 | 0.6992 |8.2656 |0.265 +2^20 | 3.3498 | 7.4632 |40.6058 |3.2167 +2^24 | 61.6843 | 130.091 |556.343 |53.3077 + +The chart is the following: +![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/chart2.png) + + +### Questions +------------- +* Roughly optimize the block sizes of each of your implementations for minimal run time on your GPU. +Answer: in the "blocksize optimization" above. + +* Compare all of these GPU Scan implementations +Answer: in the "Performance Comparison Based on Array Size" above. I guess that thrust scan uses shared memory. + +* Write a brief explanation of the phenomena you see here. +Answer: I think the reason why GPU methods are slower than CPU method is because that in these methods, not all the threads are working which means we have lots of threads doing nothing so they are not efficient enough to be faster than CPU scan. Moreover, I think I/O is another factor that causes bottleneck because there are many memory copy operations in my code. -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) From 8dae336500f68d51f7304cbdf27763c92720eee3 Mon Sep 17 00:00:00 2001 From: xinCastle Date: Sat, 23 Sep 2017 16:59:06 -0400 Subject: [PATCH 3/5] Revise the typo in readme file --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 485d632..b80103c 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Block Size | Naive Scan | Efficient Scan | Thrust Scan 256 | 0.0387 | 0.1542 |1.0669 512 | 0.0428 | 0.1398 |1.0899 1024 | 0.043 | 0.1532 |1.0523 + From the data I get and the chart above, we can tell that for CPU scan, the blocksize doesn't change the performance. For naive scan, its best blocksize is 128. For efficient scan, its best blocksize is 128. As for thrust scan, its best blocksize is 1024. From 62f9f67e477a5dab7b5ace35ea2d8a25eca4fd27 Mon Sep 17 00:00:00 2001 From: xinCastle Date: Sat, 23 Sep 2017 17:04:42 -0400 Subject: [PATCH 4/5] Revise readme typo --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b80103c..aefbf02 100644 --- a/README.md +++ b/README.md @@ -29,14 +29,14 @@ CUDA Stream Compaction ![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/chart1.png) **The test data of the chart above is the following:** -Block Size | Naive Scan | Efficient Scan | Thrust Scan ----|---|---|--- -32 | 0.3818 | 0.1598 |1.0674 -64 | 0.0389 | 0.1575 |1.0808 -128 | 0.0382 | 0.1373 |1.0888 -256 | 0.0387 | 0.1542 |1.0669 -512 | 0.0428 | 0.1398 |1.0899 -1024 | 0.043 | 0.1532 |1.0523 +Block Size | Naive Scan | Efficient Scan | Thrust Scan | CPU Scan +---|---|---|---|--- +32 | 0.3818 | 0.1598 |1.0674 |0.0019 +64 | 0.0389 | 0.1575 |1.0808 |0.0018 +128 | 0.0382 | 0.1373 |1.0888 |0.0019 +256 | 0.0387 | 0.1542 |1.0669 |0.0018 +512 | 0.0428 | 0.1398 |1.0899 |0.0019 +1024 | 0.043 | 0.1532 |1.0523 |0.0018 From the data I get and the chart above, we can tell that for CPU scan, the blocksize doesn't change the performance. For naive scan, its best blocksize is 128. For efficient scan, its best blocksize is 128. As for thrust scan, its best blocksize is 1024. From 9932a2c1a9553e8f642b5e370aab9f33c4c08499 Mon Sep 17 00:00:00 2001 From: xinCastle Date: Sat, 23 Sep 2017 17:06:06 -0400 Subject: [PATCH 5/5] Revise readme typo --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index aefbf02..782f4eb 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ CUDA Stream Compaction ![](https://github.com/XinCastle/Project2-Stream-Compaction/blob/master/img/chart1.png) **The test data of the chart above is the following:** +------------- Block Size | Naive Scan | Efficient Scan | Thrust Scan | CPU Scan ---|---|---|---|--- 32 | 0.3818 | 0.1598 |1.0674 |0.0019