Skip to content

Commit 9d562d7

Browse files
cmake : update HIPBLAS (#847)
* Update HIPBLAS CMake * Fix HIPBlas for Debian * Add hipBLAS build instructions * Fix Clang detection * Set ROCM_PATH correctly
1 parent 62125ae commit 9d562d7

File tree

2 files changed

+80
-32
lines changed

2 files changed

+80
-32
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ cmake -DGGML_METAL=ON -DBUILD_SHARED_LIBS=Off ..
122122
cmake -DGGML_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.1/bin/nvcc ..
123123
```
124124

125+
## Using hipBLAS
126+
127+
```bash
128+
cmake -DCMAKE_C_COMPILER="$(hipconfig -l)/clang" -DCMAKE_CXX_COMPILER="$(hipconfig -l)/clang++" -DGGML_HIPBLAS=ON
129+
```
130+
125131
## Using clBLAST
126132

127133
```bash

src/CMakeLists.txt

Lines changed: 74 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -258,49 +258,91 @@ endif()
258258

259259
# TODO: do not build separate ggml-rocm target (see CUDA build above, or llama.cpp for reference)
260260
if (GGML_HIPBLAS)
261-
list(APPEND CMAKE_PREFIX_PATH /opt/rocm)
261+
if (NOT EXISTS $ENV{ROCM_PATH})
262+
if (NOT EXISTS /opt/rocm)
263+
set(ROCM_PATH /usr)
264+
else()
265+
set(ROCM_PATH /opt/rocm)
266+
endif()
267+
else()
268+
set(ROCM_PATH $ENV{ROCM_PATH})
269+
endif()
270+
list(APPEND CMAKE_PREFIX_PATH ${ROCM_PATH})
271+
list(APPEND CMAKE_PREFIX_PATH "${ROCM_PATH}/lib64/cmake")
262272

263-
if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
264-
message(WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang")
273+
# CMake on Windows doesn't support the HIP language yet
274+
if(WIN32)
275+
set(CXX_IS_HIPCC TRUE)
276+
else()
277+
string(REGEX MATCH "hipcc(\.bat)?$" CXX_IS_HIPCC "${CMAKE_CXX_COMPILER}")
265278
endif()
266-
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
267-
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
279+
280+
if (CXX_IS_HIPCC)
281+
if(LINUX)
282+
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
283+
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
284+
endif()
285+
286+
message(WARNING "Setting hipcc as the C++ compiler is legacy behavior."
287+
" Prefer setting the HIP compiler directly. See README for details.")
288+
endif()
289+
else()
290+
# Forward AMDGPU_TARGETS to CMAKE_HIP_ARCHITECTURES.
291+
if(AMDGPU_TARGETS AND NOT CMAKE_HIP_ARCHITECTURES)
292+
set(CMAKE_HIP_ARCHITECTURES ${AMDGPU_TARGETS})
293+
endif()
294+
cmake_minimum_required(VERSION 3.21)
295+
enable_language(HIP)
268296
endif()
269297

270-
find_package(hip)
271-
find_package(hipblas)
272-
find_package(rocblas)
298+
find_package(hip REQUIRED)
299+
find_package(hipblas REQUIRED)
300+
find_package(rocblas REQUIRED)
273301

274-
if (${hipblas_FOUND} AND ${hip_FOUND})
275-
message(STATUS "HIP and hipBLAS found")
302+
message(STATUS "HIP and hipBLAS found")
276303

277-
add_compile_definitions(GGML_USE_HIPBLAS GGML_USE_CUDA)
304+
add_compile_definitions(GGML_USE_HIPBLAS GGML_USE_CUDA)
278305

279-
add_library(ggml-rocm OBJECT ggml-cuda.cu ggml-cuda.h)
306+
set(GGML_HEADERS_ROCM ggml-cuda.h)
280307

281-
if (BUILD_SHARED_LIBS)
282-
set_target_properties(ggml-rocm PROPERTIES POSITION_INDEPENDENT_CODE ON)
283-
endif()
284-
if (GGML_CUDA_FORCE_DMMV)
285-
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_DMMV)
286-
endif()
287-
if (GGML_CUDA_FORCE_MMQ)
288-
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_MMQ)
289-
endif()
290-
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
291-
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
292-
target_compile_definitions(ggml-rocm PRIVATE K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
293-
set_source_files_properties(ggml-cuda.cu PROPERTIES LANGUAGE CXX)
294-
target_link_libraries(ggml-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
295-
target_include_directories(ggml-rocm PRIVATE . ../include ../include/ggml)
308+
file(GLOB GGML_SOURCES_ROCM "ggml-cuda/*.cu")
309+
list(APPEND GGML_SOURCES_ROCM "ggml-cuda.cu")
310+
list(APPEND GGML_SOURCES_ROCM ${SRCS})
296311

297-
if (GGML_STATIC)
298-
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
299-
endif()
300-
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ggml-rocm)
312+
add_compile_definitions(GGML_USE_HIPBLAS GGML_USE_CUDA)
313+
314+
if (GGML_CUDA_FORCE_DMMV)
315+
add_compile_definitions(GGML_CUDA_FORCE_DMMV)
316+
endif()
317+
318+
if (GGML_CUDA_FORCE_MMQ)
319+
add_compile_definitions(GGML_CUDA_FORCE_MMQ)
320+
endif()
321+
322+
add_compile_definitions(GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
323+
add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
324+
add_compile_definitions(K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
325+
326+
add_library(ggml-rocm OBJECT ${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM})
327+
328+
if (CXX_IS_HIPCC)
329+
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
330+
target_link_libraries(ggml-rocm PRIVATE hip::device)
301331
else()
302-
message(WARNING "hipBLAS or HIP not found. Try setting CMAKE_PREFIX_PATH=/opt/rocm")
332+
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
333+
endif()
334+
335+
target_link_libraries(ggml-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
336+
target_include_directories(ggml-rocm PRIVATE . ../include ../include/ggml)
337+
338+
if (BUILD_SHARED_LIBS)
339+
set_target_properties(ggml-rocm PROPERTIES POSITION_INDEPENDENT_CODE ON)
340+
endif()
341+
342+
if (GGML_STATIC)
343+
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
303344
endif()
345+
set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ggml-rocm)
304346
endif()
305347

306348
if (GGML_METAL)

0 commit comments

Comments
 (0)