@@ -244,246 +244,6 @@ if (GGML_SYCL)
244
244
endif ()
245
245
endif ()
246
246
247
- if (GGML_VULKAN)
248
- find_package (Vulkan COMPONENTS glslc REQUIRED)
249
-
250
- if (Vulkan_FOUND)
251
- message (STATUS "Vulkan found" )
252
-
253
- list (APPEND GGML_CDEF_PUBLIC GGML_USE_VULKAN)
254
-
255
- # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build
256
- # Posssibly relevant: https://stackoverflow.com/questions/74748276/visual-studio-no-displays-the-correct-length-of-stdvector
257
- if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
258
- add_compile_definitions (_ITERATOR_DEBUG_LEVEL=0)
259
- endif ()
260
-
261
- if (GGML_VULKAN_CHECK_RESULTS)
262
- add_compile_definitions (GGML_VULKAN_CHECK_RESULTS)
263
- endif ()
264
-
265
- if (GGML_VULKAN_DEBUG)
266
- add_compile_definitions (GGML_VULKAN_DEBUG)
267
- endif ()
268
-
269
- if (GGML_VULKAN_MEMORY_DEBUG)
270
- add_compile_definitions (GGML_VULKAN_MEMORY_DEBUG)
271
- endif ()
272
-
273
- if (GGML_VULKAN_SHADER_DEBUG_INFO)
274
- add_compile_definitions (GGML_VULKAN_SHADER_DEBUG_INFO)
275
- endif ()
276
-
277
- if (GGML_VULKAN_PERF)
278
- add_compile_definitions (GGML_VULKAN_PERF)
279
- endif ()
280
-
281
- if (GGML_VULKAN_VALIDATE)
282
- add_compile_definitions (GGML_VULKAN_VALIDATE)
283
- endif ()
284
-
285
- if (GGML_VULKAN_RUN_TESTS)
286
- add_compile_definitions (GGML_VULKAN_RUN_TESTS)
287
- endif ()
288
-
289
- add_subdirectory (vulkan-shaders)
290
-
291
- set (_ggml_vk_genshaders_cmd vulkan-shaders-gen)
292
- set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.hpp)
293
- set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.cpp)
294
- set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders)
295
- set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR} /vulkan-shaders.spv)
296
-
297
- file (GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir} /*.comp" )
298
-
299
- add_custom_command (
300
- OUTPUT ${_ggml_vk_header}
301
- ${_ggml_vk_source}
302
-
303
- COMMAND ${_ggml_vk_genshaders_cmd}
304
- --glslc ${Vulkan_GLSLC_EXECUTABLE}
305
- --input -dir ${_ggml_vk_input_dir}
306
- --output -dir ${_ggml_vk_output_dir}
307
- --target -hpp ${_ggml_vk_header}
308
- --target -cpp ${_ggml_vk_source}
309
- --no -clean
310
-
311
- DEPENDS ${_ggml_vk_shader_deps}
312
- COMMENT "Generate vulkan shaders"
313
- )
314
-
315
- set (GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR} /../include /ggml-vulkan.h ${_ggml_vk_header} )
316
- set (GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source} )
317
-
318
- list (APPEND GGML_EXTRA_LIBS_PRIVATE Vulkan::Vulkan)
319
- list (APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} )
320
- else ()
321
- message (WARNING "Vulkan not found" )
322
- endif ()
323
- endif ()
324
-
325
- if (GGML_KOMPUTE)
326
- add_compile_definitions (VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
327
-
328
- find_package (Vulkan COMPONENTS glslc REQUIRED)
329
- find_program (glslc_executable NAMES glslc HINTS Vulkan::glslc)
330
-
331
- if (NOT glslc_executable)
332
- message (FATAL_ERROR "glslc not found" )
333
- endif ()
334
-
335
- function (compile_shader)
336
- set (options )
337
- set (oneValueArgs)
338
- set (multiValueArgs SOURCES )
339
- cmake_parse_arguments (compile_shader "${options} " "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
340
- foreach (source ${compile_shader_SOURCES} )
341
- get_filename_component (filename ${source} NAME )
342
- set (spv_file ${filename} .spv)
343
- add_custom_command (
344
- OUTPUT ${spv_file}
345
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /${source}
346
- ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/common.comp
347
- ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_getrows.comp
348
- ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_mul_mv_q_n_pre.comp
349
- ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_mul_mv_q_n.comp
350
- COMMAND ${glslc_executable} --target -env=vulkan1.2 -o ${spv_file} ${CMAKE_CURRENT_SOURCE_DIR} /${source}
351
- COMMENT "Compiling ${source} to ${spv_file} "
352
- )
353
-
354
- get_filename_component (RAW_FILE_NAME ${spv_file} NAME )
355
- set (FILE_NAME "shader${RAW_FILE_NAME} " )
356
- string (REPLACE ".comp.spv" ".h" HEADER_FILE ${FILE_NAME} )
357
- string (TOUPPER ${HEADER_FILE} HEADER_FILE_DEFINE)
358
- string (REPLACE "." "_" HEADER_FILE_DEFINE "${HEADER_FILE_DEFINE} " )
359
- set (OUTPUT_HEADER_FILE "${HEADER_FILE} " )
360
- message (STATUS "${HEADER_FILE} generating ${HEADER_FILE_DEFINE} " )
361
- if (CMAKE_GENERATOR MATCHES "Visual Studio" )
362
- add_custom_command (
363
- OUTPUT ${OUTPUT_HEADER_FILE}
364
- COMMAND ${CMAKE_COMMAND} -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/" > ${OUTPUT_HEADER_FILE}
365
- COMMAND ${CMAKE_COMMAND} -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
366
- COMMAND ${CMAKE_COMMAND} -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
367
- COMMAND ${CMAKE_COMMAND} -E echo "namespace kp {" >> ${OUTPUT_HEADER_FILE}
368
- COMMAND ${CMAKE_COMMAND} -E echo "namespace shader_data {" >> ${OUTPUT_HEADER_FILE}
369
- COMMAND ${CMAKE_BINARY_DIR} /bin/$<CONFIG>/xxd -i ${RAW_FILE_NAME} >> ${OUTPUT_HEADER_FILE}
370
- COMMAND ${CMAKE_COMMAND} -E echo "}}" >> ${OUTPUT_HEADER_FILE}
371
- COMMAND ${CMAKE_COMMAND} -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
372
- DEPENDS ${spv_file} xxd
373
- COMMENT "Converting to hpp: ${FILE_NAME} ${CMAKE_BINARY_DIR} /bin/$<CONFIG>/xxd"
374
- )
375
- else ()
376
- add_custom_command (
377
- OUTPUT ${OUTPUT_HEADER_FILE}
378
- COMMAND ${CMAKE_COMMAND} -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/" > ${OUTPUT_HEADER_FILE}
379
- COMMAND ${CMAKE_COMMAND} -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
380
- COMMAND ${CMAKE_COMMAND} -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
381
- COMMAND ${CMAKE_COMMAND} -E echo "namespace kp {" >> ${OUTPUT_HEADER_FILE}
382
- COMMAND ${CMAKE_COMMAND} -E echo "namespace shader_data {" >> ${OUTPUT_HEADER_FILE}
383
- COMMAND ${CMAKE_BINARY_DIR} /bin/xxd -i ${RAW_FILE_NAME} >> ${OUTPUT_HEADER_FILE}
384
- COMMAND ${CMAKE_COMMAND} -E echo "}}" >> ${OUTPUT_HEADER_FILE}
385
- COMMAND ${CMAKE_COMMAND} -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
386
- DEPENDS ${spv_file} xxd
387
- COMMENT "Converting to hpp: ${FILE_NAME} ${CMAKE_BINARY_DIR} /bin/xxd"
388
- )
389
- endif ()
390
- endforeach ()
391
- endfunction ()
392
-
393
- if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR} /kompute/CMakeLists.txt" )
394
- message (STATUS "Kompute found" )
395
- set (KOMPUTE_OPT_LOG_LEVEL Error CACHE STRING "Kompute log level" )
396
- add_subdirectory (kompute)
397
-
398
- # Compile our shaders
399
- compile_shader(SOURCES
400
- kompute-shaders/op_scale.comp
401
- kompute-shaders/op_scale_8.comp
402
- kompute-shaders/op_add.comp
403
- kompute-shaders/op_addrow.comp
404
- kompute-shaders/op_mul.comp
405
- kompute-shaders/op_silu.comp
406
- kompute-shaders/op_relu.comp
407
- kompute-shaders/op_gelu.comp
408
- kompute-shaders/op_softmax.comp
409
- kompute-shaders/op_norm.comp
410
- kompute-shaders/op_rmsnorm.comp
411
- kompute-shaders/op_diagmask.comp
412
- kompute-shaders/op_mul_mat_mat_f32.comp
413
- kompute-shaders/op_mul_mat_f16.comp
414
- kompute-shaders/op_mul_mat_q8_0.comp
415
- kompute-shaders/op_mul_mat_q4_0.comp
416
- kompute-shaders/op_mul_mat_q4_1.comp
417
- kompute-shaders/op_mul_mat_q4_k.comp
418
- kompute-shaders/op_mul_mat_q6_k.comp
419
- kompute-shaders/op_getrows_f32.comp
420
- kompute-shaders/op_getrows_f16.comp
421
- kompute-shaders/op_getrows_q4_0.comp
422
- kompute-shaders/op_getrows_q4_1.comp
423
- kompute-shaders/op_getrows_q6_k.comp
424
- kompute-shaders/op_rope_f16.comp
425
- kompute-shaders/op_rope_f32.comp
426
- kompute-shaders/op_cpy_f16_f16.comp
427
- kompute-shaders/op_cpy_f16_f32.comp
428
- kompute-shaders/op_cpy_f32_f16.comp
429
- kompute-shaders/op_cpy_f32_f32.comp
430
- )
431
-
432
- # Create a custom target for our generated shaders
433
- add_custom_target (generated_shaders DEPENDS
434
- shaderop_scale.h
435
- shaderop_scale_8.h
436
- shaderop_add.h
437
- shaderop_addrow.h
438
- shaderop_mul.h
439
- shaderop_silu.h
440
- shaderop_relu.h
441
- shaderop_gelu.h
442
- shaderop_softmax.h
443
- shaderop_norm.h
444
- shaderop_rmsnorm.h
445
- shaderop_diagmask.h
446
- shaderop_mul_mat_mat_f32.h
447
- shaderop_mul_mat_f16.h
448
- shaderop_mul_mat_q8_0.h
449
- shaderop_mul_mat_q4_0.h
450
- shaderop_mul_mat_q4_1.h
451
- shaderop_mul_mat_q4_k.h
452
- shaderop_mul_mat_q6_k.h
453
- shaderop_getrows_f32.h
454
- shaderop_getrows_f16.h
455
- shaderop_getrows_q4_0.h
456
- shaderop_getrows_q4_1.h
457
- shaderop_getrows_q6_k.h
458
- shaderop_rope_f16.h
459
- shaderop_rope_f32.h
460
- shaderop_cpy_f16_f16.h
461
- shaderop_cpy_f16_f32.h
462
- shaderop_cpy_f32_f16.h
463
- shaderop_cpy_f32_f32.h
464
- )
465
-
466
- # Create a custom command that depends on the generated_shaders
467
- add_custom_command (
468
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp
469
- COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp
470
- DEPENDS generated_shaders
471
- COMMENT "Ensuring shaders are generated before compiling ggml-kompute.cpp"
472
- )
473
-
474
- # Add the stamp to the main sources to ensure dependency tracking
475
- set (GGML_SOURCES_KOMPUTE ggml-kompute.cpp ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp)
476
- set (GGML_HEADERS_KOMPUTE ../include /ggml-kompute.h ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp)
477
-
478
- list (APPEND GGML_CDEF_PUBLIC GGML_USE_KOMPUTE)
479
-
480
- list (APPEND GGML_EXTRA_LIBS_PRIVATE kompute)
481
- list (APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} )
482
- else ()
483
- message (WARNING "Kompute not found" )
484
- endif ()
485
- endif ()
486
-
487
247
if (GGML_CANN)
488
248
if ("cann${CANN_INSTALL_DIR} " STREQUAL "cann" AND DEFINED ENV{ASCEND_TOOLKIT_HOME})
489
249
set (CANN_INSTALL_DIR $ENV{ASCEND_TOOLKIT_HOME} )
@@ -757,21 +517,25 @@ target_link_libraries(ggml PUBLIC ggml-base ggml-cpu)
757
517
758
518
function (ggml_add_backend backend)
759
519
string (TOUPPER "GGML_${backend} " backend_id)
760
- string (TOLOWER "ggml-${backend} " backend_target)
761
520
if (${backend_id} )
521
+ string (TOLOWER "ggml-${backend} " backend_target)
762
522
add_subdirectory (${backend_target} )
763
523
if (${BUILD_SHARED_LIBS} )
764
524
target_compile_definitions (${backend_target} PRIVATE GGML_BACKEND_BUILD)
765
- target_compile_definitions (${backend_target} PUBLIC GGML_BABKEND_SHARED )
525
+ target_compile_definitions (${backend_target} PUBLIC GGML_BACKEND_SHARED )
766
526
endif ()
767
527
target_link_libraries (ggml PUBLIC ${backend_target} )
528
+ string (TOUPPER "GGML_USE_${backend} " backend_use)
529
+ #set(GGML_CDEF_PUBLIC ${GGML_CDEF_PUBLIC} ${backend_use} PARENT_SCOPE)
530
+ target_compile_definitions (ggml PUBLIC ${backend_use} )
768
531
endif ()
769
532
endfunction ()
770
533
771
534
ggml_add_backend(CUDA)
772
535
ggml_add_backend(METAL)
773
536
ggml_add_backend(BLAS)
774
537
ggml_add_backend(RPC)
538
+ ggml_add_backend(Vulkan)
775
539
776
540
if (EMSCRIPTEN)
777
541
set_target_properties (ggml PROPERTIES COMPILE_FLAGS "-msimd128" )
0 commit comments