From 4c905b2b2583635881f91d08e78d8fb19c39ffb3 Mon Sep 17 00:00:00 2001 From: Zijun Yu Date: Tue, 13 May 2025 14:31:23 +0800 Subject: [PATCH] fix build error --- ggml/include/ggml-openvino.h | 32 +++++------- ggml/src/ggml-openvino/CMakeLists.txt | 49 +++++-------------- ggml/src/ggml-openvino/ggml-decoder.cpp | 6 +-- .../src/{ => ggml-openvino}/ggml-openvino.cpp | 31 +++++------- 4 files changed, 40 insertions(+), 78 deletions(-) rename ggml/src/{ => ggml-openvino}/ggml-openvino.cpp (94%) diff --git a/ggml/include/ggml-openvino.h b/ggml/include/ggml-openvino.h index 9172414c29..151c48d40d 100644 --- a/ggml/include/ggml-openvino.h +++ b/ggml/include/ggml-openvino.h @@ -14,37 +14,29 @@ extern "C" { #define GGML_OPENVINO_MAX_DEVICES 16 // backend API -GGML_API ggml_backend_t ggml_backend_openvino_init(int device); +GGML_BACKEND_API ggml_backend_t ggml_backend_openvino_init(int device); -GGML_API bool ggml_backend_is_openvino(ggml_backend_t backend); +GGML_BACKEND_API bool ggml_backend_is_openvino(ggml_backend_t backend); // device buffer -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_buffer_type(int device); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_buffer_type(int device); // split tensor buffer that splits matrices by rows across multiple devices -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_split_buffer_type(const float *tensor_split); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_split_buffer_type(const float * tensor_split); // pinned host buffer for use with the CPU backend for faster copies between CPU // and GPU -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_host_buffer_type(void); +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_host_buffer_type(void); -GGML_API int ggml_backend_openvino_get_device_count(void); -// GGML_API void ggml_backend_openvino_get_device_description(int device, -// char *description, -// size_t -// description_size); -// GGML_API void ggml_backend_openvino_get_device_memory(int device, size_t -// *free, -// size_t *total); +GGML_BACKEND_API int ggml_backend_openvino_get_device_count(void); +// GGML_BACKEND_API void ggml_backend_openvino_get_device_description(int device, char * description, +// size_t description_size); +// GGML_BACKEND_API void ggml_backend_openvino_get_device_memory(int device, size_t * free, size_t * total); -// GGML_API bool ggml_backend_openvino_register_host_buffer(void *buffer, size_t -// size); GGML_API void ggml_backend_openvino_unregister_host_buffer(void -// *buffer); +// GGML_BACKEND_API bool ggml_backend_openvino_register_host_buffer(void * buffer, size_t size); +// GGML_BACKEND_API void ggml_backend_openvino_unregister_host_buffer(void * buffer); -GGML_API ggml_backend_reg_t ggml_backend_openvino_reg(void); +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_openvino_reg(void); struct ggml_openvino_device_info { int device_count; diff --git a/ggml/src/ggml-openvino/CMakeLists.txt b/ggml/src/ggml-openvino/CMakeLists.txt index 75b1144843..08712c1527 100644 --- a/ggml/src/ggml-openvino/CMakeLists.txt +++ b/ggml/src/ggml-openvino/CMakeLists.txt @@ -1,42 +1,19 @@ find_package(OpenVINO REQUIRED) -list(APPEND GGML_EXTRA_LIBS_PRIVATE openvino::runtime) -# Set header and libs -file(GLOB GGML_HEADERS_OPENVINO "ggml-openvino/*.h") -list(APPEND GGML_HEADERS_OPENVINO "../include/ggml-openvino.h") -file(GLOB GGML_SOURCES_OPENVINO "ggml-openvino/*.cpp") -list(APPEND GGML_SOURCES_OPENVINO "ggml-openvino.cpp") +file(GLOB_RECURSE GGML_HEADERS_OPENVINO "*.h" "*.hpp") +file(GLOB_RECURSE GGML_SOURCES_OPENVINO "*.cpp") -list(APPEND GGML_CDEF_PUBLIC GGML_USE_OPENVINO) +ggml_add_backend_library(ggml-openvino + ${GGML_SOURCES_OPENVINO} + ${GGML_HEADERS_OPENVINO} +) -if (OPENVINO_DEVICE) - if (OPENVINO_DEVICE STREQUAL "GPU") - add_compile_definitions(GGML_OPENVINO_GPU) - elseif (OPENVINO_DEVICE STREQUAL "NPU") - add_compile_definitions(GGML_OPENVINO_NPU) +target_link_libraries(ggml-openvino PRIVATE openvino::runtime) + +if (GGML_OPENVINO) + if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") + elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") + else() + message(FATAL_ERROR "OpenVINO: OpenVINO toolkit supports x86-64 and arm64 but not ${CMAKE_SYSTEM_PROCESSOR}") endif() endif() - -if(NOT DEFINED GGML_OV_FRONTEND) - set(GGML_OV_FRONTEND OpenVINO_DIR) -endif() -add_definitions(-DGGML_OV_FRONTEND="${GGML_OV_FRONTEND}") - -if (OpenVINO_DIR) - if (GGML_OPENVINO) - if (NOT UNIX) - set(GGML_OPENVINO OFF) - message(WARNING "OpenVINO: OpenVINO toolkit supports unix but not ${CMAKE_SYSTEM_NAME}. Turning off GGML_OPENVINO") - endif() - endif() - - if (GGML_OPENVINO) - if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") - elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") - else() - set(GGML_OPENVINO OFF) - message(WARNING "OpenVINO: OpenVINO toolkit supports x86-64 and arm64 but not ${CMAKE_SYSTEM_PROCESSOR}. Turning off GGML_OPENVINO") - endif() - endif() - -endif() diff --git a/ggml/src/ggml-openvino/ggml-decoder.cpp b/ggml/src/ggml-openvino/ggml-decoder.cpp index 28409186f8..43869ec228 100644 --- a/ggml/src/ggml-openvino/ggml-decoder.cpp +++ b/ggml/src/ggml-openvino/ggml-decoder.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -278,8 +279,7 @@ void GgmlOvDecoder::dump_cgraph(const struct ggml_cgraph* cgraph) { << std::setw(5) << node->ne[2] << ", " << std::setw(5) << node->ne[3] << "] " << std::left << std::setw(20) << ggml_op_name(node->op) << std::right << " " - << std::left << std::setw(44) << node->name << std::right - << ((node->flags & GGML_TENSOR_FLAG_PARAM) ? "x" : node->grad ? "g" : " ") + << std::left << std::setw(45) << node->name << std::right << std::setw(2) << "[ " << std::setw(0) << node->nb[0] << ", " << std::setw(5) << node->nb[1] << ", " @@ -486,4 +486,4 @@ const std::string& GgmlOvDecoder::get_op_type() const { } static const std::string unknown_op = "UNKNOWN_OP"; return unknown_op; -} \ No newline at end of file +} diff --git a/ggml/src/ggml-openvino.cpp b/ggml/src/ggml-openvino/ggml-openvino.cpp similarity index 94% rename from ggml/src/ggml-openvino.cpp rename to ggml/src/ggml-openvino/ggml-openvino.cpp index f5d5c7ed67..01fccea47a 100644 --- a/ggml/src/ggml-openvino.cpp +++ b/ggml/src/ggml-openvino/ggml-openvino.cpp @@ -62,7 +62,6 @@ ggml_backend_openvino_graph_compute(ggml_backend_t backend, struct ggml_cgraph * static const ggml_backend_i ggml_backend_openvino_interface = { /* .get_name = */ ggml_backend_openvino_get_name, /* .free = */ ggml_backend_openvino_free, - /* .get_default_buffer_type = */ ggml_backend_openvino_get_default_buffer_type, /* .set_tensor_async = */ NULL, /* .get_tensor_async = */ NULL, /* .cpy_tensor_async = */ NULL, @@ -72,9 +71,6 @@ static const ggml_backend_i ggml_backend_openvino_interface = { /* .graph_plan_update = */ NULL, /* .graph_plan_compute = */ NULL, /* .graph_compute = */ ggml_backend_openvino_graph_compute, - /* .supports_op = */ NULL, - /* .supports_buft = */ NULL, - /* .offload_op = */ NULL, /* .event_record = */ NULL, /* .event_wait = */ NULL, }; @@ -89,7 +85,7 @@ static ggml_guid_t ggml_backend_openvino_guid(void) { } // backend API -GGML_API ggml_backend_t ggml_backend_openvino_init(int device) { +GGML_BACKEND_API ggml_backend_t ggml_backend_openvino_init(int device) { if (device < 0 || device >= ggml_backend_openvino_get_device_count()) { GGML_LOG_ERROR("%s: invalid device %d\n", __func__, device); return nullptr; @@ -111,30 +107,28 @@ GGML_API ggml_backend_t ggml_backend_openvino_init(int device) { return openvino_backend; } -GGML_API bool ggml_backend_is_openvino(ggml_backend_t backend) { +GGML_BACKEND_API bool ggml_backend_is_openvino(ggml_backend_t backend) { GGML_ASSERT(backend->context != nullptr); return true; } // device buffer -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_buffer_type(int device) { +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_buffer_type(int device) { GGML_ASSERT(device >= 0); return nullptr; } // split tensor buffer that splits matrices by rows across multiple devices -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_split_buffer_type(const float *tensor_split) { +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_split_buffer_type(const float * tensor_split) { GGML_ASSERT(tensor_split != nullptr); return nullptr; } // pinned host buffer for use with the CPU backend for faster copies between CPU // and GPU -GGML_API ggml_backend_buffer_type_t -ggml_backend_openvino_host_buffer_type(void) { return nullptr;} - +GGML_BACKEND_API ggml_backend_buffer_type_t ggml_backend_openvino_host_buffer_type(void) { + return nullptr; +} struct ggml_backend_openvino_buffer_type_context { int device; @@ -367,7 +361,7 @@ const ggml_openvino_device_info & ggml_openvino_info() { return info; } -GGML_API ggml_backend_reg_t ggml_backend_openvino_reg(void) { +GGML_BACKEND_API ggml_backend_reg_t ggml_backend_openvino_reg(void) { static ggml_backend_reg reg; static bool initialized = false; @@ -394,14 +388,13 @@ GGML_API ggml_backend_reg_t ggml_backend_openvino_reg(void) { ctx->devices.push_back(dev); } - reg = ggml_backend_reg { - /* .interface = */ ggml_backend_openvino_reg_interface, - /* .context = */ ctx - }; + reg = ggml_backend_reg{ /* .api_version = */ GGML_BACKEND_API_VERSION, + /* .iface = */ ggml_backend_openvino_reg_interface, + /* .context = */ ctx }; } initialized = true; } return ® -} \ No newline at end of file +}