From e13eba0c50f08e90c79e42b94bb42908a1f34727 Mon Sep 17 00:00:00 2001 From: Li Dayu Date: Tue, 22 Sep 2020 17:07:32 -0400 Subject: [PATCH 1/5] All good before extracredits --- stream_compaction/common.cu | 12 ++++ stream_compaction/cpu.cu | 48 +++++++++++++- stream_compaction/efficient.cu | 117 ++++++++++++++++++++++++++++++++- stream_compaction/naive.cu | 55 +++++++++++++++- stream_compaction/thrust.cu | 7 ++ 5 files changed, 234 insertions(+), 5 deletions(-) diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..6267abf 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 = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + bools[index] = (idata[index]) ? 1 : 0; } /** @@ -33,6 +38,13 @@ 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]) { + odata[indices[index]] = idata[index]; + } } } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..79222a5 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -12,6 +12,25 @@ namespace StreamCompaction { return timer; } + void CPUScan(const int* idata, int* odata, int n) + { + odata[0] = 0; + for (int i = 1; i < n; ++i) { + odata[i] = odata[i - 1] + idata[i - 1]; + } + } + + int CPUCompactWithoutScan(int n, int* odata, const int* idata) + { + int count = 0; + for (int i = 0; i < n; ++i) { + if (idata[i] != 0) { + odata[count] = idata[i]; + count++; + } + } + return count; + } /** * CPU scan (prefix sum). * For performance analysis, this is supposed to be a simple for loop. @@ -20,6 +39,7 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + CPUScan(idata, odata, n); timer().endCpuTimer(); } @@ -31,8 +51,9 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int count = CPUCompactWithoutScan(n, odata, idata); timer().endCpuTimer(); - return -1; + return count; } /** @@ -40,11 +61,32 @@ namespace StreamCompaction { * * @returns the number of elements remaining after compaction. */ - int compactWithScan(int n, int *odata, const int *idata) { + int compactWithScan(int n, int* odata, const int* idata) { + + int* boolArray = (int*)malloc(n * sizeof(int)); + int* indexArray = (int*)malloc(n * sizeof(int)); + timer().startCpuTimer(); // TODO + for (int i = 0; i < n; ++i) { + boolArray[i] = (idata[i]) ? 1 : 0; + } + + // scan + CPUScan(boolArray, indexArray, n); + + // scatter + + for (int i = 0; i < n; ++i) { + if (boolArray[i]) { + odata[indexArray[i]] = idata[i]; + } + } + int count = boolArray[n - 1] ? indexArray[n - 1] + 1 : indexArray[n - 1]; timer().endCpuTimer(); - return -1; + free(boolArray); + free(indexArray); + return count; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..854e966 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -3,6 +3,7 @@ #include "common.h" #include "efficient.h" +#define BLOCKSIZE 128 namespace StreamCompaction { namespace Efficient { using StreamCompaction::Common::PerformanceTimer; @@ -11,14 +12,60 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } + __global__ void kernUpSweep(int n, int d, int* idata) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + int offset = 1 << d; //2^d + int offsetDouble = offset * 2; //2^(d+1) + int indexRemap = index * offsetDouble; + idata[indexRemap + offsetDouble - 1] += idata[indexRemap + offset - 1]; + } + __global__ void kernDownSweep(int n, int d, int* idata) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + int offset = 1 << d; //2^d + int offsetDouble = offset * 2; //2^(d+1) + int indexRemap = index * offsetDouble; + int temp = idata[indexRemap + offset - 1]; + idata[indexRemap + offset - 1] = idata[indexRemap + offsetDouble - 1]; + idata[indexRemap + offsetDouble - 1] += temp; + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int size = powf(2, ilog2ceil(n)); + int* dev_idata; + cudaMalloc((void**)&dev_idata, size * sizeof(int)); + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); timer().startGpuTimer(); + dim3 blockSize(BLOCKSIZE); + dim3 gridSize((size + BLOCKSIZE - 1) / BLOCKSIZE); // TODO + int d = ilog2ceil(n) - 1; + for (int i = 0; i <= d; ++i) { + int threadsNum = 1 << (d - i); + gridSize = dim3((threadsNum + BLOCKSIZE - 1) / BLOCKSIZE); + kernUpSweep << > > (threadsNum, i, dev_idata); + } + cudaMemset((void*)&(dev_idata[size - 1]), 0, sizeof(int)); + + for (int j = d; j >= 0; --j) { + int threadsNum = 1 << (d - j); + gridSize = dim3((threadsNum + BLOCKSIZE - 1) / BLOCKSIZE); + kernDownSweep << > > (threadsNum, j, dev_idata); + } timer().endGpuTimer(); + + cudaMemcpy(odata, dev_idata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy odata failed!"); + cudaFree(dev_idata); + checkCUDAError("cudaFree(dev_idata) failed!"); } /** @@ -31,10 +78,78 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { + + int pow2d = powf(2, ilog2ceil(n)); + int* boolArray; + int* indexArray; + int* dev_idata; + int* dev_odata; + int* dev_boolArray; + int* dev_indexArray; + + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + cudaMalloc((void**)&dev_boolArray, n * sizeof(int)); + cudaMalloc((void**)&dev_indexArray, pow2d * sizeof(int)); // This takes more memory space. + + boolArray = (int*)malloc(n * sizeof(int)); + indexArray = (int*)malloc(n * sizeof(int)); + + int gridSize = (n + BLOCKSIZE - 1) / BLOCKSIZE; + int gridSize2 = (pow2d + BLOCKSIZE - 1) / BLOCKSIZE; + // copy memory to device + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); timer().startGpuTimer(); // TODO + // Map the boolean array + StreamCompaction::Common::kernMapToBoolean << > > (n, dev_boolArray, dev_idata); + // Do an exclusive scan + cudaMemcpy(dev_indexArray, dev_boolArray, n * sizeof(int), cudaMemcpyDeviceToDevice); + + int d = ilog2ceil(n) - 1; + for (int i = 0; i <= d; ++i) { + int threadsNum = 1 << (d - i); + gridSize2 = (threadsNum + BLOCKSIZE - 1) / BLOCKSIZE; + kernUpSweep << > > (threadsNum, i, dev_indexArray); + } + cudaMemset((void*)&(dev_indexArray[pow2d - 1]), 0, sizeof(int)); + + for (int j = d; j >= 0; --j) { + int threadsNum = 1 << (d - j); + gridSize2 = (threadsNum + BLOCKSIZE - 1) / BLOCKSIZE; + kernDownSweep << > > (threadsNum, j, dev_indexArray); + } + + // Scatter + StreamCompaction::Common::kernScatter << > > (n, dev_odata, dev_idata, dev_boolArray, dev_indexArray); + + timer().endGpuTimer(); - return -1; + + // Copy the memory out + cudaMemcpy(indexArray, dev_indexArray, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("get indexArray failed!"); + cudaMemcpy(boolArray, dev_boolArray, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("get boolArray failed!"); + cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("get odata failed!"); + + int count = boolArray[n - 1] ? indexArray[n - 1] + 1 : indexArray[n - 1]; + + // Free Mem spaces + cudaFree(dev_idata); + checkCUDAError("cudaFree(dev_idata) failed!"); + cudaFree(dev_odata); + checkCUDAError("cudaFree(dev_odata) failed!"); + cudaFree(dev_boolArray); + checkCUDAError("cudaFree(dev_boolArray) failed!"); + cudaFree(dev_indexArray); + checkCUDAError("cudaFree(dev_indexArray) failed!"); + + free(boolArray); + free(indexArray); + + return count; } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..3a6488b 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +#define BLOCKSIZE 128 + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -12,14 +14,65 @@ namespace StreamCompaction { return timer; } // TODO: __global__ - + __global__ void kernScanNaive(int n, int* odata, int* idata, int lowbound) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + if (index >= lowbound){ + odata[index] = idata[index - lowbound] + idata[index]; + } + else{ + odata[index] = idata[index]; + } + } /** * 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; + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata failed!"); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_odata failed!"); + + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAErrorFn("cudaMemcpy (host to device) failed!"); + + int d = ilog2ceil(n);//log2 n + dim3 fullBlocksPerGrid((n + BLOCKSIZE - 1) / BLOCKSIZE); timer().startGpuTimer(); // TODO + for (int i = 1; i <= d; i++) { + if((i % 2)) + { + kernScanNaive << > > (n, dev_odata, dev_idata, 1 << (i - 1)); + } + else + { + kernScanNaive << > > (n, dev_idata, dev_odata, 1 << (i - 1)); + } + } timer().endGpuTimer(); + + //Decide which is the source of the final scan + int* source; + if (d % 2) { + source = dev_odata; + } + else { + source = dev_idata; + } + //To transfer inclusive scan to exclusive scan, do a right shift. + cudaMemcpy(odata + 1, source, (n-1) * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("get odata failed!"); + odata[0] = 0; + //free + cudaFree(dev_idata); + cudaFree(dev_odata); } } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..183607c 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,11 +18,18 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + + thrust::host_vector host_idata(idata, idata + n); + thrust::device_vector dev_idata = host_idata; + thrust::device_vector dev_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(dev_idata.begin(), dev_idata.end(), dev_odata.begin()); timer().endGpuTimer(); + + thrust::copy(dev_odata.begin(), dev_odata.end(), odata); } } } From 4e4f9c28363e1726e7e75bbae83ec2a023c3f54a Mon Sep 17 00:00:00 2001 From: Li Dayu Date: Tue, 22 Sep 2020 23:18:33 -0400 Subject: [PATCH 2/5] added radix sort --- img/1.png | Bin 0 -> 125200 bytes src/main.cpp | 14 ++++- stream_compaction/efficient.cu | 100 +++++++++++++++++++++++++++++++++ stream_compaction/efficient.h | 2 + stream_compaction/radix.h | 12 ++++ 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 img/1.png create mode 100644 stream_compaction/radix.h diff --git a/img/1.png b/img/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba95bbee9b6bfab17e86e3d1fdfaf994906cf1b GIT binary patch literal 125200 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
oq6njYvj8>j7TPj*#gJ@zJAZM2 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%0DiZ6E?0@E!1fO1h5;dvG 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 #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 4; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two +const int RADIXSIZE = 20; int *a = new int[SIZE]; int *b = new int[SIZE]; int *c = new int[SIZE]; +int *radix = new int[RADIXSIZE]; +int* radix_sorted = new int[RADIXSIZE]; int main(int argc, char* argv[]) { // Scan tests @@ -147,8 +150,17 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + //printDesc("radix sort test"); + //genArray(RADIXSIZE, radix, 32); + //zeroArray(RADIXSIZE, radix_sorted); + //StreamCompaction::Efficient::radixSort(RADIXSIZE, 6, radix, radix_sorted); + //printArray(RADIXSIZE, radix, true); + //printArray(RADIXSIZE, radix_sorted, true); + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; delete[] c; + delete[] radix; + delete[] radix_sorted; } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 854e966..36cff9b 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -35,6 +35,45 @@ namespace StreamCompaction { idata[indexRemap + offset - 1] = idata[indexRemap + offsetDouble - 1]; idata[indexRemap + offsetDouble - 1] += temp; } + + //For radix sort extra credits + + __global__ void kernRadixBarray(int n, int bitNum, const int* idata, int* bArray, int* eArray) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + bArray[index] = (idata[index] >> bitNum & 1) ? 1 : 0; + eArray[index] = (idata[index] >> bitNum & 1) ? 0 : 1; + } + + __global__ void kernRadixTarray(int n, const int* fArray, int* tArray, int d) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + tArray[index] = index - fArray[index] + d; + } + + __global__ void kernRadixDarray(int n, const int* bArray, const int* fArray, const int* tArray, int* dArray) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + dArray[index] = (bArray[index]) ? tArray[index] : dArray[index]; + } + + __global__ void kernRadixRemap(int n, const int* dArray, int* idata) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + idata[dArray[index]]= idata[index]; + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ @@ -151,5 +190,66 @@ namespace StreamCompaction { return count; } + + void radixSort(int n, int bitNum, int* odata, int* idata) + { + int* dev_idata; + int* dev_bArray; + int* dev_eArray; + int* dev_fArray; + int* dev_tArray; + int* dev_dArray; + + int* fArray; + int* eArray; + //Malloc + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + cudaMalloc((void**)&dev_bArray, n * sizeof(int)); + cudaMalloc((void**)&dev_eArray, n * sizeof(int)); + cudaMalloc((void**)&dev_fArray, n * sizeof(int)); + cudaMalloc((void**)&dev_tArray, n * sizeof(int)); + cudaMalloc((void**)&dev_dArray, n * sizeof(int)); + + fArray = (int*)malloc(n * sizeof(int)); + eArray = (int*)malloc(n * sizeof(int)); + + dim3 blockSize(BLOCKSIZE); + dim3 gridSize((n + BLOCKSIZE - 1) / BLOCKSIZE); + + //Copy data from host to device + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_idata failed!"); + int falseCount = 0; + + for (int i = 0; i < bitNum; ++i) + { + //Get B-array and E-array + kernRadixBarray << > > (n, i, dev_idata, dev_bArray, dev_eArray); + //Get F-array + StreamCompaction::Efficient::scan(n, dev_fArray, dev_eArray); + cudaMemcpy(fArray, dev_fArray, n * sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(eArray, dev_eArray, n * sizeof(int), cudaMemcpyDeviceToHost); + falseCount = fArray[n - 1] + eArray[n - 1]; + + kernRadixTarray << > > (n, dev_fArray, dev_tArray, falseCount); + kernRadixDarray << > > (n, dev_bArray, dev_fArray, dev_tArray, dev_dArray); + + //Scatter + kernRadixRemap << > > (n, dev_dArray, dev_idata); + } + + cudaMemcpy(odata, dev_idata, n * sizeof(int), cudaMemcpyDeviceToHost);//get the result + checkCUDAError("get odata failed!\n"); + + cudaFree(dev_idata); + cudaFree(dev_bArray); + cudaFree(dev_eArray); + cudaFree(dev_fArray); + cudaFree(dev_tArray); + cudaFree(dev_dArray); + + free(fArray); + free(eArray); + } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..6f57a8c 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -9,5 +9,7 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata); int compact(int n, int *odata, const int *idata); + + void radixSort(int n, int bitNum, int* odata, int* idata); } } diff --git a/stream_compaction/radix.h b/stream_compaction/radix.h new file mode 100644 index 0000000..ecdb16f --- /dev/null +++ b/stream_compaction/radix.h @@ -0,0 +1,12 @@ +#pragma once + +#include "common.h" +#include "efficient.h" + +namespace StreamCompaction { + namespace Radix { + StreamCompaction::Common::PerformanceTimer& timer(); + + void radixSort(int n, int bits_num, int* odata, const int* idata); + } +} \ No newline at end of file From 252f639a033a22ff8018e8bbb4074376d9c653b7 Mon Sep 17 00:00:00 2001 From: Dayu Li <43657534+UniverseLdy@users.noreply.github.com> Date: Tue, 22 Sep 2020 23:48:06 -0400 Subject: [PATCH 3/5] Update README.md --- README.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e38ddb..d498a28 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,69 @@ 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) +* Dayu Li +* Tested on: Windows 10, i7-10700K @ 3.80GHz 16GB, GTX 2070 8150MB (Personal laptop) -### (TODO: Your README) +## Features -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +##### CPU: +-CPU Scan, CPU Comact + +##### GPU: + +-Naive Scan, Work-Efficient Scan, Thrust Scan + +-Work-Efficient Compact + +###### Extra: + +-Why is CPU faster than Work-efficient? + +-Radix Sort algorithm + +![](img/1.png) +## Performance Analysis +### Blocksize Optimization +The graph below shows how the work efficient compact runtime changes with the block size. To me there is no obvious change of the runtime during the change of block size, similar to the previous project. + +![](img/2.png) + +### Runtime Comparison +The graphs below compare the runtime of different scan implementations for the small array size. + +![](img/3.png) + - When the array size is small, CPU scan has the best performance. This is due to the extra efforts spent on calling the kernel and CUDA, as we expected, multi-threaded process runs slower than the normal computations when the task is small. + + - When the array size is large, CPU scan runs slower and gpu is playing better. Where the thrust may be the best. This is due to the utilization of shared memory instead of global memory. +### Extra Credit: +#### Why is My GPU Approach So Slow? +One of the reasons why work efficient scan is slower than expected is the fact that there are too much useless threads during the computation process that are created but never used. The existance of the useless threads will play a more important role when the array size is getting larger. + +To resolve this, I changeed the number of threads (iterations times) within the work efficient compact function, from 2^d to 2^(d-i), this will reduce the number of threads that are created without changing any of the results. + +Before: + - number of threads = 2^d +After: + - number of threads = 2^(d-i) + +After optimization, work efficient is significantly improved. + - testted on 128 blocksize + + ||Before| After +|--|--|--| +|2^8|0.2152 ms|0.03081 ms| +|2^16|4.31 ms|1.062 ms| + +#### Radix sort (Not finished) + +just follow the slides from the course. +Uncomment this part in the main.cpp will show the test result. +``` +//printDesc("radix sort test"); +//genArray(RADIXSIZE, radix, 32); +//zeroArray(RADIXSIZE, radix_sorted); +//StreamCompaction::Efficient::radixSort(RADIXSIZE, 6, radix, radix_sorted); +//printArray(RADIXSIZE, radix, true); +//printArray(RADIXSIZE, radix_sorted, true); +``` From 3b64c6f16b539c8b0576892572a582bba9bbf917 Mon Sep 17 00:00:00 2001 From: Li Dayu Date: Tue, 22 Sep 2020 23:49:07 -0400 Subject: [PATCH 4/5] added figures --- img/2.png | Bin 0 -> 14247 bytes img/3.png | Bin 0 -> 17764 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/2.png create mode 100644 img/3.png diff --git a/img/2.png b/img/2.png new file mode 100644 index 0000000000000000000000000000000000000000..55f31159890d3bd1f7ea8d8c8c164c89e7f0ac0c GIT binary patch literal 14247 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 literal 0 HcmV?d00001 diff --git a/img/3.png b/img/3.png new file mode 100644 index 0000000000000000000000000000000000000000..31227f5c83a007be9b5fe17301074e4cdb318759 GIT binary patch literal 17764 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 Q=tCiAt<8 literal 0 HcmV?d00001 From 600693dee3a227aa406a7100c83f3429a79cb06e Mon Sep 17 00:00:00 2001 From: Dayu Li <43657534+UniverseLdy@users.noreply.github.com> Date: Tue, 22 Sep 2020 23:54:10 -0400 Subject: [PATCH 5/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d498a28..d5d586f 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ One of the reasons why work efficient scan is slower than expected is the fact t To resolve this, I changeed the number of threads (iterations times) within the work efficient compact function, from 2^d to 2^(d-i), this will reduce the number of threads that are created without changing any of the results. Before: - - number of threads = 2^d + - number of threads = 2^d After: - number of threads = 2^(d-i)