Spaces:
Build error
Build error
| find_package(OpenCL REQUIRED) | |
| find_package(Python3 REQUIRED) | |
| set(TARGET_NAME ggml-opencl) | |
| ggml_add_backend_library(${TARGET_NAME} | |
| ggml-opencl.cpp | |
| ../../include/ggml-opencl.h) | |
| target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCL_LIBRARIES}) | |
| target_include_directories(${TARGET_NAME} PRIVATE ${OpenCL_INCLUDE_DIRS}) | |
| if (GGML_OPENCL_PROFILING) | |
| message(STATUS "OpenCL profiling enabled (increases CPU overhead)") | |
| add_compile_definitions(GGML_OPENCL_PROFILING) | |
| endif () | |
| add_compile_definitions(GGML_OPENCL_SOA_Q) | |
| if (GGML_OPENCL_USE_ADRENO_KERNELS) | |
| message(STATUS "OpenCL will use matmul kernels optimized for Adreno") | |
| add_compile_definitions(GGML_OPENCL_USE_ADRENO_KERNELS) | |
| endif () | |
| if (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") | |
| file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated") | |
| include_directories("${CMAKE_BINARY_DIR}/autogenerated") | |
| # Python must be accessible from command line | |
| add_custom_command( | |
| OUTPUT ${OPENCL_CL_SOURCE_EMBED} | |
| COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} | |
| ${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl | |
| ${OPENCL_CL_SOURCE_EMBED} | |
| DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT} | |
| COMMENT "Generate ggml-opencl.cl.h" | |
| ) | |
| add_custom_command( | |
| 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 () | |
| # copy ggml-opencl.cl to bin directory | |
| configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.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 () | |