| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- if (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
- (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
- CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64)$") AND
- CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.0)
- message(STATUS "Using AMX")
- file(GLOB GGML_HEADERS_AMX "*.h")
- list(APPEND GGML_HEADERS_AMX "../../include/ggml-amx.h")
- file(GLOB GGML_SOURCES_AMX "*.cpp")
- ggml_add_backend_library(ggml-amx
- ${GGML_HEADERS_AMX}
- ${GGML_SOURCES_AMX}
- )
- # this is duplicated from the CPU backend, since the AMX backend also depends on the architecture flags
- # TODO: integrate AMX backend into the CPU backend
- if (MSVC)
- # instruction set detection for MSVC only
- if (GGML_NATIVE)
- # TODO: improve, should not reference files from the parent folder
- include(../ggml-cpu/cmake/FindSIMD.cmake)
- endif ()
- if (GGML_AVX512)
- list(APPEND ARCH_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($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
- endif()
- if (GGML_AVX512_VNNI)
- add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
- endif()
- if (GGML_AVX512_BF16)
- add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512BF16__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512BF16__>)
- endif()
- if (GGML_AMX_TILE)
- add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_TILE__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_TILE__>)
- endif()
- if (GGML_AMX_INT8)
- add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_INT8__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_INT8__>)
- endif()
- if (GGML_AMX_BF16)
- add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_BF16__>)
- add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_BF16__>)
- endif()
- elseif (GGML_AVX2)
- list(APPEND ARCH_FLAGS /arch:AVX2)
- elseif (GGML_AVX)
- list(APPEND ARCH_FLAGS /arch:AVX)
- endif()
- else()
- if (GGML_NATIVE)
- list(APPEND ARCH_FLAGS -march=native)
- endif()
- if (GGML_F16C)
- list(APPEND ARCH_FLAGS -mf16c)
- endif()
- if (GGML_FMA)
- list(APPEND ARCH_FLAGS -mfma)
- endif()
- if (GGML_AVX)
- list(APPEND ARCH_FLAGS -mavx)
- endif()
- if (GGML_AVX2)
- list(APPEND ARCH_FLAGS -mavx2)
- endif()
- if (GGML_AVX512)
- list(APPEND ARCH_FLAGS -mavx512f)
- list(APPEND ARCH_FLAGS -mavx512dq)
- list(APPEND ARCH_FLAGS -mavx512bw)
- endif()
- if (GGML_AVX512_VBMI)
- list(APPEND ARCH_FLAGS -mavx512vbmi)
- endif()
- if (GGML_AVX512_VNNI)
- list(APPEND ARCH_FLAGS -mavx512vnni)
- endif()
- if (GGML_AVX512_BF16)
- list(APPEND ARCH_FLAGS -mavx512bf16)
- endif()
- if (GGML_AMX_TILE)
- list(APPEND ARCH_FLAGS -mamx-tile)
- endif()
- if (GGML_AMX_INT8)
- list(APPEND ARCH_FLAGS -mamx-int8)
- endif()
- if (GGML_AMX_BF16)
- list(APPEND ARCH_FLAGS -mamx-bf16)
- endif()
- endif()
- target_compile_options(ggml-amx PRIVATE ${ARCH_FLAGS})
- else()
- set(GGML_AMX OFF PARENT_SCOPE)
- message(WARNING "AMX requires x86 and gcc version > 11.0. Turning off GGML_AMX.")
- endif()
|