Skip to content

Commit f085684

Browse files
committed
Add GGML_MUSA in CMake
Signed-off-by: Xiaodong Ye <[email protected]>
1 parent 779c920 commit f085684

File tree

2 files changed

+56
-7
lines changed

2 files changed

+56
-7
lines changed

ggml/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ set(GGML_BLAS_VENDOR ${GGML_BLAS_VENDOR_DEFAULT} CACHE STRING
107107
option(GGML_LLAMAFILE "ggml: use LLAMAFILE" OFF)
108108

109109
option(GGML_CUDA "ggml: use CUDA" OFF)
110+
option(GGML_MUSA "ggml: use MUSA" OFF)
110111
option(GGML_CUDA_FORCE_DMMV "ggml: use dmmv instead of mmvq CUDA kernels" OFF)
111112
option(GGML_CUDA_FORCE_MMQ "ggml: use mmq kernels instead of cuBLAS" OFF)
112113
option(GGML_CUDA_FORCE_CUBLAS "ggml: always use cuBLAS instead of mmq kernels" OFF)

ggml/src/CMakeLists.txt

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,17 @@ if (GGML_METAL)
139139
)
140140
endif()
141141

142+
if (GGML_MUSA)
143+
set(CMAKE_C_COMPILER clang)
144+
set(CMAKE_C_EXTENSIONS OFF)
145+
set(CMAKE_CXX_COMPILER clang++)
146+
set(CMAKE_CXX_EXTENSIONS OFF)
147+
148+
set(GGML_CUDA ON)
149+
150+
list(APPEND GGML_CDEF_PUBLIC GGML_USE_MUSA)
151+
endif()
152+
142153
if (GGML_OPENMP)
143154
find_package(OpenMP)
144155
if (OpenMP_FOUND)
@@ -147,6 +158,11 @@ if (GGML_OPENMP)
147158
add_compile_definitions(GGML_USE_OPENMP)
148159

149160
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
161+
162+
if (GGML_MUSA)
163+
set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} "/usr/lib/llvm-10/include/openmp")
164+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} "/usr/lib/llvm-10/lib/libomp.so")
165+
endif()
150166
else()
151167
message(WARNING "OpenMP not found")
152168
endif()
@@ -249,7 +265,13 @@ endif()
249265
if (GGML_CUDA)
250266
cmake_minimum_required(VERSION 3.18) # for CMAKE_CUDA_ARCHITECTURES
251267

252-
find_package(CUDAToolkit)
268+
if (GGML_MUSA)
269+
list(APPEND CMAKE_MODULE_PATH "/usr/local/musa/cmake/")
270+
find_package(MUSAToolkit)
271+
set(CUDAToolkit_FOUND ${MUSAToolkit_FOUND})
272+
else()
273+
find_package(CUDAToolkit)
274+
endif()
253275

254276
if (CUDAToolkit_FOUND)
255277
message(STATUS "CUDA found")
@@ -268,7 +290,11 @@ if (GGML_CUDA)
268290
endif()
269291
message(STATUS "Using CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}")
270292

271-
enable_language(CUDA)
293+
if (GGML_MUSA)
294+
set(CMAKE_CUDA_COMPILER ${MUSAToolkit_MCC_EXECUTABLE})
295+
else()
296+
enable_language(CUDA)
297+
endif()
272298

273299
file(GLOB GGML_HEADERS_CUDA "ggml-cuda/*.cuh")
274300
list(APPEND GGML_HEADERS_CUDA "../include/ggml-cuda.h")
@@ -332,21 +358,40 @@ if (GGML_CUDA)
332358
add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
333359
endif()
334360

361+
if (GGML_MUSA)
362+
set_source_files_properties(${GGML_SOURCES_CUDA} PROPERTIES LANGUAGE CXX)
363+
foreach(SOURCE ${GGML_SOURCES_CUDA})
364+
set_property(SOURCE ${SOURCE} PROPERTY COMPILE_FLAGS "-x musa -mtgpu --cuda-gpu-arch=mp_22")
365+
endforeach()
366+
endif()
367+
335368
if (GGML_STATIC)
336369
if (WIN32)
337370
# As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library
338371
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas CUDA::cublasLt)
339372
else ()
340-
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static)
373+
if (GGML_MUSA)
374+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart_static MUSA::mublas_static)
375+
else()
376+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static)
377+
endif()
341378
endif()
342379
else()
343-
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt)
380+
if (GGML_MUSA)
381+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart MUSA::mublas)
382+
else()
383+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt)
384+
endif()
344385
endif()
345386

346387
if (GGML_CUDA_NO_VMM)
347388
# No VMM requested, no need to link directly with the cuda driver lib (libcuda.so)
348389
else()
349-
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ...
390+
if (GGML_MUSA)
391+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musa_driver) # required by muDeviceGetAttribute(), muMemGetAllocationGranularity(...), ...
392+
else()
393+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ...
394+
endif()
350395
endif()
351396
else()
352397
message(WARNING "CUDA not found")
@@ -757,8 +802,10 @@ function(get_flags CCID CCVER)
757802
set(C_FLAGS -Wdouble-promotion)
758803
set(CXX_FLAGS -Wno-array-bounds)
759804

760-
if (CCVER VERSION_GREATER_EQUAL 7.1.0)
761-
list(APPEND CXX_FLAGS -Wno-format-truncation)
805+
if (NOT GGML_MUSA)
806+
if (CCVER VERSION_GREATER_EQUAL 7.1.0)
807+
list(APPEND CXX_FLAGS -Wno-format-truncation)
808+
endif()
762809
endif()
763810
if (CCVER VERSION_GREATER_EQUAL 8.1.0)
764811
list(APPEND CXX_FLAGS -Wextra-semi)
@@ -1163,6 +1210,7 @@ endif()
11631210
target_compile_definitions(ggml PUBLIC ${GGML_CDEF_PUBLIC})
11641211
target_include_directories(ggml PUBLIC ../include)
11651212
target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES})
1213+
target_link_directories(ggml PRIVATE ${GGML_EXTRA_LIBDIRS})
11661214
target_compile_features (ggml PRIVATE c_std_11) # don't bump
11671215

11681216
target_link_libraries(ggml PRIVATE Threads::Threads ${GGML_EXTRA_LIBS})

0 commit comments

Comments
 (0)