diff options
| author | y-jan137 <yousefjan24000@gmail.com> | 2026-03-13 16:26:47 +0300 |
|---|---|---|
| committer | y-jan137 <yousefjan24000@gmail.com> | 2026-03-13 16:26:47 +0300 |
| commit | 5ac9489c079f3f1a0ba1d2d8385001ada83a13b8 (patch) | |
| tree | a07d57dbcca967685b05ee8b65b5be78e7818202 /CMakeLists.txt | |
| parent | 38004f74df5b2dbcb07e6ad5ac2272f16882e018 (diff) | |
Implement vectorized matmul
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c854de..c0a79d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(LINEAR_ALGEBRA_BUILD_TESTS "Build unit tests" ON) option(LINEAR_ALGEBRA_BUILD_EXAMPLES "Build example programs" ON) +set(LINEAR_ALGEBRA_SIMD "AUTO" CACHE STRING "SIMD backend for matmul: AUTO, NONE, AVX, AVX2, AVX512") +set_property(CACHE LINEAR_ALGEBRA_SIMD PROPERTY STRINGS AUTO NONE AVX AVX2 AVX512) add_library(linear_algebra src/vector.cpp @@ -27,8 +29,26 @@ target_compile_features(linear_algebra PUBLIC cxx_std_20) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(linear_algebra PRIVATE -Wall -Wextra -Wpedantic -Wconversion) + + if(LINEAR_ALGEBRA_SIMD STREQUAL "AVX") + target_compile_options(linear_algebra PRIVATE -mavx) + elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AVX2") + target_compile_options(linear_algebra PRIVATE -mavx2) + elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AVX512") + target_compile_options(linear_algebra PRIVATE -mavx512f) + elseif(LINEAR_ALGEBRA_SIMD STREQUAL "NONE") + target_compile_definitions(linear_algebra PRIVATE LINEAR_ALGEBRA_FORCE_SCALAR_MATMUL=1) + elseif(LINEAR_ALGEBRA_SIMD STREQUAL "AUTO") + else() + message(FATAL_ERROR "Unsupported LINEAR_ALGEBRA_SIMD value: ${LINEAR_ALGEBRA_SIMD}") + endif() elseif(MSVC) target_compile_options(linear_algebra PRIVATE /W4 /permissive-) + if(LINEAR_ALGEBRA_SIMD STREQUAL "NONE") + target_compile_definitions(linear_algebra PRIVATE LINEAR_ALGEBRA_FORCE_SCALAR_MATMUL=1) + elseif(NOT LINEAR_ALGEBRA_SIMD STREQUAL "AUTO") + message(WARNING "LINEAR_ALGEBRA_SIMD explicit x86 flags are only wired for Clang/GNU right now.") + endif() endif() if(LINEAR_ALGEBRA_BUILD_EXAMPLES) |