From 719fc4d28a61ee8c4f875b251e35f3a3f4626c23 Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Sat, 7 Jun 2025 10:58:59 -0400 Subject: [PATCH 1/3] Adjusted timing test repetition and added QR decomposition --- .gitea/workflows/Merge-Checker.yaml | 2 +- unit-tests/matrix-timing-tests.cpp | 34 ++++++++++++++++++----------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/.gitea/workflows/Merge-Checker.yaml b/.gitea/workflows/Merge-Checker.yaml index 886a17f..51d29df 100644 --- a/.gitea/workflows/Merge-Checker.yaml +++ b/.gitea/workflows/Merge-Checker.yaml @@ -41,7 +41,7 @@ jobs: mkdir -p unit-tests/timing-results if [ -x build/unit-tests/matrix-timing-tests ]; then echo "Running matrix-timing-tests with timing" - /usr/bin/time -v build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt + ./build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt cat unit-tests/timing-results/matrix-timing-tests.txt else echo "matrix-timing-tests executable not found or not executable" diff --git a/unit-tests/matrix-timing-tests.cpp b/unit-tests/matrix-timing-tests.cpp index 9c01347..0722e0c 100644 --- a/unit-tests/matrix-timing-tests.cpp +++ b/unit-tests/matrix-timing-tests.cpp @@ -8,6 +8,7 @@ // any other libraries #include #include +#include // basically re-run all of the matrix tests with huge matrices and time the // results. @@ -29,13 +30,13 @@ TEST_CASE("Timing Tests", "Matrix") { Matrix<4, 4> mat5{}; SECTION("Addition") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 + mat2; } } SECTION("Subtraction") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 - mat2; } } @@ -47,19 +48,19 @@ TEST_CASE("Timing Tests", "Matrix") { } SECTION("Scalar Multiplication") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 * 3; } } SECTION("Element Multiply") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.ElementMultiply(mat2, mat3); } } SECTION("Element Divide") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.ElementDivide(mat2, mat3); } } @@ -68,52 +69,59 @@ TEST_CASE("Timing Tests", "Matrix") { // what about matrices of 0,0 or 1,1? // minor matrix for 2x2 matrix Matrix<49, 49> minorMat1{}; - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat1.MinorMatrix(minorMat1, 0, 0); } } SECTION("Determinant") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { float det1 = mat4.Det(); } } SECTION("Matrix of Minors") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { mat4.MatrixOfMinors(mat5); } } SECTION("Invert") { - for (uint32_t i{0}; i < 100000; i++) { + for (uint32_t i{0}; i < 1000000; i++) { mat5 = mat4.Invert(); } }; SECTION("Transpose") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1.Transpose(); } } SECTION("Normalize") { - for (uint32_t i{0}; i < 10000; i++) { + for (uint32_t i{0}; i < 100000; i++) { mat3 = mat1 / mat1.EuclideanNorm(); } } SECTION("GET ROW") { Matrix<1, 50> mat1Rows{}; - for (uint32_t i{0}; i < 1000000; i++) { + for (uint32_t i{0}; i < 100000000; i++) { mat1.GetRow(0, mat1Rows); } } SECTION("GET COLUMN") { Matrix<50, 1> mat1Columns{}; - for (uint32_t i{0}; i < 1000000; i++) { + for (uint32_t i{0}; i < 100000000; i++) { mat1.GetColumn(0, mat1Columns); } } + + SECTION("QR Decomposition") { + Matrix<50, 50> Q, R{}; + for (uint32_t i{0}; i < 500; i++) { + mat1.QRDecomposition(Q, R); + } + } } \ No newline at end of file -- 2.49.1 From 8b6f1de8225ea4b8858e55a98f923bf12a1c1fae Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Sat, 7 Jun 2025 11:01:04 -0400 Subject: [PATCH 2/3] Updated timing test timings --- .../timing-results/matrix-timing-tests.txt | 84 +++++++------------ 1 file changed, 32 insertions(+), 52 deletions(-) diff --git a/unit-tests/timing-results/matrix-timing-tests.txt b/unit-tests/timing-results/matrix-timing-tests.txt index 1e728e8..f3d5699 100644 --- a/unit-tests/timing-results/matrix-timing-tests.txt +++ b/unit-tests/timing-results/matrix-timing-tests.txt @@ -1,56 +1,36 @@ -Randomness seeded to: 2444679151 -0.180 s: Addition -0.180 s: Timing Tests -0.177 s: Subtraction -0.177 s: Timing Tests -1.868 s: Multiplication -1.868 s: Timing Tests -0.127 s: Scalar Multiplication -0.127 s: Timing Tests -0.173 s: Element Multiply -0.173 s: Timing Tests -0.178 s: Element Divide -0.178 s: Timing Tests -0.172 s: Minor Matrix -0.172 s: Timing Tests -0.103 s: Determinant -0.103 s: Timing Tests -0.411 s: Matrix of Minors -0.411 s: Timing Tests -0.109 s: Invert -0.109 s: Timing Tests -0.122 s: Transpose -0.122 s: Timing Tests -0.190 s: Normalize -0.190 s: Timing Tests -0.006 s: GET ROW -0.006 s: Timing Tests -0.235 s: GET COLUMN -0.235 s: Timing Tests +Running matrix-timing-tests with timing +Randomness seeded to: 3567651885 +1.857 s: Addition +1.857 s: Timing Tests +1.788 s: Subtraction +1.788 s: Timing Tests +1.929 s: Multiplication +1.929 s: Timing Tests +1.268 s: Scalar Multiplication +1.268 s: Timing Tests +1.798 s: Element Multiply +1.798 s: Timing Tests +1.802 s: Element Divide +1.803 s: Timing Tests +1.553 s: Minor Matrix +1.554 s: Timing Tests +1.009 s: Determinant +1.009 s: Timing Tests +4.076 s: Matrix of Minors +4.076 s: Timing Tests +1.066 s: Invert +1.066 s: Timing Tests +1.246 s: Transpose +1.246 s: Timing Tests +2.284 s: Normalize +2.284 s: Timing Tests +0.606 s: GET ROW +0.606 s: Timing Tests +24.629 s: GET COLUMN +24.630 s: Timing Tests +3.064 s: QR Decomposition +3.064 s: Timing Tests =============================================================================== test cases: 1 | 1 passed assertions: - none - - Command being timed: "build/unit-tests/matrix-timing-tests -d yes" - User time (seconds): 4.05 - System time (seconds): 0.00 - Percent of CPU this job got: 100% - Elapsed (wall clock) time (h:mm:ss or m:ss): 0:04.05 - Average shared text size (kbytes): 0 - Average unshared data size (kbytes): 0 - Average stack size (kbytes): 0 - Average total size (kbytes): 0 - Maximum resident set size (kbytes): 3200 - Average resident set size (kbytes): 0 - Major (requiring I/O) page faults: 184 - Minor (reclaiming a frame) page faults: 171 - Voluntary context switches: 1 - Involuntary context switches: 26 - Swaps: 0 - File system inputs: 12 - File system outputs: 1 - Socket messages sent: 0 - Socket messages received: 0 - Signals delivered: 0 - Page size (bytes): 4096 - Exit status: 0 -- 2.49.1 From 80c4ebfece538fe439268fc10b32a0cda7505c3e Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Sat, 7 Jun 2025 11:07:09 -0400 Subject: [PATCH 3/3] Put time usage back --- .gitea/workflows/Merge-Checker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/Merge-Checker.yaml b/.gitea/workflows/Merge-Checker.yaml index 51d29df..886a17f 100644 --- a/.gitea/workflows/Merge-Checker.yaml +++ b/.gitea/workflows/Merge-Checker.yaml @@ -41,7 +41,7 @@ jobs: mkdir -p unit-tests/timing-results if [ -x build/unit-tests/matrix-timing-tests ]; then echo "Running matrix-timing-tests with timing" - ./build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt + /usr/bin/time -v build/unit-tests/matrix-timing-tests -d yes &> unit-tests/timing-results/matrix-timing-tests.txt cat unit-tests/timing-results/matrix-timing-tests.txt else echo "matrix-timing-tests executable not found or not executable" -- 2.49.1