cmake : fix VULKAN and ROCm builds
This commit is contained in:
parent
5f5808ca7b
commit
2b70e9e257
1 changed files with 174 additions and 160 deletions
|
@ -387,15 +387,20 @@ if (LLAMA_MPI)
|
||||||
find_package(MPI)
|
find_package(MPI)
|
||||||
if (MPI_C_FOUND)
|
if (MPI_C_FOUND)
|
||||||
message(STATUS "MPI found")
|
message(STATUS "MPI found")
|
||||||
|
|
||||||
set(GGML_HEADERS_MPI ggml-mpi.h)
|
set(GGML_HEADERS_MPI ggml-mpi.h)
|
||||||
set(GGML_SOURCES_MPI ggml-mpi.c ggml-mpi.h)
|
set(GGML_SOURCES_MPI ggml-mpi.c ggml-mpi.h)
|
||||||
|
|
||||||
add_compile_definitions(GGML_USE_MPI)
|
add_compile_definitions(GGML_USE_MPI)
|
||||||
add_compile_definitions(${MPI_C_COMPILE_DEFINITIONS})
|
add_compile_definitions(${MPI_C_COMPILE_DEFINITIONS})
|
||||||
|
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
add_compile_options(-Wno-cast-qual)
|
add_compile_options(-Wno-cast-qual)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${MPI_C_LIBRARIES})
|
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${MPI_C_LIBRARIES})
|
||||||
set(LLAMA_EXTRA_INCLUDES ${LLAMA_EXTRA_INCLUDES} ${MPI_C_INCLUDE_DIRS})
|
set(LLAMA_EXTRA_INCLUDES ${LLAMA_EXTRA_INCLUDES} ${MPI_C_INCLUDE_DIRS})
|
||||||
|
|
||||||
# Even if you're only using the C header, C++ programs may bring in MPI
|
# Even if you're only using the C header, C++ programs may bring in MPI
|
||||||
# C++ functions, so more linkage is needed
|
# C++ functions, so more linkage is needed
|
||||||
if (MPI_CXX_FOUND)
|
if (MPI_CXX_FOUND)
|
||||||
|
@ -427,31 +432,28 @@ if (LLAMA_VULKAN)
|
||||||
if (Vulkan_FOUND)
|
if (Vulkan_FOUND)
|
||||||
message(STATUS "Vulkan found")
|
message(STATUS "Vulkan found")
|
||||||
|
|
||||||
add_library(ggml-vulkan OBJECT ggml-vulkan.cpp ggml-vulkan.h)
|
set(GGML_HEADERS_VULKAN ggml-vulkan.h)
|
||||||
if (BUILD_SHARED_LIBS)
|
set(GGML_SOURCES_VULKAN ggml-vulkan.cpp)
|
||||||
set_target_properties(ggml-vulkan PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
||||||
endif()
|
|
||||||
target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan)
|
|
||||||
|
|
||||||
add_compile_definitions(GGML_USE_VULKAN)
|
target_compile_definitions(ggml PUBLIC GGML_USE_VULKAN)
|
||||||
|
|
||||||
if (LLAMA_VULKAN_CHECK_RESULTS)
|
if (LLAMA_VULKAN_CHECK_RESULTS)
|
||||||
target_compile_definitions(ggml-vulkan PRIVATE GGML_VULKAN_CHECK_RESULTS)
|
target_compile_definitions(ggml PRIVATE GGML_VULKAN_CHECK_RESULTS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_VULKAN_DEBUG)
|
if (LLAMA_VULKAN_DEBUG)
|
||||||
target_compile_definitions(ggml-vulkan PRIVATE GGML_VULKAN_DEBUG)
|
target_compile_definitions(ggml PRIVATE GGML_VULKAN_DEBUG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_VULKAN_VALIDATE)
|
if (LLAMA_VULKAN_VALIDATE)
|
||||||
target_compile_definitions(ggml-vulkan PRIVATE GGML_VULKAN_VALIDATE)
|
target_compile_definitions(ggml PRIVATE GGML_VULKAN_VALIDATE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_VULKAN_RUN_TESTS)
|
if (LLAMA_VULKAN_RUN_TESTS)
|
||||||
target_compile_definitions(ggml-vulkan PRIVATE GGML_VULKAN_RUN_TESTS)
|
target_compile_definitions(ggml PRIVATE GGML_VULKAN_RUN_TESTS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ggml-vulkan)
|
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} Vulkan::Vulkan)
|
||||||
else()
|
else()
|
||||||
message(WARNING "Vulkan not found")
|
message(WARNING "Vulkan not found")
|
||||||
endif()
|
endif()
|
||||||
|
@ -463,43 +465,44 @@ if (LLAMA_HIPBLAS)
|
||||||
if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
|
||||||
message(WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang")
|
message(WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
|
||||||
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
|
message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(hip)
|
find_package(hip REQUIRED)
|
||||||
find_package(hipblas)
|
find_package(hipblas REQUIRED)
|
||||||
find_package(rocblas)
|
find_package(rocblas REQUIRED)
|
||||||
|
|
||||||
if (${hipblas_FOUND} AND ${hip_FOUND})
|
|
||||||
message(STATUS "HIP and hipBLAS found")
|
message(STATUS "HIP and hipBLAS found")
|
||||||
add_compile_definitions(GGML_USE_HIPBLAS GGML_USE_CUBLAS)
|
|
||||||
|
set(GGML_HEADERS_ROCM ggml-cuda.h)
|
||||||
|
set(GGML_SOURCES_ROCM ggml-cuda.cu)
|
||||||
|
|
||||||
|
target_compile_definitions(ggml PUBLIC GGML_USE_HIPBLAS GGML_USE_CUBLAS)
|
||||||
if (LLAMA_HIP_UMA)
|
if (LLAMA_HIP_UMA)
|
||||||
add_compile_definitions(GGML_HIP_UMA)
|
target_compile_definitions(ggml PRIVATE GGML_HIP_UMA)
|
||||||
endif()
|
|
||||||
add_library(ggml-rocm OBJECT ggml-cuda.cu ggml-cuda.h)
|
|
||||||
if (BUILD_SHARED_LIBS)
|
|
||||||
set_target_properties(ggml-rocm PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_CUDA_FORCE_DMMV)
|
if (LLAMA_CUDA_FORCE_DMMV)
|
||||||
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_DMMV)
|
target_compile_definitions(ggml PRIVATE GGML_CUDA_FORCE_DMMV)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_CUDA_FORCE_MMQ)
|
if (LLAMA_CUDA_FORCE_MMQ)
|
||||||
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_FORCE_MMQ)
|
target_compile_definitions(ggml PRIVATE GGML_CUDA_FORCE_MMQ)
|
||||||
endif()
|
endif()
|
||||||
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X})
|
|
||||||
target_compile_definitions(ggml-rocm PRIVATE GGML_CUDA_MMV_Y=${LLAMA_CUDA_MMV_Y})
|
target_compile_definitions(ggml PRIVATE GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X})
|
||||||
target_compile_definitions(ggml-rocm PRIVATE K_QUANTS_PER_ITERATION=${LLAMA_CUDA_KQUANTS_ITER})
|
target_compile_definitions(ggml PRIVATE GGML_CUDA_MMV_Y=${LLAMA_CUDA_MMV_Y})
|
||||||
|
target_compile_definitions(ggml PRIVATE K_QUANTS_PER_ITERATION=${LLAMA_CUDA_KQUANTS_ITER})
|
||||||
|
|
||||||
set_source_files_properties(ggml-cuda.cu PROPERTIES LANGUAGE CXX)
|
set_source_files_properties(ggml-cuda.cu PROPERTIES LANGUAGE CXX)
|
||||||
target_link_libraries(ggml-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
|
|
||||||
|
|
||||||
if (LLAMA_STATIC)
|
if (LLAMA_STATIC)
|
||||||
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
|
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
|
||||||
endif()
|
endif()
|
||||||
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ggml-rocm)
|
|
||||||
else()
|
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
|
||||||
message(WARNING "hipBLAS or HIP not found. Try setting CMAKE_PREFIX_PATH=/opt/rocm")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLAMA_SYCL)
|
if (LLAMA_SYCL)
|
||||||
|
@ -509,19 +512,25 @@ if (LLAMA_SYCL)
|
||||||
#todo: AOT
|
#todo: AOT
|
||||||
|
|
||||||
find_package(IntelSYCL REQUIRED)
|
find_package(IntelSYCL REQUIRED)
|
||||||
if (LLAMA_SYCL_F16)
|
|
||||||
add_compile_definitions(GGML_SYCL_F16)
|
|
||||||
endif()
|
|
||||||
add_compile_definitions(GGML_USE_SYCL)
|
|
||||||
|
|
||||||
add_compile_options(-I./) #include DPCT
|
message(STATUS "SYCL found")
|
||||||
add_compile_options(-I/${SYCL_INCLUDE_DIR})
|
|
||||||
|
target_compile_definitions(ggml PUBLIC GGML_USE_SYCL)
|
||||||
|
|
||||||
|
if (LLAMA_SYCL_F16)
|
||||||
|
target_compile_definitions(ggml PRIVATE GGML_SYCL_F16)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#add_compile_options(-I./) #include DPCT
|
||||||
|
#add_compile_options(-I/${SYCL_INCLUDE_DIR})
|
||||||
|
|
||||||
|
target_compile_options(ggml PRIVATE -I./ -I/${SYCL_INCLUDE_DIR})
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl -L${MKLROOT}/lib")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl -L${MKLROOT}/lib")
|
||||||
|
|
||||||
set(GGML_HEADERS_SYCL ggml.h ggml-sycl.h)
|
set(GGML_HEADERS_SYCL ggml-sycl.h)
|
||||||
set(GGML_SOURCES_SYCL ggml-sycl.cpp)
|
set(GGML_SOURCES_SYCL ggml-sycl.cpp)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
|
@ -603,7 +612,7 @@ if (LLAMA_KOMPUTE)
|
||||||
add_subdirectory(kompute)
|
add_subdirectory(kompute)
|
||||||
|
|
||||||
# Compile our shaders
|
# Compile our shaders
|
||||||
compile_shader(SOURCES
|
Vcompile_shader(SOURCES
|
||||||
kompute-shaders/op_scale.comp
|
kompute-shaders/op_scale.comp
|
||||||
kompute-shaders/op_scale_8.comp
|
kompute-shaders/op_scale_8.comp
|
||||||
kompute-shaders/op_add.comp
|
kompute-shaders/op_add.comp
|
||||||
|
@ -1048,16 +1057,21 @@ add_library(ggml OBJECT
|
||||||
${GGML_SOURCES_EXTRA} ${GGML_HEADERS_EXTRA}
|
${GGML_SOURCES_EXTRA} ${GGML_HEADERS_EXTRA}
|
||||||
${GGML_SOURCES_SYCL} ${GGML_HEADERS_SYCL}
|
${GGML_SOURCES_SYCL} ${GGML_HEADERS_SYCL}
|
||||||
${GGML_SOURCES_KOMPUTE} ${GGML_HEADERS_KOMPUTE}
|
${GGML_SOURCES_KOMPUTE} ${GGML_HEADERS_KOMPUTE}
|
||||||
|
${GGML_SOURCES_VULKAN} ${GGML_HEADERS_VULKAN}
|
||||||
|
${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(ggml PUBLIC . ${LLAMA_EXTRA_INCLUDES})
|
target_include_directories(ggml PUBLIC . ${LLAMA_EXTRA_INCLUDES})
|
||||||
target_compile_features (ggml PUBLIC c_std_11) # don't bump
|
target_compile_features (ggml PUBLIC c_std_11) # don't bump
|
||||||
|
|
||||||
target_link_libraries(ggml PUBLIC Threads::Threads ${LLAMA_EXTRA_LIBS})
|
target_link_libraries(ggml PUBLIC Threads::Threads ${LLAMA_EXTRA_LIBS})
|
||||||
|
|
||||||
if (GGML_USE_CPU_HBM)
|
if (GGML_USE_CPU_HBM)
|
||||||
target_link_libraries(ggml PUBLIC memkind)
|
target_link_libraries(ggml PUBLIC memkind)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(ggml_static STATIC $<TARGET_OBJECTS:ggml>)
|
add_library(ggml_static STATIC $<TARGET_OBJECTS:ggml>)
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
if (BUILD_SHARED_LIBS)
|
||||||
set_target_properties(ggml PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
set_target_properties(ggml PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||||
add_library(ggml_shared SHARED $<TARGET_OBJECTS:ggml>)
|
add_library(ggml_shared SHARED $<TARGET_OBJECTS:ggml>)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue