mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-04-19 16:58:39 +02:00
opencl: simplify kernel embedding logic in cmakefile (llama/12503)
Co-authored-by: Max Krasnyansky <quic_maxk@quicinc.com>
This commit is contained in:
parent
a219941812
commit
ba6f584f30
@ -25,124 +25,46 @@ endif ()
|
|||||||
if (GGML_OPENCL_EMBED_KERNELS)
|
if (GGML_OPENCL_EMBED_KERNELS)
|
||||||
add_compile_definitions(GGML_OPENCL_EMBED_KERNELS)
|
add_compile_definitions(GGML_OPENCL_EMBED_KERNELS)
|
||||||
|
|
||||||
set(OPENCL_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl.cl.h")
|
|
||||||
set(OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mm.cl.h")
|
|
||||||
set(OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_cvt.cl.h")
|
|
||||||
|
|
||||||
set(OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle.cl.h")
|
|
||||||
set(OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle_general.cl.h")
|
|
||||||
set(OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mul_mat_Ab_Bi_8x4.cl.h")
|
|
||||||
set(OPENCL_TRANSPOSE_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_16.cl.h")
|
|
||||||
set(OPENCL_TRANSPOSE_32_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32.cl.h")
|
|
||||||
set(OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32_16.cl.h")
|
|
||||||
|
|
||||||
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py")
|
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py")
|
||||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/autogenerated")
|
||||||
|
|
||||||
include_directories("${CMAKE_BINARY_DIR}/autogenerated")
|
target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/autogenerated")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
function(ggml_opencl_add_kernel KNAME)
|
||||||
|
set(KERN_HDR ${CMAKE_CURRENT_BINARY_DIR}/autogenerated/${KNAME}.cl.h)
|
||||||
|
set(KERN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/kernels/${KNAME}.cl)
|
||||||
|
|
||||||
|
if (GGML_OPENCL_EMBED_KERNELS)
|
||||||
|
message(STATUS "opencl: embedding kernel ${KNAME}")
|
||||||
|
|
||||||
# Python must be accessible from command line
|
# Python must be accessible from command line
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${OPENCL_CL_SOURCE_EMBED}
|
OUTPUT ${KERN_HDR}
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} ${KERN_SRC} ${KERN_HDR}
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl
|
DEPENDS ${KERN_SRC} ${EMBED_KERNEL_SCRIPT}
|
||||||
${OPENCL_CL_SOURCE_EMBED}
|
COMMENT "Generate ${KERN_HDR}"
|
||||||
DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl.cl.h"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_command(
|
target_sources(${TARGET_NAME} PRIVATE ${KERN_HDR})
|
||||||
OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mm.cl
|
|
||||||
${OPENCL_MM_CL_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_mm.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_cvt.cl
|
|
||||||
${OPENCL_CVT_CL_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_cvt.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle.cl
|
|
||||||
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_gemv_noshuffle.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_gemv_noshuffle.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle_general.cl
|
|
||||||
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_gemv_noshuffle_general.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_gemv_noshuffle_general.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl
|
|
||||||
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_mul_mat_Ab_Bi_8x4.cl.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_16.cl
|
|
||||||
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_transpose_16.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32.cl
|
|
||||||
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_transpose_32.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_transpose_32.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32_16.cl
|
|
||||||
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
|
|
||||||
DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT}
|
|
||||||
COMMENT "Generate ggml-opencl_transpose_32_16.cl.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
target_sources(${TARGET_NAME} PRIVATE
|
|
||||||
${OPENCL_CL_SOURCE_EMBED}
|
|
||||||
${OPENCL_MM_CL_SOURCE_EMBED}
|
|
||||||
${OPENCL_CVT_CL_SOURCE_EMBED}
|
|
||||||
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
|
|
||||||
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
|
|
||||||
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
|
|
||||||
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
|
|
||||||
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
|
|
||||||
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED})
|
|
||||||
else ()
|
else ()
|
||||||
# copy ggml-opencl.cl to bin directory
|
message(STATUS "opencl: adding kernel ${KNAME}")
|
||||||
configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.cl COPYONLY)
|
configure_file(${KERN_SRC} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${KNAME}.cl COPYONLY)
|
||||||
configure_file(kernels/ggml-opencl_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mm.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_cvt.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_cvt.cl COPYONLY)
|
|
||||||
|
|
||||||
configure_file(kernels/ggml-opencl_gemv_noshuffle.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_gemv_noshuffle_general.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle_general.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mul_mat_Ab_Bi_8x4.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_transpose_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_16.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_transpose_32.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32.cl COPYONLY)
|
|
||||||
configure_file(kernels/ggml-opencl_transpose_32_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32_16.cl COPYONLY)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(GGML_OPENCL_KERNELS
|
||||||
|
ggml-opencl
|
||||||
|
ggml-opencl_mm
|
||||||
|
ggml-opencl_cvt
|
||||||
|
ggml-opencl_gemv_noshuffle
|
||||||
|
ggml-opencl_gemv_noshuffle_general
|
||||||
|
ggml-opencl_mul_mat_Ab_Bi_8x4
|
||||||
|
ggml-opencl_transpose_16
|
||||||
|
ggml-opencl_transpose_32
|
||||||
|
ggml-opencl_transpose_32_16
|
||||||
|
)
|
||||||
|
|
||||||
|
foreach (K ${GGML_OPENCL_KERNELS})
|
||||||
|
ggml_opencl_add_kernel(${K})
|
||||||
|
endforeach()
|
||||||
|
Loading…
Reference in New Issue
Block a user