From d71795006d7cdd0508b67fd536a6c9332d7dc5df Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 17:47:50 +0300 Subject: [PATCH 01/10] added performance folder --- performance/CMakeLists.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 performance/CMakeLists.txt diff --git a/performance/CMakeLists.txt b/performance/CMakeLists.txt new file mode 100644 index 00000000..e69de29b From a2de6f8fae41e4e604adbaaee556175dae4e5448 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 18:07:28 +0300 Subject: [PATCH 02/10] renamed folder --- {performance => benchmark}/CMakeLists.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {performance => benchmark}/CMakeLists.txt (100%) diff --git a/performance/CMakeLists.txt b/benchmark/CMakeLists.txt similarity index 100% rename from performance/CMakeLists.txt rename to benchmark/CMakeLists.txt From d773985822b022394026019eca5e65794dc5248f Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 19:47:29 +0300 Subject: [PATCH 03/10] added avx mutiplication --- include/omath/linear_algebra/mat.hpp | 163 ++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 1 deletion(-) diff --git a/include/omath/linear_algebra/mat.hpp b/include/omath/linear_algebra/mat.hpp index 99f87757..d6f2d332 100644 --- a/include/omath/linear_algebra/mat.hpp +++ b/include/omath/linear_algebra/mat.hpp @@ -10,7 +10,7 @@ #include #include #include - +#include namespace omath { @@ -155,10 +155,17 @@ namespace omath constexpr Mat operator*(const Mat& other) const { +#ifdef OMATH_USE_AVX2 + if constexpr (StoreType == MatStoreType::ROW_MAJOR) + return avx_multiply_row_major(other); + if constexpr (StoreType == MatStoreType::COLUMN_MAJOR) + return avx_multiply_col_major(other); +#else if constexpr (StoreType == MatStoreType::ROW_MAJOR) return cache_friendly_multiply_row_major(other); if constexpr (StoreType == MatStoreType::COLUMN_MAJOR) return cache_friendly_multiply_col_major(other); +#endif std::unreachable(); } @@ -391,6 +398,160 @@ namespace omath } return result; } +#ifdef OMATH_USE_AVX2 + template [[nodiscard]] + constexpr Mat + avx_multiply_col_major(const Mat& other) const + { + Mat result; + + const Type* this_mat_data = this->raw_array().data(); + const Type* other_mat_data = other.raw_array().data(); + Type* result_mat_data = result.raw_array().data(); + + if constexpr (std::is_same_v) + { + // ReSharper disable once CppTooWideScopeInitStatement + constexpr std::size_t vector_size = 8; + for (std::size_t j = 0; j < OtherColumns; ++j) + { + auto* c_col = reinterpret_cast(result_mat_data + j * Rows); + for (std::size_t k = 0; k < Columns; ++k) + { + const float bkj = reinterpret_cast(other_mat_data)[k + j * Columns]; + __m256 bkjv = _mm256_set1_ps(bkj); + + const auto* a_col_k = reinterpret_cast(this_mat_data + k * Rows); + + std::size_t i = 0; + for (; i + vector_size <= Rows; i += vector_size) + { + __m256 cvec = _mm256_loadu_ps(c_col + i); + __m256 avec = _mm256_loadu_ps(a_col_k + i); +#if defined(__FMA__) + cvec = _mm256_fmadd_ps(avec, bkjv, cvec); +#else + cvec = _mm256_add_ps(cvec, _mm256_mul_ps(avec, bkjv)); +#endif + _mm256_storeu_ps(c_col + i, cvec); + } + for (; i < Rows; ++i) + c_col[i] += a_col_k[i] * bkj; + } + } + } + else if (std::is_same_v) + { // double + // ReSharper disable once CppTooWideScopeInitStatement + constexpr std::size_t vector_size = 4; + for (std::size_t j = 0; j < OtherColumns; ++j) + { + auto* c_col = reinterpret_cast(result_mat_data + j * Rows); + for (std::size_t k = 0; k < Columns; ++k) + { + const double bkj = reinterpret_cast(other_mat_data)[k + j * Columns]; + __m256d bkjv = _mm256_set1_pd(bkj); + + const auto* a_col_k = reinterpret_cast(this_mat_data + k * Rows); + + std::size_t i = 0; + for (; i + vector_size <= Rows; i += vector_size) + { + __m256d cvec = _mm256_loadu_pd(c_col + i); + __m256d avec = _mm256_loadu_pd(a_col_k + i); +#if defined(__FMA__) + cvec = _mm256_fmadd_pd(avec, bkjv, cvec); +#else + cvec = _mm256_add_pd(cvec, _mm256_mul_pd(avec, bkjv)); +#endif + _mm256_storeu_pd(c_col + i, cvec); + } + for (; i < Rows; ++i) + c_col[i] += a_col_k[i] * bkj; + } + } + } + else + std::unreachable(); + + return result; + } + + template [[nodiscard]] + constexpr Mat + avx_multiply_row_major(const Mat& other) const + { + Mat result; + + const Type* this_mat_data = this->raw_array().data(); + const Type* other_mat_data = other.raw_array().data(); + Type* result_mat_data = result.raw_array().data(); + + if constexpr (std::is_same_v) + { + // ReSharper disable once CppTooWideScopeInitStatement + constexpr std::size_t vector_size = 8; + for (std::size_t i = 0; i < Rows; ++i) + { + Type* c_row = result_mat_data + i * OtherColumns; + for (std::size_t k = 0; k < Columns; ++k) + { + const auto aik = static_cast(this_mat_data[i * Columns + k]); + __m256 aikv = _mm256_set1_ps(aik); + const auto* b_row = reinterpret_cast(other_mat_data + k * OtherColumns); + + std::size_t j = 0; + for (; j + vector_size <= OtherColumns; j += vector_size) + { + __m256 cvec = _mm256_loadu_ps(c_row + j); + __m256 bvec = _mm256_loadu_ps(b_row + j); +#if defined(__FMA__) + cvec = _mm256_fmadd_ps(bvec, aikv, cvec); +#else + cvec = _mm256_add_ps(cvec, _mm256_mul_ps(bvec, aikv)); +#endif + _mm256_storeu_ps(c_row + j, cvec); + } + for (; j < OtherColumns; ++j) + c_row[j] += aik * b_row[j]; + } + } + } + else if (std::is_same_v) + { // double + // ReSharper disable once CppTooWideScopeInitStatement + constexpr std::size_t vector_size = 4; + for (std::size_t i = 0; i < Rows; ++i) + { + Type* c_row = result_mat_data + i * OtherColumns; + for (std::size_t k = 0; k < Columns; ++k) + { + const auto aik = static_cast(this_mat_data[i * Columns + k]); + __m256d aikv = _mm256_set1_pd(aik); + const auto* b_row = reinterpret_cast(other_mat_data + k * OtherColumns); + + std::size_t j = 0; + for (; j + vector_size <= OtherColumns; j += vector_size) + { + __m256d cvec = _mm256_loadu_pd(c_row + j); + __m256d bvec = _mm256_loadu_pd(b_row + j); +#if defined(__FMA__) + cvec = _mm256_fmadd_pd(bvec, aikv, cvec); +#else + cvec = _mm256_add_pd(cvec, _mm256_mul_pd(bvec, aikv)); +#endif + _mm256_storeu_pd(c_row + j, cvec); + } + for (; j < OtherColumns; ++j) + c_row[j] += aik * b_row[j]; + } + } + } + else + std::unreachable(); + return result; + } +#endif }; template [[nodiscard]] From 5875930f1a12c674e4422edf84ba257703151cc9 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 19:56:50 +0300 Subject: [PATCH 04/10] added benchmark --- CMakeLists.txt | 5 +++++ benchmark/CMakeLists.txt | 22 ++++++++++++++++++++++ benchmark/benchmark_mat.cpp | 31 +++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 benchmark/benchmark_mat.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e98cb975..2e1ec2f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ include(CMakePackageConfigHelpers) option(OMATH_BUILD_TESTS "Build unit tests" ${PROJECT_IS_TOP_LEVEL}) +option(OMATH_BUILD_BENCHMARK "Build benchmarks" ${PROJECT_IS_TOP_LEVEL}) option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON) option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF) option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ON) @@ -103,6 +104,10 @@ if (OMATH_BUILD_TESTS) target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_BUILD_TESTS) endif () +if (OMATH_BUILD_BENCHMARK) + add_subdirectory(benchmark) +endif () + if (OMATH_BUILD_EXAMPLES) add_subdirectory(examples) endif () diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index e69de29b..8fd0f6d0 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -0,0 +1,22 @@ +enable_testing() + +project(benchmark) + +include(GoogleTest) + +file(GLOB_RECURSE UNIT_TESTS_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") +add_executable(${PROJECT_NAME} ${UNIT_TESTS_SOURCES}) + +set_target_properties(benchmark PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" + UNITY_BUILD ON + UNITY_BUILD_BATCH_SIZE 20 + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED ON) + + +target_link_libraries(${PROJECT_NAME} PRIVATE gtest gtest_main omath::omath) + +gtest_discover_tests(${PROJECT_NAME}) \ No newline at end of file diff --git a/benchmark/benchmark_mat.cpp b/benchmark/benchmark_mat.cpp new file mode 100644 index 00000000..dc23f565 --- /dev/null +++ b/benchmark/benchmark_mat.cpp @@ -0,0 +1,31 @@ +// +// Created by Vlad on 9/17/2025. +// +#include +#include +#include +#include + +using namespace omath; +TEST(MatPerformanceTest, Mutl) +{ + using mat_type = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; + mat_type a; + mat_type b; + a.set(3.f); + b.set(7.f); + constexpr int iters = 1000; + float acum_time = 0.f; + mat_type c; + for (std::size_t i = 0 ; i < iters; i++) + { + const auto start = std::chrono::high_resolution_clock::now(); + c = a * b; + const auto end = std::chrono::high_resolution_clock::now(); + + const auto time = std::chrono::duration_cast(end - start).count(); + + acum_time += static_cast(time); + } + std::print("Elapsed: {}, \n\n\n", acum_time / iters, c); +} \ No newline at end of file From 7b671dbd90d21f5c46f317e65885ce48447fea91 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:14:33 +0300 Subject: [PATCH 05/10] added benchmark submodule --- .gitmodules | 5 ++++- CMakeLists.txt | 5 ++++- benchmark/CMakeLists.txt | 15 +++++---------- benchmark/benchmark_mat.cpp | 25 +++++++++++-------------- extlibs/CMakeLists.txt | 3 ++- extlibs/benchmark | 1 + 6 files changed, 27 insertions(+), 27 deletions(-) create mode 160000 extlibs/benchmark diff --git a/.gitmodules b/.gitmodules index c158edf6..87b94fb7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "extlibs/googletest"] path = extlibs/googletest - url = https://github.com/google/googletest.git \ No newline at end of file + url = https://github.com/google/googletest.git +[submodule "extlibs/benchmark"] + path = extlibs/benchmark + url = https://github.com/google/benchmark.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e1ec2f1..9d01bbeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ option(OMATH_ENABLE_LEGACY "Will enable legacy classes that MUST be used ONLY fo message(STATUS "[${PROJECT_NAME}]: Building on ${CMAKE_HOST_SYSTEM_NAME}") message(STATUS "[${PROJECT_NAME}]: Warnings as errors ${OMATH_THREAT_WARNING_AS_ERROR}") message(STATUS "[${PROJECT_NAME}]: Build unit tests ${OMATH_BUILD_TESTS}") +message(STATUS "[${PROJECT_NAME}]: Build benchmark ${OMATH_BUILD_BENCHMARK}") message(STATUS "[${PROJECT_NAME}]: As dynamic library ${OMATH_BUILD_AS_SHARED_LIBRARY}") message(STATUS "[${PROJECT_NAME}]: Static C++ runtime ${OMATH_STATIC_MSVC_RUNTIME_LIBRARY}") message(STATUS "[${PROJECT_NAME}]: CMake unity build ${OMATH_USE_UNITY_BUILD}") @@ -97,9 +98,11 @@ endif () target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_23) +if (OMATH_BUILD_TESTS OR OMATH_BUILD_BENCHMARK) + add_subdirectory(extlibs) +endif () if (OMATH_BUILD_TESTS) - add_subdirectory(extlibs) add_subdirectory(tests) target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_BUILD_TESTS) endif () diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 8fd0f6d0..7a558a40 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -1,13 +1,10 @@ -enable_testing() +project(omath_benchmark) -project(benchmark) -include(GoogleTest) +file(GLOB_RECURSE OMATH_BENCHMARK_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") +add_executable(${PROJECT_NAME} ${OMATH_BENCHMARK_SOURCES}) -file(GLOB_RECURSE UNIT_TESTS_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") -add_executable(${PROJECT_NAME} ${UNIT_TESTS_SOURCES}) - -set_target_properties(benchmark PROPERTIES +set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" @@ -17,6 +14,4 @@ set_target_properties(benchmark PROPERTIES CXX_STANDARD_REQUIRED ON) -target_link_libraries(${PROJECT_NAME} PRIVATE gtest gtest_main omath::omath) - -gtest_discover_tests(${PROJECT_NAME}) \ No newline at end of file +target_link_libraries(${PROJECT_NAME} PRIVATE benchmark::benchmark omath) \ No newline at end of file diff --git a/benchmark/benchmark_mat.cpp b/benchmark/benchmark_mat.cpp index dc23f565..fa4538c9 100644 --- a/benchmark/benchmark_mat.cpp +++ b/benchmark/benchmark_mat.cpp @@ -1,31 +1,28 @@ // // Created by Vlad on 9/17/2025. // -#include +#include + #include #include #include using namespace omath; -TEST(MatPerformanceTest, Mutl) + +static void BM_MatMutiplication(benchmark::State& state) { using mat_type = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; mat_type a; mat_type b; a.set(3.f); b.set(7.f); - constexpr int iters = 1000; - float acum_time = 0.f; - mat_type c; - for (std::size_t i = 0 ; i < iters; i++) - { - const auto start = std::chrono::high_resolution_clock::now(); - c = a * b; - const auto end = std::chrono::high_resolution_clock::now(); - const auto time = std::chrono::duration_cast(end - start).count(); - acum_time += static_cast(time); + for (auto _ : state) + { + std::ignore = a * b; } - std::print("Elapsed: {}, \n\n\n", acum_time / iters, c); -} \ No newline at end of file +} + +BENCHMARK(BM_MatMutiplication); +BENCHMARK_MAIN(); \ No newline at end of file diff --git a/extlibs/CMakeLists.txt b/extlibs/CMakeLists.txt index bf73c7af..54eda0ad 100644 --- a/extlibs/CMakeLists.txt +++ b/extlibs/CMakeLists.txt @@ -1 +1,2 @@ -add_subdirectory(googletest) \ No newline at end of file +add_subdirectory(googletest) +add_subdirectory(benchmark) \ No newline at end of file diff --git a/extlibs/benchmark b/extlibs/benchmark new file mode 160000 index 00000000..2948b6a2 --- /dev/null +++ b/extlibs/benchmark @@ -0,0 +1 @@ +Subproject commit 2948b6a2e61ccabecc952c24794c6960d86c9ed6 From fbb77b99257f30c81afaabc66108bad3b6a895c8 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:22:42 +0300 Subject: [PATCH 06/10] patch --- .idea/vcs.xml | 1 + benchmark/CMakeLists.txt | 2 -- benchmark/benchmark_mat.cpp | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index adc159a8..455d6bf0 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,7 @@ + \ No newline at end of file diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 7a558a40..124e35a2 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -8,8 +8,6 @@ set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" - UNITY_BUILD ON - UNITY_BUILD_BATCH_SIZE 20 CXX_STANDARD 23 CXX_STANDARD_REQUIRED ON) diff --git a/benchmark/benchmark_mat.cpp b/benchmark/benchmark_mat.cpp index fa4538c9..61ada93d 100644 --- a/benchmark/benchmark_mat.cpp +++ b/benchmark/benchmark_mat.cpp @@ -11,9 +11,9 @@ using namespace omath; static void BM_MatMutiplication(benchmark::State& state) { - using mat_type = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; - mat_type a; - mat_type b; + using MatType = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; + MatType a; + MatType b; a.set(3.f); b.set(7.f); From 26b56d757cfa5537fd9c2b8a2c06498fb8933362 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:25:22 +0300 Subject: [PATCH 07/10] fix --- benchmark/benchmark_mat.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/benchmark/benchmark_mat.cpp b/benchmark/benchmark_mat.cpp index 61ada93d..85d303e4 100644 --- a/benchmark/benchmark_mat.cpp +++ b/benchmark/benchmark_mat.cpp @@ -9,7 +9,8 @@ using namespace omath; -static void BM_MatMutiplication(benchmark::State& state) + +void mat_multiplication(benchmark::State& state) { using MatType = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; MatType a; @@ -24,5 +25,5 @@ static void BM_MatMutiplication(benchmark::State& state) } } -BENCHMARK(BM_MatMutiplication); +BENCHMARK(mat_multiplication); BENCHMARK_MAIN(); \ No newline at end of file From 791e3b2313ddbdd145ad36e353b85327416645c0 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:40:03 +0300 Subject: [PATCH 08/10] improved bench --- benchmark/benchmark_mat.cpp | 51 ++++++++++++++++++++++++++++++++----- benchmark/main.cpp | 5 ++++ 2 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 benchmark/main.cpp diff --git a/benchmark/benchmark_mat.cpp b/benchmark/benchmark_mat.cpp index 85d303e4..f2eda9ac 100644 --- a/benchmark/benchmark_mat.cpp +++ b/benchmark/benchmark_mat.cpp @@ -5,12 +5,10 @@ #include #include -#include - using namespace omath; -void mat_multiplication(benchmark::State& state) +void mat_float_multiplication_col_major(benchmark::State& state) { using MatType = Mat<128, 128, float, MatStoreType::COLUMN_MAJOR>; MatType a; @@ -20,10 +18,49 @@ void mat_multiplication(benchmark::State& state) for (auto _ : state) - { std::ignore = a * b; - } } +void mat_float_multiplication_row_major(benchmark::State& state) +{ + using MatType = Mat<128, 128, float, MatStoreType::ROW_MAJOR>; + MatType a; + MatType b; + a.set(3.f); + b.set(7.f); + + + for (auto _ : state) + std::ignore = a * b; +} + +void mat_double_multiplication_row_major(benchmark::State& state) +{ + using MatType = Mat<128, 128, double, MatStoreType::ROW_MAJOR>; + MatType a; + MatType b; + a.set(3.f); + b.set(7.f); + + + for (auto _ : state) + std::ignore = a * b; +} + +void mat_double_multiplication_col_major(benchmark::State& state) +{ + using MatType = Mat<128, 128, double, MatStoreType::COLUMN_MAJOR>; + MatType a; + MatType b; + a.set(3.f); + b.set(7.f); + + + for (auto _ : state) + std::ignore = a * b; +} + +BENCHMARK(mat_float_multiplication_col_major)->Iterations(5000); +BENCHMARK(mat_float_multiplication_row_major)->Iterations(5000); -BENCHMARK(mat_multiplication); -BENCHMARK_MAIN(); \ No newline at end of file +BENCHMARK(mat_double_multiplication_col_major)->Iterations(5000); +BENCHMARK(mat_double_multiplication_row_major)->Iterations(5000); \ No newline at end of file diff --git a/benchmark/main.cpp b/benchmark/main.cpp new file mode 100644 index 00000000..790aeaea --- /dev/null +++ b/benchmark/main.cpp @@ -0,0 +1,5 @@ +// +// Created by Vlad on 9/17/2025. +// +#include +BENCHMARK_MAIN(); \ No newline at end of file From e04f6573c01048709028842b073417e93a5e1fad Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:46:00 +0300 Subject: [PATCH 09/10] patch --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d01bbeb..88675141 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,8 +92,8 @@ if (OMATH_STATIC_MSVC_RUNTIME_LIBRARY) ) endif () -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(${PROJECT_NAME} PRIVATE -mavx2 -mfma) +if (OMATH_USE_AVX2 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(${PROJECT_NAME} PRIVATE -mavx2 -mavx -mfma) endif () target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_23) From e882a224d282be206748ed0b9c752a962f993960 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 17 Sep 2025 20:50:30 +0300 Subject: [PATCH 10/10] fix --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88675141..8cfc231c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ option(OMATH_SUPRESS_SAFETY_CHECKS "Supress some safety checks in release build option(OMATH_USE_UNITY_BUILD "Will enable unity build to speed up compilation" OFF) option(OMATH_ENABLE_LEGACY "Will enable legacy classes that MUST be used ONLY for backward compatibility" OFF) -message(STATUS "[${PROJECT_NAME}]: Building on ${CMAKE_HOST_SYSTEM_NAME}") +message(STATUS "[${PROJECT_NAME}]: Building on ${CMAKE_HOST_SYSTEM_NAME}, compiler ${CMAKE_CXX_COMPILER_ID}") message(STATUS "[${PROJECT_NAME}]: Warnings as errors ${OMATH_THREAT_WARNING_AS_ERROR}") message(STATUS "[${PROJECT_NAME}]: Build unit tests ${OMATH_BUILD_TESTS}") message(STATUS "[${PROJECT_NAME}]: Build benchmark ${OMATH_BUILD_BENCHMARK}") @@ -93,7 +93,7 @@ if (OMATH_STATIC_MSVC_RUNTIME_LIBRARY) endif () if (OMATH_USE_AVX2 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(${PROJECT_NAME} PRIVATE -mavx2 -mavx -mfma) + target_compile_options(${PROJECT_NAME} PUBLIC -mavx2 -mavx -mfma) endif () target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_23)