Adjusted timing test repetition and added QR decomposition
Some checks failed
Merge-Checker / build_and_test (pull_request) Has been cancelled
Some checks failed
Merge-Checker / build_and_test (pull_request) Has been cancelled
This commit is contained in:
@@ -41,7 +41,7 @@ jobs:
|
|||||||
mkdir -p unit-tests/timing-results
|
mkdir -p unit-tests/timing-results
|
||||||
if [ -x build/unit-tests/matrix-timing-tests ]; then
|
if [ -x build/unit-tests/matrix-timing-tests ]; then
|
||||||
echo "Running matrix-timing-tests with timing"
|
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
|
cat unit-tests/timing-results/matrix-timing-tests.txt
|
||||||
else
|
else
|
||||||
echo "matrix-timing-tests executable not found or not executable"
|
echo "matrix-timing-tests executable not found or not executable"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
// any other libraries
|
// any other libraries
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
// basically re-run all of the matrix tests with huge matrices and time the
|
// basically re-run all of the matrix tests with huge matrices and time the
|
||||||
// results.
|
// results.
|
||||||
@@ -29,13 +30,13 @@ TEST_CASE("Timing Tests", "Matrix") {
|
|||||||
Matrix<4, 4> mat5{};
|
Matrix<4, 4> mat5{};
|
||||||
|
|
||||||
SECTION("Addition") {
|
SECTION("Addition") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat3 = mat1 + mat2;
|
mat3 = mat1 + mat2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Subtraction") {
|
SECTION("Subtraction") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat3 = mat1 - mat2;
|
mat3 = mat1 - mat2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,19 +48,19 @@ TEST_CASE("Timing Tests", "Matrix") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Scalar Multiplication") {
|
SECTION("Scalar Multiplication") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat3 = mat1 * 3;
|
mat3 = mat1 * 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Element Multiply") {
|
SECTION("Element Multiply") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat1.ElementMultiply(mat2, mat3);
|
mat1.ElementMultiply(mat2, mat3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Element Divide") {
|
SECTION("Element Divide") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat1.ElementDivide(mat2, mat3);
|
mat1.ElementDivide(mat2, mat3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,52 +69,59 @@ TEST_CASE("Timing Tests", "Matrix") {
|
|||||||
// what about matrices of 0,0 or 1,1?
|
// what about matrices of 0,0 or 1,1?
|
||||||
// minor matrix for 2x2 matrix
|
// minor matrix for 2x2 matrix
|
||||||
Matrix<49, 49> minorMat1{};
|
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);
|
mat1.MinorMatrix(minorMat1, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Determinant") {
|
SECTION("Determinant") {
|
||||||
for (uint32_t i{0}; i < 100000; i++) {
|
for (uint32_t i{0}; i < 1000000; i++) {
|
||||||
float det1 = mat4.Det();
|
float det1 = mat4.Det();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Matrix of Minors") {
|
SECTION("Matrix of Minors") {
|
||||||
for (uint32_t i{0}; i < 100000; i++) {
|
for (uint32_t i{0}; i < 1000000; i++) {
|
||||||
mat4.MatrixOfMinors(mat5);
|
mat4.MatrixOfMinors(mat5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Invert") {
|
SECTION("Invert") {
|
||||||
for (uint32_t i{0}; i < 100000; i++) {
|
for (uint32_t i{0}; i < 1000000; i++) {
|
||||||
mat5 = mat4.Invert();
|
mat5 = mat4.Invert();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SECTION("Transpose") {
|
SECTION("Transpose") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat3 = mat1.Transpose();
|
mat3 = mat1.Transpose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Normalize") {
|
SECTION("Normalize") {
|
||||||
for (uint32_t i{0}; i < 10000; i++) {
|
for (uint32_t i{0}; i < 100000; i++) {
|
||||||
mat3 = mat1 / mat1.EuclideanNorm();
|
mat3 = mat1 / mat1.EuclideanNorm();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("GET ROW") {
|
SECTION("GET ROW") {
|
||||||
Matrix<1, 50> mat1Rows{};
|
Matrix<1, 50> mat1Rows{};
|
||||||
for (uint32_t i{0}; i < 1000000; i++) {
|
for (uint32_t i{0}; i < 100000000; i++) {
|
||||||
mat1.GetRow(0, mat1Rows);
|
mat1.GetRow(0, mat1Rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("GET COLUMN") {
|
SECTION("GET COLUMN") {
|
||||||
Matrix<50, 1> mat1Columns{};
|
Matrix<50, 1> mat1Columns{};
|
||||||
for (uint32_t i{0}; i < 1000000; i++) {
|
for (uint32_t i{0}; i < 100000000; i++) {
|
||||||
mat1.GetColumn(0, mat1Columns);
|
mat1.GetColumn(0, mat1Columns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("QR Decomposition") {
|
||||||
|
Matrix<50, 50> Q, R{};
|
||||||
|
for (uint32_t i{0}; i < 500; i++) {
|
||||||
|
mat1.QRDecomposition(Q, R);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user