-
Notifications
You must be signed in to change notification settings - Fork 12.2k
PR: Refine ggml-hexagon backend(Qualcomm Hexagon NPU backend) for latest ggml,whisper.cpp,llama.cpp #12326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
zhouwg
wants to merge
145
commits into
ggml-org:master
Choose a base branch
from
zhouwg:pr_to_upstream
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+10,090
−0
Open
PR: Refine ggml-hexagon backend(Qualcomm Hexagon NPU backend) for latest ggml,whisper.cpp,llama.cpp #12326
Changes from all commits
Commits
Show all changes
145 commits
Select commit
Hold shift + click to select a range
de9034d
ggml-qnn: add Qualcomm QNN backend for GGML
zhouwg c3629ca
ggml-qnn: santiy check
zhouwg ee85c46
ggml-qnn: update script build-run-android.sh to compare peformance of…
zhouwg e09c468
ggml-qnn: fix minor issue in test-backend-ops.cpp
zhouwg 07b0f36
ggml-qnn: merge QNN RPC feature from https://github.com/zhouwg/kantv/…
zhouwg 6f84bcb
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg 8ca531f
ggml-qnn: a concise approach to offload mulmat to QNN backend(sync fr…
zhouwg 8068067
ggml-qnn: remove redundant codes
zhouwg 40d1bb1
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg 79c1f4a
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg e0f108a
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg 3f1fab0
ggml-qnn: add Qualcomm QNN backend for GGML
zhouwg 32153cf
ggml-qnn: merge QNN RPC feature from https://github.com/zhouwg/kantv/…
zhouwg 0ec2166
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg 65a26a9
ggml-qnn: a concise approach to offload mulmat to QNN backend(sync fr…
zhouwg f257371
ggml-qnn: remove redundant codes
zhouwg bf4276c
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg bb52b16
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg c364770
ggml-qnn: sync from branch kantvai-ggmlqnn-npurpc
zhouwg 63e062e
ggml-qnn: fix a minior typo in internal doc
zhouwg af2868c
ggml-qnn: refine function ggml_qnn_create_general_tensor() to avoid c…
zhouwg 379ea12
ggml-qnn: fix a minor typo in source code
zhouwg 88d337e
build: avoid ggml-qnn backend breaking other backend's builds
zhouwg acd2edd
ggml-qnn: remove redundant codes to make PR reviewers happy
zhouwg 92ae1c1
ggml-qnn: refine code format
zhouwg ceb3a0b
ggml-qnn: offload quantized type mulmat to QNN backend
zhouwg 7bf745f
ggml-qnn: refine source code structure to make code more clearly
zhouwg 14b30db
ggml-qnn: enable release build with necessary logs to make reviewers …
zhouwg 984d4a7
ggml-qnn: enable all quantize type with 2d mulmat
zhouwg 250c87d
ggml-qnn: enable log output of GGMLQNN_LOG_INFO in command line mode …
zhouwg e5e9ab1
ggml-qnn: Windows port --- step2
zhouwg 3aaff30
ggml-qnn: merge UT code and corresponding script from local dev branc…
zhouwg 8a1a9c1
ggml-qnn: merge ggml_qnn_mul_mat_4d from local dev branch to make wor…
zhouwg 2711456
ggml-qnn: submit AI-assisted ggml_qnn_mul_mat_4d(not worked currently…
zhouwg 9133756
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step2
zhouwg 77e40de
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step3
zhouwg 13832d0
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step4
zhouwg 4701454
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step5
zhouwg 1fc44c9
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step6
zhouwg bcd9b88
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step7
zhouwg 8fa8c52
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step8
zhouwg 04f5e01
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- good in step9
zhouwg 4f412d7
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- narrow down t…
zhouwg 230674a
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step10
zhouwg 2df342a
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- narrow down t…
zhouwg 3c0eb14
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- step11
zhouwg a2272a8
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 --- both ok in st…
zhouwg f28d5ae
ggml-qnn: AI-assisted ggml_qnn_mul_mat_4d by Grok 3 ---finalizing ver…
zhouwg eb154df
ggml-qnn: refine ggml_qnn_mul_mat and ggml_qnn_general_node according…
zhouwg 05401cf
ggml-qnn: remove no-needed comments
zhouwg 0b6a041
ggml-qnn: Windows port --- step3
zhouwg 4fd5998
ggml-qnn: remove un-needed function
zhouwg f70e2cb
ggml-qnn:rebase to upstream
zhouwg 198b1c7
ggml-qnn: fix a minior issue during rebase to upstream
zhouwg 50cba9c
ggml-qnn: update script according to https://github.com/ggml-org/llam…
zhouwg 6f5a774
ggml-qnn: fix a minior issue in ggmlqnn_create_general_tensor()
zhouwg 0485bf5
ggml-qnn: active member variable _device_id in class qnn_instance
zhouwg c9dbb35
ggml-qnn: refine ggml_qnn_general_node and ggml_qnn_mul_mat to make c…
zhouwg c8aea48
ggml-qnn: Windows port --- step4
zhouwg cdae2e8
ggml-qnn: Windows port -- step5
zhouwg df08666
ggml-qnn: WoA(Windows on ARM) -- step6
zhouwg 2c21442
ggml-qnn: rebase to upstream
zhouwg 86f48c2
ggml-qnn: pr to upstream
zhouwg 0fe2910
ggml-qnn: rebase to upstream
zhouwg 6be65aa
ggml-qnn: self code-review
zhouwg 4ecf606
ggml-qnn: rebase upstream
zhouwg 8279892
ggml-qnn: add approach through Hexagon cDSP
zhouwg b59f030
ggml-qnn: refine general approach through Hexagon cDSP
zhouwg 41aa928
ggml-qnn: refine the entire ggml-qnn.cpp to make code more clear
zhouwg 269f127
ggml-qnn: refine the entire ggml-qnn.cpp to make code more clear
zhouwg 4d01b33
ggml-qnn: add build script for libggmlop_skel.so
zhouwg bada22a
ggml-qnn: remove redundant functions in this PR and make codes more c…
zhouwg 46b5820
ggml-qnn: original ggml_compute_forward_add and ggml_compute_forward_…
zhouwg 5b44831
ggml-qnn: modify build-run-android.sh to verify mulmat and validate m…
zhouwg 48031c6
ggml-qnn: make host code(ggml-qnn.cpp) more clear and more stable
zhouwg b92e91d
ggml-qnn: refine code according to self code-review and make code mor…
zhouwg 20d1355
ggml-qnn: offload more ggml op to Hexagon cDSP
zhouwg dc702e6
ggml-hexagon: code on AP(arm-cpu) side is stable now
zhouwg 8f1328b
ggml-hexagon: optimize GGML_OP_ADD on cDSP side
zhouwg 0be575d
ggml-hexagon: simplify hexagon-kernel build logic in CMakeLists.txt
zhouwg bfe5acc
ggml-hexagon: release ggml-hexagon v0.98
zhouwg 32fb42c
ggml-hexagon: release ggml-hexagon v0.99
zhouwg 1dd9b70
ggml-hexagon: try to offload q6_k mulmat to cDSP
zhouwg bebe419
ggml-hexagon: fix minior issue in ggml-hexagon.cpp after self code-re…
zhouwg b4c2a25
ggml-hexagon: check validation of ggml-hexagon.cfg before create appr…
zhouwg 31e771c
ggml-hexagon: fix all compiler warnings in ggml-hexagon.cpp
zhouwg a1c1eb9
ggml-hexagon: enable only one backend device for HWACCEL_CDSP and ena…
zhouwg 1ec032c
ggml-hexagon: rpc ion memory pool and test-backend-ops works fine in …
zhouwg 57ad9e2
ggml-hexagon: make comprision of mulmat performance between HWACCEL_Q…
zhouwg 34304d8
ggml-hexagon: release ggml-hexagon v1.00
zhouwg 8dffa01
ggml-hexagon: rebase to upstream
zhouwg 8b67afb
ggml-hexagon: check configuration of enable_rpc_dma_mempool in functi…
zhouwg 90dfb6a
ggml-hexagon: uniform rpc_ion_memsize and rpc_ion_usage between HWACC…
zhouwg 595a6a0
ggml-hexagon: make buffer mechanism more clear in HWACCEL_CDSP approach
zhouwg 18f8ff1
ggml-hexagon: add perf function in hexagon kernerls on cDSP side
zhouwg fef982e
ggml-hexagon: fix a stupid issue of why set rpc latency failure and i…
zhouwg 5791060
ggml-hexagon: make helper function ggmlhexagon_get_timestring() threa…
zhouwg fe36c54
ggml-hexagon: fix a typo in ggml-hexagon.cpp
zhouwg d9433cd
ggml-hexagon: list all known todo and fixme tasks in ggml-hexagon.cpp
zhouwg 4d726bb
ggml-hexagon: fix units MB -> MiB
zhouwg 7cd3e5c
ggml-hexagon: try to make ggml-hexagon backend works fine in a standa…
zhouwg b2184e9
ggml-hexagon: remove reduament code and make debug log more clear
zhouwg ca471e4
ggml-hexagon: add gemma-3-4b-it-Q8_0.gguf to verify q8_0 mulmat on cDSP
zhouwg 65b8ff5
ggml-hexagon:add skeleton code of offload GGML_OP_SOFT_MAX/GGML_OP_RM…
zhouwg 37785a1
ggml-hexagon: release ggml-dsp v0.60 on cDSP side
zhouwg 1c36bf2
ggml-hexagon: merge build logic in kernels/Makefile to ggml-hexagon/C…
zhouwg 11d76d6
ggml-hexagon: fix a typo in ggml-hexagon.cpp
zhouwg 16f4d60
ggml-hexagon: uniform NDEBUG usage in ggml-hexagon.cpp and ggml-dsp.c
zhouwg 1831aec
ggml-hexagon: add profiler feature for purpose of visualize NPU perfo…
zhouwg 9635f65
ggml-hexagon: remove so-called dma memory pool to avoid confusion and…
zhouwg c7f0de7
ggml-hexagon: make function ggmlhexagon_init_rpcmempool in ggml-hexag…
zhouwg 9fdce79
ggml-hexagon: fix potential resource leak in class hexagon_profiler
zhouwg d19414f
ggml-hexagon: enable multi-threading feature on cDSP side
zhouwg db05a5f
ggml-hexagon: upgrade QNN SDK to v2.33.0.250327
zhouwg ce52bd0
ggml-hexagon: fix typo in ggml-hexagon.cpp
zhouwg c46eac9
ggml-dsp: probe QuRT RTOS information in function ggmlop_dsp_open
zhouwg 68f0189
ggml-hexagon: setting enable_rpc_ion_mempool to 1 and make test-backe…
zhouwg 846ee45
ggml-hexagon: check whether user's specified htp arch is valid in CMa…
zhouwg e48692e
ggml-hexagon: sync with upstream
zhouwg 88a3f75
ggml-hexagon: refine pinned-memory feature
zhouwg 35388de
ggml-hexagon: refine build system in ggml-hexagon
zhouwg ac11181
ggml-hexagon: remove redundant code in struct ggml_backend_hexagon_bu…
zhouwg e5968a2
ggml-hexagon: upgrade Android NDK to android-ndk-r28
zhouwg ca274db
ggml-dsp: split ggml-dsp.c into multiple files and cleanup
zhouwg 93cc601
ggml-dsp: refine ggml-dsp and make ggml-dsp more clear
zhouwg 394d91b
ggml-hexagon: fix a minior issue in dev ops
zhouwg 3f7bf8d
ggml-hexagon: fix a build issue in CI
zhouwg 03e0452
ggml-dsp: cleanup code
zhouwg abdbbf6
ggml-hexagon: sync with upstream
zhouwg 28e1997
ggml-dsp: cleanup code
zhouwg e9ec002
ggml-dsp:refine ggmlhexagon_dsp_add_f32
zhouwg ce92de2
ggml-dsp: refine logic of thread_counts
zhouwg 5f6c6f4
ggml-hexagon: release v1.06 and ready for code review
zhouwg 2c210d6
ggml-dsp: make GGML_OP_ADD more faster on cDSP side
zhouwg e2a834d
ggml-hexagon: sync from project kantv(make ggml-hexagon backend can w…
zhouwg c38e273
sync with upstream llama.cpp and sync ggml-hexagon.cpp from project k…
zhouwg 35efe11
sync with upstream
zhouwg 1cdded3
sync with upstream
zhouwg 890690a
ggml-hexagon: upgrade QNN SDK to v2.34.0.250424
zhouwg 7884520
sync with upstream
zhouwg f36a212
ggml-hexagon: sync from project kantv(fix a long-term issue which int…
zhouwg 9139eeb
ggml-hexagon: sync with upstream llama.cpp
zhouwg c36159a
ggml-hexagon: add set_hexagon_cfg(int new_hexagon_backend, int new_hw…
zhouwg fafca74
ggml-hexagon: sync with branch self-build
zhouwg 7048605
ggml-hexagon:sycn with branch self-build
zhouwg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -146,3 +146,5 @@ poetry.toml | |
# Local scripts | ||
/run-vim.sh | ||
/run-chat.sh | ||
|
||
/prebuilts |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* Copyright (c) 2024-2025 The ggml authors | ||
*/ | ||
#pragma once | ||
|
||
#include "ggml.h" | ||
#include "ggml-backend.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
#define GGML_HEXAGON_MAX_DEVICES 4 | ||
#define GGML_HEXAGON_BACKEND_NAME "hexagon" | ||
|
||
enum HEXAGONBackend { | ||
HEXAGON_BACKEND_QNNCPU = 0, | ||
HEXAGON_BACKEND_QNNGPU = 1, | ||
HEXAGON_BACKEND_QNNNPU = 2, | ||
HEXAGON_BACKEND_CDSP = 3, | ||
HEXAGON_BACKEND_GGML = 4, //"fake" HEXAGON backend for compare performance between HEXAGON backend and ggml backend | ||
}; | ||
|
||
//0: general approach through QNN:offload ggmlop to QNN(QNNCPU, QNNGPU, QNNNPU) | ||
//1: special approach through QNN-SINGLEGRAPH:mapping entire ggml cgraph to a single QNN graph | ||
//2: general approach through Hexagon cDSP:offload ggmlop to Hexagon cDSP directly | ||
enum hwaccel_approach_type { | ||
HWACCEL_QNN = 0, | ||
HWACCEL_QNN_SINGLEGRAPH= 1, | ||
HWACCEL_CDSP = 2, | ||
}; | ||
|
||
GGML_BACKEND_API ggml_backend_t ggml_backend_hexagon_init(size_t dev_num, const char * qnn_lib_path); | ||
|
||
GGML_BACKEND_API bool ggml_backend_is_hexagon(ggml_backend_t backend); | ||
|
||
GGML_BACKEND_API int ggml_backend_hexagon_get_device_count(void); | ||
|
||
GGML_BACKEND_API ggml_backend_reg_t ggml_backend_hexagon_reg(void); | ||
|
||
GGML_BACKEND_API const char * ggml_backend_hexagon_get_devname(size_t dev_num); | ||
|
||
GGML_BACKEND_API void ggml_backend_hexagon_set_cfg(int new_hexagon_backend, int new_hwaccel_approach); | ||
|
||
GGML_BACKEND_API int ggml_backend_hexagon_get_mulmat_algotype(void); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
project(ggml-hexagon) | ||
message(STATUS "Using HEXAGON backend") | ||
message("CMAKE_SYSTEM_NAME : ${CMAKE_SYSTEM_NAME}") | ||
|
||
set(CMAKE_CXX_STANDARD 20) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
|
||
if(NOT DEFINED QNN_SDK_PATH) | ||
message(FATAL_ERROR "QNN_SDK_PATH not defined") | ||
endif() | ||
|
||
if(NOT DEFINED HEXAGON_SDK_PATH) | ||
message(FATAL_ERROR "HEXAGON_SDK_PATH not defined") | ||
endif() | ||
|
||
message("QNN_SDK_PATH : ${QNN_SDK_PATH}") | ||
message("HEXAGON_SDK_PATH: ${HEXAGON_SDK_PATH}") | ||
message("HTP_ARCH_VERSION: ${HTP_ARCH_VERSION}") | ||
|
||
if (CMAKE_BUILD_TYPE STREQUAL "Debug") | ||
set(DEBUG_FLAG "-DDEBUG -Wall") | ||
message("Debug mode:${DEBUG_FLAG}") | ||
else() | ||
set(DEBUG_FLAG "-DNDEBUG -Wall") | ||
#manually disable all verbose logs in ggml-hexagon/CMakeLists.txt to | ||
#make compare NPU performance through llama-bench more clear | ||
#set(DEBUG_FLAG "-DNDEBUG -Wall -DDISABLE_ALL_LOG") | ||
message("Release mode:${DEBUG_FLAG}") | ||
endif() | ||
|
||
#v68 --- Snapdragon 888 | ||
#v69 --- Snapdragon 8 Gen1 | ||
#v73 --- Snapdragon 8 Gen2 | ||
#v75 --- Snapdragon 8 Gen3 | ||
#v79 --- Snapdragon 8 Elite(aka Gen4) | ||
if(NOT DEFINED HTP_ARCH_VERSION) | ||
message(FATAL_ERROR "HTP_ARCH_VERSION not defined, valid htp arch: v68,v69,v73,v75,v79") | ||
endif() | ||
|
||
#check whether user's specified htp arch is valid | ||
set(CHECK_HTP_ARCH "WRONG") | ||
foreach (feat v68 v69 v73 v75 v79) | ||
if (${feat} STREQUAL ${HTP_ARCH_VERSION}) | ||
set(CHECK_HTP_ARCH "GOOD") | ||
endif() | ||
endforeach() | ||
if (${CHECK_HTP_ARCH} STREQUAL "WRONG") | ||
message(FATAL_ERROR "ggml-hexagon backend only support htp arch v68,v69,v73,v75,v79") | ||
endif() | ||
|
||
#check optimization flags | ||
set(OPT_FLAG " ") | ||
if (${HTP_ARCH_VERSION} STREQUAL "v75" OR ${HTP_ARCH_VERSION} STREQUAL "v79") | ||
#works fine on Snapdragon 8Gen3&8Elite with 1.5x - 3x performance gains with the default ggml backend | ||
set(OPT_FLAG " -O3 -march=armv8.7-a -mcpu=cortex-x1 -mtune=cortex-x1 -flto -D_GNU_SOURCE -fvectorize -ffp-model=fast -fno-finite-math-only") | ||
endif() | ||
message("OPT_FLAG:${OPT_FLAG}") | ||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Android") | ||
find_library(LOG_LIB log) | ||
|
||
add_library(cdsprpc | ||
SHARED | ||
IMPORTED) | ||
set_target_properties(cdsprpc | ||
PROPERTIES | ||
IMPORTED_LOCATION | ||
${HEXAGON_SDK_PATH}/ipc/fastrpc/remote/ship/android_aarch64/libcdsprpc.so) | ||
|
||
set(QNN_LINK_LIBRARIES ${LOG_LIB} cdsprpc) | ||
set(QNN_DEFAULT_LIB_SEARCH_PATH "/data/local/tmp/" CACHE STRING "customized library search path for QNN backend") | ||
|
||
include_directories(${HEXAGON_SDK_PATH}/incs) | ||
include_directories(${HEXAGON_SDK_PATH}/incs/stddef) | ||
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/incs) | ||
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/rpcmem/inc) | ||
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/remote/ship/android_Debug_aarch64) | ||
include_directories(${HEXAGON_SDK_PATH}/utils/examples) | ||
include_directories(${HEXAGON_SDK_PATH}/ipc/fastrpc/rtld/ship/android_aarch64) | ||
include_directories(${HEXAGON_SDK_PATH}/libs/atomic/inc) | ||
include_directories(${HEXAGON_SDK_PATH}/libs/atomic/android_Debug_aarch64/ship) | ||
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-hexagon/) | ||
include_directories(${CMAKE_SOURCE_DIR}/ggml/src/ggml-hexagon/kernels/) | ||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") | ||
set(QNN_DEFAULT_LIB_SEARCH_PATH "C:\\" CACHE STRING "customized library search path for QNN backend") | ||
else() | ||
message(FATAL_ERROR "ggml-hexagon now only available on Android and Windows(Windows on ARM)") | ||
endif() | ||
|
||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGGML_USE_HEXAGON ${DEBUG_FLAG} ${OPT_FLAG}") | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGGML_USE_HEXAGON ${DEBUG_FLAG} ${OPT_FLAG}") | ||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DGGML_USE_HEXAGON ${DEBUG_FLAG} ${OPT_FLAG}") | ||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DGGML_USE_HEXAGON ${DEBUG_FLAG} ${OPT_FLAG}") | ||
|
||
file(GLOB HEXAGON_SOURCES "${CMAKE_CURRENT_LIST_DIR}/*.cpp" "${CMAKE_CURRENT_LIST_DIR}/kernels/stub.c") | ||
ggml_add_backend_library(ggml-hexagon ${HEXAGON_SOURCES}) | ||
|
||
target_include_directories(ggml-hexagon PRIVATE ${QNN_SDK_PATH}/include/QNN ${HEXAGON_SDK_PATH} ${CMAKE_CURRENT_LIST_DIR}) | ||
target_link_libraries(ggml-hexagon PRIVATE ${QNN_LINK_LIBRARIES}) | ||
|
||
string(REGEX REPLACE "/$" "" QNN_DEFAULT_LIB_SEARCH_PATH "${QNN_DEFAULT_LIB_SEARCH_PATH}") | ||
target_compile_definitions(ggml-hexagon PRIVATE QNN_DEFAULT_LIB_SEARCH_PATH="${QNN_DEFAULT_LIB_SEARCH_PATH}/") | ||
|
||
#cross compiling source codes of hexagon kernels which running on cDSP side | ||
function(ggml_hexagon_build_kernel KNAME) | ||
message(STATUS "ggml_hexagon: build hexagon-kernel ${KNAME}") | ||
|
||
add_custom_command( | ||
TARGET ${PROJECT_NAME} | ||
POST_BUILD | ||
COMMAND echo "current working path:`pwd`\n" | ||
COMMAND echo "${CMAKE_CURRENT_LIST_DIR}/kernels" | ||
COMMAND make -C ${CMAKE_CURRENT_LIST_DIR}/kernels/ clean | ||
COMMAND make -C ${CMAKE_CURRENT_LIST_DIR}/kernels/ HEXAGON_SDK_PATH=${HEXAGON_SDK_PATH} HTP_ARCH_VERSION=${HTP_ARCH_VERSION} DEBUG_FLAG=${DEBUG_FLAG} | ||
COMMAND echo "current working path:`pwd`\n" | ||
COMMAND ls -l ../../../bin/libggmldsp-skel.so | ||
COMMENT "build hexagon-kernel" | ||
) | ||
endfunction() | ||
|
||
function(ggml_hexagon_setup_cfg KNAME) | ||
message(STATUS "ggml_hexagon: setup runtime configuration file ${KNAME}") | ||
add_custom_command( | ||
TARGET ${PROJECT_NAME} | ||
POST_BUILD | ||
COMMAND echo "current working path:`pwd`\n" | ||
COMMAND /bin/cp -fv ../../../../../scripts/${KNAME} ../../../bin/ | ||
COMMENT "setup runtime configuration file" | ||
) | ||
endfunction() | ||
|
||
ggml_hexagon_build_kernel("cdsp") | ||
ggml_hexagon_setup_cfg("ggml-hexagon.cfg") |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.