CMakeLists.txt 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. if (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
  2. (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
  3. CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64)$") AND
  4. CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.0)
  5. message(STATUS "Using AMX")
  6. file(GLOB GGML_HEADERS_AMX "*.h")
  7. list(APPEND GGML_HEADERS_AMX "../../include/ggml-amx.h")
  8. file(GLOB GGML_SOURCES_AMX "*.cpp")
  9. ggml_add_backend_library(ggml-amx
  10. ${GGML_HEADERS_AMX}
  11. ${GGML_SOURCES_AMX}
  12. )
  13. # this is duplicated from the CPU backend, since the AMX backend also depends on the architecture flags
  14. # TODO: integrate AMX backend into the CPU backend
  15. if (MSVC)
  16. # instruction set detection for MSVC only
  17. if (GGML_NATIVE)
  18. # TODO: improve, should not reference files from the parent folder
  19. include(../ggml-cpu/cmake/FindSIMD.cmake)
  20. endif ()
  21. if (GGML_AVX512)
  22. list(APPEND ARCH_FLAGS /arch:AVX512)
  23. # MSVC has no compile-time flags enabling specific
  24. # AVX512 extensions, neither it defines the
  25. # macros corresponding to the extensions.
  26. # Do it manually.
  27. if (GGML_AVX512_VBMI)
  28. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
  29. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
  30. endif()
  31. if (GGML_AVX512_VNNI)
  32. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
  33. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
  34. endif()
  35. if (GGML_AVX512_BF16)
  36. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512BF16__>)
  37. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512BF16__>)
  38. endif()
  39. if (GGML_AMX_TILE)
  40. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_TILE__>)
  41. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_TILE__>)
  42. endif()
  43. if (GGML_AMX_INT8)
  44. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_INT8__>)
  45. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_INT8__>)
  46. endif()
  47. if (GGML_AMX_BF16)
  48. add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_BF16__>)
  49. add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_BF16__>)
  50. endif()
  51. elseif (GGML_AVX2)
  52. list(APPEND ARCH_FLAGS /arch:AVX2)
  53. elseif (GGML_AVX)
  54. list(APPEND ARCH_FLAGS /arch:AVX)
  55. endif()
  56. else()
  57. if (GGML_NATIVE)
  58. list(APPEND ARCH_FLAGS -march=native)
  59. endif()
  60. if (GGML_F16C)
  61. list(APPEND ARCH_FLAGS -mf16c)
  62. endif()
  63. if (GGML_FMA)
  64. list(APPEND ARCH_FLAGS -mfma)
  65. endif()
  66. if (GGML_AVX)
  67. list(APPEND ARCH_FLAGS -mavx)
  68. endif()
  69. if (GGML_AVX2)
  70. list(APPEND ARCH_FLAGS -mavx2)
  71. endif()
  72. if (GGML_AVX512)
  73. list(APPEND ARCH_FLAGS -mavx512f)
  74. list(APPEND ARCH_FLAGS -mavx512dq)
  75. list(APPEND ARCH_FLAGS -mavx512bw)
  76. endif()
  77. if (GGML_AVX512_VBMI)
  78. list(APPEND ARCH_FLAGS -mavx512vbmi)
  79. endif()
  80. if (GGML_AVX512_VNNI)
  81. list(APPEND ARCH_FLAGS -mavx512vnni)
  82. endif()
  83. if (GGML_AVX512_BF16)
  84. list(APPEND ARCH_FLAGS -mavx512bf16)
  85. endif()
  86. if (GGML_AMX_TILE)
  87. list(APPEND ARCH_FLAGS -mamx-tile)
  88. endif()
  89. if (GGML_AMX_INT8)
  90. list(APPEND ARCH_FLAGS -mamx-int8)
  91. endif()
  92. if (GGML_AMX_BF16)
  93. list(APPEND ARCH_FLAGS -mamx-bf16)
  94. endif()
  95. endif()
  96. target_compile_options(ggml-amx PRIVATE ${ARCH_FLAGS})
  97. else()
  98. set(GGML_AMX OFF PARENT_SCOPE)
  99. message(WARNING "AMX requires x86 and gcc version > 11.0. Turning off GGML_AMX.")
  100. endif()