Skip to content

Commit e662f59

Browse files
committed
ggml-qnn: add approach through Hexagon cDSP
1 parent 879b5ba commit e662f59

File tree

9 files changed

+2146
-240
lines changed

9 files changed

+2146
-240
lines changed

ggml/include/ggml-qnn.h

+1-16
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,11 @@ GGML_BACKEND_API ggml_backend_t ggml_backend_qnn_init(size_t dev_num, const char
4242

4343
GGML_BACKEND_API bool ggml_backend_is_qnn(ggml_backend_t backend);
4444

45-
GGML_BACKEND_API void ggml_backend_qnn_set_n_threads(ggml_backend_t backend, int thread_counts);
46-
4745
GGML_BACKEND_API int ggml_backend_qnn_get_device_count(void);
4846

4947
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_qnn_reg(void);
5048

51-
inline const char * ggml_backend_qnn_get_devname(size_t dev_num) {
52-
switch (dev_num) {
53-
case QNN_BACKEND_CPU:
54-
return "QNN-CPU";
55-
case QNN_BACKEND_GPU:
56-
return "QNN-GPU";
57-
case QNN_BACKEND_NPU:
58-
return "QNN-NPU";
59-
case QNN_BACKEND_GGML:
60-
return "ggml"; //"fake" QNN backend, used for compare performance between QNN backend and original GGML
61-
default:
62-
return "unknown";
63-
}
64-
}
49+
const char * ggml_backend_qnn_get_devname(size_t dev_num);
6550

6651
#ifdef __cplusplus
6752
}

ggml/src/ggml-qnn/CMakeLists.txt

+42-19
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,60 @@
11
message(STATUS "Using QNN backend")
22
message("CMAKE_SYSTEM_NAME : ${CMAKE_SYSTEM_NAME}")
33

4+
if(NOT DEFINED QNN_SDK_PATH)
5+
message(FATAL_ERROR "QNN_SDK_PATH not defined")
6+
endif()
7+
8+
if(NOT DEFINED HEXAGON_SDK_PATH)
9+
message(FATAL_ERROR "HEXAGON_SDK_PATH not defined")
10+
endif()
11+
12+
message("QNN_SDK_PATH: ${QNN_SDK_PATH}")
13+
message("HEXAGON_SDK_PATH: ${HEXAGON_SDK_PATH}")
14+
415
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
516
find_library(LOG_LIB log)
6-
set(QNN_LINK_LIBRARIES ${LOG_LIB})
17+
18+
add_library(cdsprpc
19+
SHARED
20+
IMPORTED)
21+
set_target_properties(cdsprpc
22+
PROPERTIES
23+
IMPORTED_LOCATION
24+
${HEXAGON_SDK_PATH}/ipc/fastrpc/remote/ship/android_aarch64/libcdsprpc.so)
25+
26+
set(QNN_LINK_LIBRARIES ${LOG_LIB} cdsprpc)
727
set(QNN_DEFAULT_LIB_SEARCH_PATH "/data/local/tmp/" CACHE STRING "customized library search path for QNN backend")
28+
29+
include_directories(${HEXAGON_SDK_PATH}/incs)
30+
include_directories(${HEXAGON_SDK_PATH}/incs/stddef)
31+
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/incs)
32+
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/rpcmem/inc)
33+
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/remote/ship/android_Debug_aarch64)
34+
include_directories(${HEXAGON_SDK_PATH}/incs/qnx)
35+
include_directories(${HEXAGON_SDK_PATH}/libs/common/qnx/ship/android_Debug_aarch64)
36+
include_directories(${HEXAGON_SDK_PATH}/utils/examples)
37+
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/rtld/ship/android_aarch64)
38+
include_directories(${HEXAGON_SDK_PATH}/libs/atomic/inc)
39+
include_directories(${HEXAGON_SDK_PATH}/libs/atomic/android_Debug_aarch64/ship)
40+
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-qnn/)
41+
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-qnn/kernels/)
42+
843
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
944
set(QNN_DEFAULT_LIB_SEARCH_PATH "C:\\" CACHE STRING "customized library search path for QNN backend")
1045
else()
1146
message(FATAL_ERROR "QNN now only available on Android and Windows(Windows on ARM)")
1247
endif()
1348

14-
if(NOT DEFINED GGML_QNN_SDK_PATH)
15-
# try read from environment variable
16-
if(DEFINED ENV{QNN_SDK_PATH})
17-
set(GGML_QNN_SDK_PATH $ENV{QNN_SDK_PATH})
18-
else()
19-
message(FATAL_ERROR "GGML_QNN_SDK_PATH not defined")
20-
endif()
21-
endif()
22-
23-
message("QNN_SDK_PATH: ${GGML_QNN_SDK_PATH}")
24-
2549
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGGML_USE_QNN")
2650
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
2751

28-
file(GLOB QNN_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp")
29-
ggml_add_backend_library(ggml-qnn
30-
${QNN_SOURCES}
31-
)
52+
file(GLOB QNN_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp" "${CMAKE_CURRENT_LIST_DIR}/kernels/*.c")
53+
#file(GLOB QNN_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp")
54+
ggml_add_backend_library(ggml-qnn ${QNN_SOURCES})
3255

33-
target_include_directories(ggml-qnn PRIVATE ${GGML_QNN_SDK_PATH}/include/QNN ${CMAKE_CURRENT_LIST_DIR})
56+
target_include_directories(ggml-qnn PRIVATE ${QNN_SDK_PATH}/include/QNN ${HEXAGON_SDK_PATH} ${CMAKE_CURRENT_LIST_DIR})
3457
target_link_libraries(ggml-qnn PRIVATE ${QNN_LINK_LIBRARIES})
3558

36-
string(REGEX REPLACE "/$" "" GGML_QNN_DEFAULT_LIB_SEARCH_PATH "${QNN_DEFAULT_LIB_SEARCH_PATH}")
37-
target_compile_definitions(ggml-qnn PRIVATE GGML_QNN_DEFAULT_LIB_SEARCH_PATH="${QNN_DEFAULT_LIB_SEARCH_PATH}/")
59+
string(REGEX REPLACE "/$" "" QNN_DEFAULT_LIB_SEARCH_PATH "${QNN_DEFAULT_LIB_SEARCH_PATH}")
60+
target_compile_definitions(ggml-qnn PRIVATE QNN_DEFAULT_LIB_SEARCH_PATH="${QNN_DEFAULT_LIB_SEARCH_PATH}/")

0 commit comments

Comments
 (0)