@@ -25,124 +25,46 @@ endif ()
2525if (GGML_OPENCL_EMBED_KERNELS)
2626 add_compile_definitions (GGML_OPENCL_EMBED_KERNELS)
2727
28- set (OPENCL_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl.cl.h" )
29- set (OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_mm.cl.h" )
30- set (OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_cvt.cl.h" )
28+ set (EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR} /kernels/embed_kernel.py" )
29+ file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /autogenerated" )
3130
32- set (OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_gemv_noshuffle.cl.h" )
33- set (OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_gemv_noshuffle_general.cl.h" )
34- set (OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_mul_mat_Ab_Bi_8x4.cl.h" )
35- set (OPENCL_TRANSPOSE_16_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_transpose_16.cl.h" )
36- set (OPENCL_TRANSPOSE_32_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_transpose_32.cl.h" )
37- set (OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR} /autogenerated/ggml-opencl_transpose_32_16.cl.h" )
38-
39- set (EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR} /kernels/embed_kernel.py" )
40- file (MAKE_DIRECTORY "${CMAKE_BINARY_DIR} /autogenerated" )
41-
42- include_directories ("${CMAKE_BINARY_DIR} /autogenerated" )
43-
44- # Python must be accessible from command line
45- add_custom_command (
46- OUTPUT ${OPENCL_CL_SOURCE_EMBED}
47- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
48- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl.cl
49- ${OPENCL_CL_SOURCE_EMBED}
50- DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT}
51- COMMENT "Generate ggml-opencl.cl.h"
52- )
53-
54- add_custom_command (
55- OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED}
56- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
57- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_mm.cl
58- ${OPENCL_MM_CL_SOURCE_EMBED}
59- DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT}
60- COMMENT "Generate ggml-opencl_mm.cl.h"
61- )
62-
63- add_custom_command (
64- OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED}
65- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
66- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_cvt.cl
67- ${OPENCL_CVT_CL_SOURCE_EMBED}
68- DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT}
69- COMMENT "Generate ggml-opencl_cvt.cl.h"
70- )
71-
72- add_custom_command (
73- OUTPUT ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
74- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
75- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_gemv_noshuffle.cl
76- ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
77- DEPENDS kernels/ggml-opencl_gemv_noshuffle.cl ${EMBED_KERNEL_SCRIPT}
78- COMMENT "Generate ggml-opencl_gemv_noshuffle.cl.h"
79- )
80-
81- add_custom_command (
82- OUTPUT ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
83- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
84- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_gemv_noshuffle_general.cl
85- ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
86- DEPENDS kernels/ggml-opencl_gemv_noshuffle_general.cl ${EMBED_KERNEL_SCRIPT}
87- COMMENT "Generate ggml-opencl_gemv_noshuffle_general.cl.h"
88- )
89-
90- add_custom_command (
91- OUTPUT ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
92- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
93- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl
94- ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
95- DEPENDS kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${EMBED_KERNEL_SCRIPT}
96- COMMENT "Generate ggml-opencl_mul_mat_Ab_Bi_8x4.cl.cl.h"
97- )
98-
99- add_custom_command (
100- OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
101- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
102- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_transpose_16.cl
103- ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
104- DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT}
105- COMMENT "Generate ggml-opencl_transpose_16.cl.h"
106- )
107-
108- add_custom_command (
109- OUTPUT ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
110- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
111- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_transpose_32.cl
112- ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
113- DEPENDS kernels/ggml-opencl_transpose_32.cl ${EMBED_KERNEL_SCRIPT}
114- COMMENT "Generate ggml-opencl_transpose_32.cl.h"
115- )
116-
117- add_custom_command (
118- OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
119- COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
120- ${CMAKE_CURRENT_SOURCE_DIR} /kernels/ggml-opencl_transpose_32_16.cl
121- ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
122- DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT}
123- COMMENT "Generate ggml-opencl_transpose_32_16.cl.h"
124- )
125-
126- target_sources (${TARGET_NAME} PRIVATE
127- ${OPENCL_CL_SOURCE_EMBED}
128- ${OPENCL_MM_CL_SOURCE_EMBED}
129- ${OPENCL_CVT_CL_SOURCE_EMBED}
130- ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
131- ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
132- ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
133- ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
134- ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
135- ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED} )
136- else ()
137- # copy ggml-opencl.cl to bin directory
138- configure_file (kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl.cl COPYONLY )
139- configure_file (kernels/ggml-opencl_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_mm.cl COPYONLY )
140- configure_file (kernels/ggml-opencl_cvt.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_cvt.cl COPYONLY )
141-
142- configure_file (kernels/ggml-opencl_gemv_noshuffle.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_gemv_noshuffle.cl COPYONLY )
143- configure_file (kernels/ggml-opencl_gemv_noshuffle_general.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_gemv_noshuffle_general.cl COPYONLY )
144- configure_file (kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_mul_mat_Ab_Bi_8x4.cl COPYONLY )
145- configure_file (kernels/ggml-opencl_transpose_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_transpose_16.cl COPYONLY )
146- configure_file (kernels/ggml-opencl_transpose_32.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_transpose_32.cl COPYONLY )
147- configure_file (kernels/ggml-opencl_transpose_32_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /ggml-opencl_transpose_32_16.cl COPYONLY )
31+ target_include_directories (${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR} /autogenerated" )
14832endif ()
33+
34+ function (ggml_opencl_add_kernel KNAME)
35+ set (KERN_HDR ${CMAKE_CURRENT_BINARY_DIR} /autogenerated/${KNAME} .cl.h)
36+ set (KERN_SRC ${CMAKE_CURRENT_SOURCE_DIR} /kernels/${KNAME} .cl)
37+
38+ if (GGML_OPENCL_EMBED_KERNELS)
39+ message (STATUS "opencl: embedding kernel ${KNAME} " )
40+
41+ # Python must be accessible from command line
42+ add_custom_command (
43+ OUTPUT ${KERN_HDR}
44+ COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT} ${KERN_SRC} ${KERN_HDR}
45+ DEPENDS ${KERN_SRC} ${EMBED_KERNEL_SCRIPT}
46+ COMMENT "Generate ${KERN_HDR} "
47+ )
48+
49+ target_sources (${TARGET_NAME} PRIVATE ${KERN_HDR} )
50+ else ()
51+ message (STATUS "opencl: adding kernel ${KNAME} " )
52+ configure_file (${KERN_SRC} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${KNAME} .cl COPYONLY )
53+ endif ()
54+ endfunction ()
55+
56+ set (GGML_OPENCL_KERNELS
57+ ggml-opencl
58+ ggml-opencl_mm
59+ ggml-opencl_cvt
60+ ggml-opencl_gemv_noshuffle
61+ ggml-opencl_gemv_noshuffle_general
62+ ggml-opencl_mul_mat_Ab_Bi_8x4
63+ ggml-opencl_transpose_16
64+ ggml-opencl_transpose_32
65+ ggml-opencl_transpose_32_16
66+ )
67+
68+ foreach (K ${GGML_OPENCL_KERNELS} )
69+ ggml_opencl_add_kernel(${K} )
70+ endforeach ()
0 commit comments