@@ -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