From: Jiahao Li Date: Sun, 6 Aug 2023 07:22:25 +0000 (+0800) Subject: cmake : add avx compile options on Windows (synced from llama.cpp) (#435) X-Git-Tag: upstream/0.0.1642~1285 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=a30107764ca5544e3a1ead4b318e06d83ed5b14c;p=pkg%2Fggml%2Fsources%2Fggml cmake : add avx compile options on Windows (synced from llama.cpp) (#435) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index af078e8d..228d863a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,18 @@ if (GGML_SANITIZE_UNDEFINED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") endif() +# instruction set specific +option(GGML_AVX "ggml: enable AVX" ON) +option(GGML_AVX2 "ggml: enable AVX2" ON) +option(GGML_AVX512 "ggml: enable AVX512" OFF) +option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI" OFF) +option(GGML_AVX512_VNNI "ggml: enable AVX512-VNNI" OFF) +option(GGML_FMA "ggml: enable FMA" ON) +# in MSVC F16C is implied with AVX2/AVX512 +if (NOT MSVC) + option(GGML_F16C "ggml: enable F16C" ON) +endif() + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=native") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 67b2b476..248e1372 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -113,6 +113,24 @@ else() if (F16C_M MATCHES "f16c") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c") endif() + elseif (MSVC) + if (GGML_AVX512) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX512") + # MSVC has no compile-time flags enabling specific + # AVX512 extensions, neither it defines the + # macros corresponding to the extensions. + # Do it manually. + if (GGML_AVX512_VBMI) + add_compile_definitions(__AVX512VBMI__) + endif() + if (GGML_AVX512_VNNI) + add_compile_definitions(__AVX512VNNI__) + endif() + elseif (GGML_AVX2) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2") + elseif (GGML_AVX) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX") + endif() else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma -mf16c -mavx -mavx2") endif()