Skip to content

Commit 839885c

Browse files
committed
opencl: make OpenCL required, remove redundant lib and inc directories
* `ggml-base`, `..` and `.` are added by `ggml_add_backend_library`
1 parent 62caba4 commit 839885c

File tree

1 file changed

+144
-150
lines changed

1 file changed

+144
-150
lines changed
Lines changed: 144 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -1,153 +1,147 @@
1+
find_package(OpenCL REQUIRED)
2+
find_package(Python3 REQUIRED)
13

2-
find_package(OpenCL)
3-
4-
if (OpenCL_FOUND)
5-
find_package(Python3 REQUIRED)
6-
7-
set(TARGET_NAME ggml-opencl)
8-
9-
ggml_add_backend_library(${TARGET_NAME}
10-
ggml-opencl.cpp
11-
../../include/ggml-opencl.h)
12-
target_link_libraries(${TARGET_NAME} PRIVATE ggml-base ${OpenCL_LIBRARIES})
13-
target_include_directories(${TARGET_NAME} PRIVATE . .. ${OpenCL_INCLUDE_DIRS})
14-
15-
if (GGML_OPENCL_PROFILING)
16-
message(STATUS "OpenCL profiling enabled (increases CPU overhead)")
17-
add_compile_definitions(GGML_OPENCL_PROFILING)
18-
endif ()
19-
20-
add_compile_definitions(GGML_OPENCL_SOA_Q)
21-
22-
if (GGML_OPENCL_USE_ADRENO_KERNELS)
23-
message(STATUS "OpenCL will use matmul kernels optimized for Adreno")
24-
add_compile_definitions(GGML_OPENCL_USE_ADRENO_KERNELS)
25-
endif ()
26-
27-
if (GGML_OPENCL_EMBED_KERNELS)
28-
add_compile_definitions(GGML_OPENCL_EMBED_KERNELS)
29-
30-
set(OPENCL_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl.cl.h")
31-
set(OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mm.cl.h")
32-
set(OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_cvt.cl.h")
33-
34-
set(OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle.cl.h")
35-
set(OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle_general.cl.h")
36-
set(OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mul_mat_Ab_Bi_8x4.cl.h")
37-
set(OPENCL_TRANSPOSE_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_16.cl.h")
38-
set(OPENCL_TRANSPOSE_32_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32.cl.h")
39-
set(OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32_16.cl.h")
40-
41-
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py")
42-
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
43-
44-
include_directories("${CMAKE_BINARY_DIR}/autogenerated")
45-
46-
# Python must be accessible from command line
47-
add_custom_command(
48-
OUTPUT ${OPENCL_CL_SOURCE_EMBED}
49-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
50-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl
51-
${OPENCL_CL_SOURCE_EMBED}
52-
DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT}
53-
COMMENT "Generate ggml-opencl2.cl.h"
54-
)
55-
56-
add_custom_command(
57-
OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED}
58-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
59-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mm.cl
60-
${OPENCL_MM_CL_SOURCE_EMBED}
61-
DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT}
62-
COMMENT "Generate ggml-opencl_mm.cl.h"
63-
)
64-
65-
add_custom_command(
66-
OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED}
67-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
68-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_cvt.cl
69-
${OPENCL_CVT_CL_SOURCE_EMBED}
70-
DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT}
71-
COMMENT "Generate ggml-opencl_cvt.cl.h"
72-
)
73-
74-
add_custom_command(
75-
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
76-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
77-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle.cl
78-
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
79-
DEPENDS kernels/ggml-opencl_gemv_noshuffle.cl ${EMBED_KERNEL_SCRIPT}
80-
COMMENT "Generate ggml-opencl_gemv_noshuffle.cl.h"
81-
)
82-
83-
add_custom_command(
84-
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
85-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
86-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle_general.cl
87-
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
88-
DEPENDS kernels/ggml-opencl_gemv_noshuffle_general.cl ${EMBED_KERNEL_SCRIPT}
89-
COMMENT "Generate ggml-opencl_gemv_noshuffle_general.cl.h"
90-
)
91-
92-
add_custom_command(
93-
OUTPUT ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
94-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
95-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl
96-
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
97-
DEPENDS kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${EMBED_KERNEL_SCRIPT}
98-
COMMENT "Generate ggml-opencl_mul_mat_Ab_Bi_8x4.cl.cl.h"
99-
)
100-
101-
add_custom_command(
102-
OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
103-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
104-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_16.cl
105-
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
106-
DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT}
107-
COMMENT "Generate ggml-opencl_transpose_16.cl.h"
108-
)
109-
110-
add_custom_command(
111-
OUTPUT ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
112-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
113-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32.cl
114-
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
115-
DEPENDS kernels/ggml-opencl_transpose_32.cl ${EMBED_KERNEL_SCRIPT}
116-
COMMENT "Generate ggml-opencl_transpose_32.cl.h"
117-
)
118-
119-
add_custom_command(
120-
OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
121-
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
122-
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32_16.cl
123-
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
124-
DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT}
125-
COMMENT "Generate ggml-opencl_transpose_32_16.cl.h"
126-
)
127-
128-
target_sources(${TARGET_NAME} PRIVATE
129-
${OPENCL_CL_SOURCE_EMBED}
130-
${OPENCL_MM_CL_SOURCE_EMBED}
131-
${OPENCL_CVT_CL_SOURCE_EMBED}
132-
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
133-
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
134-
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
135-
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
136-
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
137-
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED})
138-
else ()
139-
# copy ggml-opencl.cl to bin directory
140-
configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.cl COPYONLY)
141-
configure_file(kernels/ggml-opencl_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mm.cl COPYONLY)
142-
configure_file(kernels/ggml-opencl_cvt.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_cvt.cl COPYONLY)
143-
144-
configure_file(kernels/ggml-opencl_gemv_noshuffle.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle.cl COPYONLY)
145-
configure_file(kernels/ggml-opencl_gemv_noshuffle_general.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle_general.cl COPYONLY)
146-
configure_file(kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mul_mat_Ab_Bi_8x4.cl COPYONLY)
147-
configure_file(kernels/ggml-opencl_transpose_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_16.cl COPYONLY)
148-
configure_file(kernels/ggml-opencl_transpose_32.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32.cl COPYONLY)
149-
configure_file(kernels/ggml-opencl_transpose_32_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32_16.cl COPYONLY)
150-
endif ()
4+
set(TARGET_NAME ggml-opencl)
5+
6+
ggml_add_backend_library(${TARGET_NAME}
7+
ggml-opencl.cpp
8+
../../include/ggml-opencl.h)
9+
target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCL_LIBRARIES})
10+
target_include_directories(${TARGET_NAME} PRIVATE ${OpenCL_INCLUDE_DIRS})
11+
12+
if (GGML_OPENCL_PROFILING)
13+
message(STATUS "OpenCL profiling enabled (increases CPU overhead)")
14+
add_compile_definitions(GGML_OPENCL_PROFILING)
15+
endif ()
16+
17+
add_compile_definitions(GGML_OPENCL_SOA_Q)
18+
19+
if (GGML_OPENCL_USE_ADRENO_KERNELS)
20+
message(STATUS "OpenCL will use matmul kernels optimized for Adreno")
21+
add_compile_definitions(GGML_OPENCL_USE_ADRENO_KERNELS)
22+
endif ()
23+
24+
if (GGML_OPENCL_EMBED_KERNELS)
25+
add_compile_definitions(GGML_OPENCL_EMBED_KERNELS)
26+
27+
set(OPENCL_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl.cl.h")
28+
set(OPENCL_MM_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mm.cl.h")
29+
set(OPENCL_CVT_CL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_cvt.cl.h")
30+
31+
set(OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle.cl.h")
32+
set(OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_gemv_noshuffle_general.cl.h")
33+
set(OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_mul_mat_Ab_Bi_8x4.cl.h")
34+
set(OPENCL_TRANSPOSE_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_16.cl.h")
35+
set(OPENCL_TRANSPOSE_32_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32.cl.h")
36+
set(OPENCL_TRANSPOSE_32_16_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-opencl_transpose_32_16.cl.h")
37+
38+
set(EMBED_KERNEL_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kernels/embed_kernel.py")
39+
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
40+
41+
include_directories("${CMAKE_BINARY_DIR}/autogenerated")
42+
43+
# Python must be accessible from command line
44+
add_custom_command(
45+
OUTPUT ${OPENCL_CL_SOURCE_EMBED}
46+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
47+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl.cl
48+
${OPENCL_CL_SOURCE_EMBED}
49+
DEPENDS kernels/ggml-opencl.cl ${EMBED_KERNEL_SCRIPT}
50+
COMMENT "Generate ggml-opencl.cl.h"
51+
)
52+
53+
add_custom_command(
54+
OUTPUT ${OPENCL_MM_CL_SOURCE_EMBED}
55+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
56+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mm.cl
57+
${OPENCL_MM_CL_SOURCE_EMBED}
58+
DEPENDS kernels/ggml-opencl_mm.cl ${EMBED_KERNEL_SCRIPT}
59+
COMMENT "Generate ggml-opencl_mm.cl.h"
60+
)
61+
62+
add_custom_command(
63+
OUTPUT ${OPENCL_CVT_CL_SOURCE_EMBED}
64+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
65+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_cvt.cl
66+
${OPENCL_CVT_CL_SOURCE_EMBED}
67+
DEPENDS kernels/ggml-opencl_cvt.cl ${EMBED_KERNEL_SCRIPT}
68+
COMMENT "Generate ggml-opencl_cvt.cl.h"
69+
)
70+
71+
add_custom_command(
72+
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
73+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
74+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle.cl
75+
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
76+
DEPENDS kernels/ggml-opencl_gemv_noshuffle.cl ${EMBED_KERNEL_SCRIPT}
77+
COMMENT "Generate ggml-opencl_gemv_noshuffle.cl.h"
78+
)
79+
80+
add_custom_command(
81+
OUTPUT ${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
82+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
83+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_gemv_noshuffle_general.cl
84+
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
85+
DEPENDS kernels/ggml-opencl_gemv_noshuffle_general.cl ${EMBED_KERNEL_SCRIPT}
86+
COMMENT "Generate ggml-opencl_gemv_noshuffle_general.cl.h"
87+
)
88+
89+
add_custom_command(
90+
OUTPUT ${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
91+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
92+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl
93+
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
94+
DEPENDS kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${EMBED_KERNEL_SCRIPT}
95+
COMMENT "Generate ggml-opencl_mul_mat_Ab_Bi_8x4.cl.cl.h"
96+
)
97+
98+
add_custom_command(
99+
OUTPUT ${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
100+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
101+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_16.cl
102+
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
103+
DEPENDS kernels/ggml-opencl_transpose_16.cl ${EMBED_KERNEL_SCRIPT}
104+
COMMENT "Generate ggml-opencl_transpose_16.cl.h"
105+
)
106+
107+
add_custom_command(
108+
OUTPUT ${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
109+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
110+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32.cl
111+
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
112+
DEPENDS kernels/ggml-opencl_transpose_32.cl ${EMBED_KERNEL_SCRIPT}
113+
COMMENT "Generate ggml-opencl_transpose_32.cl.h"
114+
)
115+
116+
add_custom_command(
117+
OUTPUT ${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
118+
COMMAND ${Python3_EXECUTABLE} ${EMBED_KERNEL_SCRIPT}
119+
${CMAKE_CURRENT_SOURCE_DIR}/kernels/ggml-opencl_transpose_32_16.cl
120+
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED}
121+
DEPENDS kernels/ggml-opencl_transpose_32_16.cl ${EMBED_KERNEL_SCRIPT}
122+
COMMENT "Generate ggml-opencl_transpose_32_16.cl.h"
123+
)
124+
125+
target_sources(${TARGET_NAME} PRIVATE
126+
${OPENCL_CL_SOURCE_EMBED}
127+
${OPENCL_MM_CL_SOURCE_EMBED}
128+
${OPENCL_CVT_CL_SOURCE_EMBED}
129+
${OPENCL_GEMV_NOSHUFFLE_SOURCE_EMBED}
130+
${OPENCL_GEMV_NOSHUFFLE_GENERAL_SOURCE_EMBED}
131+
${OPENCL_MUL_MAT_Ab_Bi_8x4_SOURCE_EMBED}
132+
${OPENCL_TRANSPOSE_16_SOURCE_EMBED}
133+
${OPENCL_TRANSPOSE_32_SOURCE_EMBED}
134+
${OPENCL_TRANSPOSE_32_16_SOURCE_EMBED})
151135
else ()
152-
message(WARNING "OpenCL not found")
136+
# copy ggml-opencl.cl to bin directory
137+
configure_file(kernels/ggml-opencl.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl.cl COPYONLY)
138+
configure_file(kernels/ggml-opencl_mm.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mm.cl COPYONLY)
139+
configure_file(kernels/ggml-opencl_cvt.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_cvt.cl COPYONLY)
140+
141+
configure_file(kernels/ggml-opencl_gemv_noshuffle.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle.cl COPYONLY)
142+
configure_file(kernels/ggml-opencl_gemv_noshuffle_general.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_gemv_noshuffle_general.cl COPYONLY)
143+
configure_file(kernels/ggml-opencl_mul_mat_Ab_Bi_8x4.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_mul_mat_Ab_Bi_8x4.cl COPYONLY)
144+
configure_file(kernels/ggml-opencl_transpose_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_16.cl COPYONLY)
145+
configure_file(kernels/ggml-opencl_transpose_32.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32.cl COPYONLY)
146+
configure_file(kernels/ggml-opencl_transpose_32_16.cl ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-opencl_transpose_32_16.cl COPYONLY)
153147
endif ()

0 commit comments

Comments
 (0)