@@ -25,124 +25,46 @@ endif ()
25
25
if (GGML_OPENCL_EMBED_KERNELS)
26
26
add_compile_definitions (GGML_OPENCL_EMBED_KERNELS)
27
27
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" )
31
30
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" )
148
32
endif ()
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