opencl: make OpenCL required, remove redundant lib and inc directories

* `ggml-base`, `..` and `.` are added by `ggml_add_backend_library`
This commit is contained in:
Li He 2024-12-11 14:07:36 -08:00 committed by Max Krasnyansky
parent 97a12703dd
commit 22411ab58f

View file

@ -1,153 +1,147 @@
find_package(OpenCL REQUIRED)
find_package(Python3 REQUIRED)
find_package(OpenCL) set(TARGET_NAME ggml-opencl)
if (OpenCL_FOUND) ggml_add_backend_library(${TARGET_NAME}
find_package(Python3 REQUIRED) ggml-opencl.cpp
../../include/ggml-opencl.h)
target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCL_LIBRARIES})
target_include_directories(${TARGET_NAME} PRIVATE ${OpenCL_INCLUDE_DIRS})
set(TARGET_NAME ggml-opencl) if (GGML_OPENCL_PROFILING)
message(STATUS "OpenCL profiling enabled (increases CPU overhead)")
ggml_add_backend_library(${TARGET_NAME} add_compile_definitions(GGML_OPENCL_PROFILING)
ggml-opencl.cpp endif ()
../../include/ggml-opencl.h)
target_link_libraries(${TARGET_NAME} PRIVATE ggml-base ${OpenCL_LIBRARIES}) add_compile_definitions(GGML_OPENCL_SOA_Q)
target_include_directories(${TARGET_NAME} PRIVATE . .. ${OpenCL_INCLUDE_DIRS})
if (GGML_OPENCL_USE_ADRENO_KERNELS)
if (GGML_OPENCL_PROFILING) message(STATUS "OpenCL will use matmul kernels optimized for Adreno")
message(STATUS "OpenCL profiling enabled (increases CPU overhead)") add_compile_definitions(GGML_OPENCL_USE_ADRENO_KERNELS)
add_compile_definitions(GGML_OPENCL_PROFILING) endif ()
endif ()
if (GGML_OPENCL_EMBED_KERNELS)
add_compile_definitions(GGML_OPENCL_SOA_Q) add_compile_definitions(GGML_OPENCL_EMBED_KERNELS)
if (GGML_OPENCL_USE_ADRENO_KERNELS) set(OPENCL_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl.cl.h")
message(STATUS "OpenCL will use matmul kernels optimized for Adreno") set(OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mm.cl.h")
add_compile_definitions(GGML_OPENCL_USE_ADRENO_KERNELS) set(OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_cvt.cl.h")
endif ()
set(OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle.cl.h")
if (GGML_OPENCL_EMBED_KERNELS) set(OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle_general.cl.h")
add_compile_definitions(GGML_OPENCL_EMBED_KERNELS) 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_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl.cl.h") set(OPENCL_TRANSPOSE_32_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32.cl.h")
set(OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mm.cl.h") set(OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32_16.cl.h")
set(OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_cvt.cl.h")
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py")
set(OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle.cl.h") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
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") include_directories("${CMAKE_BINARY_DIR}/autogenerated")
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") # Python must be accessible from command line
set(OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32_16.cl.h") add_custom_command(
OUTPUT ${OPENCL_CL_SOURCE_EMBED}
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py") COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated") ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl
${OPENCL_CL_SOURCE_EMBED}
include_directories("${CMAKE_BINARY_DIR}/autogenerated") DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT}
COMMENT "Generate ggml-opencl.cl.h"
# Python must be accessible from command line )
add_custom_command(
OUTPUT ${OPENCL_CL_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_CL_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mm.cl
DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_MM_CL_SOURCE_EMBED}
COMMENT "Generate ggml-opencl2.cl.h" DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT}
) COMMENT "Generate ggml-opencl_mm.cl.h"
)
add_custom_command(
OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mm.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_MM_CL_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_cvt.cl
DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_CVT_CL_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_mm.cl.h" DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT}
) COMMENT "Generate ggml-opencl_cvt.cl.h"
)
add_custom_command(
OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_cvt.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_CVT_CL_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle.cl
DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_cvt.cl.h" 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_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle_general.cl
DEPENDS kernels/ggml-opencl_gemv_noshuffle.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_gemv_noshuffle.cl.h" 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_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle_general.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl
DEPENDS kernels/ggml-opencl_gemv_noshuffle_general.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_gemv_noshuffle_general.cl.h" 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_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_16.cl
DEPENDS kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_mul_mat_Ab_Bi_8x4.cl.cl.h" DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT}
) COMMENT "Generate ggml-opencl_transpose_16.cl.h"
)
add_custom_command(
OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_16.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_TRANSPOSE_16_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32.cl
DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_transpose_16.cl.h" 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_SOURCE_EMBED} add_custom_command(
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32.cl COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
${OPENCL_TRANSPOSE_32_SOURCE_EMBED} ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32_16.cl
DEPENDS kernels/ggml-opencl_transpose_32.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_transpose_32.cl.h" DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT}
) COMMENT "Generate ggml-opencl_transpose_32_16.cl.h"
)
add_custom_command(
OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED} target_sources(${TARGET_NAME} PRIVATE
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} ${OPENCL_CL_SOURCE_EMBED}
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32_16.cl ${OPENCL_MM_CL_SOURCE_EMBED}
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED} ${OPENCL_CVT_CL_SOURCE_EMBED}
DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT} ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
COMMENT "Generate ggml-opencl_transpose_32_16.cl.h" ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
) ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
target_sources(${TARGET_NAME} PRIVATE ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
${OPENCL_CL_SOURCE_EMBED} ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED})
${OPENCL_MM_CL_SOURCE_EMBED} else ()
${OPENCL_CVT_CL_SOURCE_EMBED} # copy ggml-opencl.cl to bin directory
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED} configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.cl COPYONLY)
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED} configure_file(kernels/ggml-opencl_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mm.cl COPYONLY)
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED} configure_file(kernels/ggml-opencl_cvt.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_cvt.cl COPYONLY)
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
${OPENCL_TRANSPOSE_32_SOURCE_EMBED} configure_file(kernels/ggml-opencl_gemv_noshuffle.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle.cl COPYONLY)
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}) configure_file(kernels/ggml-opencl_gemv_noshuffle_general.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle_general.cl COPYONLY)
else () configure_file(kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mul_mat_Ab_Bi_8x4.cl COPYONLY)
# copy ggml-opencl.cl to bin directory configure_file(kernels/ggml-opencl_transpose_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_16.cl COPYONLY)
configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.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_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mm.cl COPYONLY) configure_file(kernels/ggml-opencl_transpose_32_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32_16.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 ()
else ()
message(WARNING "OpenCL not found")
endif () endif ()