option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI" OFF)
option(GGML_AVX512_VNNI "ggml: enable AVX512-VNNI" OFF)
option(GGML_AVX512_BF16 "ggml: enable AVX512-BF16" OFF)
+option(GGML_AMX_TILE "ggml: enable AMX-TILE" OFF)
+option(GGML_AMX_INT8 "ggml: enable AMX-INT8" OFF)
+option(GGML_AMX_BF16 "ggml: enable AMX-BF16" OFF)
option(GGML_FMA "ggml: enable FMA" ${INS_ENB})
if (NOT MSVC)
option(GGML_F16C "ggml: enable F16C" ${INS_ENB}) # in MSVC F16C is implied with AVX2/AVX512
set (GGML_METAL_STD "" CACHE STRING "ggml: metal standard version (-std flag)")
option(GGML_OPENMP "ggml: use OpenMP" ON)
option(GGML_RPC "ggml: use RPC" OFF)
+option(GGML_AMX "ggml: use AMX" OFF)
option(GGML_SYCL "ggml: use SYCL" OFF)
option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" OFF)
set (GGML_SYCL_TARGET "INTEL" CACHE STRING
GGML_API int ggml_cpu_has_avx512_vbmi(void);
GGML_API int ggml_cpu_has_avx512_vnni(void);
GGML_API int ggml_cpu_has_avx512_bf16(void);
+ GGML_API int ggml_cpu_has_amx_int8 (void);
GGML_API int ggml_cpu_has_fma (void);
GGML_API int ggml_cpu_has_neon (void);
GGML_API int ggml_cpu_has_sve (void);
set(GGML_SOURCES_LLAMAFILE llamafile/sgemm.cpp)
endif()
+if (GGML_AMX)
+ if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.0)
+ else()
+ set(GGML_AMX OFF)
+ message(WARNING "AMX requires gcc version > 11.0. Turning off GGML_AMX.")
+ endif()
+
+ if (GGML_AMX)
+ message(STATUS "Using AMX")
+
+ list(APPEND GGML_CDEF_PUBLIC GGML_USE_AMX)
+
+ file(GLOB GGML_HEADERS_AMX "ggml-amx/*.h")
+ list(APPEND GGML_HEADERS_AMX "../include/ggml-amx.h")
+
+ file(GLOB GGML_SOURCES_AMX "ggml-amx/*.cpp")
+ list(APPEND GGML_SOURCES_AMX "ggml-amx.cpp")
+ endif()
+endif()
+
if (GGML_CUDA)
cmake_minimum_required(VERSION 3.18) # for CMAKE_CUDA_ARCHITECTURES
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)
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()
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
message(STATUS "PowerPC detected")
${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM}
${GGML_SOURCES_BLAS} ${GGML_HEADERS_BLAS}
${GGML_SOURCES_LLAMAFILE} ${GGML_HEADERS_LLAMAFILE}
+ ${GGML_SOURCES_AMX} ${GGML_HEADERS_AMX}
${GGML_SOURCES_CANN} ${GGML_HEADERS_CANN}
ggml-aarch64.c ggml-aarch64.h
)
if (backend->device) {
return ggml_backend_dev_supports_buft(backend->device, buft);
}
-
return backend->iface.supports_buft(backend, buft);
}
#include "ggml-rpc.h"
#endif
+#ifndef __AMX_INT8__
+#undef GGML_USE_AMX
+#endif
+
+#ifdef GGML_USE_AMX
+# include "ggml-amx.h"
+#endif
+
struct ggml_backend_registry {
std::vector<ggml_backend_reg_t> backends;
std::vector<ggml_backend_dev_t> devices;
#ifdef GGML_USE_RPC
register_backend(ggml_backend_rpc_reg());
#endif
+#ifdef GGML_USE_AMX
+ register_backend(ggml_backend_amx_reg());
+#endif
// TODO: sycl, kompute, cann
#endif
}
+int ggml_cpu_has_amx_int8(void) {
+#if defined(__AMX_INT8__)
+ return 1;
+#else
+ return 0;
+#endif
+}
+
int ggml_cpu_has_fma(void) {
#if defined(__FMA__)
return 1;