* hexagon: add async HMX worker Introduce hmx-worker (dedicated thread for HMX compute) to overlap HMX matmul with HVX dequant/DMA stages in the pipeline path, replacing the previous synchronous HMX calls that blocked the main thread. * hexagon: cost-based VTCM chunk search for out-stationary matmul * hexagon: fix futex race in hmx_worker_drain Store the boolean to local variable avoid atomic load twice * hex-mm: hmx optimize scatter/transpose and use HMX intrinsics * hex-vmem: drop vmem limit a touch under 3GB on v73 * hexagon: add fwd declaration of htp_context * hex-hmx: replace hmx-worker with hmx-queue that mimics dma-queue interface Simplifies the overall implemantion, reduces thread wakeup roundtrips. * hex-mm: add debug log to hmx work func called from hmx-queue * Update hmx-queue.h Co-authored-by: Max Krasnyansky <max.krasnyansky@gmail.com> --------- Co-authored-by: Kim-Chyan Gan <kgan@qti.qualcomm.com> Co-authored-by: Max Krasnyansky <maxk@qti.qualcomm.com> Co-authored-by: Max Krasnyansky <max.krasnyansky@gmail.com>
68 lines
1.6 KiB
CMake
68 lines
1.6 KiB
CMake
cmake_minimum_required(VERSION 3.22.2)
|
|
project(ggml-htp C CXX ASM)
|
|
|
|
include(${HEXAGON_SDK_ROOT}/build/cmake/hexagon_fun.cmake)
|
|
|
|
include_directories(
|
|
${HEXAGON_SDK_ROOT}/incs
|
|
${HEXAGON_SDK_ROOT}/incs/stddef
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../../include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../..
|
|
${CMAKE_CURRENT_SOURCE_DIR}/..
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
set(HTP_LIB ggml-htp-${DSP_VERSION})
|
|
|
|
add_library(${HTP_LIB} SHARED
|
|
main.c
|
|
htp_iface_skel.c
|
|
worker-pool.c
|
|
hex-dma.c
|
|
matmul-ops.c
|
|
binary-ops.c
|
|
unary-ops.c
|
|
sum-rows-ops.c
|
|
softmax-ops.c
|
|
act-ops.c
|
|
rope-ops.c
|
|
flash-attn-ops.c
|
|
set-rows-ops.c
|
|
get-rows-ops.c
|
|
cpy-ops.c
|
|
repeat-ops.c
|
|
argsort-ops.c
|
|
ssm-conv.c
|
|
cumsum-ops.c
|
|
)
|
|
|
|
target_compile_definitions(${HTP_LIB} PRIVATE
|
|
$<IF:$<BOOL:${HEXAGON_HTP_DEBUG}>,HTP_DEBUG=1,NDEBUG=1>
|
|
$<IF:$<BOOL:${HEXAGON_HTP_DEBUG}>,FARF_HIGH=1,>
|
|
FP32_QUANTIZE_GROUP_SIZE=${GGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE})
|
|
|
|
# HMX acceleration: available on v73+ architectures
|
|
set(HTP_HMX_VERSIONS v73 v75 v79 v81)
|
|
list(FIND HTP_HMX_VERSIONS ${DSP_VERSION} _hmx_idx)
|
|
|
|
if (_hmx_idx GREATER_EQUAL 0)
|
|
target_sources(${HTP_LIB} PRIVATE
|
|
hmx-queue.c
|
|
hmx-matmul-ops.c
|
|
)
|
|
|
|
# -mhmx enables HMX instruction set (needed by files that include hmx-utils.h)
|
|
set_source_files_properties(
|
|
hmx-matmul-ops.c
|
|
PROPERTIES COMPILE_OPTIONS "-mhmx"
|
|
)
|
|
|
|
target_compile_definitions(${HTP_LIB} PRIVATE HTP_HAS_HMX=1)
|
|
endif()
|
|
|
|
build_idl(htp_iface.idl ${HTP_LIB})
|
|
|
|
set_target_properties(${HTP_LIB} PROPERTIES EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
install(TARGETS ${HTP_LIB})
|