From 3564f159797eb240d41f36a616f2e8cbc5f72284 Mon Sep 17 00:00:00 2001 From: Ethan-Liu301 Date: Thu, 10 Oct 2024 20:47:39 -0700 Subject: [PATCH 1/5] Create magic_square.cpp --- .../src/magic_square/magic_square.cpp | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 code/unclassified/src/magic_square/magic_square.cpp diff --git a/code/unclassified/src/magic_square/magic_square.cpp b/code/unclassified/src/magic_square/magic_square.cpp new file mode 100644 index 0000000000..a7435da263 --- /dev/null +++ b/code/unclassified/src/magic_square/magic_square.cpp @@ -0,0 +1,54 @@ +#include +#include +using namespace std; + +// Function to generate odd-order magic square +void generateMagicSquare(int n) { + vector> magicSquare(n, vector(n, 0)); + + // Starting position for 1 + int i = 0, j = n / 2; + + // Fill the magic square by placing values + for (int num = 1; num <= n * n; num++) { + magicSquare[i][j] = num; + + // Store previous position + int new_i = (i - 1 + n) % n; + int new_j = (j + 1) % n; + + // Check if the calculated position is already filled + if (magicSquare[new_i][new_j]) { + i = (i + 1) % n; + } else { + i = new_i; + j = new_j; + } + } + + // Output the magic square + cout << "The Magic Square for n = " << n << ":\n"; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + cout << magicSquare[i][j] << "\t"; + } + cout << endl; + } + + // Display the sum of each row (which is the same for all rows/columns/diagonals) + cout << "Sum of each row or column = " << n * (n * n + 1) / 2 << endl; +} + +int main() { + int n; + cout << "Enter the size of the magic square (odd number): "; + cin >> n; + + if (n % 2 == 0) { + cout << "Magic square works only for odd numbers!" << endl; + return 1; + } + + generateMagicSquare(n); + return 0; +} From 239338fc06b1704456bc955d434696a961b87180 Mon Sep 17 00:00:00 2001 From: Ethan-Liu301 Date: Fri, 11 Oct 2024 03:56:35 +0000 Subject: [PATCH 2/5] added my own optimization to sqrt --- .../vectorized_sse_sqrt.cpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp diff --git a/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp b/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp new file mode 100644 index 0000000000..5e32a8726b --- /dev/null +++ b/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp @@ -0,0 +1,22 @@ +#include // SSE +#include + +inline void SSESqrt_Recip_Times_X4(float* __restrict pOut, const float* __restrict pIn) { + __m128 in = _mm_loadu_ps(pIn); // Load 4 floats unaligned + _mm_storeu_ps(pOut, _mm_mul_ps(in, _mm_rsqrt_ps(in))); // Store 4 results unaligned +} + +int main() { + // Use an array of 4 floats + float in[4] = {8.0f, 16.0f, 32.0f, 64.0f}; + float out[4]; + + SSESqrt_Recip_Times_X4(out, in); // square root method + + // Print the output values + for (int i = 0; i < 4; i++) { + std::cout << out[i] << std::endl; + } + + return 0; +} From 805048741ddb118e37cbfa5a791594e0e7cf44e6 Mon Sep 17 00:00:00 2001 From: Ethan-Liu301 Date: Fri, 11 Oct 2024 04:01:46 +0000 Subject: [PATCH 3/5] oops --- .../vectorized_sse_sqrt.cpp | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp diff --git a/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp b/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp deleted file mode 100644 index 5e32a8726b..0000000000 --- a/code/unclassified/src/sqrt_func_optimizations/vectorized_sse_sqrt.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include // SSE -#include - -inline void SSESqrt_Recip_Times_X4(float* __restrict pOut, const float* __restrict pIn) { - __m128 in = _mm_loadu_ps(pIn); // Load 4 floats unaligned - _mm_storeu_ps(pOut, _mm_mul_ps(in, _mm_rsqrt_ps(in))); // Store 4 results unaligned -} - -int main() { - // Use an array of 4 floats - float in[4] = {8.0f, 16.0f, 32.0f, 64.0f}; - float out[4]; - - SSESqrt_Recip_Times_X4(out, in); // square root method - - // Print the output values - for (int i = 0; i < 4; i++) { - std::cout << out[i] << std::endl; - } - - return 0; -} From 4efdef764d3b67f29561d32b91ffa9c092c2da66 Mon Sep 17 00:00:00 2001 From: Ethan-Liu301 Date: Fri, 11 Oct 2024 04:05:34 +0000 Subject: [PATCH 4/5] added 1 of the square root optimizations i still use to this day --- .../src/sqrt_optimizations/sse_sqrt.cpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp diff --git a/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp b/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp new file mode 100644 index 0000000000..5e32a8726b --- /dev/null +++ b/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp @@ -0,0 +1,22 @@ +#include // SSE +#include + +inline void SSESqrt_Recip_Times_X4(float* __restrict pOut, const float* __restrict pIn) { + __m128 in = _mm_loadu_ps(pIn); // Load 4 floats unaligned + _mm_storeu_ps(pOut, _mm_mul_ps(in, _mm_rsqrt_ps(in))); // Store 4 results unaligned +} + +int main() { + // Use an array of 4 floats + float in[4] = {8.0f, 16.0f, 32.0f, 64.0f}; + float out[4]; + + SSESqrt_Recip_Times_X4(out, in); // square root method + + // Print the output values + for (int i = 0; i < 4; i++) { + std::cout << out[i] << std::endl; + } + + return 0; +} From 4776e245db8b1da3eec3398a03b5e411175705f5 Mon Sep 17 00:00:00 2001 From: Ethan-Liu301 Date: Fri, 11 Oct 2024 04:06:38 +0000 Subject: [PATCH 5/5] ignore this --- .../src/sqrt_optimizations/sse_sqrt.cpp | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp diff --git a/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp b/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp deleted file mode 100644 index 5e32a8726b..0000000000 --- a/code/unclassified/src/sqrt_optimizations/sse_sqrt.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include // SSE -#include - -inline void SSESqrt_Recip_Times_X4(float* __restrict pOut, const float* __restrict pIn) { - __m128 in = _mm_loadu_ps(pIn); // Load 4 floats unaligned - _mm_storeu_ps(pOut, _mm_mul_ps(in, _mm_rsqrt_ps(in))); // Store 4 results unaligned -} - -int main() { - // Use an array of 4 floats - float in[4] = {8.0f, 16.0f, 32.0f, 64.0f}; - float out[4]; - - SSESqrt_Recip_Times_X4(out, in); // square root method - - // Print the output values - for (int i = 0; i < 4; i++) { - std::cout << out[i] << std::endl; - } - - return 0; -}