From 7363198a9ec1e2ea8316969b5c77d2049cb51890 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Fri, 17 Sep 2021 12:49:40 -0400 Subject: [PATCH 01/19] Task 1 Complete --- stream_compaction/cpu.cu | 57 +++++++++++++++++++++++++++++-- stream_compaction/naive.cu | 69 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..29c1c5d 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -18,8 +18,16 @@ namespace StreamCompaction { * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. */ void scan(int n, int *odata, const int *idata) { + timer().startCpuTimer(); // TODO + + odata[0] = 0; + for (int i = 1; i < n; i++) + { + odata[i] = odata[i - 1] + idata[i-1]; + } + timer().endCpuTimer(); } @@ -31,8 +39,20 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int ans[300]; + int outIndex=0; + for (int i = 0; i < n; i++) + { + if (idata[i] != 0) + { + odata[outIndex] = idata[i]; + ans[outIndex] = idata[i]; + outIndex++; + } + } + timer().endCpuTimer(); - return -1; + return outIndex; } /** @@ -41,10 +61,43 @@ namespace StreamCompaction { * @returns the number of elements remaining after compaction. */ int compactWithScan(int n, int *odata, const int *idata) { + + int arr_b[300]; + int arr_c[300]; // exclusive array timer().startCpuTimer(); + + int finalIndex = 0; +#pragma region Powerof2 + + for (int i = 0; i < n; i++) + { + if (idata[i] == 0) + { + arr_b[i] = 0; + continue; + } + arr_b[i] = 1; + } + arr_c[0] = 0; + for (int i = 1; i < n; i++) + { + arr_c[i] = arr_b[i - 1] + arr_c[i - 1]; + } + + for (int i = 0; i < n; i++) + { + if (arr_b[i] == 0) + { + continue; + } + int index = arr_c[i]; + odata[index] = idata[i]; + finalIndex = index; + } +#pragma endregion // TODO timer().endCpuTimer(); - return -1; + return finalIndex+1; } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..028cd5f 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -18,7 +18,76 @@ namespace StreamCompaction { */ void scan(int n, int *odata, const int *idata) { timer().startGpuTimer(); + + + + // TODO +// +//#pragma region NonPower2 +// +// int arr_z[400]; +// int arr_b[400]; +// int arr_c[400]; // exclusive array +// +// int power2 = 1; +// int nearesttwo = 2; +// +// for (int i = 0; i < 5; i++) +// { +// nearesttwo = nearesttwo << 1; +// if (nearesttwo >= n) +// { +// break; +// } +// } +// +// +// int difference = nearesttwo - n; +// +// for (int i = 0; i < difference; i++) +// { +// arr_z[difference] = 0; +// } +// +// +// for (int i = 0; i < n; i++) +// { +// arr_z[i + difference] = idata[i]; +// } +// +// n = n + difference; +// +// for (int i = 0; i < n; i++) +// { +// if (arr_z[i] == 0) +// { +// arr_b[i] = 0; +// continue; +// } +// arr_b[i] = 1; +// } +// +// arr_c[0] = 0; +// for (int i = 1; i < n; i++) +// { +// arr_c[i] = arr_b[i - 1] + arr_c[i - 1]; +// } +// +// for (int i = 0; i < n; i++) +// { +// if (arr_b[i] == 0) +// { +// continue; +// } +// int index = arr_c[i]; +// odata[index] = idata[i]; +// } +// +// +// +//#pragma endregion + timer().endGpuTimer(); } } From f59daaabc54e72a20172e7c4bd0314f379d7ef17 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Fri, 17 Sep 2021 19:39:13 -0400 Subject: [PATCH 02/19] Part 2 Complete --- stream_compaction/cpu.cu | 72 +++++++++++++- stream_compaction/naive.cu | 193 ++++++++++++++++++++++++------------- 2 files changed, 195 insertions(+), 70 deletions(-) diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 29c1c5d..6e0d004 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -39,14 +39,12 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO - int ans[300]; int outIndex=0; for (int i = 0; i < n; i++) { if (idata[i] != 0) { odata[outIndex] = idata[i]; - ans[outIndex] = idata[i]; outIndex++; } } @@ -66,18 +64,81 @@ namespace StreamCompaction { int arr_c[300]; // exclusive array timer().startCpuTimer(); + + int ans[300]; + int finalIndex = 0; #pragma region Powerof2 + //for (int i = 0; i < n; i++) + //{ + // if (idata[i] == 0) + // { + // arr_b[i] = 0; + // continue; + // } + // arr_b[i] = 1; + //} + //arr_c[0] = 0; + //for (int i = 1; i < n; i++) + //{ + // arr_c[i] = arr_b[i - 1] + arr_c[i - 1]; + //} + + //for (int i = 0; i < n; i++) + //{ + // if (arr_b[i] == 0) + // { + // continue; + // } + // int index = arr_c[i]; + // odata[index] = idata[i]; + // finalIndex = index; + //} +#pragma endregion + // TODO +#pragma region NonPower2 + + int arr_z[300]; + + int power2 = 1; + int nearesttwo = 2; + + for (int i = 0; i < n; i++) + { + nearesttwo = nearesttwo << 1; + if (nearesttwo >= n) + { + break; + } + } + + + int difference = nearesttwo - n; + + for (int i = 0; i < difference; i++) + { + arr_z[i] = 0; + } + + + for (int i = 0; i < n; i++) + { + arr_z[i + difference] = idata[i]; + } + + n = n + difference; + for (int i = 0; i < n; i++) { - if (idata[i] == 0) + if (arr_z[i] == 0) { arr_b[i] = 0; continue; } arr_b[i] = 1; } + arr_c[0] = 0; for (int i = 1; i < n; i++) { @@ -92,10 +153,13 @@ namespace StreamCompaction { } int index = arr_c[i]; odata[index] = idata[i]; + ans[index] = idata[i]; finalIndex = index; } + + + #pragma endregion - // TODO timer().endCpuTimer(); return finalIndex+1; } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 028cd5f..0373548 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -2,9 +2,15 @@ #include #include "common.h" #include "naive.h" - namespace StreamCompaction { namespace Naive { + + #define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project + + int* dev_buf1; + int* dev_buf2; + #define blockSize 128 + using StreamCompaction::Common::PerformanceTimer; PerformanceTimer& timer() { @@ -13,80 +19,135 @@ namespace StreamCompaction { } // TODO: __global__ + __global__ void performScan(int d, int* buf1, int* buf2, int N) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N) + { + return; + } + int pow2_d = pow(2, d); + int pow2_dminus1 = pow2_d / 2; + if (index >= pow2_dminus1) + { + buf2[index] = buf1[index - pow2_dminus1] + buf1[index]; + } + else + { + buf2[index] = buf1[index]; + } + + } + + void FreeMemory() { + cudaFree(dev_buf1); + cudaFree(dev_buf2); + } + + void AllocateMemory(int n) + { + cudaMalloc((void**)&dev_buf1, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + cudaMalloc((void**)&dev_buf2, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + cudaDeviceSynchronize(); + } + /** * 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 power2 = 1; + int nearesttwo = 2; + for (int i = 0; i < n; i++) + { + nearesttwo = nearesttwo << 1; + if (nearesttwo >= n) + { + break; + } + } + int difference = nearesttwo - n; + int finalMemSize = n + difference; + + int *arr_z = new int[finalMemSize]; + + /* for (int i = 0; i < finalMemSize; i++) + { + if (i < difference) + { + arr_z[difference] = 0; + continue; + } + arr_z[i] = idata[i - difference]; + }*/ + + int bp = idata[0]; + int fp = idata[n-1]; + for (int i = 0; i < difference; i++) + { + arr_z[i] = 0; + } + for (int i = 0; i < n; i++) + { + arr_z[i + difference] = idata[i]; + } + + /* for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + }*/ + + int d = ilog2ceil(finalMemSize); + AllocateMemory(finalMemSize); + cudaMemcpy(dev_buf1, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + + for (int i = 1; i <= d; i++) + { + performScan << < fullBlocksPerGrid, blockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); + cudaDeviceSynchronize(); + std::swap(dev_buf1, dev_buf2); + } + + if (d % 2 != 0) + { + cudaMemcpy(arr_z, dev_buf2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + } + else + { + cudaMemcpy(arr_z, dev_buf1, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + } + + /* for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + }*/ + + for (int i = 0; i < n; i++) + { + odata[i] = arr_z[i + difference]; + } + + //rightshift + for (int i = n -1; i >= 1 ; i--) + { + odata[i] = odata[i - 1]; + } + odata[0] = 0; + + /* printf("]\n"); + for (int i = 0; i < n; i++) + { + printf("%3d ", odata[i]); + }*/ - // TODO -// -//#pragma region NonPower2 -// -// int arr_z[400]; -// int arr_b[400]; -// int arr_c[400]; // exclusive array -// -// int power2 = 1; -// int nearesttwo = 2; -// -// for (int i = 0; i < 5; i++) -// { -// nearesttwo = nearesttwo << 1; -// if (nearesttwo >= n) -// { -// break; -// } -// } -// -// -// int difference = nearesttwo - n; -// -// for (int i = 0; i < difference; i++) -// { -// arr_z[difference] = 0; -// } -// -// -// for (int i = 0; i < n; i++) -// { -// arr_z[i + difference] = idata[i]; -// } -// -// n = n + difference; -// -// for (int i = 0; i < n; i++) -// { -// if (arr_z[i] == 0) -// { -// arr_b[i] = 0; -// continue; -// } -// arr_b[i] = 1; -// } -// -// arr_c[0] = 0; -// for (int i = 1; i < n; i++) -// { -// arr_c[i] = arr_b[i - 1] + arr_c[i - 1]; -// } -// -// for (int i = 0; i < n; i++) -// { -// if (arr_b[i] == 0) -// { -// continue; -// } -// int index = arr_c[i]; -// odata[index] = idata[i]; -// } -// -// -// -//#pragma endregion timer().endGpuTimer(); } From 85407db8349f83eeb7e17b07065036ef8dc949a9 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Sun, 19 Sep 2021 19:54:17 -0400 Subject: [PATCH 03/19] Efficient Implemented --- src/main.cpp | 3 +- stream_compaction/common.cu | 22 +++ stream_compaction/cpu.cu | 8 +- stream_compaction/efficient.cu | 329 ++++++++++++++++++++++++++++++++- stream_compaction/naive.cu | 303 +++++++++++++++--------------- 5 files changed, 509 insertions(+), 156 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..f1a1f49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,8 @@ #include #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 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]; diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..29fbc33 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -24,6 +24,17 @@ namespace StreamCompaction { */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { // TODO + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > n - 1) + { + return; + } + if (idata[index] == 0) + { + bools[index] = 0; + return; + } + bools[index] = 1; } /** @@ -33,6 +44,17 @@ namespace StreamCompaction { __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { // TODO + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > n - 1) + { + return; + } + + if (bools[index] == 0) + { + return; + } + odata[indices[index]] = idata[index]; } } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 6e0d004..ba81312 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -60,12 +60,12 @@ namespace StreamCompaction { */ int compactWithScan(int n, int *odata, const int *idata) { - int arr_b[300]; - int arr_c[300]; // exclusive array + int *arr_b = new int[n]; + int *arr_c = new int[n]; // exclusive array timer().startCpuTimer(); - int ans[300]; + int *ans = new int[n]; int finalIndex = 0; #pragma region Powerof2 @@ -99,7 +99,7 @@ namespace StreamCompaction { // TODO #pragma region NonPower2 - int arr_z[300]; + int *arr_z = new int[n]; int power2 = 1; int nearesttwo = 2; diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..cc80315 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -11,6 +11,89 @@ namespace StreamCompaction { static PerformanceTimer timer; return timer; } +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project + + int* dev_buf; + int* dev_bufB; + int* dev_bufS; + int* dev_buftemp; + int* dev_bufAnswers; + +#define blockSize 128 + + __global__ void performUpSweep(int d, int* buf, int N) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + int pow2_d = pow(2, d); + int pow2_dplus1 = pow2_d * 2; + if (index + pow2_dplus1 - 1 > N-1) + { + return; + } + + if ((index + pow2_dplus1 - 1) % pow2_dplus1 == (pow2_dplus1-1)) + { + buf[index + pow2_dplus1 - 1] += buf[index + pow2_d - 1]; + } + + if (index + pow2_dplus1 - 1 == N - 1) + { + buf[index + pow2_dplus1 - 1] = 0; + return; + } + + } + + __global__ void performDownSweep(int d, int* buf, int N) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + int pow2_d = pow(2, d); + int pow2_dplus1 = pow2_d * 2; + if (index + pow2_dplus1 - 1> N -1) + { + return; + } + + if ((index + pow2_dplus1 - 1) % pow2_dplus1 == (pow2_dplus1 - 1)) + { + + int t = buf[index + pow2_d - 1]; + buf[index + pow2_d - 1] = buf[index + pow2_dplus1 - 1]; + buf[index + pow2_dplus1 - 1] += t; + } + } + + void FreeMemoryScan() { + cudaFree(dev_buf); + } + + void AllocateMemory(int n) + { + cudaMalloc((void**)&dev_buf, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); + cudaDeviceSynchronize(); + } + + void AllocateMemoryCompaction(int n) + { + cudaMalloc((void**)&dev_buf, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); + cudaMalloc((void**)&dev_bufB, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufB failed!"); + cudaMalloc((void**)&dev_bufS, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufS failed!"); + cudaMalloc((void**)&dev_bufAnswers, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); + cudaDeviceSynchronize(); + } + + void FreeMemoryCompaction() { + cudaFree(dev_buf); + cudaFree(dev_bufB); + cudaFree(dev_bufS); + cudaFree(dev_bufAnswers); + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. @@ -18,9 +101,191 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startGpuTimer(); // TODO + + int nearesttwo = 2; + + for (int i = 0; i < n; i++) + { + nearesttwo = nearesttwo << 1; + if (nearesttwo >= n) + { + break; + } + } + int difference = nearesttwo - n; + + int finalMemSize = n + difference; + + int* arr_z = new int[finalMemSize]; + + for (int i = 0; i < finalMemSize; i++) + { + if (i < difference) + { + arr_z[difference] = 0; + continue; + } + arr_z[i] = idata[i - difference]; + } + + int bp = idata[0]; + int fp = idata[n - 1]; + for (int i = 0; i < difference; i++) + { + arr_z[i] = 0; + } + for (int i = 0; i < n; i++) + { + arr_z[i + difference] = idata[i]; + } + + /* for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + int d = ilog2ceil(finalMemSize); + AllocateMemory(finalMemSize); + cudaMemcpy(dev_buf, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + + for (int i = 0; i <= d -1; i++) + { + performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); + } + + //dev_buf[finalMemSize-1] = 0; + /* cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + printf("\n Upsweep"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + + for (int i = d-1; i >=0 ; i--) + { + performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); + } + + + cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + //printf("\n Downsweep"); + // for (int i = 0; i < finalMemSize; i++) + // { + // printf("%3d ", arr_z[i]); + // } + // printf("\n"); + for (int i = 0; i < n; i++) + { + odata[i] = arr_z[i + difference]; + } + + //printf("]\n"); + //for (int i = 0; i < n; i++) + //{ + // printf("%3d ", odata[i]); + //} timer().endGpuTimer(); + + FreeMemoryScan(); } + void scanWithoutTimer(int n, int* odata, const int* idata) { + // TODO + + int nearesttwo = 2; + + for (int i = 0; i < n; i++) + { + nearesttwo = nearesttwo << 1; + if (nearesttwo >= n) + { + break; + } + } + int difference = nearesttwo - n; + + int finalMemSize = n + difference; + + int* arr_z = new int[finalMemSize]; + + for (int i = 0; i < finalMemSize; i++) + { + if (i < difference) + { + arr_z[difference] = 0; + continue; + } + arr_z[i] = idata[i - difference]; + } + + int bp = idata[0]; + int fp = idata[n - 1]; + for (int i = 0; i < difference; i++) + { + arr_z[i] = 0; + } + for (int i = 0; i < n; i++) + { + arr_z[i + difference] = idata[i]; + } + + /* for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + int d = ilog2ceil(finalMemSize); + AllocateMemory(finalMemSize); + cudaMemcpy(dev_buf, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + + for (int i = 0; i <= d - 1; i++) + { + performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); + } + + //dev_buf[finalMemSize-1] = 0; + /* cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + printf("\n Upsweep"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + + for (int i = d - 1; i >= 0; i--) + { + performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); + } + + + cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + //printf("\n Downsweep"); + // for (int i = 0; i < finalMemSize; i++) + // { + // printf("%3d ", arr_z[i]); + // } + // printf("\n"); + for (int i = 0; i < n; i++) + { + odata[i] = arr_z[i + difference]; + } + + //printf("]\n"); + //for (int i = 0; i < n; i++) + //{ + // printf("%3d ", odata[i]); + //} + + FreeMemoryScan(); + } + /** * Performs stream compaction on idata, storing the result into odata. * All zeroes are discarded. @@ -31,10 +296,70 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { - timer().startGpuTimer(); + int finalMemSize = n; + AllocateMemoryCompaction(finalMemSize); + + + timer().startGpuTimer(); // TODO + cudaMemcpy(dev_buf, idata, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + + + Common::kernMapToBoolean << < fullBlocksPerGrid, blockSize >> > (finalMemSize, dev_bufB, dev_buf); + + //Copy bool value to new array to perform scan + int *arr_boolean = new int[finalMemSize]; + cudaMemcpy(arr_boolean, dev_bufB, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + /* printf("\n Bollean Result: \n"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_boolean[i]); + } + printf("\n");*/ + + //Create new array to store answers from scan + int* arr_scanResult = new int[finalMemSize]; + scanWithoutTimer(finalMemSize, arr_scanResult, arr_boolean); + + /* printf("\n Scan Result:\n"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_scanResult[i]); + } + printf("\n");*/ + + //Copy the scan answers to Dev_BufS to further process + cudaMemcpy(dev_bufS, arr_scanResult, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + int numElements = arr_scanResult[finalMemSize - 1]; + ///Remove this dont know why but dev_buf values are being replaced by scan values + cudaMalloc((void**)&dev_buftemp, finalMemSize * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_buftemp failed!"); + cudaMemcpy(dev_buftemp, idata, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + Common::kernScatter << < fullBlocksPerGrid, blockSize >> > (finalMemSize, dev_bufAnswers, dev_buftemp, + dev_bufB, dev_bufS); + + cudaMemcpy(odata, dev_bufAnswers, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + /* printf("\n Finals Result:"); + for (int i = 0; i < numElements; i++) + { + printf("%3d ", odata[i]); + } + printf("\n");*/ timer().endGpuTimer(); - return -1; + FreeMemoryCompaction(); + + if (arr_boolean[finalMemSize - 1] == 1) + { + return numElements + 1; // Since indexing start from 0 + } + + return numElements; //if last element boolean is 0 its scan result include 1 extra sum counting for 0 index } } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 0373548..1f3b5b0 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,153 +3,158 @@ #include "common.h" #include "naive.h" namespace StreamCompaction { - namespace Naive { - - #define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project - - int* dev_buf1; - int* dev_buf2; - #define blockSize 128 - - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - // TODO: __global__ - - __global__ void performScan(int d, int* buf1, int* buf2, int N) - { - int index = (blockIdx.x * blockDim.x) + threadIdx.x; - if (index > N) - { - return; - } - int pow2_d = pow(2, d); - int pow2_dminus1 = pow2_d / 2; - if (index >= pow2_dminus1) - { - buf2[index] = buf1[index - pow2_dminus1] + buf1[index]; - } - else - { - buf2[index] = buf1[index]; - } - - } - - void FreeMemory() { - cudaFree(dev_buf1); - cudaFree(dev_buf2); - } - - void AllocateMemory(int n) - { - cudaMalloc((void**)&dev_buf1, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); - cudaMalloc((void**)&dev_buf2, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); - cudaDeviceSynchronize(); - } - - /** - * 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 power2 = 1; - int nearesttwo = 2; - - for (int i = 0; i < n; i++) - { - nearesttwo = nearesttwo << 1; - if (nearesttwo >= n) - { - break; - } - } - int difference = nearesttwo - n; - - int finalMemSize = n + difference; - - int *arr_z = new int[finalMemSize]; - - /* for (int i = 0; i < finalMemSize; i++) - { - if (i < difference) - { - arr_z[difference] = 0; - continue; - } - arr_z[i] = idata[i - difference]; - }*/ - - int bp = idata[0]; - int fp = idata[n-1]; - for (int i = 0; i < difference; i++) - { - arr_z[i] = 0; - } - for (int i = 0; i < n; i++) - { - arr_z[i + difference] = idata[i]; - } - - /* for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - }*/ - - int d = ilog2ceil(finalMemSize); - AllocateMemory(finalMemSize); - cudaMemcpy(dev_buf1, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); - - dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); - - for (int i = 1; i <= d; i++) - { - performScan << < fullBlocksPerGrid, blockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); - cudaDeviceSynchronize(); - std::swap(dev_buf1, dev_buf2); - } - - if (d % 2 != 0) - { - cudaMemcpy(arr_z, dev_buf2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - } - else - { - cudaMemcpy(arr_z, dev_buf1, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - } - - /* for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - }*/ - - for (int i = 0; i < n; i++) - { - odata[i] = arr_z[i + difference]; - } - - //rightshift - for (int i = n -1; i >= 1 ; i--) - { - odata[i] = odata[i - 1]; - } - odata[0] = 0; - - /* printf("]\n"); - for (int i = 0; i < n; i++) - { - printf("%3d ", odata[i]); - }*/ - - - timer().endGpuTimer(); - } - } + namespace Naive { + +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project + + + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + // TODO: __global__ + int* dev_buf1; + int* dev_buf2; +#define blockSize 128 + + __global__ void performScan(int d, int* buf1, int* buf2, int N) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N - 1) + { + return; + } + //int pow2_d = pow(2, d); + int pow2_dminus1 = pow(2, d - 1); + if (index >= pow2_dminus1) + { + buf2[index] = buf1[index - pow2_dminus1] + buf1[index]; + } + else + { + buf2[index] = buf1[index]; + } + + } + + void FreeMemory() { + cudaFree(dev_buf1); + cudaFree(dev_buf2); + } + + void AllocateMemory(int n) + { + cudaMalloc((void**)&dev_buf1, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + cudaMalloc((void**)&dev_buf2, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + cudaDeviceSynchronize(); + } + + /** + * 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 power2 = 1; + int nearesttwo = 2; + + for (int i = 0; i < n; i++) + { + nearesttwo = nearesttwo << 1; + if (nearesttwo >= n) + { + break; + } + } + int difference = nearesttwo - n; + + int finalMemSize = n + difference; + + int* arr_z = new int[finalMemSize]; + + for (int i = 0; i < finalMemSize; i++) + { + if (i < difference) + { + arr_z[difference] = 0; + continue; + } + arr_z[i] = idata[i - difference]; + } + + for (int i = 0; i < difference; i++) + { + arr_z[i] = 0; + } + for (int i = 0; i < n; i++) + { + arr_z[i + difference] = idata[i]; + } + + /* printf(" \n Array Before:"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + int d = ilog2(finalMemSize); + AllocateMemory(finalMemSize); + cudaMemcpy(dev_buf1, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + cudaDeviceSynchronize(); + for (int i = 1; i <= d; i++) + { + performScan << < fullBlocksPerGrid, blockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); + cudaDeviceSynchronize(); + std::swap(dev_buf1, dev_buf2); + } + + + cudaMemcpy(arr_z, dev_buf1, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + + /* printf(" \n Array After:"); + for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + } + printf("\n");*/ + printf("%3d ", arr_z[2046]); + printf("\n"); + printf("%3d ", arr_z[2048]); + for (int i = 0; i < n; i++) + { + odata[i] = arr_z[i + difference]; + } + cudaDeviceSynchronize(); + //rightshift + for (int i = n - 1; i >= 1; i--) + { + odata[i] = odata[i - 1]; + } + + + odata[0] = 0; + /*printf(" \n Array After:");*/ + /*for (int i = 0; i < finalMemSize; i++) + { + printf("%3d ", arr_z[i]); + }*/ + + /* printf("]\n"); + for (int i = 0; i < n; i++) + { + printf("%3d ", odata[i]); + }*/ + + + timer().endGpuTimer(); + } + } } From 0389b125ea83f768d03cecfbfa1d94153fada298 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Sun, 19 Sep 2021 20:50:23 -0400 Subject: [PATCH 04/19] thrust implemented --- src/main.cpp | 2 +- stream_compaction/thrust.cu | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index f1a1f49..cd22eb9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,7 +14,7 @@ #include "testing_helpers.hpp" //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 12; // feel free to change the size of array +const int SIZE = 1 << 11; // 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/thrust.cu b/stream_compaction/thrust.cu index 1def45e..f373424 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -22,6 +22,13 @@ namespace StreamCompaction { // 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::device_vectordv_in(idata, idata+n); + thrust::device_vectordv_out(n); + thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + + thrust::copy(dv_out.begin(), dv_out.end(), odata); + timer().endGpuTimer(); } } From 17e648681932573caa549f998b634cfdfa17dfbf Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Sun, 19 Sep 2021 21:12:53 -0400 Subject: [PATCH 05/19] Niave Updated --- stream_compaction/naive.cu | 48 +++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 1f3b5b0..dd31523 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -17,7 +17,7 @@ namespace StreamCompaction { // TODO: __global__ int* dev_buf1; int* dev_buf2; -#define blockSize 128 +#define blockSize 1024 __global__ void performScan(int d, int* buf1, int* buf2, int N) { @@ -39,6 +39,22 @@ namespace StreamCompaction { } + __global__ void ShiftRight(int* buf1, int* buf2, int N, int difference) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N - 1) + { + return; + } + if (index == 0) + { + buf2[index] = 0; + return; + } + buf2[index] = buf1[index + difference - 1]; + + } + void FreeMemory() { cudaFree(dev_buf1); cudaFree(dev_buf2); @@ -115,32 +131,10 @@ namespace StreamCompaction { std::swap(dev_buf1, dev_buf2); } - - cudaMemcpy(arr_z, dev_buf1, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - + ShiftRight << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_buf2, finalMemSize, difference); + cudaMemcpy(odata, dev_buf2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - /* printf(" \n Array After:"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - } - printf("\n");*/ - printf("%3d ", arr_z[2046]); - printf("\n"); - printf("%3d ", arr_z[2048]); - for (int i = 0; i < n; i++) - { - odata[i] = arr_z[i + difference]; - } - cudaDeviceSynchronize(); - //rightshift - for (int i = n - 1; i >= 1; i--) - { - odata[i] = odata[i - 1]; - } - - - odata[0] = 0; + /*printf(" \n Array After:");*/ /*for (int i = 0; i < finalMemSize; i++) { @@ -155,6 +149,8 @@ namespace StreamCompaction { timer().endGpuTimer(); + cudaDeviceSynchronize(); + FreeMemory(); } } } From 0154beb85dbe4b73d286fffcaa976657e913df82 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Mon, 20 Sep 2021 00:02:30 -0400 Subject: [PATCH 06/19] Work Efficient Fixed --- stream_compaction/efficient.cu | 349 ++++++++++++--------------------- 1 file changed, 127 insertions(+), 222 deletions(-) diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index cc80315..acac96b 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -4,34 +4,34 @@ #include "efficient.h" namespace StreamCompaction { - namespace Efficient { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } + namespace Efficient { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } #define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project - int* dev_buf; - int* dev_bufB; - int* dev_bufS; - int* dev_buftemp; - int* dev_bufAnswers; + int* dev_buf; + int* dev_bufloader; + int* dev_bufB; + int* dev_bufS; + int* dev_bufAnswers; #define blockSize 128 - __global__ void performUpSweep(int d, int* buf, int N) - { - int index = (blockIdx.x * blockDim.x) + threadIdx.x; + __global__ void performUpSweep(int d, int* buf, int N) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; int pow2_d = pow(2, d); int pow2_dplus1 = pow2_d * 2; - if (index + pow2_dplus1 - 1 > N-1) - { - return; - } + if (index + pow2_dplus1 - 1 > N - 1) + { + return; + } - if ((index + pow2_dplus1 - 1) % pow2_dplus1 == (pow2_dplus1-1)) + if ((index + pow2_dplus1 - 1) % pow2_dplus1 == (pow2_dplus1 - 1)) { buf[index + pow2_dplus1 - 1] += buf[index + pow2_d - 1]; } @@ -42,14 +42,14 @@ namespace StreamCompaction { return; } - } + } __global__ void performDownSweep(int d, int* buf, int N) { int index = (blockIdx.x * blockDim.x) + threadIdx.x; int pow2_d = pow(2, d); int pow2_dplus1 = pow2_d * 2; - if (index + pow2_dplus1 - 1> N -1) + if (index + pow2_dplus1 - 1 > N - 1) { return; } @@ -63,94 +63,77 @@ namespace StreamCompaction { } } - void FreeMemoryScan() { - cudaFree(dev_buf); - } - - void AllocateMemory(int n) - { - cudaMalloc((void**)&dev_buf, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); - cudaDeviceSynchronize(); - } - - void AllocateMemoryCompaction(int n) + void AllocateMemory(int n) { cudaMalloc((void**)&dev_buf, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); + cudaMalloc((void**)&dev_bufloader, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufloader failed!"); cudaMalloc((void**)&dev_bufB, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_bufB failed!"); cudaMalloc((void**)&dev_bufS, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_bufS failed!"); cudaMalloc((void**)&dev_bufAnswers, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); + checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); cudaDeviceSynchronize(); } - void FreeMemoryCompaction() { + void FreeMemory() { cudaFree(dev_buf); + cudaFree(dev_bufloader); cudaFree(dev_bufB); cudaFree(dev_bufS); cudaFree(dev_bufAnswers); } + __global__ void RightShiftAddZeros(int* buf,int *buf_loader, int N, int difference) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N - 1) + { + return; + } + if (index < difference) + { + buf[index] = 0; + return; + } + buf[index] = buf_loader[index-difference]; + } - /** - * 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 nearesttwo = 2; - - for (int i = 0; i < n; i++) + __global__ void RightShiftDeleteZeroes(int* buf, int* buf_loader, int N, int difference) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N - 1) { - nearesttwo = nearesttwo << 1; - if (nearesttwo >= n) - { - break; - } + return; } - int difference = nearesttwo - n; + buf[index] = buf_loader[index + difference]; + } - int finalMemSize = n + difference; + /** + * 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* arr_z = new int[finalMemSize]; + int nearesttwo = 1<> > (dev_buf, dev_bufloader, finalMemSize, difference); + + int d = ilog2ceil(finalMemSize); - for (int i = 0; i <= d -1; i++) + for (int i = 0; i <= d - 1; i++) { performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); } @@ -165,143 +148,83 @@ namespace StreamCompaction { } printf("\n");*/ - for (int i = d-1; i >=0 ; i--) + for (int i = d - 1; i >= 0; i--) { performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); } + RightShiftDeleteZeroes << < fullBlocksPerGrid, blockSize >> > (dev_bufloader, dev_buf, n, difference); + cudaMemcpy(odata, dev_bufloader, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + + timer().endGpuTimer(); - cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - //printf("\n Downsweep"); - // for (int i = 0; i < finalMemSize; i++) - // { - // printf("%3d ", arr_z[i]); - // } - // printf("\n"); - for (int i = 0; i < n; i++) - { - odata[i] = arr_z[i + difference]; - } + FreeMemory(); + } - //printf("]\n"); - //for (int i = 0; i < n; i++) - //{ - // printf("%3d ", odata[i]); - //} - timer().endGpuTimer(); + int* dev_buf2; + int* dev_bufloader2; + + void AllocateMemory2(int n) + { + cudaMalloc((void**)&dev_buf2, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); + cudaMalloc((void**)&dev_bufloader2, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufloader failed!"); + + } + + void FreeMemory2() { + cudaFree(dev_buf2); + cudaFree(dev_bufloader2); + } - FreeMemoryScan(); - } void scanWithoutTimer(int n, int* odata, const int* idata) { // TODO + int nearesttwo = 1 << ilog2ceil(n); - int nearesttwo = 2; - - for (int i = 0; i < n; i++) - { - nearesttwo = nearesttwo << 1; - if (nearesttwo >= n) - { - break; - } - } int difference = nearesttwo - n; - int finalMemSize = n + difference; - - int* arr_z = new int[finalMemSize]; - - for (int i = 0; i < finalMemSize; i++) - { - if (i < difference) - { - arr_z[difference] = 0; - continue; - } - arr_z[i] = idata[i - difference]; - } + int finalMemSize = nearesttwo; - int bp = idata[0]; - int fp = idata[n - 1]; - for (int i = 0; i < difference; i++) - { - arr_z[i] = 0; - } - for (int i = 0; i < n; i++) - { - arr_z[i + difference] = idata[i]; - } + AllocateMemory2(finalMemSize); + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + cudaMemcpy(dev_bufloader2, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + RightShiftAddZeros << < fullBlocksPerGrid, blockSize >> > (dev_buf2, dev_bufloader2, finalMemSize, difference); - /* for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - } - printf("\n");*/ int d = ilog2ceil(finalMemSize); - AllocateMemory(finalMemSize); - cudaMemcpy(dev_buf, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); - - dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); for (int i = 0; i <= d - 1; i++) { - performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); - } - - //dev_buf[finalMemSize-1] = 0; - /* cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - - printf("\n Upsweep"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); + performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf2, finalMemSize); } - printf("\n");*/ for (int i = d - 1; i >= 0; i--) { - performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); - } - - - cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - //printf("\n Downsweep"); - // for (int i = 0; i < finalMemSize; i++) - // { - // printf("%3d ", arr_z[i]); - // } - // printf("\n"); - for (int i = 0; i < n; i++) - { - odata[i] = arr_z[i + difference]; + performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf2, finalMemSize); } - //printf("]\n"); - //for (int i = 0; i < n; i++) - //{ - // printf("%3d ", odata[i]); - //} - - FreeMemoryScan(); + RightShiftDeleteZeroes << < fullBlocksPerGrid, blockSize >> > (dev_bufloader2, dev_buf2, n, difference); + cudaMemcpy(odata, dev_bufloader2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + FreeMemory2(); } - /** - * Performs stream compaction on idata, storing the result into odata. - * All zeroes are discarded. - * - * @param n The number of elements in idata. - * @param odata The array into which to store elements. - * @param idata The array of elements to compact. - * @returns The number of elements remaining after compaction. - */ - int compact(int n, int *odata, const int *idata) { + /** + * Performs stream compaction on idata, storing the result into odata. + * All zeroes are discarded. + * + * @param n The number of elements in idata. + * @param odata The array into which to store elements. + * @param idata The array of elements to compact. + * @returns The number of elements remaining after compaction. + */ + int compact(int n, int* odata, const int* idata) { int finalMemSize = n; - AllocateMemoryCompaction(finalMemSize); - - + AllocateMemory(finalMemSize); + + timer().startGpuTimer(); - // TODO + // TODO cudaMemcpy(dev_buf, idata, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); @@ -310,56 +233,38 @@ namespace StreamCompaction { Common::kernMapToBoolean << < fullBlocksPerGrid, blockSize >> > (finalMemSize, dev_bufB, dev_buf); //Copy bool value to new array to perform scan - int *arr_boolean = new int[finalMemSize]; + int* arr_boolean = new int[finalMemSize]; cudaMemcpy(arr_boolean, dev_bufB, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - /* printf("\n Bollean Result: \n"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_boolean[i]); - } - printf("\n");*/ - - //Create new array to store answers from scan + //Create new array to store answers from scan int* arr_scanResult = new int[finalMemSize]; scanWithoutTimer(finalMemSize, arr_scanResult, arr_boolean); - /* printf("\n Scan Result:\n"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_scanResult[i]); - } - printf("\n");*/ - - //Copy the scan answers to Dev_BufS to further process + //Copy the scan answers to Dev_BufS to further process cudaMemcpy(dev_bufS, arr_scanResult, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); int numElements = arr_scanResult[finalMemSize - 1]; - ///Remove this dont know why but dev_buf values are being replaced by scan values - cudaMalloc((void**)&dev_buftemp, finalMemSize * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_buftemp failed!"); - cudaMemcpy(dev_buftemp, idata, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); - Common::kernScatter << < fullBlocksPerGrid, blockSize >> > (finalMemSize, dev_bufAnswers, dev_buftemp, + Common::kernScatter << < fullBlocksPerGrid, blockSize >> > (finalMemSize, dev_bufAnswers, dev_buf, dev_bufB, dev_bufS); cudaMemcpy(odata, dev_bufAnswers, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - /* printf("\n Finals Result:"); - for (int i = 0; i < numElements; i++) - { - printf("%3d ", odata[i]); - } - printf("\n");*/ - timer().endGpuTimer(); - FreeMemoryCompaction(); + /* printf("\n Finals Result:"); + for (int i = 0; i < numElements; i++) + { + printf("%3d ", odata[i]); + } + printf("\n");*/ + timer().endGpuTimer(); + FreeMemory(); if (arr_boolean[finalMemSize - 1] == 1) { return numElements + 1; // Since indexing start from 0 } - return numElements; //if last element boolean is 0 its scan result include 1 extra sum counting for 0 index - } - } + return numElements; //if last element boolean is 0 its scan result include 1 extra sum counting for 0 index + } + } } From 34c0a67b32d650a360f93961e79f8905ae3258c5 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Mon, 20 Sep 2021 00:26:04 -0400 Subject: [PATCH 07/19] Fixed Naive --- stream_compaction/efficient.cu | 7 ++-- stream_compaction/naive.cu | 70 +++++++++++++++------------------- 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index acac96b..0dacee0 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -154,11 +154,12 @@ namespace StreamCompaction { } RightShiftDeleteZeroes << < fullBlocksPerGrid, blockSize >> > (dev_bufloader, dev_buf, n, difference); - cudaMemcpy(odata, dev_bufloader, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + cudaMemcpy(odata, dev_bufloader, sizeof(int) * n, cudaMemcpyDeviceToHost); timer().endGpuTimer(); FreeMemory(); + cudaDeviceSynchronize(); } int* dev_buf2; @@ -205,7 +206,7 @@ namespace StreamCompaction { } RightShiftDeleteZeroes << < fullBlocksPerGrid, blockSize >> > (dev_bufloader2, dev_buf2, n, difference); - cudaMemcpy(odata, dev_bufloader2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + cudaMemcpy(odata, dev_bufloader2, sizeof(int) * n, cudaMemcpyDeviceToHost); FreeMemory2(); } @@ -263,7 +264,7 @@ namespace StreamCompaction { { return numElements + 1; // Since indexing start from 0 } - + cudaDeviceSynchronize(); return numElements; //if last element boolean is 0 its scan result include 1 extra sum counting for 0 index } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index dd31523..b6859bc 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -17,6 +17,7 @@ namespace StreamCompaction { // TODO: __global__ int* dev_buf1; int* dev_buf2; + int* dev_bufLoader; #define blockSize 1024 __global__ void performScan(int d, int* buf1, int* buf2, int N) @@ -58,6 +59,7 @@ namespace StreamCompaction { void FreeMemory() { cudaFree(dev_buf1); cudaFree(dev_buf2); + cudaFree(dev_bufLoader); } void AllocateMemory(int n) @@ -66,9 +68,27 @@ namespace StreamCompaction { checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); cudaMalloc((void**)&dev_buf2, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + cudaMalloc((void**)&dev_bufLoader, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufLoader failed!"); cudaDeviceSynchronize(); } + __global__ void RightShiftAddZeros(int* buf, int* buf_loader, int N, int difference) + { + int index = (blockIdx.x * blockDim.x) + threadIdx.x; + if (index > N - 1) + { + return; + } + if (index < difference) + { + buf[index] = 0; + return; + } + buf[index] = buf_loader[index - difference]; + } + + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ @@ -77,52 +97,22 @@ namespace StreamCompaction { // TODO int power2 = 1; - int nearesttwo = 2; + int nearesttwo = 1 << ilog2ceil(n); - for (int i = 0; i < n; i++) - { - nearesttwo = nearesttwo << 1; - if (nearesttwo >= n) - { - break; - } - } int difference = nearesttwo - n; - int finalMemSize = n + difference; - - int* arr_z = new int[finalMemSize]; + int finalMemSize = nearesttwo; - for (int i = 0; i < finalMemSize; i++) - { - if (i < difference) - { - arr_z[difference] = 0; - continue; - } - arr_z[i] = idata[i - difference]; - } - - for (int i = 0; i < difference; i++) - { - arr_z[i] = 0; - } - for (int i = 0; i < n; i++) - { - arr_z[i + difference] = idata[i]; - } - /* printf(" \n Array Before:"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - } - printf("\n");*/ - int d = ilog2(finalMemSize); AllocateMemory(finalMemSize); - cudaMemcpy(dev_buf1, arr_z, sizeof(int) * finalMemSize, cudaMemcpyHostToDevice); + dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + cudaMemcpy(dev_bufLoader, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + RightShiftAddZeros << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_bufLoader, finalMemSize, difference); + + + int d = ilog2(finalMemSize); cudaDeviceSynchronize(); for (int i = 1; i <= d; i++) { @@ -131,8 +121,8 @@ namespace StreamCompaction { std::swap(dev_buf1, dev_buf2); } - ShiftRight << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_buf2, finalMemSize, difference); - cudaMemcpy(odata, dev_buf2, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); + ShiftRight << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_buf2, n, difference); + cudaMemcpy(odata, dev_buf2, sizeof(int) * n, cudaMemcpyDeviceToHost); /*printf(" \n Array After:");*/ From 629b0f4b2fbc635de377effe238965132cd88f46 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 09:43:50 -0400 Subject: [PATCH 08/19] Radix Sort Implemented --- src/main.cpp | 19 ++++- stream_compaction/RadixSort.cu | 148 +++++++++++++++++++++++++++++++++ stream_compaction/RadixSort.h | 13 +++ stream_compaction/efficient.cu | 9 +- stream_compaction/naive.cu | 24 +++--- stream_compaction/thrust.cu | 7 +- 6 files changed, 200 insertions(+), 20 deletions(-) create mode 100644 stream_compaction/RadixSort.cu create mode 100644 stream_compaction/RadixSort.h diff --git a/src/main.cpp b/src/main.cpp index cd22eb9..4107234 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,9 +12,10 @@ #include #include #include "testing_helpers.hpp" +#include //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 11; // 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]; @@ -52,7 +53,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, false); printCmpResult(SIZE, b, c); /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan @@ -65,7 +66,7 @@ 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, false); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); @@ -148,6 +149,18 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + printf("\n"); + printf("*****************************\n"); + printf("** Radix Sort **\n"); + printf("*****************************\n"); + + zeroArray(SIZE, c); + printDesc("Radix Sort"); + StreamCompaction::RadixSort::PerformGPUSort(SIZE,c, a ); + //printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(NPOT, c, true); + //printCmpResult(NPOT, b, c); + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; diff --git a/stream_compaction/RadixSort.cu b/stream_compaction/RadixSort.cu new file mode 100644 index 0000000..d473794 --- /dev/null +++ b/stream_compaction/RadixSort.cu @@ -0,0 +1,148 @@ +#include "RadixSort.h" +#include +#include +namespace StreamCompaction { + namespace RadixSort { + +#define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project + + int* dev_buf; + int* bufBit; + int* falseBuf; + int* trueBuf; + int* bufNotBits; + int* bufAnswer; +#define blockSize 128 + + + void AllocateMemory(int n) + { + cudaMalloc((void**)&dev_buf, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_buf failed!"); + cudaMalloc((void**)&bufBit, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufloader failed!"); + cudaMalloc((void**)&falseBuf, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufB failed!"); + cudaMalloc((void**)&trueBuf, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufS failed!"); + cudaMalloc((void**)&bufNotBits, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); + cudaMalloc((void**)&bufAnswer, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); + cudaDeviceSynchronize(); + } + + void FreeMemory() { + cudaFree(dev_buf); + cudaFree(bufBit); + cudaFree(falseBuf); + cudaFree(trueBuf); + cudaFree(bufNotBits); + cudaFree(bufAnswer); + } + + + __global__ void PopulateBits(int bitOrder, int* bufInputData, int* bufBit, int N) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index > N - 1) + { + return; + } + int mask = 1 << bitOrder; + int masked_num = bufInputData[index] & mask; + int thebit = masked_num >> bitOrder; + bufBit[index] = thebit; + } + + __global__ void PopulateNotBits(int *bitNotBits, const int* bufBits, int N) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index > N - 1) + { + return; + } + bitNotBits[index] = ~bufBits[index]; + } + + __global__ void CopyAnswerToInputBuf(int* BufAnswer, int* InputBuf, int N) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index > N - 1) + { + return; + } + InputBuf[index] = BufAnswer[index]; + } + + + __global__ void ComputeTArray(int* outputBuf, int *falseBuf, int totalFalses, int N) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index > N - 1) + { + return; + } + outputBuf[index] = index - falseBuf[index] + totalFalses; + } + + __global__ void PerformScatter(int* outputBuf, int* inputBuf, int* bitBuf, int*falseBuf, int *trueBuf, int N) + { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index > N - 1) + { + return; + } + if (bitBuf[index]) + { + outputBuf[index] = trueBuf[index]; + return; + } + outputBuf[index] = falseBuf[index]; + + } + + + /*void PerformNormalSort(int n, int* odata, const int* idata) + { + + }*/ + + + + void PerformGPUSort(int n, int* odata, const int* idata) + { + AllocateMemory(n); + cudaMemcpy(dev_buf, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + for (int i = 0; i < 6; i++) + { + PopulateBits << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, bufBit, n); + cudaDeviceSynchronize(); + PopulateNotBits << < fullBlocksPerGrid, blockSize >> > (bufNotBits, bufBit, n); + cudaDeviceSynchronize(); + + int* inputNotBits= new int[n]; + cudaMemcpy(inputNotBits, bufNotBits, n * sizeof(int), cudaMemcpyDeviceToHost); + Efficient::scan(n, odata, inputNotBits); + cudaMemcpy(falseBuf, odata, n * sizeof(int), cudaMemcpyHostToDevice); + + int TotalFalses = inputNotBits[n - 1] + odata[n - 1]; + ComputeTArray << < fullBlocksPerGrid, blockSize >> > (trueBuf, falseBuf, TotalFalses, n); + cudaDeviceSynchronize(); + PerformScatter << < fullBlocksPerGrid, blockSize >> > (bufAnswer, dev_buf, bufBit, falseBuf, trueBuf, n); + cudaDeviceSynchronize(); + CopyAnswerToInputBuf << < fullBlocksPerGrid, blockSize >> > (bufAnswer, dev_buf, n); + + } + + cudaMemcpy(odata, dev_buf, sizeof(int) * n, cudaMemcpyDeviceToHost); + for (int i = 0; i < n; i++) + { + odata[i]; + } + } + + } +} \ No newline at end of file diff --git a/stream_compaction/RadixSort.h b/stream_compaction/RadixSort.h new file mode 100644 index 0000000..b965364 --- /dev/null +++ b/stream_compaction/RadixSort.h @@ -0,0 +1,13 @@ +#pragma once +#include "common.h" +#include "efficient.h" + +namespace StreamCompaction { + namespace RadixSort { + //StreamCompaction::Common::PerformanceTimer& timer(); + + + //void PerformNormalSort(int n, int* odata, const int* idata); + void PerformGPUSort(int n, int* odata, const int* idata); + } +} \ No newline at end of file diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 0dacee0..b7a51e8 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -24,8 +24,8 @@ namespace StreamCompaction { __global__ void performUpSweep(int d, int* buf, int N) { int index = (blockIdx.x * blockDim.x) + threadIdx.x; - int pow2_d = pow(2, d); - int pow2_dplus1 = pow2_d * 2; + int pow2_d = 1 << d; + int pow2_dplus1 = 1 << (d + 1); if (index + pow2_dplus1 - 1 > N - 1) { return; @@ -47,8 +47,8 @@ namespace StreamCompaction { __global__ void performDownSweep(int d, int* buf, int N) { int index = (blockIdx.x * blockDim.x) + threadIdx.x; - int pow2_d = pow(2, d); - int pow2_dplus1 = pow2_d * 2; + int pow2_d = 1< N - 1) { return; @@ -154,6 +154,7 @@ namespace StreamCompaction { } RightShiftDeleteZeroes << < fullBlocksPerGrid, blockSize >> > (dev_bufloader, dev_buf, n, difference); + cudaDeviceSynchronize(); cudaMemcpy(odata, dev_bufloader, sizeof(int) * n, cudaMemcpyDeviceToHost); timer().endGpuTimer(); diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index b6859bc..c51d39c 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -18,7 +18,7 @@ namespace StreamCompaction { int* dev_buf1; int* dev_buf2; int* dev_bufLoader; -#define blockSize 1024 +#define blockSize 128 __global__ void performScan(int d, int* buf1, int* buf2, int N) { @@ -27,8 +27,9 @@ namespace StreamCompaction { { return; } - //int pow2_d = pow(2, d); - int pow2_dminus1 = pow(2, d - 1); + + //int pow2_dminus1 = std::round(pow(2, d - 1)); + int pow2_dminus1 = 1 <<(d - 1); if (index >= pow2_dminus1) { buf2[index] = buf1[index - pow2_dminus1] + buf1[index]; @@ -52,7 +53,7 @@ namespace StreamCompaction { buf2[index] = 0; return; } - buf2[index] = buf1[index + difference - 1]; + buf2[index] = buf1[index - 1]; } @@ -80,12 +81,12 @@ namespace StreamCompaction { { return; } - if (index < difference) + if (index > (N-1) - difference) { buf[index] = 0; return; } - buf[index] = buf_loader[index - difference]; + buf[index] = buf_loader[index]; } @@ -108,20 +109,23 @@ namespace StreamCompaction { dim3 fullBlocksPerGrid((finalMemSize + blockSize - 1) / blockSize); + dim3 threadsperblockSize(blockSize); + + cudaMemcpy(dev_bufLoader, idata, sizeof(int) * n, cudaMemcpyHostToDevice); - RightShiftAddZeros << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_bufLoader, finalMemSize, difference); + RightShiftAddZeros << < fullBlocksPerGrid, threadsperblockSize >> > (dev_buf1, dev_bufLoader, finalMemSize, difference); int d = ilog2(finalMemSize); cudaDeviceSynchronize(); for (int i = 1; i <= d; i++) { - performScan << < fullBlocksPerGrid, blockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); + performScan << < fullBlocksPerGrid, threadsperblockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); cudaDeviceSynchronize(); std::swap(dev_buf1, dev_buf2); } - - ShiftRight << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_buf2, n, difference); + + ShiftRight << < fullBlocksPerGrid, blockSize >> > (dev_buf1, dev_buf2, finalMemSize, difference); cudaMemcpy(odata, dev_buf2, sizeof(int) * n, cudaMemcpyDeviceToHost); diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index f373424..fc2d00e 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -18,13 +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::host_vectorhstIn(idata, idata + n); + thrust::device_vectordv_in = hstIn; + thrust::device_vectordv_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::device_vectordv_in(idata, idata+n); - thrust::device_vectordv_out(n); thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); thrust::copy(dv_out.begin(), dv_out.end(), odata); From 1c51185a39f1e29f940d7946e59eed0ec1d3c9a4 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 10:22:36 -0400 Subject: [PATCH 09/19] Working Implementation --- src/main.cpp | 6 +++--- stream_compaction/efficient.cu | 17 +---------------- stream_compaction/naive.cu | 1 - 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4107234..b6c6088 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,7 @@ #include //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 20; // feel free to change the size of array +const int SIZE = 1 << 28; // 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]; @@ -154,9 +154,9 @@ int main(int argc, char* argv[]) { printf("** Radix Sort **\n"); printf("*****************************\n"); - zeroArray(SIZE, c); + /* zeroArray(SIZE, c); printDesc("Radix Sort"); - StreamCompaction::RadixSort::PerformGPUSort(SIZE,c, a ); + StreamCompaction::RadixSort::PerformGPUSort(SIZE,c, a );*/ //printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(NPOT, c, true); //printCmpResult(NPOT, b, c); diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index b7a51e8..a0f6ac6 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -138,16 +138,7 @@ namespace StreamCompaction { performUpSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); } - //dev_buf[finalMemSize-1] = 0; - /* cudaMemcpy(arr_z, dev_buf, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - - printf("\n Upsweep"); - for (int i = 0; i < finalMemSize; i++) - { - printf("%3d ", arr_z[i]); - } - printf("\n");*/ - + for (int i = d - 1; i >= 0; i--) { performDownSweep << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, finalMemSize); @@ -252,12 +243,6 @@ namespace StreamCompaction { cudaMemcpy(odata, dev_bufAnswers, sizeof(int) * finalMemSize, cudaMemcpyDeviceToHost); - /* printf("\n Finals Result:"); - for (int i = 0; i < numElements; i++) - { - printf("%3d ", odata[i]); - } - printf("\n");*/ timer().endGpuTimer(); FreeMemory(); diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index c51d39c..dd199b2 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -117,7 +117,6 @@ namespace StreamCompaction { int d = ilog2(finalMemSize); - cudaDeviceSynchronize(); for (int i = 1; i <= d; i++) { performScan << < fullBlocksPerGrid, threadsperblockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); From e0c209c473dd561759474c1f8bee22608e916446 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 12:00:12 -0400 Subject: [PATCH 10/19] Updated --- src/main.cpp | 4 ++-- stream_compaction/cpu.cu | 41 +--------------------------------- stream_compaction/efficient.cu | 3 +-- stream_compaction/naive.cu | 6 ++--- 4 files changed, 7 insertions(+), 47 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b6c6088..f9b8666 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -149,10 +149,10 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); - printf("\n"); + /* printf("\n"); printf("*****************************\n"); printf("** Radix Sort **\n"); - printf("*****************************\n"); + printf("*****************************\n");*/ /* zeroArray(SIZE, c); printDesc("Radix Sort"); diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index ba81312..1643c05 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -68,50 +68,11 @@ namespace StreamCompaction { int *ans = new int[n]; int finalIndex = 0; -#pragma region Powerof2 - - //for (int i = 0; i < n; i++) - //{ - // if (idata[i] == 0) - // { - // arr_b[i] = 0; - // continue; - // } - // arr_b[i] = 1; - //} - //arr_c[0] = 0; - //for (int i = 1; i < n; i++) - //{ - // arr_c[i] = arr_b[i - 1] + arr_c[i - 1]; - //} - - //for (int i = 0; i < n; i++) - //{ - // if (arr_b[i] == 0) - // { - // continue; - // } - // int index = arr_c[i]; - // odata[index] = idata[i]; - // finalIndex = index; - //} -#pragma endregion - // TODO #pragma region NonPower2 int *arr_z = new int[n]; - int power2 = 1; - int nearesttwo = 2; - - for (int i = 0; i < n; i++) - { - nearesttwo = nearesttwo << 1; - if (nearesttwo >= n) - { - break; - } - } + int nearesttwo = 1 << ilog2ceil(n); int difference = nearesttwo - n; diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index a0f6ac6..caf8c8f 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -19,7 +19,7 @@ namespace StreamCompaction { int* dev_bufS; int* dev_bufAnswers; -#define blockSize 128 +#define blockSize 512 __global__ void performUpSweep(int d, int* buf, int N) { @@ -250,7 +250,6 @@ namespace StreamCompaction { { return numElements + 1; // Since indexing start from 0 } - cudaDeviceSynchronize(); return numElements; //if last element boolean is 0 its scan result include 1 extra sum counting for 0 index } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index dd199b2..6bb9d06 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -18,7 +18,7 @@ namespace StreamCompaction { int* dev_buf1; int* dev_buf2; int* dev_bufLoader; -#define blockSize 128 +#define blockSize 512 __global__ void performScan(int d, int* buf1, int* buf2, int N) { @@ -66,9 +66,9 @@ namespace StreamCompaction { void AllocateMemory(int n) { cudaMalloc((void**)&dev_buf1, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + checkCUDAErrorWithLine("cudaMalloc dev_buf1 failed!"); cudaMalloc((void**)&dev_buf2, n * sizeof(int)); - checkCUDAErrorWithLine("cudaMalloc dev_vel2 failed!"); + checkCUDAErrorWithLine("cudaMalloc dev_buf2 failed!"); cudaMalloc((void**)&dev_bufLoader, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_bufLoader failed!"); cudaDeviceSynchronize(); From b19f557dec1a1ce64dfd5aa16cd597ad52645464 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 14:32:45 -0400 Subject: [PATCH 11/19] Radix Sort Tested and Implemented --- src/main.cpp | 55 +++++++++++++++++++++++++------- stream_compaction/CMakeLists.txt | 2 ++ stream_compaction/RadixSort.cu | 53 ++++++++++++++++++++++-------- stream_compaction/RadixSort.h | 4 +-- 4 files changed, 86 insertions(+), 28 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f9b8666..d8fe17e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,14 +12,15 @@ #include #include #include "testing_helpers.hpp" -#include +#include //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 28; // feel free to change the size of array +const int SIZE = 1 << 18; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = 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 @@ -97,6 +98,46 @@ int main(int argc, char* argv[]) { //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); + printf("\n"); + printf("*****************************\n"); + printf("** Radix Sort **\n"); + printf("*****************************\n"); + + zeroArray(SIZE, d); + printDesc("Radix Sort(power-of-two): Thrust"); + StreamCompaction::RadixSort::PerformThrustSort(SIZE, d, a); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, a, false); + //printArray(SIZE, d, false); + + + zeroArray(SIZE, c); + printDesc("Radix Sort(power-of-two): My Implementation"); + StreamCompaction::RadixSort::PerformGPUSort(SIZE, c, a); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, a, false); + //printArray(SIZE, c, false); + printCmpResult(SIZE, d, c); + + + zeroArray(NPOT, d); + printDesc("Radix Sort(non-power-of-two): Thrust"); + StreamCompaction::RadixSort::PerformThrustSort(SIZE, d, a); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, a, false); + //printArray(SIZE, d, false); + + + zeroArray(NPOT, c); + printDesc("Radix Sort(non-power-of-two): My Implementation"); + StreamCompaction::RadixSort::PerformGPUSort(SIZE, c, a); + printElapsedTime(StreamCompaction::RadixSort::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, a, false); + //printArray(SIZE, c, false); + printCmpResult(NPOT, d, c); + + + printf("\n"); printf("*****************************\n"); printf("** STREAM COMPACTION TESTS **\n"); @@ -149,17 +190,7 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); - /* printf("\n"); - printf("*****************************\n"); - printf("** Radix Sort **\n"); - printf("*****************************\n");*/ - /* zeroArray(SIZE, c); - printDesc("Radix Sort"); - StreamCompaction::RadixSort::PerformGPUSort(SIZE,c, a );*/ - //printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); - //printCmpResult(NPOT, b, c); system("pause"); // stop Win32 console from closing on exit delete[] a; diff --git a/stream_compaction/CMakeLists.txt b/stream_compaction/CMakeLists.txt index 567795b..4bcc9e9 100644 --- a/stream_compaction/CMakeLists.txt +++ b/stream_compaction/CMakeLists.txt @@ -4,6 +4,7 @@ set(headers "naive.h" "efficient.h" "thrust.h" + "RadixSort.h" ) set(sources @@ -12,6 +13,7 @@ set(sources "naive.cu" "efficient.cu" "thrust.cu" + "RadixSort.cu" ) list(SORT headers) diff --git a/stream_compaction/RadixSort.cu b/stream_compaction/RadixSort.cu index d473794..5c212f5 100644 --- a/stream_compaction/RadixSort.cu +++ b/stream_compaction/RadixSort.cu @@ -1,8 +1,16 @@ #include "RadixSort.h" #include #include +#include +#include namespace StreamCompaction { namespace RadixSort { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } #define checkCUDAErrorWithLine(msg) checkCUDAError(msg, __LINE__) // We can use defines provided in this project @@ -11,8 +19,9 @@ namespace StreamCompaction { int* falseBuf; int* trueBuf; int* bufNotBits; + int* bufScatter; int* bufAnswer; -#define blockSize 128 +#define blockSize 512 void AllocateMemory(int n) @@ -27,6 +36,8 @@ namespace StreamCompaction { checkCUDAErrorWithLine("cudaMalloc dev_bufS failed!"); cudaMalloc((void**)&bufNotBits, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); + cudaMalloc((void**)&bufScatter, n * sizeof(int)); + checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); cudaMalloc((void**)&bufAnswer, n * sizeof(int)); checkCUDAErrorWithLine("cudaMalloc dev_bufAnswers failed!"); cudaDeviceSynchronize(); @@ -38,6 +49,7 @@ namespace StreamCompaction { cudaFree(falseBuf); cudaFree(trueBuf); cudaFree(bufNotBits); + cudaFree(bufScatter); cudaFree(bufAnswer); } @@ -62,17 +74,22 @@ namespace StreamCompaction { { return; } - bitNotBits[index] = ~bufBits[index]; + if (bufBits[index] == 0) + { + bitNotBits[index] = 1; + return; + } + bitNotBits[index] = 0; } - __global__ void CopyAnswerToInputBuf(int* BufAnswer, int* InputBuf, int N) + __global__ void CopyAnswerToInputBuf(int* BufAnswer, int* ScatterBuffer, int* InputBuf, int N) { int index = threadIdx.x + (blockIdx.x * blockDim.x); if (index > N - 1) { return; } - InputBuf[index] = BufAnswer[index]; + BufAnswer[ScatterBuffer[index]] = InputBuf[index]; } @@ -103,10 +120,19 @@ namespace StreamCompaction { } - /*void PerformNormalSort(int n, int* odata, const int* idata) + void PerformThrustSort(int n, int* odata, const int* idata) { + thrust::host_vectorhstIn(idata, idata + 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::sort(hstIn.begin(), hstIn.end()); + + thrust::copy(hstIn.begin(), hstIn.end(), odata); - }*/ + timer().endGpuTimer(); + } @@ -116,6 +142,7 @@ namespace StreamCompaction { cudaMemcpy(dev_buf, idata, sizeof(int) * n, cudaMemcpyHostToDevice); dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + timer().startGpuTimer(); for (int i = 0; i < 6; i++) { PopulateBits << < fullBlocksPerGrid, blockSize >> > (i, dev_buf, bufBit, n); @@ -131,17 +158,15 @@ namespace StreamCompaction { int TotalFalses = inputNotBits[n - 1] + odata[n - 1]; ComputeTArray << < fullBlocksPerGrid, blockSize >> > (trueBuf, falseBuf, TotalFalses, n); cudaDeviceSynchronize(); - PerformScatter << < fullBlocksPerGrid, blockSize >> > (bufAnswer, dev_buf, bufBit, falseBuf, trueBuf, n); + PerformScatter << < fullBlocksPerGrid, blockSize >> > (bufScatter, dev_buf, bufBit, falseBuf, trueBuf, n); + cudaDeviceSynchronize(); + CopyAnswerToInputBuf << < fullBlocksPerGrid, blockSize >> > (bufAnswer, bufScatter, dev_buf, n); + cudaDeviceSynchronize(); + std::swap(dev_buf, bufAnswer); cudaDeviceSynchronize(); - CopyAnswerToInputBuf << < fullBlocksPerGrid, blockSize >> > (bufAnswer, dev_buf, n); - } - + timer().endGpuTimer(); cudaMemcpy(odata, dev_buf, sizeof(int) * n, cudaMemcpyDeviceToHost); - for (int i = 0; i < n; i++) - { - odata[i]; - } } } diff --git a/stream_compaction/RadixSort.h b/stream_compaction/RadixSort.h index b965364..ae50e37 100644 --- a/stream_compaction/RadixSort.h +++ b/stream_compaction/RadixSort.h @@ -4,10 +4,10 @@ namespace StreamCompaction { namespace RadixSort { - //StreamCompaction::Common::PerformanceTimer& timer(); + StreamCompaction::Common::PerformanceTimer& timer(); - //void PerformNormalSort(int n, int* odata, const int* idata); + void PerformThrustSort(int n, int* odata, const int* idata); void PerformGPUSort(int n, int* odata, const int* idata); } } \ No newline at end of file From f980071c8a5c92d26131f1e03dcf1912a819054d Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 15:13:21 -0400 Subject: [PATCH 12/19] Updated Readme --- README.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e38ddb..e17cb46 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,22 @@ 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) +* Shubham Sharma + * [LinkedIn](www.linkedin.com/in/codeshubham), [personal website](https://shubhvr.com/). +* Tested on: Windows 10, i7-9750H @ 2.26GHz, 16GB, GTX 1660ti 6GB (Personal Computer). +*GPU Compute Capability: 7.5 -### (TODO: Your README) +## Stream Compaction +This project involves +- CPU version of Scan, +- CPU version of Compact without using the Scan algorithm, +- CPU version of Compact with Scan, +- Naive version of Scan, +- Work-efficient version of Scan, and +- Work-efficient version of Compact that used the work-efficient Scan's code. -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +The three cpu calculations are serialized; no multi-threading was consolidated. We have used simple cpu scan and compaction to compare the results with the GPU parallelised algorithm implementation. All the results are then compared. Results of CUDA's Thrust library are also used to compare the execution times of each implementation. +## Performance Analysis +The projects implements both CPU and GPU timing functions as a performance timer class to conveniently measure the time cost. `std::chrono` is used, to provide CPU high-precision timing and CUDA event to measure the CUDA performance. +I have collected the data across 8 executions with different array sizes to collect the data. The program generates a new array of random values with each execution, where the size of array is customisable. I have varied the size of the arrays by powers of two, starting from 2^6^ all the wai to 2^28^. The program also executes each algorithm for arrays of size "non- power of two" which are generated truncating the "power of two" arrays. \ No newline at end of file From 65791a06c801e8819bb2ff5c069752920b82b225 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 18:29:28 -0400 Subject: [PATCH 13/19] Removed cudaSync from Naive --- src/main.cpp | 2 +- stream_compaction/naive.cu | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d8fe17e..882819b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,7 @@ #include //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 18; // 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/naive.cu b/stream_compaction/naive.cu index 6bb9d06..3b5d4c0 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -120,7 +120,7 @@ namespace StreamCompaction { for (int i = 1; i <= d; i++) { performScan << < fullBlocksPerGrid, threadsperblockSize >> > (i, dev_buf1, dev_buf2, finalMemSize); - cudaDeviceSynchronize(); + //cudaDeviceSynchronize(); std::swap(dev_buf1, dev_buf2); } From b4caf00b573f1e4afa69b83835e9a87205a12390 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 19:39:57 -0400 Subject: [PATCH 14/19] Updated Readme --- README.md | 22 +++++++++++++++++++++- img/18.PNG | Bin 0 -> 45445 bytes img/22.PNG | Bin 0 -> 44751 bytes img/24.PNG | Bin 0 -> 45322 bytes img/26.PNG | Bin 0 -> 45160 bytes img/28.PNG | Bin 0 -> 49758 bytes img/2power_10.PNG | Bin 0 -> 44891 bytes img/2power_12.PNG | Bin 0 -> 44021 bytes img/2power_6.PNG | Bin 0 -> 44328 bytes img/Radix Sort.PNG | Bin 0 -> 53412 bytes src/main.cpp | 2 +- 11 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 img/18.PNG create mode 100644 img/22.PNG create mode 100644 img/24.PNG create mode 100644 img/26.PNG create mode 100644 img/28.PNG create mode 100644 img/2power_10.PNG create mode 100644 img/2power_12.PNG create mode 100644 img/2power_6.PNG create mode 100644 img/Radix Sort.PNG diff --git a/README.md b/README.md index e17cb46..6419685 100644 --- a/README.md +++ b/README.md @@ -21,4 +21,24 @@ The three cpu calculations are serialized; no multi-threading was consolidated. ## Performance Analysis The projects implements both CPU and GPU timing functions as a performance timer class to conveniently measure the time cost. `std::chrono` is used, to provide CPU high-precision timing and CUDA event to measure the CUDA performance. -I have collected the data across 8 executions with different array sizes to collect the data. The program generates a new array of random values with each execution, where the size of array is customisable. I have varied the size of the arrays by powers of two, starting from 2^6^ all the wai to 2^28^. The program also executes each algorithm for arrays of size "non- power of two" which are generated truncating the "power of two" arrays. \ No newline at end of file +I have collected the data across 8 executions with different array sizes to collect the data. The program generates a new array of random values with each execution, where the size of array is customisable. I have varied the size of the arrays by powers of two, starting from 2^6^ all the wai to 2^28^. The program also executes each algorithm for arrays of size "non- power of two" which are generated truncating the "power of two" arrays. + + + +## Scan Runtime Analysis +The performance of the four scan functions is graphed below. +![Scan Runtime Analysis](img/3.2.PNG) + + + +- CPU Scan vs Other : From the graph above we can see that for array of smaller sizes the CPU implementation is way better than GPU Scan implementations but as the size of array increases the performance gap starts decreasing. This can be attributed toward the serialized algorithm/ implementation for CPU compared to the parallel implementation on the GPU. At some size of an array the GPU implementation would definitely have crossed over CPU's but, Unfortunately my GPU ran out of memory before i could reach that point. +- Naive vs Work Efficient : Throughout the executions of different sizes of Arrays the Naive Implementation performed consistently better than the Work Efficient. This is due to the fact that + - Even though it looks like we have limited the number of active threads while performing "Upsweeep" and "Downsweep" the threads which are not doing anything have to wait for the other active threads in the warp to finish to become available again. + - Those idle threads cant be utilised by the GPU to perform any other tasks in the same depth of an upsweep or downsweep thereby decreasing our Parallelism. + +## Radix Sort (Extra Credit) +I have implemented "Parallel" radix sort which effectively work on compare bits of a decimal number by converting them to binary. This process starts by comparing least significant bit and continues until we have reached the most significant bit. +To check the authenticity of my implementation, I have compared results from mine to CUDA's Thrust::sort results. I tested it from 2^6^ size arrays upto 2^26^ where it passed on all the scenario's thereby validating my implementation. A screenshot of my result is shown below. An array of size 2^18^ is used. + +## Blooper +Apparently on the GPU side function: pow(2,12) was returning a value of 4027 which is super absurd. I fixed it by using bitwise opertaion 1<<12 which gave me the expected result 4028. \ No newline at end of file diff --git a/img/18.PNG b/img/18.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4ebb5b4e5a55db7d10ea4e8bbcfdb4f921e4d298 GIT binary patch literal 45445 zcmc$`d0bLy|36GqQ`59KW2NOfm1$OHmPx6}l%=Ang}Iaq6_uF_nGr4s&9qp#C2E=* zQ=;Zd?mM(7h5JnpPe&A6R^I&N_QJb;$F@A; z`ZPT3hU>vNo3jRXT1#qv6H7wjQOxfG3@!v5sraf=@Ng>G!a=)_!hjy#>`hAf4g~sm z-2mtk=zuQN7F3d~Binpse4B>w%Yot;WFVzL<1y1P*i65)WK{P*%eK_|Z;0jGR9^Qilb)T6P2` z6^cy_cfu3D!l8axvZ`xE#26VzVL?<1rHFMNr96eMm9s>=#1sWarK}vmVG7w4tiDPi z$Ew_D)t?2Pj|6!XRKzBD0dA>KE#8&JCFujb3hY8VZVR2X>r-ev5zC{%c zDPrIqqMcFhZI>LR`4yvzHPFH>(N&|X`5U05agk{yS06&*pcraE=Y-=#bHlsS#MYh2 zD;n~R=Hgivf6z|4ujHs&6Vur zZ|HZhu!O~!Gjm(rO8Uy#3!S-khwWlK=bEDr0mx4gy)gpzh5!A3ZyJ5@A zRXkC0&tBsab(hrVyW0j<;d^wVDzsueR4E>cmoFqaX?_r3bZPFu_lWLM%5r!&8laQ2 z#WJ~H($EI5 ziSJ1lA0l@jcQiVt(m+5biJ>;YIlxhlFfF__%IE~XdYnQ|vnmw&+Gba|Lj%GU;aM3e z1Bwp2b1wu|biS7#Kku3@ zL>>Sx&qtCaham#?yLse)d<-@~3$3LSZy2XwSl%^YkILJ`Q#pi9_&*1=G$JEKHNE)3 z;*D-oL)NNmw5x6$1kT{`IPug>ju8K^Z8$6DXr6!zZ&!sZeBpyQ#-+U=4Y=}Id5fd> z=DvsjPaf7ZsN>kqJt`TGGQp9F2%)QiHbz-Ik!!oIA@KOcA+BmN93A!Hmp+8TDT!HM zGm>j|sdy9ui-&8FZzm~cZG{z~Vv$0&RalG1k}w6Nm?>t9pZUo1=U$2qUVo0|a(_C7 z7#ba`|3fk-fx=LIJ|-YBmEL8ld)6v_3jC5}ozD#=<%UAQAb_KlF4tm|nr3?GQ83rA z=$9s#qp%(8g#1*$m}6eJiP7Jm8C|nfgC{aV)`rPEyepuGB2K1jX4nn; zN%r-xqFHI+`N}rTgpmm?Yo97okyhcEs5;-g@`0!e(x_-HCgGe%p^P(9==LZEWy z5X;m{d`aYw;-~tQCfNT(xtTqm)0j%rcz66h#Majhuh_2jug>@4Qq< zZxJ%!*KQ*6NDj-(tW~8p zq=9=zd#A7x4$rY{KqZyNh(~SSO5^4q0?pC3>*8u9Qgvw}l&hdYtLT zKfK>!8%e(D2&Gs2DAw)^E_Avye(EM)3EdSDij5ZvUHuNInv^u>fO;EJo$_(Niq8%6 z36tMqz*S{NbXgDvLr+(c;HsmS!Cky-3aFo0()fGFJcLd=xG7bl$$61;;6Z(YxAYmY zN`C+9&yeR4Kbzx;Mgi3%oaO2PFa_{-^kwLRU>R7UT?yA=+MIk7L5(zS5RO;WurDqPPoa$jJTkrlRtGDD%G`=TF7DqJS zHD3zV(`29D0*MNnsDVe^VD4}J<#f~R>mCxPuX?R^!IgcTcRX9)POv(d)?vzk8KEzn z@VY@ks^d@Zd8>3Hsh)ZIiAv1KoGw*+2knm>7F{ZDjU43Yn&2LJ3UQQ3g&GN61~JGJ ziIzYEl+PJ`F}oF2H7RR$|6wbie;u=jqMC{?FE?J3hJ2)PxL+iEdQw-=ZuVU2uc%U* z1CL^Rk!mZ0bMH50peq5#X5$8YdqxGwR?%_IEEUODwR~LUW`nCIlyYxWVMu79>fR3O z(g+ZAQV~4_xelNLoEq@|0zSCO+-lrR3EY+^nOF4U?f^5AGG~^d0(y4i@#0EKi2aWR zm5)A^Xz>Xd3j)=t;bHQh`3G@Pgz7hx!DXP2J_dPW?N`1%3bh$_50=zHAfR07{3IB^#M4bM2-`vf36#BsM6!WrL!a z>M`{YAw*DWw%wc-U$RQ>89jO7%#^@OwPFwo0U=+ zW?`6D+Hzqa-ZY2AR9oq@fndW5Mkbf@-$Box9ND;Y(zeWW&c4-~vQ`MKc*I?~^7G}< z;Y4Iv)J5;}UWSh!Fme8JVD@}yY}}82n-bv`jjAU--m}cicssuP?IoAUxYA{m>pS_?B`69hU z7R@#xb@n>BzxFJ&{ndNnjJ#~>1T;q*e%>&qq2wg4NBQ#AB+v*5^amF>ID0vZyl!&a zc00)vqUk`b!D$44!`LwyJ%Mzok3^##AOD;&MuaJGI|vC;$D_rOZ)B6r{pA*5hyTuPtV~c!>?G@tnMq=H~WXA&n!V+jeXfY zYnhyxF602GP><8CHYVr$}4#k$;FrnXCMg3n2%r zUe5M&i0Ti&+n6i^``$-EA5Iyd)TihSuTdA3KHkmLxO7xk3xdODm2FHuW2H=z7|A8m zUHS#qK8<<1$WrnQQa7$G}+-(+3^D`v$f2 zKMm^7jNq4!mTD+|hS@j&+}C-a_tNg@RiU?!QHJgfh2JuF(Pk%17d!7YuvfRQ{yAYU zzW6OKVqa|At%Dw@U3dF8u8kvrA!UDPvK{2jlG+T@arykXE71L09u@d*H$mZyYq&|+ zZiepoi85ezk!d6l*l&cU(`mvejui|hMNZ}R@p-cH4EPAgZLpV+ccN_2lwFz{{C&T0 z6$ebCCz7zi^hAe*;I4h3uT7hc_hTb1)YrX(V^YtbG}jm_>Z;pbi{E5wliO6ey*6&w zz$KNtw^RLy1C54G8^S&d8_YW5J&-QC6K|5m+PEUXC>6|ILz|QKQ#|Iy5d!v)?csr2 z`L!HY*f`o1H=`X^cm*;?x@X@S)QuW8D!_^`G#|$GZaQ1Uf2d*vYoQ_tuEnY@wps!~ zn{d*vpH#~H?q(>-)sb@{zs7Iw_3xLq<$34|Uit58rykMLoWEWc@;a72_^V~?wT=#a z&l+}PY!#)5t|bWFeArzPx3YL-S;y?@dwI=|GqsOUh0%QiC%y@zQIi<)zg8Pl1l}-p36ZAVKXTf?_>Ra zuE(ya_7cY(`*6m=pD)hSHL}Sq`-wxnBf1EkyvrZn7JP=wKlC=AjP>v>m5w!yqvG4X z>`1ywBUxhiFWgRKR|3un*5Hq=jVPzhBB1VvjOP4b6|xSoHlsF`w}sOznj7Nyg;IDC ziT9E(7-b%SNQ0OB$}+~e4W2i>jH>tr z1G*C(MB1R5NGDi^X3dzVZRF49?GI+5em~rrERd1{K9yRej@Nrgt{g^9y;&7)Q#)u* zI~5!^53jBc+Re|p$VZPdXh8|yRp%LJpp%w0{rPz`@OIwNZRg7Ennl^yu}R?~SQm_~!1m37`I#S={>sY4_jvBL(EX@3x_f{JABn{E zb@Ac$iS-E`E74KjxTi}%2nWaCtO~LFS7o^loW%yKeXN6gqeV0Sp!hR;p#l6i8%;>AV`1CISeUIwvf%HOG);!|e z5Fgcz4z`5s{H1)Q&$S9sv)pcAIVQu zO5qv-Tw`k?`^D3$9Jn{Fzy?<=l#sG<)eX@|d2K=>DGNR#*U!}V4!Xj+!u_aI0)dYR zar1T!GdLWkwu{c)w28tOj!kex3Wlmjp)be8(-`RMyGS>Qrwo6~F+ZoS05^M@TyU-Q zGq7b9J5N1c7uXRq^%nJv))PqrlLsW;aal+c_4ZyFB$R}_XPoM!yFz1I*t+h!)Y>rR zPf=LPMdkN5WVQrSuE4cVP+ZoVu6oUne?Lg>=QJdk#D&QiaH*B>&`@4Ns0pInHdiqs zo@X~U{Kj8}z>g$zhkfCr;x7t0StW%xskRbG&U|4~ip@!{1Ko~}7u9dyPcphL4}iLM z`X@mVE)9Dk*fCQdrtg+JqgHf52{s>JuR78y1%+&abLA$MoS0Bo1zPis|2$=T>@-8M zTLW+HSA>Zjm#Z&jGY{czqLj>W7I71RIy(^aU6i*WMU-^7Br;NfGax4@rWu)6cQGy3 zcFh|pxcW@f0i`bE2?P6f6N@j2IHnZ0y^kw1J*QJVo5VlJlfs)-N=~2?Cg*8c<`&~M z>%0u_kF3^)_8tzsMgk8Xcp@;^Z*#%*QuNoO_joT>yz)6-6GuWRHEwZYl-g_=Ug_Gv z@a%pUJU{|p?jk+jXEP&7cqf4GSDl$w!;zPB5)0DdPh0{hhg30a?W$@;c!6C4los8_ zRj^M~A%7SXpdKj)7@d(wpJC+y--O+0=`WuW60xN^3c1D@vQY`1!0`mto5?@-SU@L} zZ?Am!_>F0@;qjzj?uhIl>k%32My_zbpVquEO0v+E{Gxxnr8KfOjW7Az9fj#E=GlH#JlnekjZ*Nnec=f>Y-+8aDsvtZP0p!S`WxiAt~YGm1f4WE zzIy-tS6qLpx?yPGE1H_SSyB@e=O7gx?x*ZgHmmjAvm1KNj;dnWawv@|Z4xOZIDTs% z`1v0-gSv+(7kee98&x4PZ7M~mG~_CU991Pm<;^7N=q;5==i9mBglG+}v^IgHiE|1n z@a4Umt#M`>MUy&Sh3m-Vdd84Q1+rf?GnDDY5B>#lvQwxH+|8b&KgJ$GzM4+b%*@D0 zpA4bGZv1lCt59lj+W8DOq<#6hlP84s(pwCDxJph|N;D@_kGPEyCucdH5b|%54`bP? zDLzCgv9wSvmvTB)&H}_(xa^n;jJ)S3vl?ZtfBmasn6G;uc{C@cG$O33$^W&ubRaF4 zz{(w?n%Q$c=1D1h!7-TQ0yw^k1}@d2%KRK4lI!jeug__KfytP*Q+501B40dk?>}hc zZ~ldPhr&dZ=_R0#*}yzsaF5<-HCy6__X52z0-$!z=AmuFf{)yV{k~4lB&W24b<-(Y z@rkzKm`UU%FC4-?bVZ<`*06+9eGX+`vOpVY0BzL#lQxPv#R=7{NNg~`9NFH!-i5Xa z{fWBFN1%DC(TB$=8i_}GVFa2K@)Mu~YN8W~<_4J3qnAHC412oKV)md}8#Kw%9|0S5 zTzzR+JSu5WJp9$2KPecVx8P4Dj#)x0sYo0~B3B9nYFKq1d+*kh_vGxzk)oct;;VgJ z9e!aliu?Y-B6-p!psQ+bup-`BV?qA>)HQh6>$Ri#J_gxOy0Wfs9E-yDxZvL<(oa<3 ztjRV7SixG>J{rB=#!m*z8N_pcqMc?GBAkmX8PJSSmsl&C`w>HR<2tiah!#9qhbhC5 z7kJskBAK)c!|VM`CNIRLMntT9zVQeA0>^3CM`ExD`||9KJ` zI5#aGtj0o)>e;H@w(jqw1~1wyVfHs$9zM~2|cCp$8uinBFHN`PBF-Q$j zxd6k&FEC7<&%&?y!GAH#p}!esqCxcL4;#r#AI0~5xi`a+AyVKnS6a6dtyvk-ibRXT5O#ANe^ z1uy1>J?w!dTMEd~Ed6h|26&o)t-mZ9^nGGgcvjC7dr?zczWtW?2e_yhWauTU z<_p-`uV7kjWrqH>HMKTHYe56MQ3Z2ifdT6RE#HKmu`9>7;o3CO+-B##5AQ^hA*k8f z)_oUJ`|}Ihiw?pdTRrAz(y~#3gUH~jQtsy92)@TSni!mwh&uqS9FJ*2cNE+L)v4oq z4*B6z{5&0YaFqGWLPeyU7r-^P-HSTwF^{FJ%j8jB2SE=u-Z!yFN3=?yTUSap7 zkSz-=A_XCsQdljVR>1L}Ay|_6lFNy#0r3|^XZ3d=i*P5HmWFxt$^la4^UD?^jM$I^ zIKTC2-#5O$SA6V45m+$l-Rf;3-AYV|-1_WsXnvQERAcmqSZw{z_59@lSr$}Xrf22_ zhXjL!D_eE?oy+3Po-sAub+5UE1+AdcGxa^+#)cXwN95jJnqk-|L4liI+2Nh1p`3mK ze8ZpgvJCgX(n|x4gE#)9mlA>T^dud&-E%sPKhR$D`;_#KAd}6Zc~WXP_69TyNG#}M zxGik3p|{56xHOgo+x39@)Terr=9tHp&#nF`XpON)Nv(rlC|3fF8QPO#@eH1+hH}Yt zyWF8AAU`j^BZy+3o!iz_z^BFYU09_hXNMZo%Wc!tOMmnyKt$b!DWH)#$*xBdsDr#A+wUIgu?Sz;H+D0 zPHQa+JJ$|+5!#*Ivpk9)7aLOkL}L}9e7pCm$z6JsDt3#1--gkly07G23yO3j(K+xC zdBvbPc=sf2{^$#XF-b-}+cUc{W8r4jUZPR984vHHFq_^ZB;~{+WeJyl+l>-M&Nb7# z*o4UR^QDSUDNOqrqL1PTesGq)q6YK_FNIA6Ib#hTM! zW9Mme8nc~WD1&Do&F;-F=R0S9pw=CG2G91dO)KlTa*LFAph#d(HTr?g3d}9Sot0l1 zM;-X^D7^&1WP8USTO3xtdV?W;mEj{w;+1HV4#`wMFPp`9;5@ZahKb}d&kSEWiF4S} zA&>!A!!zDB412VJ1$y4^jqhoCZbH%OiT&fGM~dt0k&VY8{T(D^v2$KTnLGK+iEPW+ zBLsS>MVFbocCNxR*d)`*+W)jXTP!roWNVbZul9g7Bm`Fn_qvv)G?W|N-fY=K<7ro6jwA35K3Ok2lZZr;(l2)j)(tY zkPlzP_lzc)$-8s_w=Wk%WDXPFUMnTewb1U*5$;5slIXMuiG?}I;?Mqy4J&bbX(z1N zCq7s&m)tt1TIGYo$T+e=j%Kjy13u14wSt69xERJ9k*l-$!SFsQhk{i`@Dt-yN(mzy zK44Z%j&EVyXi^M`F0d`XRI{3um3x;LtC?U`GPacltA9-#JS_U)S4nnUCxj>HClI!l zF;yXw-g$z<;9ePa>jJL~7>7PI6#d03q0j!}l{Z`*WBaAlT6IIJR$h!~Pf=hqFP#HbU%c zAm0uxX}71+baCf=89MYCg-B1KuSGB_#Z60jzY)!kpMAV5a&M62L|klg)S=1I+gQJ_9YRi_kmg0r5KEVghd!H2ezF()a%=?qQWY zSK1}ddT*XWHhbX$k4UC}@QZM#Bwc+p&7=W1{VbuwAP+w=cC=in=M_$6bJ+)r&CS370~w>r6%h4ib*}ij`U2l8xDUe`>re;M*Ns$YQ;48{TTX z2710Jb5JUbIBxCsIMlQ1bV$E0aXxn0{>=+3RCrOKVcxMV8#`i2-BX5lCh1G!TKaaQ zXWF#@gnbpd5PQlQ$3p`o;4HlP)U3E6ZT($h`Qwzb4o}>^Gtcnnq4%=qfiFGp%2Ph+ zEphoNY|BQu9E*!qDLbK0La|AEBFEwp*H=qD<=1vo$bc;tUKFczUI>cWto%n_%=g=h z`Om~vgPNmbFM<%BvhGX~QnZ8o9B8U(J=FN8K6uabc+8Te&|M&qjL(hwbtBxU@%x1X z(uRI9?n;bvgqv!WP>O9Z?h`&C7|-b4#T1hr23y^usZqxinY^0(#wv-tZ7RWsU+T_X zRxnH{=YK#Fl?^y2OeqOdnp`&`cGSIALQY_+zqo;^%!US-)mHU!%9Uy@0A1BbXA(~t z9TD1@l2CX}b)BuDRqJkhQCzOQ3Z0UlAXt*H(*fHID<3|rS=WYD$@vE_LDR3T9ups6 zGsKP_fI&>xW}P4y1lH?uSKQCXV#0=ZGSzMGe>k2ptdt4VKsR0YY|E3bP2Y=rK-w*8 zarQR4SQu^pBeA}I(6pK#1Q=X_G= zJw+c%%5HS&i3>Z^ByOO^2m0BPzL~DgbVf0ddJ9j`R!IGtJ&kJ`P*bYbinJiC-8A+gLz`QlOqE{C6#fjl5$O%nQcuDd{M7CEPz3iscM{n| z0^hl+Y`Sc!?Pz1z=N7Ex(fnAGwPWOpo7QGjcxL$~e}|UytRp(-+;)H+!6U!K_fqQ+ zvMcMriP4DP#CV$&XFd*4wvw$QPnB<#V_9l>*-b_ad&OuD)@jsm8X{jmvQrm?(o z2=i6@)V#cjGn!2-CnjB{nXzMnoo?TgetVIG4e&2L#3*GBOB zNl^#`+S+Ij(8s$Y4^y-t!% zrEGSiQwXH*U~tY8lfX{QNG7<4vl~}jIyp6E^_qnJSa-!8zfGW_p@V2g?Jupq$g7jh=g(PKtO?8Q9OXM% zxnS&kH+RQtzy4-tI}M&zr0;2cM$lero>~h4+5(n(%s@tx59MSZHo3}R9SoUF-*z3sRfoS`A~P3 zIF7$cxPO#e`#nf>qn(vf^L|xGa{!gm@w9owylH;whLq-+nGxjRZP8DxeRtuKY6br3 z0{Nf*7x{NG4bZt_)fyl)ifcZJ3#X)|Z@1G$sUCQ(pi(aR(UOJde^ijDNF_rw*)T=c zU{^X8^;o|NF64J`G@-><*4qc(=k+pGBhqq@+S7f6T0XuHd;Kpgy3E1ZrQsM`l z+RLqFD147OwskoFgXMf=@0!ep9f{Yh>W4idP~;D)9m}KRtdv}_D4ri%il@OQGN)`K z))biyD0&I;MCFpu?4y(XULL7hom}C^)|v>bDbp7U0ktRoNs|XH99pPND1%Q0mziGE zU5*ofcT+pk4JLIAeObFs53~vWVWtc4lRu6Crb6P+yztr6^-r$W)3y0RB=Ca2+THcXKt(51V> zHsW1GQO(|qxbWHk9bAYbt4zj*iF*_WZziP=j&=K<1|a3i-HY(D*JrP>iR!K!-p*GK zF2cV8V$#VyD9IGkZk0Q1*UIuK$cKH8EO*rhldG8&)l@e&T;t8Hf%;10uhyOT6~V-JP}D19NT} z5INL=8ed&0OgkF16%IPAz6w;g4;!uK^BW&keEPomK>&+`Q@8)V`6OQ!GsF{^7hXj;jZ{`wPK&K$#~5psrA63NFQDfi1d~}7lO|Kx2Wmi*^T#en-9~Z zDE!X}Zk!ltUxYBwb*EYSo!eE}&xA5gBHhdnFo<>IO$ii(Sr0|myf%F0PDDCaP=;JI ze-eeaj=Mp~^)so#_n)+sFw^T5qJ=Cz&ujrCrtC#JE`mh21&}xZfW*?I)v1|R7eV4L z+Po{REx8LI@$xs27&--}9ZCG~P8=sdDgMn0nuN1Z_)A&6qY19(^}uBZW10YGhG9UP zw_%ZXuK>w6fThCbNRrEySJWxwna%ZkcyHUNX%^#=$u(1J?ZDI94f7|5wk+Q{S#(_n z-eVJUK$r<64Cj3y*#@WCTNyj!DNHQ6rZ*~)#$#`$IYwCGK1ypi&ONcLc+-`r2`uAc zyfk@U&B8@x&t3}p*!m4O2E7@#W4i7hhx@nJx0$}XAQRF8DVG)WQl zF85xA2Pcp&Mq?um*$t{B(Z?D4`^>5pg7jze&D^NJvxjzJ$D5UE3(i)oA|B4_;6A*1 z-?&hoVIjWKYcf-D&mEtX5E$}hL}Eg%x6?K=^Gz_GiCi;>G?-k~M*XV$Jcy{w`f7OW zLpY`;shn3$kY%qUUk^HIPl-oB3nyrrI>#M7qfhXq3jKQkThMGg413@|$x3S8v9%Cj zb-1_=Fi6uV054VC?ea zL9&RaxlVO9XiVgCP~2AIVfHrYBoZ8l-L*aiDG%e6tEAt2qSTaU{4_>$d8%~0 z#&(zG6Fyh9^Gw)V$5~}Gvx4GA2{zj4U z0E#UCB>ESM^!*D({u1$TDDo5}7BQvlSS}Rju;J3v^Y8TGR;RxfE;FFiI)0HF)bMXN zg_zFQ*7><_S-&plos@lG7tIPN)}cTsF13z&`*Kwo5jhQZ9ueWlLpD9sn!x=@4fzLU z*%T!@Qn3fm3?{G|AkEy`78`x|w)lEiX_${F)EfvTa_P%KauX!f@%8V;_);lKLqkZF zMY{dKp~ucwJo$_`a;QK5+_zX_^t)`>K9_))A$k4$u>_cG6rq&}jbJnHq^{G=pK4qDE4?=zX|9<^b+g_7h5nj%c(PE}}Xl=n}Y~ ztENZ?$NuGySo^>gYciwCFKcJo^j-|{0)v2U zIiYJyn9~EicwEue0TbaI!pfc#d56n%d}BBuXE5ly80^ZBsLz#qlEppYyE%oH_Tv=P z@%@lN27RN|exva)Z^lq8U5iqrJVIIx3Yp2W%3Cu(S_ZD0^DEz@oq4zZ6Fk~XAp%{J+?e0%a6^jPmK5O~ilBsEAETs}BEm}XX4_867mNwHE+HT{tTUvQ4h zW=?O6l~xkV2<~MxQ#r+jihoB>jH8%6nvHm1<{bvzC-p1Qua-(%8Li?|oJ<1q@j8MT z_6gYz19(UuM_eSCJsMFjOTk^@$kSDf%)1P~VHcJ7ircD{i6OY-$lSJ0rJBL9g>WMC z-@=LR-&NYMv|{JQEs>tkJMUalq=oENv|9D01;7|1J!bGPG^f837E=8I7)cecXIx1= zl^5}l31g?xP4ONI@{2<#~MA+xtQvYR;Y=_L)Xfx-!&9j*vTL%>ksm|2n(9Y znexDZN^o-Pl-%;JIk|OsdoIR?;&6E&+7vvk=2N66#y(Y z1Oa7Ev;C|%jUu9#`uT!rpf^Ebg}4dx;&m-qKP-n(Sa22v5(c}R1viNEi(qfmy`|hh z$?72S76i+wr#QET@>JJ<*5GL_qVBK%SY;+Ywb%1zdS0Sc}!#1_rDYH z`Aw2lpchL3Cro6JCrktNHO&I69n$Gbs5%lmZwAyT0xEBtx5aTb*Abiw*MZXX(O0p1 zf%kJdjPgoJt4+Z5*ERPj&hQ}s%p7}v!qd_Y`S6BsHt#jqK{re`F#KjIv@oGjf_m0k z>zAs~K1k8U=_JxTfsD!7O_@(aN;eb~lCf0XdKcBvpK)dh3UQ)#A!UZ84&MktV?~^_ z1q>Q^GSL-oMgGuD?90?gECPb7Q4EUPpxDv%L)H0Fb?~m{l`-)y+53=jlIG_xci(?q zu_V6>>2@SleK{%tJ3N%qOPxyPSaKRl-XD22Zgi$p5XCoLc{uf+hj167t_fW9fz&xk z$RZ`b|4D^W&_-Fv1vT@DvPdy5zs{*eN5i7``fCXqN%|}wQF~3x^MjC_uM%L{TC)&N z`np~4R5f)iCg}O3*N3>#@%7-M=K+t=SBYIaRvHiP>|o!OY)FpnYI8j8dA9WewJ>}v z`K{Vk^7vhNIbAgBiOBAVKYHGLxzoMkUQriHlONwoA)KV>xgoKR5lF0BrzsMPj^Lvb zwHZx!{Q&S7h({Dx7kJ_PeAj|DqHa-)Q;)$d@&a-rt+D!Qr@vh6b6 z3$Nocp@`g7+PQ;Q=M3w2bXbH;`AJ%4>_0H{1Q;+jS7~IFx25F~bN6|j2||C&L2|iR zR5_Y_(8>~$EjhG@(j;jvv+b(}!t|Q%70!XK=U^8k=8lt?S>-`%N-tn0E-sAH9%&2~FOAauOB(+66|5K<;IdmDx@$o_?ad^>MlxAS`4wM=ncqSNs_GD=X%XnwHESE> z1+2>ex1?CF&%BDNeLDEO$=Q2~k?D8*_oAcuJ43R2y_;bj9ev!9ufLs~UtWUOf+(%&HHu$*^czbc5QStI`8tzDUd%*Q zfguT4z>LAYHUSv8?)lNi{rtUnKVWj(1lR*J-%T~57CGP7)qq{Uc>(lVFa3w#@TYN; z=HM7hQ|Lrib!D3C8DBphd0}m0)-g8Zj>6? zv+*>8AzjV+Q$)S=FA??NY?c?O&gLH?>awr@CZcXLpQl_+J@wENgm z3AjoB5B50B^o5rN>JQ~3JIa~oec{Kw2BC#>rKdx-IS=b=jULz~Y~}A7zf~4?S+03it72i(X-UXoF zdjVzp9?|)$|B_JAC5D&klT-5REfSyDT;lrMcc-!o1VnQ93N%xmM&@#L+hZ6p6{UYn z*=9kCx&iq#A@Wc8G?M!RXsBNs4`UZZg>7X%uh)#NDGxXmOm)t!=0^fR)Ehj|_U6+0 zg{p}Zt}_mULAOoESQd2ctGXC3`C;ooTT`Kb>-+YD)O=qbeO;%xQdG0;cV~SYPxuE> zQg6Oz^SVeox3f*wBLemSC^+F83a;e*+WWsj!LGHbUL4IZN7_O*%TpN01)v=-JQ`5q z_Eih1r$YQ5xYL>zKxg?|TD(zqG4tzarA1wL{=3-<;`P_!nJv?#sY>b)xZ%m8`?=)- z4BiIBo@UiWpGs)fQf}zV=?&0VbC&QGNV%JC`OJFT=ryj4dcRN78ug0%`vE02b5Ti6 z#AsYnhilQttlc?pfE0h>_&J$$6QW?e1rx%}h~l4Sd-lU8QkT5w$_^{2dg(VLT%IE|5LSRZ7+m8*muEpu%ghgIo@!e4DxV& zd^~b62uw9OqL{L7Y`*U6vGTZik7|2s;S`C<8`x0hy1_P_l)AB{&J*fXhBzw^97kE7 zHqGBd?iY8eq$3*%=jEPI_lyDxH>`J%F?iW` zAx)+4_#o@=997i^Z)kuPWi+HWNLLowTbfWP{mDXM_dy*%!G$E`AL@o^IfKvBW^1mB zHZOBlm*z`P_}#kl7Zxr@9b){S(o?DU2vA)vcv~K6y(Y%$(~^gwY11R}&zhi_c;b5T zMt*`3AyxZFbQBZau;imD0BUWZ!ealS-%3Ikl2k0wiUo`a8v4&)7nym7xv&cOVEz~5 z;adwy@Q;OmW8xw}GL$5_NWBpQi4bFQwZE{5>_vn5LAJE-6p=SP3t`zT{CtYc$Iv+S zsHxF|Pnk}qdW=XY^-bz6MNJ}SBfp4euBlO^`UM#I)km|zt%wyyX4gCZXxlT1C83Ll zF7L!>qHIRC8+|j;qYUykL*vkH-V~d}`~Exj%{;K^C~dgahfVs!a8Yn^MRgIY9F`#@ zbP*-5DRX^3WW^qJx5lCRoq@ovFSjioCd0`vZ;W--vFBL_o9hQ?x716phTU*Q*X1XU z54LT-F$mb_FD%leF)o#shdb||{R$MT3Kg<_Mt7)^W3MJs!3pooCgA*zdbw0@;d<A7w^^AU!lVH(NeMMa%5s^XtGxjHS59uFxERrk%4QT;u z2T+)-*aq59k`F>Bnd(uP?L5Idnta(!?pEXMri-ullFP2UNm|P%*?DWRHt7V=)#x-= zM{oG1Ga-8?cb}D3kKm~2{*Lk|W!K|I{`k^h$%;Wfv>cx=ZA=30vMyS{JrRp+-XQ~D z!&)g1=p~Zogk>-HS{xfbv(v>bS`lY;K3jQzi}JjVjIR%d;f5*xRCI~rs$z)liNiVp zc74t&p>UGBD98%OIp3r(l3C6k-PZ2sl__zusQ(PLD(Oh9-7Sv5QDlrAL`E)!iI_B78&0)_ps|&ZBXziDN z0>{*yyzTtD>DHEDk4(%vztei)5>j0~(#4~_;k%uN`&?Rg5^iHR^7n&>9z>HhDOy~g zkf6`GW?n~pvdPG@#(T(JN=24*SQ24w!^Zeh803_Knoc_7g?!!y?mHtk7ze7v!`}Q^ zC0;$hfy)B?|Bp5yU%`156YcqXg4ZvKvazK>S^;i*z+bQB)+CqT3GxaxLk5|jL%>#% zM~EI5KTw_fcM{$!w#x<)IXo(|51Zn8_jk)q8m@QM`NDO%dN>|fGDx0Xh%W5S+I3tfSV-p&84J~ zON)}Bo*z8ikZv3NB*e6o1cTf25ogJfw#Oi{&&=A<*)VEUkf4c}*3r<-K6IisW)3@W% zgU@k#$r113Gb=`}URc@_J9`yoslXk$5&ruAk*JaUFTq7iGee5?&Bm4WPf=KivYcq# zry#~ZPpD*3zSR*lWawji(!gk(juRm2%XQ+vX~p(~ylApqGMwRwXcGS)?7e4LQ+eC& z&5SeS*ha+y8j1?YU_(G@3Yk$60s_m&@hsKH@as&D_PB}n}SmIsL@N)1m z=Y*?_FEq8rCR7*_fqbH(QH;G=6DV~Nv}wJTr3y8Nb{53)H{o&=3is(&*X=jG>|l#R zi*mdkV2Y=KJ_A(HC$#fyC{f}J($eHmc)|rI1cSe?Bu2Bj2ya@KEj1VPr}~CZbFX|a zBX0_?AzCDKGnOx#9Hu1IDOOqCHx6iUoSz$LoC906fRJHoX@jnaudZ>9&yZZJUz8ur zA6Cn9h8MK;2>0TD`-Ar2@LjTUN|KdNneo@ptdJJwrqkuWiw=-Z`Fcg=CpyO&-!y(Q z9q0+^jwjSy`vt#v9gkxgh;y;7$|6=p;=czK9XE%tFPZJYkzl&krs? zGWWNJ!t#OU0JT^$>r}5Vg?0pYuzUBHx7x8)Fh@n6rP~55$?O9t^>EZ*=fxeR!+Cp` z_VE78MKeC08;tt_siR9xdJ6wHl7kW4t7D<`d);o{ju}3pkOz`jszQDYkcQXu0>15# zXOtGDja$LfCk78r@a3ueD=pQRg;%nB<(O}LG9=wWMs|m*@7%|T{)Ob=f2?M%DIR#* zkli$}ne2uW+rsZMf{0ME1jj;0YL8xs z8E;(jp1PixTC<%~Az!8ID*7xq=*dK+zLJ*7fwKCZVg^gAjl(S(QsV7uS8dpr-4;^N z8P7v1+H}OvadetX(p}o>juS69qx!j=3E%%@V*K{Ab-jSW8X0`pXy4bfE!@YM5Sf(c zw|tpf>1)k&?+qLWzkIC#A_5CE#sS~f2WK(Pqf>ghr^iFlI9^$e@dK=KK=JrCf3t7Qc>Q?B+k5v!S*hh-kPQf->9~0}M+&FM9QG6ehr1$hRZD zXOFNDWCAi8;gx(aV}sA@)i?cy@{2Y4B(C*r*16$soCji7&{RmQ>6#S8ZNzr)@JV; zwe?w0hp(dM{*9LUwckk0dGb7yl(~L0O>Wr( zyHWk4#9uK@nzR{4*n$@KJq0KNWZon$+W$X^3r4fkVg%v7ST@4@9=L>AVB=l}=D_Z#kq;Z&0b-B82b**Y|BWp{ zJFA0Il>`Val+(`W)cW47%YG^Ggsq9j1#)66Yo>oxW)k&soFqluQ-uN7R2FzedBcQR zPSMXaU~B#~_7x@L?H9O34VHzNaMN;X#?&$MdY;yz?x3m~>JO?J#LM6P>rIyvw31%>m_fGqwQHQOu^gYj{U0W=07tLi^% z3@}oS!P$0-Fay3b-)nS}g2mwZv3t6X4@y*E`4`DZweaM-RXG1L197Q%%DpKsVSCx` z@K}YNF!CQ=ru>b&VD=Ke)v16-s-zfAt;EAl{g0p?q}6#q`3lUk{#gIK*|T80N+fd> zEzRYCM?0X_=Rw_VjHl$OHl4gIGp)TP^Cc`-C^>1YIDe1-k#l#xC#=xL8$jMF)71n ziuXy1>NBki^BB#f9niAv?y;yD#;K|27-%GtZQ*+>cc!=8G<4I4Z7zg<7NfqFe)Kq3Zv&bp%Tn-$i^;><>nRG=MKUX}H};`!-SZCixCA z>utg(2|?c%34z|CgkWQ?D8~4;lv}i`<9BY+i|Wu*^sdYC&3cM1&QZek*Pt2YO@7*v z6K7aO4*QKK*!H>E`aMZ-}hcmEI0yDzgupW0ZHIH{9 z=6*SgE!v;#eQbNKcrtUQZOfwh)HiGT@t=yo8K0q0AU$ompq@g8oErR*HWP4dtjX>v zQrRUEf(|G-F4`5FFVOsl*{QSHkva8mWf=(yeK0!C>`H73dFu7^{dY_A*Iio_o)&1? z%Tx2xXe|c$lFyUV=(3>Q%i-iJMh(gqVXIZDN9K6Nf}UEm#RoR4PoX8e8%wQ;8yYK% z(`XL21uypef22HZ&WcvbcllAP;D22PK8RM`J{vab<&uCS(ocsBz9dlfkMahNsGs0e zD9U4yXs4fbj#5Lp<2wwr+o;@j@=wZToH7+!E2}32j;Om{>n*mRa2!{S@3>OHN zVBE;dqpuV>P27`1h-&nXg8p3~^Dz}*i)rU0fpk>1Yvz#za#fLgwB2ml0}W1a!l4`2EJ_@@+A&NjkrX7|3O- zP?6EOj+OFddXkt1IfiNR=Mm{#O|k)N6P4_M02CweH8`V}yL;}M12Ub(d2$i2w+dfh zlO<;LJ=_lIPO;oS>Af%Qwd5DvMK4s3TdkJQTDl$W^;9mSTX=4Zg&zgoCOlQm-rvg8!Yv^$>Mnx2VG@2L zD({EzO4H5?-7|K5%@-vR3ER}s;q4PuCOZRnd(Rc(t|$&&vgxBjPA+TfnlZdJD&I@) z2kHRH98j6w)GEMtY@4;@+^;*z8{8~%h!OFZHU`M%60QHE%I^_PS4OCaG&e_R?BO=y z$udR0f0~PO@K5|8Z+(ygD=_H&7A&#U^U<8>19$hwB8HZ51^`>b=nMgK_T)FJL?Wo}4I{d-jyw-a1@WQaNWW|U^AJc%sas&(e$twhMt*uY_ zhK49ZWn@yKw6r?dXOz%=SGBn|zZiifHtHmA3NpzUKQ;36C4$-Ub&HGt8aMbE)oZ0f znt%cywOrnVT_PWu?=(G}ydNC;M*6KIbFf1#v3mxoujbJ^&I-^3Ri=xMhEpnD>{fnU zttny6fhlm&XEQ8Bhx6>SwoDw^%jJp0e6c7k@eozG?c8iDg!o>57SA1b1X@rq%{?h6 z%8(9}QL+oA-e;O~?c!v^`p<$3pyeG$!dY7jkjgt7j)U*Oj9N?hj@4C_dT+tpc8Yt| z{So2FdB}vi%o{rJRo<{v)^tUUOl@qpmU-6aWUR3Yv8({?YLG$j(*QC#LTR0FPgwq8 z-3w0SCqF}AQ*=nim5~$1qjAV1wPJf#@hQePhZACR9o03fF_R4Y>zzR&r0$nFCx54V znPKG4=1RUUUM$?)1;Ji$htoSqpFBxFV~&l% zw>ZYZlSuPttX}4E;6x%jK)CgnbSjBjmI>{~`Z65jx+Fqc?;^xfVsA zE76S3yOW1jq&O#ql zWSRo~$x#t33~dNBp+G=+-I!)I2|ycbrRNx#^8ycfCMMqB+d zJV-iU9eFs^@Toj({>a$M%$q+&92~}#6G6Qh2cZEp=weM{eK>_W)3EHPH$Bw1C+^Kc$rc{5R%?msgC1%}n2{CUEoPBL3 z>KiG_@j7Unp@lB|_p;OLK1oSqedou*R9Obs<9ns3*R2{iYiv-JH%?0LJs;(O>~vy5 zb_x_u(jxKCeO2ud_?d&#?_WI#7`@P=5_L4!bnau7VjY}SrQ_KBY4tw%W%aHkUA^xh zUE7ttdyzlVru|ypMHFpY8Y&<5VAl?8qDPDiv|-=V>fub6aV?Q&fSsR02WI_tf5W)A zX#x**GGAQ{CaoGhQEa~qT2Qn-B2FJG{!}&&vnJ(b_Qv9_#HFg{k~hdUR1-8phJ3T$ z)x^$+XX(QPY{uQ;q-8K@12@!zfHs0H>p@85gn!w(Hxu}%MuU%kFCB-9;$$B841wF4 z{>!X{&XI)C9EVJ#*R?qOz4peL&==;AamNO$pX#`+K%=$G?*+bdLjkr)D?s9UJrqS^ zX^M6U-pApyc5zRBoj}o%eUW|dZnXNl?$kL}sj@}&x&_w~y0U(;bS(1w{yZj~l}^jo zs%+(OBj#t^uLvB!2LnVp7$9Q)K0w3{tBVXu1Xa6@1@itSOa4>K(n8_*Vko*pKexEI za*gRgQfo|ijGh^_Tx)uuVX*P=^R0d-ApsGyp89J`6EY7a9|0Dlakdt(zPt-V^o#9n zhVB)Qf(@-(^k{I#;`k8N!O_yrc9{5eL2}yEXg$3!K%5V0csKKwbKh&{BmSDs)R08V z3Q#!S{Zu%9_~^b&#%BVM?pZzc)$!f~!%-$f1N#besSmpbgX_7`GsO_bg$p`b0{q~a zR?b5xD2d+99nR{R*fjX0xz2mET*u|Z^XAOfFzWi)9$GD{h5P=r%WG}r^Sm7zFUP-B zjy3p={(JHb+*2S_ojAM}B5Z<%?G%Ivjg@939L|Woq;G#RS;WX2GB0BHF|_|yI@&+_ zuau6bB3;#zAnYy9FA5MUtPL*v6z6mC`SI)D&)2c6Y5QnowJRld@&v1|-8(Qw#%|S0 z*nlAw?9H^s)MkGJ>plZ*NwG@-j|>!K1NjD8*rA#U>HN@^BNqyW@&2@74e!TtLG{1o z&fk&NvF$P1QAEuteb%OcoBDb_D>W_5^`e=3JZzlen7`=eT6ZvXv~)*b1r>G}v0x%# zSL!7H(XMnxWEagtM8^T4DbxvT3)kiIG)npo8Cz?)A;pkzy$SOF_=Y{S#qI8xZ*%RB zt6fG%2Z&=9hn!raIlQKd&GMfM$XUW>3J*caV-yI^M3Z*po3po6<~D0$5vs-f@WVTO zB162yVGQB|t;Fg{A8(X1O|d2qW+8~u(P4X) zO5V+eeB&$lU#33|4qcrN#bMEy;^dFXoXzB)uw?U69X|ylCe4`^KvU`=ThJaX%8}YbrCWN zF9+9XPE z30ucyWQ4B&Q+X-htqoQ*M##vN|HC!Uw1!L21dLc9ViKBAVgi$*%n^@);sqN%je$}K zl9M7?>l4QIO{qiqog#{)0j=D}Ds31R|LWm2I7JQ*7NR>`odriFQS3xFNx~`AG?&OA z>;OS4`~!gLB}cTtE+qzSF_!R^(=eU9CC(Dw*D`O!69;k)S&wy(;Oln#yjP)_K^Rmz z+veJ@37L13*273=hTjt&`WId>OGuck#~P$1^2a%6yZ1%HPJ{>vOw-Vj+j^C>r^=+& zFbhMdbCkB0_nc;O1=RrvxRO`TA}`e{kiZvK_Z`i0a-CSK!I|)+lvin8=N509YWD*O zDbZ8U)$;Q|-U0D0b?Y7_7Nm6Hel-i7VfesnR0A)2bsaTZPQVb9HDKw^(9JDb9g~Qv z!}gTdj$^DLJK_Y}CI@itCn;}PL9M2I_3<9RwrY^e5;q5+7ujp5CrNB5c(sMA*m&lP zqXRt7dHk>nt<8<${UH#(W?kmE=$`6(Dj(LOs(y4vl5iydhOYWe3A}qfbIaz)vr#2O zukLtH7Y;S7wYX@b7T_!~WO>YS=i4Iqa)YUi6l$J=ATQy3q)xWv8m`=5bbW-axk;a*;x{*uwD7W>Qq5&a zKt)1u-Z#RSAae@`00asL4#olILbObB0Q|iAw_20wl-0Bp*l9ft7*P(E^%8c|eEI%J z*B>=3Vdm`9`IzKqkNk({vc7rEz{+9A)Lh-F$%Jhh9ioJpGN2WI$aBA#3A)g^1AsCP zyWyADVzs;gw@)#T#N4iSsvDPZr@#8evR2hb8#RqKf=}GCGdt0QaCMCUzB*pO+FfTn zG%gbNeU7Q|$-sCPv%ivgh6Y6K!|-je`0jyMQ@FEPNfUzX?|*u~4FYSfhVv|fL>z@~z(_Vp@hd=1gO=ci&&{w!B>nG# z`~aeh<(g9eg6xvkOH*y)UFUE`+HDBN2eFQr#vxn`yWE^3o+L{WhupMq7A()+OQYR5C?y9n4!Z9=4#H3MWSU&2dMo+~*|Q z8YR*SX4aHQ#NuYfX6EW|)%`2JZ{Vm0OyMlwO5X&zNz581+*f4%adK*DP!@)T)Ec4& zl?!h^4}fYe!%WZ+ooWkj$ClkU&Yc*L{4%f;^}YX4SR z#zWASOs6MJ1bQ-~sUcWQS{sNeIVuHm_{1$dKlp>2iU;916$#xafwL%l85o)s3pr5O zWWAF#lSJkjZQH^>zdKD1!uYk>9hlV$q@7CHD?h|5HFi)^zItX9pM<_mmJ~Lk;e$RB zBbbI{2OA$nau_}k2bPJxKnT9tZ|rlPK-`tGsIc#t{I&2CH8_m6fK#(Sl^iR@Jx#sIJQjm|j-Qe0m~ zaM#g*A_{t%p!A|flEn%rVRng40|d5VIR~JjWKAN4AQr^*Qj{q13@m~~v%~I|vTn&a zO4x=47EZn%w0VJZ`z!!pZoRn0F`=*5T+Ugen-JpCp7F%cRBg9~k>ZjmhUL?XP_>=i z=;5kdCB;NJ462yAn)9Ap%Q6X&)hg0D1xIK-Ozi(|&)}3EA4;Z1Gv9DVMkFvi;ujsU zh>&E>X&`utdr)n#3>(}KRNQ#jL1t`|2u7SmT!?PiH-l=Lvs zI-o1-@O;m~>}%L=@U+rc3e7E{N};)yw*IWxtD3uQc6VHOm+1r1U_Zls zE<|&u@qPjTxR($>R!f?4eaPCPKPRi3s)Wu_1OWCJr_<2Mcf?U_L3O0F#)hrXZYPdM<6CLF%H!=2x zF5ROuhTzmg8vvP)@4bs{tV~Gu7c~Kgj2=|DK#lSp*{Gw51gzGgm1?7-TQDyi=)}sg^s235%=W0Gib~4V!{^V z)&ACB(@0Q2-M$`dIXlp-{6xB4?N}YceC2=stE;#x*o7fk!gDYr;|*QT>Q;$Kk2D>4 z_0UoncELqQRtGPJj=faarV$?ROXKJ9fA^l~U2R){_he}JeZLvvj6AUupdeD~@+XnD z`Fb~!%sR&Z3-sQ*-^3zoWE~D{O{nVTtZd20ROXi89VCnR-gE5^EYO)tBqO5PXFO`U?c#=Rsq{PZ=?*m~8u4%>Rj$7~R~M9mC(o z(25hU;e6Vjn0IFK|0TzlnqFy4*pdD5Oo?a7f%ab<5eE_TyA`0scm@K@gy%bhaJX4Y zuW3G&vTt=I+BnxpWWRj8K%_l-=Jl!LP6S`Hzfj1fljnrD-IGo2`<*1D8<8q#P|G`NJJ z8&gw9%IlL%u$B@@F{B^ybaFpfDOQoybN#h#95ngoelASZJ_lUdsOB86T{ypU)}LJ3 zI1pg-SC{sFc0KH3VVS-9)}OP8E%_7(;fj?%+VL86)LGcUo5%4+CYpSb?4~lXQSH&T z}ZW)OmeFM?5KrBt@o&os}wbVS)I*zak7*O^f z5Ca)nw)6s&+Tzq~IhkGTw*NRE=E+66i5@VYG;wl1d@`TxyYQRlpmLAHOPw;wrR(;s zZTFg+^}O96)Q$Ji0ofzYHG7W2?XeVvsJ%}aY>Ry50+EmC4*@X_(Xew@q;Tj3iZA&K z#rI9$f1l!uv0Qp|+@ zx`VoZboE?boFoq+NslI0L)uqKLYLSnvAc{Ysm5aLEhrFZHgF*Udy&%L(hB=U>XLZSbIP9-FZ=pm*Y@2;@2W2e zM|OfwL(ko$=>>A%$CF>S?|t7UbaVA1h^bb`Sg5V5da486WkWUf70{Z%!xC=iik~@_ivVc3mA#3*Q?8Nk0&VygXd%{#E zU$bM5bt~cECErP^58-OoOAEVl&;{W#Xc>2(Gy;M_k0-Uv!4C(}A=7O!)~# zMkQ8&CqACWxTCTdVdat&Bj~>D_nmR0oHo`xUIGYFana0C5D@~^mdr4~CcSKTz{}Fm zJ-y^SyqK745)f;CCMDGHyFqe>V;9=| z6i!s-XKrM;T~o|GLsX`Bv4W^kbW7A}mm*xl`D5zEt4@{=A!jiq#7&gn7`3&ML}$X+ z?m_`sa~@*=@+jBg#igtfWrQ(dKOt*w=>$UFdV{sduvf1FN?s@XQcQF0`jjRzkcst? z)H9aK%r9*8Z)s~@0z9exav!$rX*Ge%4z_2+o)|s--l1kHBgpKeprH7%{f!PdQq@^_ zYlm3OJ)%Oqhr{d;2e#K>#sxVe4gTSEEXBHpS^+dN()2*ffMd{F%4wmX-W@fxxc;9O z>KN~|&3enFbsTtQyCfYvmx~!E7fz43QYtiLMv3uTilg9lUi94 z&Rulwe1QuhAt{u~$igZBm1${xE_Rd)8E@tcL7_%gBJ0f*-9;UNo@Dl)V=)IEi%38K zakXi;_~E|M+)KN;3`^^c!S%~F;9qQO@IIm7fk6Ivzuu8B_zc*fw8d4AG{-&S?O5~F zsOMU>x?e{!Y4cj%x3=EOheG2bPmsF_GotEtFU*KUd(y92j}TbG6pQhFqLugzD$@yy zm)MUE3&@J4nEK0_A$vij0DzS=X9p(LG z*K@xU{jP}o zB0S|nAvB11>Y%s6)}n-`I)&^0n8A4!Qe_Drbn{BDygbik?a^WxC2%u;;VpcvhZ^d7 z>rWi`Ey%*`TQ)>y?=9Ty6|X^V+dYcRRjq%-^(|VO3?r0AW`LzBQfG&FN-@s=XL2kt z&3kSki!*cda~7xe=Pb^3i&>nWzM>Du7w`b5&Ogy==5NZ*5oFqlc6E+z!rj?$*my3- zCD>6R&uCdDRI(mq9FFbpa)HnU%2wS)ysgZUnaMRWC1B$GNruoZl_88uWe86NN(={Y zdKPOHt7y==rGuKatS?M4?XYUDrtGw%HM^FJddXOAVXj_jPx#8QUn(^)o1MOF85(uQ z56xN^GTJ*k@-+1DZQ?E(Uhikk2C2~B;(emArp+gj>a*Vs{yp+5o9pk+6|hzYsS@>^ zCJ_g=YEO%A@*RSlqJy`eTbYaG+%njQ77O*Af{y(yBn5SQF(ieNL5rKVFu>CP7?Scl zsQYt^_2(E)y3U)$kd!l6OBs2NRJnTb(z+tROzrZj!^@2TX6lc7Rs@!=wTpUUi=1ex zyi;j~`p!&|bM&|l^;kyrETCR(6kS%i{5$ok<*ot@P_G8Iis&38AYE-gKl93PRN=uI z8$&{a?h-1kBW~yWCVg29Qd~R{Wk9Is^?)|<*W@A`yBAd;Sm)f9*%rWHWOb6mR}e{l z@A#>6ZTxz+qJ~DY@-18}h7#8&oH53BXNz~;yxfQ0ge(T~gc5{4!2pd$aXiD&M=pDL zW`A{+wjfOKKfRtDr1Gb@l>U*`|1OKOvLoZXTTE7YV(SoRb9mNz7Y797|DQ&yECF5^ z8zSv;T(-un2s5;+eB0#iy(P<}dVJAKWHN~8bC2QaZ(3o5ej8A_%nBb9a@Hr9Q}G@s zS~Y>9_5Wm6N|N!oRs~&~5!Z4l>&M0${TpKgi1;F;(LcsVNHPF+<>ZhZqmXklN`KT!`9`79#)no01d0vQ?>1kfjMqWCx{R# zZ#z8H5weyvggse|cQruNgO3tuVPF97BVZ?l{F}^_@dKxStNVWQf{yjZZ?iTca{0$o z8Rl%qLR7`Ch5_$x8e<*2(_N&rE1+@FO%3jR!aeYXc~!iiW$oz(TGk*Rcu4%|@?LVY zBGlzWU`$ukrl6vnF75%c??rSTJHw?%bF~Y0=w7dX5C*zTGC-Xi`icW2QxJ3B#@XhDRycSKV zE9UFUwaoWgWIqESX=PaNlR3K*usYTI@NU1bTQ;`?aH_&T8~wpVeYeu47nF7&AG70` z>0}?jj3k?zTZdQER&=umSFa{@Lf2%@{d2?R^gu$gm*D=J4c9upq>-~Y_J3i0 zaq{{aV+E$w@=hPjRK4;CYh?*oh3wxH=dYJirl&h7`7lSC8x=!?M1on*c_4nfWFc~41lN3Jt~Spr10U$W*NSGXJ~ z_*odSJxB!OttpYbyTMTAhsWQTZRaV!5*rQ0VOETYg-W|Isq2W6WuK0-dXC@OP3hS+ zTB)Bogg$fQ^n(mzQ$itf$=J zToK{QM~tPf?iLM^JlHo2r0?KQr0|9A>dLjmf6-krTT|Ie6n~zqdu&$}bUEUtVQMO+ zNqOJc3PgUvC^n$smaS*FYoV2Plx~5GXwF~4kq0q5c5#@1dXsrRr#a{Yh_SosA~g}- z$VvWw*D{#Zkwe?|sb?AFAE%jxJ0x`fG8d3wQ;tp8>H*zu43CR#iGnutvm!#T2uHZv zvX1z4%kRv`%lE);*T#Q%D(#r|dTg9#b#g%r9I-N!upg}W-(&zP!&0*}y>Yu#0e@Mt z)kkd)9rd+GLsYshO+Hly%!LO3{6SzjX*m|H(LdRQd^E<4v)*?(8ph8XLlTFr`v<3# z3C8!G7}I`Fs+lGNQ|bXePyY;1aTpE1vC7Yq;j{$+`Eb7PpdJHGdo(iw(lt;Hun5q= z9MD)*YW7^Of*lN0gxw|O)mG^wb90kp$9e|VYpskX^|MCSD$B^cul+5n``-HUbvsl% zew=nzvfPn5hw#hmy-m1CxJ`-FG{{V{(lUC;CMb2|XPpB+q`@Y)^;b5&jUf$ir{kFK zY1E5gmND(#G|5bob3vL@<#QjpCaf$nj2Y0O438r5+5q6KCIIQeLq_*mYF;t4V8Iwcy9jmKv zF_6AXuDaKPyo7Os>_DFDhk@R4do05};*y=UxecoGFyHQud*cohXd$hRjz66>KKDR; zdem05MdBwG!aqkH3b*oCt9$ed@6JC(&wT|k?rw8snwB!m5AU3=hTP+WJZ+fNt_V|VXQn5T;y8F=~+%R>L2bO?v@knlmi7?g~ByzXVnz(akyDyUP9EeqN0{EW7w=H4*{a zRo~IyHTdd+S4!ykpe3H>w^!Fvl&xnxnK{8BeB=2;Y8^L&&495hJEBH@#1A4$G7Put zxby`Wa%yP@-U-(aX*bh_@g!`(u?;o?zLEk|v!R&%!0tPlrCAG@E=OvPqgPea^NYI% z`wt!XgMfHX`=WsOoUDbvqmgW0{P#Cl#bcVIWt}$Rfkab49AIDoalkWB2tFuA(&sly zQMM?c8|2aIq+6oHbnWwrtXS{RfK5~z4&fwXF;~$KJv;RERhLg-+C&pu%~q-DtVGWH zv*~Obuh~;(nCh~kH~pwcI9BXtq+QcatlRo7)FBS@zgcy zK^U%Y#16Huw;BWo!F>Y-o=nkM45)qi9DGY~W^HL^ed*#h#b1E=z?MvsrvY`WuhVLI z$=#$I*pt?G-h!v;!DD=9vI@!s)(a~PE2gBB1Qb5fGFdq@>1713j-X)w)BvD$(Tyo|Ce|@Fe zoE&FT1nta_ghxYVhC#>oZZ{;I6_A_Jsu_z*!o9zHosDHJy(*|h!3X)RuP(1M5BjPH zFB0oC6gtPQ3dnVt{mzZt$1_G<@71bAj>H_in?$e5Kt!BDF>GHG;@LwiA}bh`iw|0r zQmR4kKjZiG${5obVZdY=rE2<3$O~BRCX!;ttJ_Qu5pr`R!N_>4@jSZ+OMpix6bjBb zD_hg}t_Kp~Na13H`kV0*OkO!FIr~X|BZAYk$^@BkP6bYDhuEPty{@)3H+UWQ@E^Q) z{KhJ$tOp1^y^eBL$ar;U^`4zi@9r&LSA2#cbQZSVs_#Yil|{du8GY;{?BrOs*`1bX8&<3OedVL5j#bs?vCJlXvtcR(BD%OTWx9HlV_UjQ)DwAYEuqi7m`*XH z#Lf~(krars1~VKz%wS^BHH$HBu>>+mR!e_3aLIdTe! z`4Xm10^D=ugl-l$p(g#g^H@PWv5q$t8XUQ?pRh`E))|(>ZX=v-{)rWz&j6C9@O+WN`W%Mcdy1& zjHHVL_$KQ$-6~`@Ka+N@X z2bsq~SFObc=T-`^1)#$9T0SA%)?K4J z-sjsZ*vunz9~0*lB;BMZaboUZOJiVZwg{FL)L?$QeTI(;$(pzxP}yQ$a|OP4UxUYo z8SX9W<<}53wj#$f5{`pS*f#<>2?1RVC=UjTQj}!bagout0}sudMfe$oNG}!*(shn zqhCvP$f`|;O5;1AC3Eg39U6rP>+;$Hv{Rzd#bcSWqrya&*%dHC69?MY33AZ`S7LUykO8F*a^nvfg z17)A1oQiP1Z-mp_l@-usL<5*dcywK0bETVeo;2@`{a`a;!9)2_aK- zYrWlE5WV;vyjj6_Deno2u*s1_>|8f5Ar##{-Y*W>K&g@aRPIv$4mctCfyNt zrJJ&&41Lg?S8T*#3qOZ*4Dnoph}Qu zK75J}S6W9p={CHUa<3^o2p48a1%hDCgm)o5Z;KjQ1->{fhMQp4_2 z!Xs;@L==K07?(h06infUA#JzLqnsum&P1tbsA*JJT*pGCKMCUD$~npR$G6{|{`w)J zR^*Pdt5<-~&57?c3Cb|BwhOX=ZL_Q?XZ(02k#V3BCA@ieVc!izV2 zciO0bT=;ReS^afdQYaZyBw51x>e*6hHPvhv+M1(;>DwrGr5<)O<|h!@p#UN~zS<38 zJoy>dan9w?THTWiksamT&D1ZE9q-gPFGO}gCg22HlJ>2(uopF~17tn5C~dhz!}qg; zW3!cc_xgB~72*o-N2a9eUsy)Hl08U})V`?>?LEphn5xB6_KkM%Qt64LBPDr!;T-2P z_6<)M!Z7(?JzF3bFFleb*CZtuFEJ;!o>!D(R^5#-8L4}*6_AU47s$m)_$uBH$bS33 zhIyR+66O&T2*Nz(7s|gB@np>CZ3?~Y6bFezn(`?$fZsR1PR4g^g5tw9?8xrnmeHOk z`XMHU?~-k`wulSy%zTH;&`B=Zns*q0I`Vz}#UIpjdn6Gq5qdX%ET?&=k3Q6U ztnrk;)@2&I^9*gCs%&xT(8vM30yJop7P=8y5mi$F(HqG<=>41{+*GYQBBphW5UkXs zpBz8Zd@xn78_i@pkSm`$+SS&PqBITeB|VkCL%(rl-Yfw@+?G+Zb?0y$^#iy9>_p+W zBSXD7biGESDsJ#)?O3yRr6zqY5QwNoj*1K>ye3I6dG%bEG;Ht5fGf>I-LZ%(CHOn8 z)ty=?r%mz5g4k*l|Ce{3H5>aC-~majWdwoJsyO%JGjd>@`{)OdlEPZ1r&6l0n zEC&vC1t93vGcZ>~UthKMi^8oRAepsV$*vnxi6m_*(LsZ16KFp%!`~(p_{v#PcGs?x z7R!K|G#00lZ+MHfM5bP!Q0x>^UQ2qI{pDGGus zlZr+VgGIm)5hSt+l^_%l5TycDSrTnQK{nZxMUsO=G;Glk1SKS{$pB&m35z08A_Nmz zLP*G-ei3zA$2rp<{WWL)g%)wX*& z&%zSQAkW`v^4wm>T`apDj!n940Egp0WRW*0Y=Rs_ywW<&Una7Uh zFUHokYgHjKpbF{W>#dC;#mVFc^Nq0sw3IB%6`!+jIEk-qs+yo52>w0yIAc6y3wQo? zbnJAJO9)i4`-cVVz1sP5s>pI^M$`N3a)nULW4$U34bRFA2U*?zRSVt+%`h6NKGFk- zLQ>y}LiW5Dg^=LDv+N;2A|q5FYZ%3dcE$4zOCOcn85QU+qD;T43a z-B|D~D)GgT=Sauh4h(s59Z}EDFNgTBKt8NhD+dC#a;P;-tvna=g%504 ziAgxA9+izU{pb_fd8UFoL&%h0tNF?eI5`4wQ?Cqv^)j>!4b*tv0nlq8oTVjjff{e) zoEp#LZw%(_k~?3vTm%qlec)nGZv>0z)AE2QSM0Ss(Oo#ZxtS~IBx+qC{wci=Zd_mt ztU)j$2u(4rM9EWbm_+Mq4Jr%viB*+?J0l5-&m3BBOhiy+qhsu-y&hzf^clK!xY|aTT7r zIc}nGV}B-n2=X}T{v8m-kGhuruIB=g^QPxwHvN%=@N;)nD-D_WxSroQw4*KD%TwSl zQf6d@S$%(n>1PJ*5%GXW8C2=$g!!=Y-BXt+#47`;n07#l#JfkcCAVTlTc zD%G}MFreJ8orp;pCs2K1MbAl6@0KvCkm`ehQ}c4mImuvg2}nQewbG9vwzy0qZiVCS z`&06(~|?z}g`{#M&*;V(o0T(vMWsV(x*Udvnr{>EI`? zX;s;w|1GADEWnZrXvydEbT=vpV?w>^)D=a>N3PlOlxJ)gjV!zWDu)8UUdEi#yJO-X z3e$o~3Nt(tvbFNN7WF5w|E^G8@G*rl?68?u`611GLp2`MFP*P5W!~KJ^C8@{4g?Q% zTR9bRZ!;lz@j+{lT;RO=^0+5JuPH%tLCZBhspT3==Q_G4KE#a9?nicm_F4#dMSrx; zUWu|&)qN*mRu*#FcRR9ddaoAt<)%;nhcf%JoquqCSbx;{@!8Ee=f~un^TY3d%=tmw zN{9<^7=+oJ`R3{U%4WbYDX1d#9CeKlB@OSp;e<(?z1N>h1j|Op=?6f=4(GCSh0!)~|$`iY{ zru3z-`$m(@!kmf}7y`$X`0KbJ8e>f}s`-Xv<`}z(Q|*HV%Zn-@EQ7u&T%2&_p}4$* zZO1?y7V~T%kfV(+NDck9HPcrrYJRN1nLWf>8tQ176$0rtMO;XpVO6zbT+-Dato8(Q z^CZJEavgtAEj2xaT?6j{YT+h}Aaiqe24R#o9_G3? z=-4@u-ooK{RLdSTcK-3;BlrF0n$S<_8TbWNwZ1aloxJ(*i`)6gd@+2SoSf)BY#mCebR_iAf zz0}QSoshWfZ<^Sxub>#x^mC8Zu9c9D&iQHjrA=IHzvvEyZlXz!Xz-y0mL6%rkK-jW zP;Vhv=@waEDHZd;G}PAu79@kXIgN@grA|eo9Y*byBun&9uTdTr=Q*y>&afCVOKEv$;-xtm3uYT+NzEmpipUf zE;4EB3@m>Jig#`uL!k@uurPY}fEERL{uQ^Nd!()@#lLD zNeCtodT4QAngbpuxo#6>-f&$G=x&qz^Iamtvk*NeulQ!suDryO47<~*9PFP1!D4M|)!I73gc zOAD4B3Z$qBGUH2WV-H2f5Xjc`MCWs*=803}@F+?UwuM@Fz3-C)7S0!EG3fzg?ZORTzjmFwEe<=c6Vt=Anaofi=3;G{y1q%Sr&p16%N#TT_V zn*1`VzSLJ~Zh!K2(s7lUCL-AkvW=6ut9QM2oQh{5?#r^V^Lie^LZ6myTG4_HQniY( z0(yA4@fNW_#_}Yr9tj)~9po~%J{$t&L|MmB=^hDd)OHSOi)-A!FriSlf3@?N1`JJ` zcafY!IAb)lL)EWeWs&+yf5|r9V0bhxf6I8L544(K7rgUJo*xNrnMkdZpW->PyX^5< zz~yeYY2NIam6U8`fOvM9Gg!9YBfWno!-$a+|FZ&I&e-;J!c6k{=Oqshg5QUzkVt11 zZ1*M}@iyzt4(?F{J+NO_dng3*>sMXi^VYXcwqW!3bp8K-^_Sj_ZR*KM%_j(bXk?~n Mp*^_8@1MWl055}|F8}}l literal 0 HcmV?d00001 diff --git a/img/22.PNG b/img/22.PNG new file mode 100644 index 0000000000000000000000000000000000000000..480e987d23474702217de60c9bd24d147cf2c9d1 GIT binary patch literal 44751 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

%T9ZQvUt=ysaDccV~4dDZJKEM*e*cT+%w+r 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 literal 0 HcmV?d00001 diff --git a/img/24.PNG b/img/24.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2237636dad2e3c6d1bd729a81c5fe741550c9b0e GIT binary patch literal 45322 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

<}4|LfiT z8|Kty$EZEuo6DZgXY9PLktPY&7vh(gJq&#n+40WwXTKo?h}4HrPMbaMJ$+VrC1 zzeEKuxp3^O_0y!5@hK;T5t`hZ=~wjvJfR7TF`ZL7HsCe&MH5);{DyHl8yi9g6O~Wz zh7Fy1Us7{p+IAO;9)fRmtJPh=#s#P~;p-;HTa_du;&bm>R)az2!|F4UUU*yLWABN3 zkU3%js3W)BC;1O{2-eO4vZ#(HMJPh6mS037>3tPvl1~zVtn*a_w{UW7;iF^mrE{OU z8APRAwkj#%?c0*J{+|6pNh=I2;2ZmP$@WUX7pzSJu!+{6qS)a(Q#GhM-%dyK_8I(p zH;q!7`j3*sEfVedn&=g^r-4uZtL^iy(S`6T&&jIT@p-c);8O7Vg4GNma$<6)e3|y& z%fhV&^q;j2VqETD8p1yeF|lBXIS7WBx~IVq)1F#3Bj^aS;i5}>6~3IM=_bwnUI%l@ zrOOZjVc(!479~~+er4j%SW{vQQq*p=@MVz6fMoqTM{b@3a9IRB*V$<~*o3N~t7q0V zo>Qb8D;C_=7v>HyY60x`x~^Pr%l?&W5p^C->SHRp1Dctw6nF6~|cF2}tIGycrtR}V*V zKx?K0yvMO3OXq5*(*s#X$H2)W&JL`{$+&%-!;gG(7$u~;PNNgoDw-kh#)IIkjn}m0 zT?97OF3h73?<7Dg2+O6k-eAuM3{UpQ8x?duZ$-zY5)nLjjrji@YF@aK+7b3%e$V1) zl$ll@x!UN^`zsvE6Wx4#dmS4nO2@pD;E0lD&h3+(u2jgkXROK*jdPlY5cvlf%M}g0 zz$TP~#fW)x;a=%MP~xpA%B-OFsvh=6;L1X!1>y@lWEMm0uqTM2U?#6Bic~9BMXq2z zj|k)6@KV3)Bi%>5TRmO}a|hggO-FXRhN*;V2MsXYZ z$aj46o_S)2MedD);n3Cfs({GSDc6J>?v*`P-4zu-vLL#*DENv_GIa~SU!dm|K=4q1 zNtqT-jjHZYcStph>AE_y8Q}ZwGV>&1_mdFc?H&i5T#Pc{s9|8;q=W<(R+#n@l3w56 z(yfl<9v}C7U&$MLP0^#HBS@3tO15>#%Zlo`uMf)}Twn2}yj`>`+S{5MF&!|8w$4oK zZR=t@&q4--={5E=$gQtORu22m@qalU8Ls zEzgfZo%%dU2eSmU)7CY{VZPJgp9F&}s9~bche$w`aNUb}{vG;5cdhL7R2@vd-q^L* z@y|*_u!?_(+^OBLkAUmmrm_7v09<^PY+B5$d*?o<9yzWP*W|7-z0&(ls0mt`WkR+a@t+-1=0=NmJPSztWl$XVo0kEL?U8dASKUd78Gq3au$u`k6Rlyq6}jl#?8` z$T{xHM^58(%9q#3uFX6(wD&i~<{|8NIwy9f>v1%BychTzNHf}%Okk0MfEYm_v?SGj zKg)x)U`MJIO@3jg2l`4fS;@-vg_bDiy$yX7;RlvCx6G3)J3VxJ<*KZAZg@LtkOa_C zG>TQMhto-Is`)f(yD!qwQ#8kTI)|wkFv4$xfF@!wEHbF`!g;erm*XB!_;v1W%%h*r zm|virC~!Y7^gML6UtOFjRxa|@yFZ9&!^0M)Yx3kC41u95LMsa7)}j&o-IqZ>DPL7PL7~# zoD64_%4hk#31J)a`U&5xJ5*b8_X6h*UNEzt1{jpOFP;?a#qUEBzfvt{$aCyDD{5t{ z7b2Nx+eA{mqLvfW1=inCHK(KDK2rB;*v>mvv1RywP6s(qH3%m`+R5pOP%;2Bk58$1 z*6!Cl)y3kzS+5hO1RhyPje#VlJZVb)CbRQbqf~$qg8iafxvFJA7jr;;%X{J`1iNx{ z99Ws-!-q6GBPWZa8bcufy2Saiua{EW0X+v)aagP;M=$`IkoBKzL4|p?x7mGGnWta# zbeC0ec~<=<`hG`_u^z-P2;YHT&&x+l7#3#?SmYTAzLtu#6$6SZtysDZ=rhV=Gt9=W;F$T>H${quH{)MObtquZqpP-xQm{ zV~WjmpxFFi8dG_9~D`AwoeN)V}2Oa#CnU6i2TO(;Gf%N zSXEv_;XC`(dOAbAZ&qHmy7}aV@TIEEOQHr_?97v*-QI#_&(Di^k%g@=6ILI~ z6XCv_pF98FvQqE!n@b%U8Efdn8Pz0Rbdf#I$#Q}(nvP>DPWdB?f>sM~YOZ!GUZa>D zr4Sa~YU@YJ%hzqwGC{u68S?0!S@)tYC&%rdi8}ifhg*2(=*^U?w%k0S(z+=CSCFRD z+t5&YC7+3aP}r}mOB?1oH`b+tZll7^iv3LghBc5V`YYa&Bse2BFM1H$NyVj=?#r=c z?O?9R|3kF&fg`?L-p(|!hETI#@#HD(K^V&7de!ecBt9;G(z)1CSA zdR!>|GjVUafZMDq8XZyQ^eOgcy0gi1)c12>wapSmoqsRHtOtZQMU&h-nO#6MJt~H) z!hdZd-YG!YB%=C|@vrYo!O9$&=^~Apf-Pf`*GLA`x3v3k*$D&uuyWh~P_0;Xt9z%x zHGWAyI-pKS^n-q#1H=M$s~7ekZN+qxB9hP1Lyy*x9zY47O9+2NTZ2w9-_3`X<)mn=R( zU(;)Gy3{+r<1#{h_Sy9!bHNBwD4m z@H=RSm{xxvy4Rp>l6=p6v<1u!j6a^v@gA|!*1J!++WXhH)DlolgCEBUMyuHW`;jJp z8@F)8PsIlNN5w0>D=YJ|BB~psqd1$4MD`r-c&cIBCy`a z6!ij4-ULXke{@q^MExq5JGebNy_;Rv)m47L;AU1tJv|NFrWqxe9WN%u)#07N^VZW- zwGX{Oe3-j3PgSqAQHzd@Zu6ch$IilkH^b$LRWl=MJgJrk%Iegw2`wK+6I#xWCbZ;t zNAbQH< zBAm3`#;kd>L1PLe&G^XKj(3XTX;Q2?RJhZ3Q#@x?gLRpLfc=eiWq~Y@5nA+X*C2u((xMX~x zy=`!9LJytof2rpL&SC%N!e#>^ZK+T9D_^BQ*)n-2mmXIs0hurFM5t70A|s7KFXU2f z5{bsz02gXXq$2~51rR)YFJST>zmbE;CD)q|V)WM(Y|Kr#HFJQ;-Ln2ydTH%@v+p-c zX+EdtZgRTNgSR$|x3Al-Q*<@T^f=b5?syq#EM zE0bn>sz#v=aVf0A6#%Z^5T#qHx8CQctno?iQ+CA|O!Yfy=RRetQ{u(pVFM(!#ACv< zWmU}#sM+sm1QZK64xEPxKCn-oeyt(+4t-?afv=S zPD9P<1?i@+d38aROycbbAk=>9s|}HHtbQO=gIdUZ08`menGKsw+Yg)PR%*CU_qUxFRXyzoL;!Yy!# z5U&}P{C*J0Kqd{cEg^0+lV<8Cskz%OyI#)dXXH7USh?{EuI0yR-=(_kl9y}09hqR~ zJXlv+qx1U(>Yg@gNoTFbW`p*jd)jN31qfT(XxHnmT@DaeOw(SDb-G6zi{Akn|7oOD zL?$3}PF2w$%{1+WB-I~0WeY}_sXaq*f6it zcG*fcp#s?s&@(t062U>n3tOe&i18Ps#K%qn8Xw2=;hnR4F$4g3O7va*df0EdWbUpXi1Hf zp*#6|{VC(AU>I!wN=2fUt9v$e%IjFfzHEL9PL2Gc4mz(#z>mg=IEm0_pZD1eG`B3P z*;sBWY!=!;Z^(ecQ@v3pf6GD+Dt#fwF@(x1L7}ko(rh4FLuc&Mt&;7RB*uo1A4bIs zuuCIU1lQxS!XkL@;elc)EfXtJ;bWDn&L51yi4!?Qw9K*b(3LE#s0qf*7T+?1@pbL zVw7n@OR<5dBO0rhf@dyB2j^a?xGN-a34H$HLQ8*~eGv_o@);$6&w`U_Eu3?avDHQG zYOnt8_xiu&^J*8;tnnaauFuLskTInpa2Uj>MCFdu1ZG^YW(T$pqz%_k^m-S9tX{gJ zT|ZR5vpr!hyunZXx%|}R8@3dH=uME$oW;&1Uh2c8IsB1so#`x zyoMV{k-{{%^!_^r($>Tu>(VDqY2hgLlWwgWvp#qUQnU-q#8c<&Ii49;5+B`46HK*t zRv!2HxNr|OzI8WM*Y@H7)QFOmHnn_4o^(j8pq4+fCfn@9zx&i46&hAsw*edj_k;nt zkF@~-mY&9lvbEASgEWatEQz?GFSkT zy$6dm0C_6l{xuI?ZewCw7IWo^ZQxyu`+Mtl_bqWoqEp3#!1VwXONs#m?eeY!A;t9_ zM#K12H;-tVjQ#oR>l)R$->QzvVyaAg>&5m|Cvy2e@!Y+aiHbh)Uy(q~wc$T|8Lz^VI!( zUR6M$WiZYsTB+cQLra+#ny8xYS61D=#IFLmOR=M2FAk#R`h^7K`{@B~fgIOyO$2y| z^fWin1I7M%)2d&iE*~n5pG`S~9$~jWPK5w8w@i(aGFG*>%}U0UA3VEjAuodZ7GJ9I zRQAYE8H6^H-bG0*e%++EhNH8tpyjE<|`t=901M>{CX(3Rk)yz#Gri z`a|@_(qV3XwDqgnHN}P;A=PkvHh%y%QxBw$j<=y7W_``<=?&S?QZ()lkN92`1Hn@o zc1)5m_-A6&sB&&TP|n?~{<$}w+dPHH?+t!)qW%nt-^pLbqs23-*v*01^5Al*sol5_ zv14B6rP|5abF8~iQc1hZix&<#HstfyUlMq9%YELTQiq4VwI-}PT#7HkOJ~(Z|4`n} zb6b=sm|1i&tK)>I=UnZBGN;bSJnAG9tpIxztXsKqJaV!N;ZgYd0uQlQN`n@n%-c|0 zH<@Gk5psEf5-xT9&AH4T_n~PNZbSTYD2&o0>|{@dSoJ$amqY)7;qrWav46d=GAT61 zOpT;xro72vub-5y4hs)0d{#J}QGAUSpV3NcO$(JAP&!ACM#7Z$WwHJW&n@~2&n02U z;JKQFt#&v&*9V%DUB*0ht}SCK+NaMNaql4TSi}HaKR;I8CqjOM=+3(SdoqmK|4cGW z{A>k=mcG;W{DRb zX3dGM|1cP4I<2QdH}+m~?I;@Owre#G?&J|M`%A&IUj=4yJgwH%iY$hC|*l~Mf)5Ki=EV}p_a!$TFkfIHP=~qxD@Yh`_RtWlj0%~ec zDCz(^ZTL1;9Q8j2&3)*%ZTB}xUEWoZfSY#|85^b-TzjhbSWbbYFd`E7B6>_r$Nse& za`aQZ)Z%+h>KPYa4OefZ29Ad2L=;X9qi!J_@TphL5rrU0M0@7aC|!;Ts1Nk}-?w*b^y#m}?@Bcsc`N1EAJbrt@wa-w z1{57!a;xHc!rQ}x#?i?<#$KjS<1VrEfdx>41U z{(1HT)}}$o(7GUB&|t5E`gcHTt8hKDK`8j+MbZ@PuNmh+o3I3ALPp>h4D4=M( za)Be8Pg5#TSeA@L*06cUIS90R3a8w(ru^gu_)>h(q1`a&6bQ5l6T1yH5@3P|!;jz% zWqm^AM=|2{q$+5Zwz~*F_JMFUc8;Mk^HtktI0uEo_pzSc$3IoQ;6WhTuv! zSMzqR3d7yzqiLCm#t@lIwC&l$*Ve*an$OxdgJ&ubMrDP=EcqQN0uI6-21mt115TQV^?HG_UR*{`LZS3K=x~J3qlnmn3qM0qjycD@2VV^Zzg_OgX{6T+eL>KRYq| zcSlm36>h@laLx6^87mX&^`nZbwCAPjW1TAZntCL+U2~~(q&TnYK5|MsD183RR-#3E z|ADQfH}UV;N^;4d?Dpi^o=NBGD|_>SJBbOBga!W%OTB~gV#oi^DXj1ZA#X7n-@6nF z)PdcWtz!=)fCb2XfRdRat#u~pPU2hnqO{jxF^7&e#b<@UfcXex2|6-^>b5y`!Z#`( z;TOR+Q{Gd>gg8MI(JDthHLtULZ^mWBH30}#(AJ_}1{N}j`xIQf0_i}zuTkNfiKK<5wOjsK=fzN&@YxheEE74_e))j*i!#5S z_l|jk_*rYN4;nMqmlup?QXU_7sOy)#8;6bFKUth-wWxWPUua?8tz0aH62zxp>1)?J z^Q?8L@`xDWa9u4GztjLPO={0wuYe+NY+F|I@n_G#sMHYJn_^ANW=V%+L51Pbbt*Cm zxd4ixwsl(^P-8{0+Q5)@g>AdwApUDu2$iC~YXZyaAf@mBrVYKpA%n!{5B=Ik?BJA! zv8<4!`e}qc^Xo8#W5xUHO^v)ksD?N><0!JE7x-pof0}q)jNCIqb3|-nSg(dVy@6tg zy|Q6$c8s!4{J4)SQka-PW)q5H%G-g2Kx;ymg7_h~=5(zI1Jmp`k7T=G$82O`o!GSGu+k-zmfoy0!Ok0~= z{2QTFzv822arPW`%~ zN<-rGgm%?0;?Ocw0U|W4Itnbm?y|JXf|sm4zX?xW$AqWeOmHL#Nq0@|6eR6gRHQ#G8wiw;yu?6h42|DbAXb0N69S?$y zks8(Bdu23Zyon@HzB46>7mHDO^{!WQ`c+;m#sd7Wn|CTVpt7^s-I~@A27`rmRr1B@ zEOM)7y6vbIewL*PL;G#}XwmAJI@o#M>sY#tojpyhez!_Q&Qwaop(I3JSDm851$1cz2+*am z6E}^pOhyGX=}`nL-@Nk|yeP4d&|=Ko^oTl6=jh@@y=@22_)$c7@}j|Sk33u9j~%b` z8i>TT{>i^)#LWg7ah~OF$W4;vmDKh^cUg!z(k0$)1}2mnX6XT~!}O_s5A&Szdzk0Y zSeWNoGFxr#qXn1R`37)aQaN7l*Cl_9{k2u_Hd&O5$^A)g%uW_N^7z5w?tUgI6Wn95 zQ_l;HYt~(jG-C1qgenwU&JB}?Zqyly0rD{4*>!@N85pN3G?G5E%+_yfGl~6@J2dO$n<#U??xsg?#*Jhc~N1^iAZ(FoVBSZK&oIx zT@hP|SMH`F65+~@QNgPPp?GgKi3C_w{c109>urH? z$;cl>kVbnL05}ul<2g!1c5+zB;?E6DJ|s3{tLdE|snol$?FX+gJVZu}2Sr4e*Z+4@ zJ@?fngG`phDD(8lw+NbRZrJ@ISoXNB!y>N{WNdRd|I~S*YJDN{aC4(PjceEYE!|VN zlt*jsk6nq-U*528DbmJS-6x;up8ggNXW!bHZxMjIB;?lfVk1C;Cf^&zF9SCGQ80kU znQuFuk_jlM1of%n$L*#a$6&~i_^_o7?La?PG0Q1cbDcf$Zm5KU%D+ZNkMcvUW(#O}mt9GUD>>TM)QNTNMvK^=5hA`UX-+jQgQ zG49$Wix62U2FoDt9v*oj#b(&yy!WZ1T`uEB zbgaX1aX)P%LB~%N`++{H8jJdn-2)n_X0W({($Anwpk=<$c-bZeInJ60>Ap0 zn3;urN)WEf?I6mdtomVAc%g#!oQJaQSKyVh>S$5v7{5HWzmUFI%`al1qy9#wXsmiucP;=G-w_bI{g zZ6hNT+IK`O)iB~i^Hot!U(~Et;Bqn6imRXU$GTn6p@CYvvlZ}>6t4T0Lc;mrMt@P2 zdjLH6CSZ(^5c*Zj_}j`{`}rZBYIDGDK1qwB23K^X@=i zCEz5fe~(K;Ctv;pF74T(zsIGqyN!`^{no1v?T#j6T7er+Aq6o7{|!lY5F)(eeu^u~-!Z4ozCFFiA{Y_Bk%gO#DKcqWkq`Ae9-xu7NkG4_F`nzQIj$ z(r1cXEHUK>RQ}JbQ{a7hjf_>|4>>K8SkDG~`vkyS?z?MZcXJlb+1ZR$#B&8Vd!o+P>0VU8S`+vE3GByMYCu%8- zsTye#2sPPQY?e8AtL~>po0go8A^nirU#H>L%neL==kwaw?`|FzpnGE}bwn^#PBgGC)OqCycz$LR z9@_n|HCU$W_w)78@BF5I=w4Xg$;tM6*iCio%ubC$$A^1J@BO9s*tKkJunIQGB_qk- zr`cUWVj_bP4tR%w)qGPf(30BGf<`|o^k^S(SKCKuXFPMYdmdnudrDpc8VT(#S$5#R zNKMS{5T?b}R(;Cn*96h!^$uAPAA;@Cu{?MCVbtodpkk-ab)A~SmO6{HI52T+xp=r? z{Y>XhbQFrF^s3OB>GD;lcgZYOzjqF_7b!pe#y`MMii5{`8A#8VcV`xaekz3X22^G< z?}7M4wHdqu0QfbhBFSIjU+8C-B8{z^2Qng5Vg3XY7l;+!=U>8wH*X4}xer#YXFH{) z`*n)*G6ZHrtI@$&IkobLOPsrH3|yj_xuDO_jye`^5V?z|7I+Yot2Kq4b|2d~`7qe%tKOTtdJucx!5_z;D2ryKl=2Ezabs+x+YNRT zU4n0(?!Lhu=v+^(#^Q}eH$%uj?1j|gii`fUOG!_5X`>#`*&`&O+5X`;2KZNZ@3Wg) zk&^|AmNC@AOxtT_E02u!HK8*v|BPaDn@$W5ZFAw`ddSh@LNLx zlKFn$5NTpoc?j^M#ylqnE|<(@^dqeit>RfP!^i8K1?dSR@!5k%V;X+%DBuYXiP2kD z**5f3JmrD8R{cL29o#^kJRW<=HimB5?g?)?(OmJsP@PU67({m_26W|2cP)LqHA3TH zZUEW?f~0tOA8J(@$nIQ2p42zg+hSk73k4am9tErEqWs8r7Sc#!dq!HY^0Wc^(z+|+ zXGJuucAXWy(!8(xDz{u?7GNyE2S86)>?-F@|L{adyfak6OyKlA4o^1*AMw9i5wT?? zUl6Q0mZfl3Cz0EoD+d<67R=u-?RNm&O?x7v3M53iX<7-G+_{6FJ^e7BS-yAmN0iVD zyxg(dzk5er5<=D|0jal|G9DsEoq|^#!;eBLuXZfESk(ohT02(8kRE^ zNn7`U_XX@d8amKMFC(hediSg3gcVe*I;fki8R8M;HA3WZwcgMs0UlJWpb25m`USO7 zv-6mWAdF@29$olYUa;TCj#QJK0RXK7FBP*DMM5M>O=GpzfuQ$MOGCxan`^~yP<3D+*ho6J z2a1zlW`ULiU%W@#90`0rh!HJdt3(ljB@~dlX&VVBe(hoH7N?;@N;-3us1Mdqu%zQ) z)s;d$rPB9+YB5ihu(7_NXgF{{Vf}INHE5&4mFbfYgOdK*I6iXOFR|;7Il_T#!?7z!*32`>@H zwav!A5|6=psQPJ)QczQU_~BpR>oDeTMwa3)1}oo{%Sq?cXw9YSd6X|fu79u7|9>C2 zM*iRE>Rg=2=#(Y~Ay$v9enG;9wTE1%laLOov`ayZNxqFSppqXtGnrE?Jue)lU*3K| zURo>b(A=clN5PW({rcbC7IRX62aUY0l1h|u{^^c%#EItsDt z01&&1-ywEh{}5u=@H@nAU6KYwlG>wU%zA?nZml0xx>(*OZUJ~sg2rHHg!KeVi z7xVg0(CZ)fvFLBhajyUoqzO18wHfhGFMIz6VP2rQcIy340qcj19<2{*d-N_6$3c#7 zs<5W-j1IaoyvaFhDa^fgbLUXu@ILO|bS4}&mpra`pFOP=T6e!d96W|$E^Nbd6m?ey zm}doK(u%C5tZf?tBXJlrgh>zYYH*Q1&NYelsvl2Ry?p#*5$%B!qPt(50?5pn{i}Qt z-`LD@I33jpq-vI0I5U0cLEBsaXYQ8u^;XxPQDRbJUPW9HahzKOZ?`~ zt2W;=CpElN+>y9Fst>{~+zvh5bmt}!B}O(zt#AwjN;i>t6(;Qb>`7AqJ-x&wp zi=HDsb7aPL+Pi{T*E{RX;Q51AP7n$oB6VIUlN3BUd?6{>YOm3@&yh;+yi>SJXuH9_ znsSoz(8i-u5KRhb#7^BaPcerLaP{JMk)by@uD9x`yX^9zI+aX&>MJx6zT)ArHIOe6 zKSnkAuyqt;S02)0-EySoW_j$skUIx5P5@f-`tzhEakdw9vB%h}I_wwLrB$RU+=$nr z92@~%5mx_%vb#ohFS!mA+^+l@ML8T*+_?rN|eUuAG>$EhBG{-r6RGeV==^g}&REb#)AD7r8p6P1$~eTfyOqys4WXHC^dm;C>68vlm zzn=}Pr1I{k*1WbOt-{M?%m~AH1y^d|PRnAymIONaAp8xQNf$z=*#8_AmiD+#6Izq} z8Ci^r#J!U`yP#=5KWIYRlOfKhE?Ffe&EZ^h-8e*L7*zk)~@E@>1yC7T<~p<)A|Dt+SlQvG0>U zDoCPq6EV9~*)%guBWS$dzhdPzl1%ocKFW0>*Mn@R|3C6cSa~h32*g%pdt_|6qBZXR z_q+Jf{=1HVMD{->lwb>gk-w|&6^kLSQ9J8m)~_FYEpIXEN?YnIijLs`w(5^~=e$NF zkdOY?fM@KLYkcXk(5DwSXp$ejhtsUj4-81-VYKP`Jux9QR~8KQN#Kn1!-&hml0HTX zGPRUjai8XobLo#-P|&&p9P)2zb*j*sBUQ=u|DJ+k%KQ}{+M- zQ%^lYC#~<(CX{s0)?@+zJ*c#G2Eu_m=)16~FE#0(e|#U65^!4btb8R(9g)3%kT<87 z=|8Bof_^ZxI2q*a#2x$A>xz;HJj;k*6DJtp3tq-vCUA1ELm!=HPs>80Ifo255 z=1e(be|;7DS$?l)mv0DSTHk1Q08n&IRyp5)06;hy`8vGzgzEj}*)PQr9E+;ib=XH^ z&vM5lUZ}EZw=ioM9x9&~k3Cofg5u?UHa(diQ^rXX;@$v%na*p@UMMbd&qU7LxN6WA zGB^VCl-hc^$L_LvQ~FD%mnl!mBjp)@UZ<1u;Wkm5v7+My+9>d!->9q+XGURoS{WpG z)arM?ms2F$CP#h$b^ctMgmSFd!-R$t4!N(+afHcEFnM!y;`A2*p7Wf#2AJh)k6zXc z4oZ2h?=}^yk_J_4+RHVgw6J1w$erI(O4j=gFn3Wkqd)nrSjLSO%MGAde)xN_?Dh|f z<=TH*EGNmoEW~$FBx+R#i7nyLK_W_8WHw39B^Y=6oL^^!W-RUaga7ZjCG$1cBHq9J z)HeX%7~cHE?;clGS2^)glz$@OWAmckbLZD@b1DjBhS!$XyJfrhc(O6OOU57Is}4Y{ zn~#{J*5c+Kg*R|$B=L;4Jn@=FWm9ubBzwcYWHiZzk5#A7lC~95z>H{}W_hp%99$JH zim5W>6G-g!>{hWpFOqa|pQ}(28Z1RUi1kM**Ly8#mV zPR+e}wpO&v2j~)jgqFP=MM5j)Y~F_c>F41JheFrmi0|_;ee_!+qy-bED&z;C7v6ah z%MOi5HobFTRZwqR@?=Mz?op7EJXY7SY|3mnD4Ra^4PrCTJ*bh`N;TDI1;y@64c^mo ztQtpXlwTY*ztFy#UoK0T18T9ho-7U<$_ytPmNy;metJ(Ef3^IBZE?BBgJ(8}LtJ+n4So7bPBPD~?l4v7oY?lK3k0u+YxEDC~Ao72XDEyO(TTe}%aWmH)7`&HjMAU|wD9*_$|!^|H)h<+zU_ z2Be%|ALN_#L93kB2PMQL#%JVOvqS<9d^ATIiEUIRJ5r9xQYhB3klPGU)=GVlHE2_N zI`nJSU^fy8FwyII6VY`(1~N6_|7-8egPOe4I8JpDL@Y&6L6Jl10g50Nks~mGlvN05 zfpA44APa3kK+2_rxB{Y;LoGrJ0aWBz5hAzYNT?`bxB|s+%WH%XHvwW2Ap~;lFW|Cn zSG#ulS7-WnCdVXiW}fH$eZQa26ue9BlG$H{&eeg3hA!^{@7;aZB9$T;)f#P9UPpxO z+wYl+aZoEw(|tq0RJdA@o=b>E43^a+oBE|NB={Ur@myS}gvYu3uriDM`ea2xKDu86 zt6(x8)#1ep>&l2DKFuNJ&->s(7NC5tfk_Wt0Y)c?R{AinE0-tjnvhH|Y3D{p@Qa7q zA9RmV4NY4=BYr2-uX^}d5vC-B9j@lVL@-@2&I6n`IEabeTiuF0=@39PnG;*2NtY{M zMsM~B2Xx5Y^rCpN-Ey+Or z`~)mYzdCXINkdlKDnQ8U01AECbFFNHHy&(v~4#I-uX~{#Y9fmL=IcHhUs-MT05j}Ok zc1qazl-GICiXjSU1cbFXLCJ zR^EfQ2Bwc=k&c}vH^{*}=w(k7nZihJVa*P)eW0_`{~RhpzPW=DfpnC=qBvgtwkUQ& z*p>0WSiz5$K(|p18KyPOJtgkM6yvPnO_y)_&sG!ME8x{*I20P(s2_(?x1-9~OmF2u z8v~E2Ag}sGlLy}aVG7!b{NQ?XUaZDPZEu-^9~i5z|Aw*J-}wR8x!LAPH~kzk&cN9c z^x`xQ=%YE=L`to2^TtF?{@2)h$_R49a_ZF_m z&bBnCa5$qV()N}I6LCyNo3Y1xUHM4@$PA$Rj&LpjQB+9{0duWDN=V-rpG<)91q)=jW8BzE~B1?e+f2GsX$ zvQYxxT7FtAZHKflydE!1Z8cgy`CNX2@w^$_l#+2M1)%7clb{5Iik(id8kgNAImG46 z#;N0MFJ_o0(2OPec4cE(wFM%b8*N*$UqU`)M0)Ka(oXa9eoroliAGjo;^4-^_#d)( z7hWipPkWr`WI^{yFbPaVN!P>XQ5%Skgd+|DS?c^EfMUm{fk`Jh^X{0Oy7J8qvRDYe z;_XG>5<{FOg<;pb>FwPz;We^>Zj79r$v_+8v_|!NLMar%d|s_mpjVL?_V<3d2=(w? zW#S`yr~)M>DDLz8sahRAeoYu@GRC(=d~mZeqK?-6JlTonAZE9x%+1Y~T9YD72lOF> z4L;FohcZl)v;``*wB1jJd69J(z?JT-vn+DiNNw0rElw8{n2cTlE)QRl`*_6iOCFWT z;p|`Z*`1h7bc`To%i*Lt@UODn$M4PEu}C%Bd7aSk-R)owwrL^y*2Pg1YsN^-eLuu{ zA`|DPPR^O*cS%}|#t8`^o#AUE`Qi8-^|qMtK==%mRo&r8TiD+|vp(RYLgLv6h`sv_ zY<{LT{&yA4xO>rO#hbDpQvT+30?wgrkU zIgZ*IEgBYvMLWfFfM3+NZ=x&K~3r7}%L+vR`Ry5EZW`15J+uJV7JZ<0eIN#uTR X_1UBFWpM`h{bi2XJ0GpEJ$>n49Z0g% literal 0 HcmV?d00001 diff --git a/img/26.PNG b/img/26.PNG new file mode 100644 index 0000000000000000000000000000000000000000..dcd0e2057161e20de06579e42d75a2da603871bf GIT binary patch literal 45160 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 JBU_)2{uMRPvN`|& literal 0 HcmV?d00001 diff --git a/img/28.PNG b/img/28.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9dc8301be288ca9b0c157789c8653a536a82bca2 GIT binary patch literal 49758 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ⅇ3W%lXRwUEL9DURQ%g$ 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 C)f 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 Gzx@^U2kA@z literal 0 HcmV?d00001 diff --git a/img/2power_12.PNG b/img/2power_12.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c2c6325f919599a8120e8c57fa7ecd3adbd841c5 GIT binary patch literal 44021 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%0A1KSd1c>;qD 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 QJ~IG;r>mdKI;Vst0A;4UhyVZp literal 0 HcmV?d00001 diff --git a/img/2power_6.PNG b/img/2power_6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f220a3490774b3581933f6fbe0ed2203ea73ea3c GIT binary patch literal 44328 zcmeFZXIxWh+x8ozSt)~+7OYR3IL_nZ_9@3> zE0$_61%W^-?ClOagFuT4K_JD)i&cPk+K|hZ0SAR}=VOOJC0}$WfEP*uHV!r*P-*Hi z$$4eq^^!04_4;-^tWgI`CL7CZXkC4g78HgeyPdL|S7js&9xk53e8Vnn zMVoD5CjFg_s?H20;7Ut!h)aNjw>?q|I8;9rZ3YfuS#lv(E>r~md-MEJ>Sync$!skI&>$rtTNF#Pq_hNnrcf@`={A2F!uYd{+ww2`I+*H4VlnsONC zdO&OTNj_{H?(0+lTKPbEp<#`S7dr#5cIhU%0|8j9}Mk)E^Q3^A3u7&-EI_a z3f1ANf`m^tItVn>FlJP^6BDRx=N9X; zxY0A_kj4|$bh$p|J7HNdDzEI$P^ap37f-(IroovoWEXv+FGKm=!vWG^6A~2N8nbY1 zGpKNk_M)a(4ZmDkO~P)-=f3o*8`h4L6QsX!wL-z-a~VUd8wREXE6)^L9QqJ09>0M!+O;s?qF-;f zL#EEK*uubqbvZjpOs8r8cfS0Mk=yz*#DhkKHLuWz_S$82bAj*1-(8m2bz6PAi^jUd zGNu*;9TNY3ORmArWzMz+^OBl9c3BstUUSNYkB*~&?nhj)$1sy1oSd)9h;H=2bausK zr&azM?n;F+9ycZszTVi$Mj8C%Hr#nvzG~!mzf7`$X|SOo(>(*0}F$2CB!ZQ%a};Y zz~;-*YuY|hxEudE#>qNOmwk6R|X2e@dS2KtB%sG*C^!&eIXc*#>QhwID*_fbQl4p++)4WV4 zb+7vEB9=*(m3&i!Jp9}wwefTE#kdVnw4_zU(9EH>2qwjpEif;5e#!MHJP9{aR5hJm z!IOUxPY1a(5Sc>BbDrK;O zZh4ck7@<9Fu|I;B9G76QO3jA3vA;2pyF9shYe=ct#C-?JEsf<}=7w0*cNJuW)O7k8 znjjy2Ie*i(L*PEasB0#b&nq`gTODo{`RvLCUkt&q& zkgHzdNwFOG`Vw)>;1cIj1G{t*Gq6Fhw0Uz#9{3y>G^&+FtF4v2F>goX=X10rZRE!$F!L;Kv+z$bEO ztZ64`fhiH6EpT=c22{MuuxJz&@j_0B)%H?pQ?g`a4kYSWCv21{Mz_mf7%=(xs6qM9 z{$YN^jy=Y{g4La8LUAUU57JR5=@RWxIJBME*3FCB9|4@qq~W05t>lLVafI7gOPQNg zj~%zkKc3PcHyf0jsIM&XMZ3w(D-q=>ELNlqvs-{peU+m69aKei9DvS5E-Vs5Bbo~X z4tTQ9M+2wb>xOxzFCa0TX}qLyOZv^bhllPl)BmCnk6o zxm9h8{e)S+=1S!oJbrtm zN@4FYtbHj3DV@Fy27!8h>`in9gQ$zDHd)(Uf33cK%zCSG;Cf240bzAP+cWkup}!RJ z!kBKv&E$o2m_znlZtF1i8x>*5T&X5|2TVNcJ@c5%QSe6?42Cki`Q%FL-RhRgx2u;+K_5TPNZYyN-VC48^W5l1Gc__c*7q)~hE< zcZBL5g8DzbTKxJ|Tg2DAABClKT73yDLJcPqRN~1#eYMapj;f$@C&4ot&nzq3xM6W; zN0ica!&51$@%*&TAjU`4J?pK*#ze4AqNQJaSM5dpDBQC5d4g;TX}r^i)!~Q2AqIcT z5thQO*7>FzCPK=Q545+FD~=0KOI26AmN&40=VWGlzg8Xoh=jx<%kdW40L(nu1|DzBI~mXSj4a z1eRV`S#4e>9+?D?s(DTm{YX3e0(B84LSt-^+Pangc;u-olbD@JC6VGon70)sDl5XJ z4K_hb&4PGcXGgR;{1e7H%lT57RsK+0#%=;zV4=x2ZmGMr#m=;Ejoxx+q>j7a)LCHF z|J9kY;jWEJiJimX9X2+Lf4fNEW^nv^p}F#&sfZ|zmudJPxGKc=#4i?X!8B(BOMMgo zjOD0W?AJ|tBQB5-W2PD}546iSGyPl1$XN`tqHi2HgF8}#O%OA_K|r9lpIej)BaUOD zTnse^wQnIQ^T0D)Y+xr<;yxO(a$33spuxs*L%Rm6W`LXGvvqzxOsjSN@swY;-mV=& zocMZdRfGNLhFABOpbwB+*1QbtY{_R|Ba2Fg5qZ!rLC9*0e$lsR&^aBZJ(EM}jDMt; zTrDncpDcHAZ&q{u5b*oa1N6(I(8t+m$H2JfP>(;xvlG7fq8HgPRn9y9=(!25Md(%p zvOY9K{Skgg;arMAM5;?-*A*e?$`oRGo_X7&bor`@aLfp_gq5w3$QmCst=MW}69koC z6j#k(RTGF>6T3dQOfo=_=00GGT+Ye&NmqPJ`0Ot%$M$p@8e#L&RSz!@9-HI6yi72` z!$?Q9vfr$X(fdZ3d{!o(vW|v~@lB*{;>)QB-J~y(Cf>-V=+LD~ILWcj6ECsh)>Kmz zUsU~kI-G5Pra@}OqLk9A2&jA4%++5>Hl0%wW<$%=h5faVYL-82Hlc1({!M!RgO-iC zi3=7?IXgBd63#y*x3YRFNol+c_9NC_o|89B=>dN}Bm|2}iN!B!R6s0omZ})3HO)qR zH~&T!U)ACZ#~rTrHkK#V^yCn(Y84@i_-@%7E2{U9lV0Xj?$w_vK@jz18lTiRmpAz8 z=BKdLcz10(RZo=YHN89QHwt~0J&67N+(k#$S|}WO??rcWHouC>2x_R_?S<2VOZRn1 zb-NNXo;bC6^n&H|_Lyyb`0K8|pG?GKcx>MTGK@)St(w*G_Ub3NfPK~h5Z*4xFGBd@ zxB7HptE$pyqpP^%T=y1AC`{-H17EMB(#JtBXgY~q^ha-J1FsX-E$iJ}7~F9r>--~M zTD}j}f3Y)JU{H&qn%NB zZ%c|p?O26D#E1E*?@U;F{-0O#Cg8WR>OZPXQ69eTl*3+08D%YfLFfo+!(}ARBgDPq zt|%i$i?%Vy%m3+7;U!d3E4Z)nUg;-BI68>7GUN?q`W>g7UKN3?=m4F24bRST`y(^3 z=SI1rS>NJx2hYB<0mGtP{nyCj9>gpi^Y5LBT`NZFP8|G59qIGPU$`6bl++aJ=5Wa! zmOIN&3CDjt#|OrVpm^G{h;3+<$yopO^z_}sfoPP|+R;qmijwWQA))oQS#BQW`IS;i zIyWv%;#)5#uofkR>=b5pX(N-uGYk4}d|>%M@hR3wBTscec2Epc$X@^FIs2;U61T(|Se%D)4dg z@R6R_pyi;x`mJ_WkFG9OF#qVX?OvPOO@(v75;^2|!w6LzvAhMkqC{%13YrA$g7}Bu z-D?_o{rYWqp+f!Oik}N<|B8Ru3Cp!|E`d*fVDtkI+|E((yJn+;d;Y}+y!WXl9PnkN z2gVyk9bYG3Y&dW$4$?Arq+@)?n~}JVqYscba}4O1cIgjZrYl8KIhKFy02+=AfEpa_ zYkBcn+AXBC1Tf~^nN?#XKV(lVouQ3=EkM`F#zd$%Ih=N_82jd^)V5zfeF_X^$)*$~LCmM?v&Fpv$UOL&9a#cMX8mr%>2@_pUS~WC;&vmg1vh^SeCy$;43HWw4eD zl@v;W-?)l(8ck{(855K^U7q3kWHG{q8cKHPar>TQ)sCXz$U466v*{8(ZJa?s=p#t0 z%~S$)TJTo#$k@-p@;os@EG30VCVA3XnU_HDjz_}D-Q>PVIqCXt6jeG9B{%0IT3_#fB}Y;04) z&A)_Q&bs>gvUw?g@TIM@VbZJMq$}TF4x^Ww-9-oU|) zl?4Qng*uc`=;N@lhT1m8rBQC1o8uhSc>&?_#P*|W)K88kTnjllf+lb7-b*?r#*I3S44h@i2JeP&ed8As#-Zcm z!%aLBCYO;B3a=z}L$Irx<)5UmA`$|L{U%=_sIov;@GITO|-a}B8KGmEjkcH5@ ziEmN0U-H-Bu&G({%=LD>WqmthYhoJA?N;bqtgT6Nke&%L=jb+myfR-X$*Db7Q<#qL zPI`@cqB~4G+oHl6ANhTRVMRJ-?y-Y}Hu(Y{7xCEx;Tqjc#25K`T{qP+pCZ`XF;Wz= z>j@iQF?~jWo}TZf3M{0IFtiRgpj5=@BLUJ9(P;sUpsd^s0bCe+w}H*F!m5>kTe=-E zma7xHq7^TyR-*C5-i9rX_;IRsP5bYRu(1`J*EAp0CC4okjAO%znxeh#3Z&nd65y89#R@PVtOlW z$|p*zPOc-$zfV#9Ll4Tbd@vX%kBspbS8xlfBr1tr9E}`DNy-+pO>z-1#WDjT{pyD< zx$x5B+y-tNllFti907c|Dfuw^DTiink||%ojk`8!EUdy!D@vyWNqgjmjLH`$y9*f4 z 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 literal 0 HcmV?d00001 diff --git a/img/Radix Sort.PNG b/img/Radix Sort.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b9e258ba5f1b4dd8f12258e40a282f911ccc119c GIT binary patch literal 53412 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 I;B@SN05wlP5&!@I literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 882819b..bed3fdc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,7 @@ #include //const int SIZE = 1 << 4; // feel free to change the size of array -const int SIZE = 1 << 24; // feel free to change the size of array +const int SIZE = 1 << 28; // 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 2c6001f219852ff6a9d36da231146afa131c64a6 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 19:42:44 -0400 Subject: [PATCH 15/19] Updated Readme --- README.md | 8 ++++---- img/Scan Algorithm Analysis.png | Bin 0 -> 20459 bytes 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 img/Scan Algorithm Analysis.png diff --git a/README.md b/README.md index 6419685..88a33d4 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,12 @@ The three cpu calculations are serialized; no multi-threading was consolidated. ## Performance Analysis The projects implements both CPU and GPU timing functions as a performance timer class to conveniently measure the time cost. `std::chrono` is used, to provide CPU high-precision timing and CUDA event to measure the CUDA performance. I have collected the data across 8 executions with different array sizes to collect the data. The program generates a new array of random values with each execution, where the size of array is customisable. I have varied the size of the arrays by powers of two, starting from 2^6^ all the wai to 2^28^. The program also executes each algorithm for arrays of size "non- power of two" which are generated truncating the "power of two" arrays. - +![Scan Runtime Analysis](img/18.PNG) ## Scan Runtime Analysis The performance of the four scan functions is graphed below. -![Scan Runtime Analysis](img/3.2.PNG) - - +![Scan Runtime Analysis](img/Scan Algorithm Analysis.PNG) - CPU Scan vs Other : From the graph above we can see that for array of smaller sizes the CPU implementation is way better than GPU Scan implementations but as the size of array increases the performance gap starts decreasing. This can be attributed toward the serialized algorithm/ implementation for CPU compared to the parallel implementation on the GPU. At some size of an array the GPU implementation would definitely have crossed over CPU's but, Unfortunately my GPU ran out of memory before i could reach that point. - Naive vs Work Efficient : Throughout the executions of different sizes of Arrays the Naive Implementation performed consistently better than the Work Efficient. This is due to the fact that @@ -40,5 +38,7 @@ The performance of the four scan functions is graphed below. I have implemented "Parallel" radix sort which effectively work on compare bits of a decimal number by converting them to binary. This process starts by comparing least significant bit and continues until we have reached the most significant bit. To check the authenticity of my implementation, I have compared results from mine to CUDA's Thrust::sort results. I tested it from 2^6^ size arrays upto 2^26^ where it passed on all the scenario's thereby validating my implementation. A screenshot of my result is shown below. An array of size 2^18^ is used. +![Scan Runtime Analysis](Radix Sort.PNG) + ## Blooper Apparently on the GPU side function: pow(2,12) was returning a value of 4027 which is super absurd. I fixed it by using bitwise opertaion 1<<12 which gave me the expected result 4028. \ No newline at end of file diff --git a/img/Scan Algorithm Analysis.png b/img/Scan Algorithm Analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..52fd992482a56dd03eee526b3d6b256fa799c692 GIT binary patch literal 20459 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 literal 0 HcmV?d00001 From 7e6576aa582287fd38834734f8a5217ec3f222a2 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 19:43:55 -0400 Subject: [PATCH 16/19] Updated Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 88a33d4..aa61242 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ The performance of the four scan functions is graphed below. I have implemented "Parallel" radix sort which effectively work on compare bits of a decimal number by converting them to binary. This process starts by comparing least significant bit and continues until we have reached the most significant bit. To check the authenticity of my implementation, I have compared results from mine to CUDA's Thrust::sort results. I tested it from 2^6^ size arrays upto 2^26^ where it passed on all the scenario's thereby validating my implementation. A screenshot of my result is shown below. An array of size 2^18^ is used. -![Scan Runtime Analysis](Radix Sort.PNG) +![Radix Sort](img/Radix Sort.PNG) ## Blooper Apparently on the GPU side function: pow(2,12) was returning a value of 4027 which is super absurd. I fixed it by using bitwise opertaion 1<<12 which gave me the expected result 4028. \ No newline at end of file From 751bd85305f31dc5d7ffe37ebcfea8b806cf3826 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 19:44:52 -0400 Subject: [PATCH 17/19] Updated Readme --- README.md | 6 +++--- img/{Radix Sort.PNG => RadixSort.PNG} | Bin ...rithm Analysis.png => ScanAlgorithmAnalysis.png} | Bin 3 files changed, 3 insertions(+), 3 deletions(-) rename img/{Radix Sort.PNG => RadixSort.PNG} (100%) rename img/{Scan Algorithm Analysis.png => ScanAlgorithmAnalysis.png} (100%) diff --git a/README.md b/README.md index aa61242..447971d 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,12 @@ The three cpu calculations are serialized; no multi-threading was consolidated. ## Performance Analysis The projects implements both CPU and GPU timing functions as a performance timer class to conveniently measure the time cost. `std::chrono` is used, to provide CPU high-precision timing and CUDA event to measure the CUDA performance. I have collected the data across 8 executions with different array sizes to collect the data. The program generates a new array of random values with each execution, where the size of array is customisable. I have varied the size of the arrays by powers of two, starting from 2^6^ all the wai to 2^28^. The program also executes each algorithm for arrays of size "non- power of two" which are generated truncating the "power of two" arrays. -![Scan Runtime Analysis](img/18.PNG) +![Performance Analysis](img/18.PNG) ## Scan Runtime Analysis The performance of the four scan functions is graphed below. -![Scan Runtime Analysis](img/Scan Algorithm Analysis.PNG) +![Scan Runtime Analysis](img/ScanAlgorithmAnalysis.PNG) - CPU Scan vs Other : From the graph above we can see that for array of smaller sizes the CPU implementation is way better than GPU Scan implementations but as the size of array increases the performance gap starts decreasing. This can be attributed toward the serialized algorithm/ implementation for CPU compared to the parallel implementation on the GPU. At some size of an array the GPU implementation would definitely have crossed over CPU's but, Unfortunately my GPU ran out of memory before i could reach that point. - Naive vs Work Efficient : Throughout the executions of different sizes of Arrays the Naive Implementation performed consistently better than the Work Efficient. This is due to the fact that @@ -38,7 +38,7 @@ The performance of the four scan functions is graphed below. I have implemented "Parallel" radix sort which effectively work on compare bits of a decimal number by converting them to binary. This process starts by comparing least significant bit and continues until we have reached the most significant bit. To check the authenticity of my implementation, I have compared results from mine to CUDA's Thrust::sort results. I tested it from 2^6^ size arrays upto 2^26^ where it passed on all the scenario's thereby validating my implementation. A screenshot of my result is shown below. An array of size 2^18^ is used. -![Radix Sort](img/Radix Sort.PNG) +![Radix Sort](img/RadixSort.PNG) ## Blooper Apparently on the GPU side function: pow(2,12) was returning a value of 4027 which is super absurd. I fixed it by using bitwise opertaion 1<<12 which gave me the expected result 4028. \ No newline at end of file diff --git a/img/Radix Sort.PNG b/img/RadixSort.PNG similarity index 100% rename from img/Radix Sort.PNG rename to img/RadixSort.PNG diff --git a/img/Scan Algorithm Analysis.png b/img/ScanAlgorithmAnalysis.png similarity index 100% rename from img/Scan Algorithm Analysis.png rename to img/ScanAlgorithmAnalysis.png From dce4aff23a3924dda804929cf38f242066978b30 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 19:45:39 -0400 Subject: [PATCH 18/19] Update Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 447971d..8e12992 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ I have collected the data across 8 executions with different array sizes to coll ## Scan Runtime Analysis The performance of the four scan functions is graphed below. -![Scan Runtime Analysis](img/ScanAlgorithmAnalysis.PNG) +![Scan Runtime Analysis](img/ScanAlgorithmAnalysis.png) - CPU Scan vs Other : From the graph above we can see that for array of smaller sizes the CPU implementation is way better than GPU Scan implementations but as the size of array increases the performance gap starts decreasing. This can be attributed toward the serialized algorithm/ implementation for CPU compared to the parallel implementation on the GPU. At some size of an array the GPU implementation would definitely have crossed over CPU's but, Unfortunately my GPU ran out of memory before i could reach that point. - Naive vs Work Efficient : Throughout the executions of different sizes of Arrays the Naive Implementation performed consistently better than the Work Efficient. This is due to the fact that From 876aaeff9a8cec9b6e64e5ce5a7afb27cc187fc5 Mon Sep 17 00:00:00 2001 From: Shubham Sharma Date: Tue, 21 Sep 2021 23:52:22 -0400 Subject: [PATCH 19/19] Updated Readme --- README.md | 6 ++++++ img/Compaction.png | Bin 0 -> 20042 bytes 2 files changed, 6 insertions(+) create mode 100644 img/Compaction.png diff --git a/README.md b/README.md index 8e12992..9a949a7 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,12 @@ The performance of the four scan functions is graphed below. - Even though it looks like we have limited the number of active threads while performing "Upsweeep" and "Downsweep" the threads which are not doing anything have to wait for the other active threads in the warp to finish to become available again. - Those idle threads cant be utilised by the GPU to perform any other tasks in the same depth of an upsweep or downsweep thereby decreasing our Parallelism. +## Compaction Runtime Analysis +The performance of the three compact algorithm is graphed below. +![Scan Runtime Analysis](img/Compaction.png) + +We see a similar trend in values as above Scan algorithm as these compact algorithms derive from Scan algorithm respectively. + ## Radix Sort (Extra Credit) I have implemented "Parallel" radix sort which effectively work on compare bits of a decimal number by converting them to binary. This process starts by comparing least significant bit and continues until we have reached the most significant bit. To check the authenticity of my implementation, I have compared results from mine to CUDA's Thrust::sort results. I tested it from 2^6^ size arrays upto 2^26^ where it passed on all the scenario's thereby validating my implementation. A screenshot of my result is shown below. An array of size 2^18^ is used. diff --git a/img/Compaction.png b/img/Compaction.png new file mode 100644 index 0000000000000000000000000000000000000000..9fe8341b88ef49e76cd3d08b907d67631479f719 GIT binary patch literal 20042 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 XC(}F!uj<&hppg(yS3j3^P6(e literal 0 HcmV?d00001