Skip to content

Commit 051a445

Browse files
committed
ggml: build musa backend library (cmake)
Signed-off-by: Xiaodong Ye <[email protected]>
1 parent dd49f08 commit 051a445

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

ggml/src/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ ggml_add_backend(METAL)
256256
ggml_add_backend(RPC)
257257
ggml_add_backend(SYCL)
258258
ggml_add_backend(Vulkan)
259+
ggml_add_backend(MUSA)
259260

260261
foreach (target ggml-base ggml)
261262
target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> $<INSTALL_INTERFACE:include>)

ggml/src/ggml-musa/CMakeLists.txt

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
if (NOT EXISTS $ENV{MUSA_PATH})
2+
set(MUSA_PATH /usr/local/musa)
3+
else()
4+
set(MUSA_PATH $ENV{MUSA_PATH})
5+
endif()
6+
7+
set(CMAKE_C_COMPILER "${MUSA_PATH}/bin/clang")
8+
set(CMAKE_C_EXTENSIONS OFF)
9+
set(CMAKE_CXX_COMPILER "${MUSA_PATH}/bin/clang++")
10+
set(CMAKE_CXX_EXTENSIONS OFF)
11+
12+
list(APPEND CMAKE_MODULE_PATH "${MUSA_PATH}/cmake")
13+
14+
find_package(MUSAToolkit)
15+
16+
if (MUSAToolkit_FOUND)
17+
message(STATUS "MUSA Toolkit found")
18+
19+
file(GLOB GGML_HEADERS_MUSA "../ggml-cuda/*.cuh")
20+
list(APPEND GGML_HEADERS_MUSA "../../include/ggml-cuda.h")
21+
22+
file(GLOB GGML_SOURCES_MUSA "../ggml-cuda/*.cu")
23+
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-wmma*.cu")
24+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
25+
file(GLOB SRCS "../ggml-cuda/template-instances/mmq*.cu")
26+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
27+
28+
if (GGML_CUDA_FA_ALL_QUANTS)
29+
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*.cu")
30+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
31+
add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
32+
else()
33+
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
34+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
35+
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
36+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
37+
file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
38+
list(APPEND GGML_SOURCES_MUSA ${SRCS})
39+
endif()
40+
41+
set_source_files_properties(${GGML_SOURCES_MUSA} PROPERTIES LANGUAGE CXX)
42+
foreach(SOURCE ${GGML_SOURCES_MUSA})
43+
set_property(SOURCE ${SOURCE} PROPERTY COMPILE_FLAGS "-x musa -mtgpu --cuda-gpu-arch=mp_21 --cuda-gpu-arch=mp_22")
44+
endforeach()
45+
46+
add_library(ggml-musa
47+
${GGML_HEADERS_MUSA}
48+
${GGML_SOURCES_MUSA})
49+
50+
target_link_libraries(ggml-musa PRIVATE ggml-base)
51+
target_include_directories(ggml-musa PRIVATE . ..)
52+
53+
# TODO: do not use CUDA definitions for MUSA
54+
target_compile_definitions(ggml PUBLIC GGML_USE_CUDA)
55+
56+
add_compile_definitions(GGML_USE_MUSA)
57+
add_compile_definitions(GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
58+
add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
59+
add_compile_definitions(K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
60+
add_compile_definitions(GGML_CUDA_PEER_MAX_BATCH_SIZE=${GGML_CUDA_PEER_MAX_BATCH_SIZE})
61+
62+
if (GGML_CUDA_GRAPHS)
63+
add_compile_definitions(GGML_CUDA_USE_GRAPHS)
64+
endif()
65+
66+
if (GGML_CUDA_FORCE_DMMV)
67+
add_compile_definitions(GGML_CUDA_FORCE_DMMV)
68+
endif()
69+
70+
if (GGML_CUDA_FORCE_MMQ)
71+
add_compile_definitions(GGML_CUDA_FORCE_MMQ)
72+
endif()
73+
74+
if (GGML_CUDA_FORCE_CUBLAS)
75+
add_compile_definitions(GGML_CUDA_FORCE_CUBLAS)
76+
endif()
77+
78+
if (GGML_CUDA_NO_VMM)
79+
add_compile_definitions(GGML_CUDA_NO_VMM)
80+
endif()
81+
82+
if (DEFINED GGML_CUDA_DMMV_Y)
83+
add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_DMMV_Y}) # for backwards compatibility
84+
endif()
85+
86+
if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16)
87+
add_compile_definitions(GGML_CUDA_F16)
88+
endif()
89+
90+
if (GGML_CUDA_NO_PEER_COPY)
91+
add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
92+
endif()
93+
94+
if (GGML_STATIC)
95+
target_link_libraries(ggml-musa PRIVATE MUSA::musart_static MUSA::mublas_static)
96+
else()
97+
target_link_libraries(ggml-musa PRIVATE MUSA::musart MUSA::mublas)
98+
endif()
99+
100+
if (GGML_CUDA_NO_VMM)
101+
# No VMM requested, no need to link directly with the musa driver lib (libmusa.so)
102+
else()
103+
target_link_libraries(ggml-musa PRIVATE MUSA::musa_driver)
104+
endif()
105+
else()
106+
message(FATAL_ERROR "MUSA Toolkit not found")
107+
endif()

0 commit comments

Comments
 (0)