Charles Xu commited on
Commit
6d586a0
·
1 Parent(s): f9fd6d6

ggml-cpu: cmake add arm64 cpu feature check for macos (llama/10487)

Browse files

* ggml-cpu: cmake add arm64 cpu feature check for macos

* use vmmlaq_s32 for compile option i8mm check

Files changed (1) hide show
  1. ggml/src/ggml-cpu/CMakeLists.txt +33 -0
ggml/src/ggml-cpu/CMakeLists.txt CHANGED
@@ -96,6 +96,39 @@ if (CMAKE_OSX_ARCHITECTURES STREQUAL "arm64" OR
96
  endif ()
97
 
98
  set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_PREV})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  else()
100
  check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
101
  if (NOT "${COMPILER_SUPPORTS_FP16_FORMAT_I3E}" STREQUAL "")
 
96
  endif ()
97
 
98
  set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_PREV})
99
+ elseif (APPLE)
100
+ if (GGML_NATIVE)
101
+ set(USER_PROVIDED_MARCH FALSE)
102
+ foreach(flag_var IN ITEMS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_REQUIRED_FLAGS)
103
+ if ("${${flag_var}}" MATCHES "-march=[a-zA-Z0-9+._-]+")
104
+ set(USER_PROVIDED_MARCH TRUE)
105
+ break()
106
+ endif()
107
+ endforeach()
108
+
109
+ if (NOT USER_PROVIDED_MARCH)
110
+ set(MARCH_FLAGS "-march=armv8.2a")
111
+
112
+ check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vdotq_s32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_DOTPROD)
113
+ if (GGML_COMPILER_SUPPORT_DOTPROD)
114
+ set(MARCH_FLAGS "${MARCH_FLAGS}+dotprod")
115
+ add_compile_definitions(__ARM_FEATURE_DOTPROD)
116
+ endif ()
117
+
118
+ set(TEST_I8MM_FLAGS "-march=armv8.2a+i8mm")
119
+
120
+ set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
121
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${TEST_I8MM_FLAGS}")
122
+ check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vmmlaq_s32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_MATMUL_INT8)
123
+ if (GGML_COMPILER_SUPPORT_MATMUL_INT8)
124
+ set(MARCH_FLAGS "${MARCH_FLAGS}+i8mm")
125
+ add_compile_definitions(__ARM_FEATURE_MATMUL_INT8)
126
+ endif ()
127
+ set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
128
+
129
+ list(APPEND ARCH_FLAGS "${MARCH_FLAGS}")
130
+ endif ()
131
+ endif ()
132
  else()
133
  check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
134
  if (NOT "${COMPILER_SUPPORTS_FP16_FORMAT_I3E}" STREQUAL "")