From a5dabd156bcd7d89d6f478c82ad25425adc2ab3a Mon Sep 17 00:00:00 2001 From: Boian Berberov <7432115+bberberov@users.noreply.github.com> Date: Mon, 31 Aug 2026 14:55:44 -0600 Subject: [PATCH] cmake : Use x86-64 microarchitecture level `-march` when sufficient features are selected --- ggml/src/ggml-cpu/CMakeLists.txt | 43 +++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 17540faa66d3..4f064a72e083 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -307,40 +307,42 @@ function(ggml_add_cpu_backend_variant_impl tag_name) if (GGML_NATIVE) list(APPEND ARCH_FLAGS -march=native) else () + # x64 backend if (GGML_SSE42) list(APPEND ARCH_FLAGS -msse4.2) list(APPEND ARCH_DEFINITIONS GGML_SSE42) endif() + # sse42 backend + if (GGML_AVX) + list(APPEND ARCH_FLAGS -mavx) + list(APPEND ARCH_DEFINITIONS GGML_AVX) + endif() + # sandybridge backend if (GGML_F16C) list(APPEND ARCH_FLAGS -mf16c) list(APPEND ARCH_DEFINITIONS GGML_F16C) endif() + # ivybridge backend if (GGML_FMA) list(APPEND ARCH_FLAGS -mfma) list(APPEND ARCH_DEFINITIONS GGML_FMA) endif() - if (GGML_BMI2) - list(APPEND ARCH_FLAGS -mbmi2) - list(APPEND ARCH_DEFINITIONS GGML_BMI2) - endif() - if (GGML_AVX) - list(APPEND ARCH_FLAGS -mavx) - list(APPEND ARCH_DEFINITIONS GGML_AVX) - endif() + # piledriver backend if (GGML_AVX2) list(APPEND ARCH_FLAGS -mavx2) list(APPEND ARCH_DEFINITIONS GGML_AVX2) endif() - if (GGML_AVX_VNNI) - list(APPEND ARCH_FLAGS -mavxvnni) - list(APPEND ARCH_DEFINITIONS GGML_AVX_VNNI) + if (GGML_BMI2) + list(APPEND ARCH_FLAGS -mbmi2) + list(APPEND ARCH_DEFINITIONS GGML_BMI2) endif() + # haswell backend if (GGML_AVX512) list(APPEND ARCH_FLAGS -mavx512f) + list(APPEND ARCH_FLAGS -mavx512bw) list(APPEND ARCH_FLAGS -mavx512cd) - list(APPEND ARCH_FLAGS -mavx512vl) list(APPEND ARCH_FLAGS -mavx512dq) - list(APPEND ARCH_FLAGS -mavx512bw) + list(APPEND ARCH_FLAGS -mavx512vl) list(APPEND ARCH_DEFINITIONS GGML_AVX512) endif() if (GGML_AVX512_VBMI) @@ -355,6 +357,10 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_FLAGS -mavx512bf16) list(APPEND ARCH_DEFINITIONS GGML_AVX512_BF16) endif() + if (GGML_AVX_VNNI) + list(APPEND ARCH_FLAGS -mavxvnni) + list(APPEND ARCH_DEFINITIONS GGML_AVX_VNNI) + endif() if (GGML_AMX_TILE) list(APPEND ARCH_FLAGS -mamx-tile) list(APPEND ARCH_DEFINITIONS GGML_AMX_TILE) @@ -367,6 +373,15 @@ function(ggml_add_cpu_backend_variant_impl tag_name) list(APPEND ARCH_FLAGS -mamx-bf16) list(APPEND ARCH_DEFINITIONS GGML_AMX_BF16) endif() + + # x86-64 microarchitecture levels + if (GGML_SSE42 AND GGML_AVX AND GGML_F16C AND GGML_FMA AND GGML_AVX2 AND GGML_BMI2 AND GGML_AVX512) + list(APPEND ARCH_FLAGS -march=x86-64-v4) + elseif (GGML_SSE42 AND GGML_AVX AND GGML_F16C AND GGML_FMA AND GGML_AVX2 AND GGML_BMI2) + list(APPEND ARCH_FLAGS -march=x86-64-v3) + elseif (GGML_SSE42) + list(APPEND ARCH_FLAGS -march=x86-64-v2) + endif() endif() endif() @@ -668,7 +683,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ) endif() - message(STATUS "Adding CPU backend variant ${GGML_CPU_NAME}: ${ARCH_FLAGS} ${ARCH_DEFINITIONS}") + message(STATUS "Adding CPU backend variant ${GGML_CPU_NAME}:\n\t${ARCH_FLAGS}\n\t${ARCH_DEFINITIONS}") target_sources(${GGML_CPU_NAME} PRIVATE ${GGML_CPU_SOURCES}) target_compile_options(${GGML_CPU_NAME} PRIVATE ${ARCH_FLAGS}) target_compile_definitions(${GGML_CPU_NAME} PRIVATE ${ARCH_DEFINITIONS})