diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 752dabbb6..4af7fc881 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -197,6 +197,7 @@ set(GGML_BLAS_VENDOR ${GGML_BLAS_VENDOR_DEFAULT} CACHE STRING option(GGML_LLAMAFILE "ggml: use LLAMAFILE" ${GGML_LLAMAFILE_DEFAULT}) option(GGML_CUDA "ggml: use CUDA" OFF) +set (GGML_CUDA_CCCL_VERSION "" CACHE STRING "ggml: CCCL git tag to fetch, empty to use the version bundled with the installed CUDA Toolkit") option(GGML_MUSA "ggml: use MUSA" OFF) option(GGML_CUDA_FORCE_MMQ "ggml: use mmq kernels instead of cuBLAS" OFF) option(GGML_CUDA_FORCE_CUBLAS "ggml: always use cuBLAS instead of mmq kernels" OFF) diff --git a/ggml/src/ggml-cuda/CMakeLists.txt b/ggml/src/ggml-cuda/CMakeLists.txt index dd57ac423..297d9ffc9 100644 --- a/ggml/src/ggml-cuda/CMakeLists.txt +++ b/ggml/src/ggml-cuda/CMakeLists.txt @@ -71,14 +71,13 @@ if (CUDAToolkit_FOUND) enable_language(CUDA) - # TODO: Remove once CCCL 3.2 has been released and bundled with CUDA Toolkit - if (GGML_CUDA_CUB_3DOT2) + if (GGML_CUDA_CCCL_VERSION) include(FetchContent) FetchContent_Declare( CCCL GIT_REPOSITORY https://github.com/nvidia/cccl.git - GIT_TAG v3.2.0 + GIT_TAG "${GGML_CUDA_CCCL_VERSION}" GIT_SHALLOW TRUE ) @@ -157,14 +156,15 @@ if (CUDAToolkit_FOUND) add_compile_definitions(GGML_CUDA_NO_PEER_COPY) endif() + if (GGML_CUDA_CCCL_VERSION) + target_link_libraries(ggml-cuda PRIVATE CCCL::CCCL) + endif() + if (GGML_STATIC) if (WIN32) # As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas) else () - if (GGML_CUDA_CUB_3DOT2) - target_link_libraries(ggml-cuda PRIVATE CCCL::CCCL) - endif() if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL "10.1") target_link_libraries(ggml-cuda PRIVATE CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static) else() @@ -172,9 +172,6 @@ if (CUDAToolkit_FOUND) endif() endif() else() - if (GGML_CUDA_CUB_3DOT2) - target_link_libraries(ggml-cuda PRIVATE CCCL::CCCL) - endif() target_link_libraries(ggml-cuda PRIVATE CUDA::cudart CUDA::cublas) endif() diff --git a/ggml/src/ggml-cuda/top-k.cu b/ggml/src/ggml-cuda/top-k.cu index c7a0c8317..3ffbba839 100644 --- a/ggml/src/ggml-cuda/top-k.cu +++ b/ggml/src/ggml-cuda/top-k.cu @@ -3,11 +3,15 @@ #ifdef GGML_CUDA_USE_CUB # include -# if (CCCL_MAJOR_VERSION >= 3 && CCCL_MINOR_VERSION >= 2) +// DeviceTopK has a race condition before CCCL 3.4.3. +// https://github.com/NVIDIA/cccl/pull/10627 +# if (CCCL_MAJOR_VERSION > 3 || \ + (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION > 4) || \ + (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION == 4 && CCCL_PATCH_VERSION >= 3)) # define CUB_TOP_K_AVAILABLE # include using namespace cub; -# endif // CCCL_MAJOR_VERSION >= 3 && CCCL_MINOR_VERSION >= 2 +# endif // CCCL >= 3.4.3 #endif // GGML_CUDA_USE_CUB #ifdef CUB_TOP_K_AVAILABLE