Skip to content

Commit 3daeaca

Browse files
slarenggerganov
authored andcommitted
ggml : move AMX to the CPU backend (llama/10570)
ggml : automatic selection of best CPU backend (llama/10606)
1 parent 4d73962 commit 3daeaca

File tree

22 files changed

+3547
-232
lines changed

22 files changed

+3547
-232
lines changed

ggml/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ option(GGML_CPU_HBM "ggml: use memkind for CPU HBM" OFF)
9696
option(GGML_CPU_AARCH64 "ggml: use runtime weight conversion of Q4_0 to Q4_X_X" ON)
9797

9898
option(GGML_AVX "ggml: enable AVX" ${INS_ENB})
99+
option(GGML_AVX_VNNI "ggml: enable AVX-VNNI" OFF)
99100
option(GGML_AVX2 "ggml: enable AVX2" ${INS_ENB})
100101
option(GGML_AVX512 "ggml: enable AVX512" OFF)
101102
option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI" OFF)
@@ -161,7 +162,6 @@ set (GGML_METAL_MACOSX_VERSION_MIN "" CACHE STRING
161162
set (GGML_METAL_STD "" CACHE STRING "ggml: metal standard version (-std flag)")
162163
option(GGML_OPENMP "ggml: use OpenMP" ON)
163164
option(GGML_RPC "ggml: use RPC" OFF)
164-
option(GGML_AMX "ggml: use AMX" OFF)
165165
option(GGML_SYCL "ggml: use SYCL" OFF)
166166
option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" OFF)
167167
set (GGML_SYCL_TARGET "INTEL" CACHE STRING

ggml/src/CMakeLists.txt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -261,21 +261,15 @@ function(ggml_add_backend backend)
261261
if (${backend_id})
262262
string(TOLOWER "ggml-${backend}" backend_target)
263263
add_subdirectory(${backend_target})
264-
# check again in case the backend disabled itself
265-
# note that this should NOT be the normal behavior, in case of errors the backend should fail the build
266-
# however, currently it is necessary for AMX, since it is enabled by default on llama.cpp
267-
if (${backend_id})
268-
message(STATUS "Including ${backend} backend")
269-
if (NOT GGML_BACKEND_DL)
270-
string(TOUPPER "GGML_USE_${backend}" backend_use)
271-
target_compile_definitions(ggml PUBLIC ${backend_use})
272-
endif()
264+
message(STATUS "Including ${backend} backend")
265+
if (NOT GGML_BACKEND_DL)
266+
string(TOUPPER "GGML_USE_${backend}" backend_use)
267+
target_compile_definitions(ggml PUBLIC ${backend_use})
273268
endif()
274269
endif()
275270
endfunction()
276271

277272
ggml_add_backend(CPU)
278-
ggml_add_backend(AMX)
279273
ggml_add_backend(BLAS)
280274
ggml_add_backend(CANN)
281275
ggml_add_backend(CUDA)
@@ -289,7 +283,7 @@ ggml_add_backend(Vulkan)
289283

290284
foreach (target ggml-base ggml)
291285
target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> $<INSTALL_INTERFACE:include>)
292-
target_compile_features (${target} PRIVATE c_std_11) # don't bump
286+
target_compile_features (${target} PRIVATE c_std_11 cxx_std_17) # don't bump
293287
endforeach()
294288

295289
target_link_libraries(ggml-base PRIVATE Threads::Threads)

ggml/src/ggml-backend-impl.h

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -211,27 +211,45 @@ extern "C" {
211211
GGML_API void ggml_backend_device_register(ggml_backend_dev_t device);
212212

213213
// Add backend dynamic loading support to the backend
214-
typedef ggml_backend_reg_t (*ggml_backend_init_t)(void);
215214

216-
#ifdef GGML_BACKEND_DL
217-
#ifdef __cplusplus
218-
# define GGML_BACKEND_DL_IMPL(reg_fn) \
219-
extern "C" { \
220-
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_init(void); \
221-
} \
222-
ggml_backend_reg_t ggml_backend_init(void) { \
223-
return reg_fn(); \
224-
}
225-
#else
226-
# define GGML_BACKEND_DL_IMPL(reg_fn) \
227-
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_init(void); \
228-
ggml_backend_reg_t ggml_backend_init(void) { \
229-
return reg_fn(); \
230-
}
231-
#endif
232-
#else
233-
# define GGML_BACKEND_DL_IMPL(reg_fn)
234-
#endif
215+
// Initialize the backend
216+
typedef ggml_backend_reg_t (*ggml_backend_init_t)(void);
217+
// Optional: obtain a score for the backend based on the system configuration
218+
// Higher scores are preferred, 0 means the backend is not supported in the current system
219+
typedef int (*ggml_backend_score_t)(void);
220+
221+
#ifdef GGML_BACKEND_DL
222+
# ifdef __cplusplus
223+
# define GGML_BACKEND_DL_IMPL(reg_fn) \
224+
extern "C" { \
225+
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_init(void); \
226+
} \
227+
ggml_backend_reg_t ggml_backend_init(void) { \
228+
return reg_fn(); \
229+
}
230+
# define GGML_BACKEND_DL_SCORE_IMPL(score_fn) \
231+
extern "C" { \
232+
GGML_BACKEND_API int ggml_backend_score(void); \
233+
} \
234+
int ggml_backend_score(void) { \
235+
return score_fn(); \
236+
}
237+
# else
238+
# define GGML_BACKEND_DL_IMPL(reg_fn) \
239+
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_init(void); \
240+
ggml_backend_reg_t ggml_backend_init(void) { \
241+
return reg_fn(); \
242+
}
243+
# define GGML_BACKEND_DL_SCORE_IMPL(score_fn) \
244+
GGML_BACKEND_API int ggml_backend_score(void); \
245+
int ggml_backend_score(void) { \
246+
return score_fn(); \
247+
}
248+
# endif
249+
#else
250+
# define GGML_BACKEND_DL_IMPL(reg_fn)
251+
# define GGML_BACKEND_DL_SCORE_IMPL(score_fn)
252+
#endif
235253

236254
#ifdef __cplusplus
237255
}

0 commit comments

Comments
 (0)