From ed6e0ec68b8a5f3330b22c1f470a33230f87e53c Mon Sep 17 00:00:00 2001 From: Zimin Li Date: Tue, 14 Jul 2026 08:41:56 +0000 Subject: [PATCH 1/3] feat: support NCCL on Iluvatar which greatly reuses the current NCCL common constructs --- CMakeLists.txt | 19 ++++++++++++------- examples/CMakeLists.txt | 4 ++++ src/backend_device_map.h | 4 ++++ src/backends/ccl/nccl/iluvatar/api.h | 15 +++++++++++++++ 4 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 src/backends/ccl/nccl/iluvatar/api.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 42d4699..9c52d13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,9 +210,14 @@ if(AUTO_DETECT_BACKENDS) endif() # Detect NCCL Dependencies - if(WITH_NVIDIA) - find_path(AUTO_NCCL_INC NAMES nccl.h QUIET) - find_library(AUTO_NCCL_LIB NAMES nccl QUIET) + if(WITH_NVIDIA OR WITH_ILUVATAR) + if (WITH_ILUVATAR) + set(_NCCL_HINTS /usr/local/corex) + message(STATUS "Iluvatar detected. Searching for NCCL in ${_NCCL_HINTS}") + endif() + + find_path(AUTO_NCCL_INC NAMES nccl.h HINTS ${_NCCL_HINTS} PATH_SUFFIXES include QUIET) + find_library(AUTO_NCCL_LIB NAMES nccl HINTS ${_NCCL_HINTS} PATH_SUFFIXES lib lib64 QUIET) if(AUTO_NCCL_INC AND AUTO_NCCL_LIB) set(WITH_NCCL ON) @@ -334,12 +339,12 @@ if(WITH_OMPI OR WITH_MPICH) endif() if(WITH_NCCL) - if (NOT WITH_NVIDIA) - message(FATAL_ERROR "NCCL backend requires NVIDIA GPU support. Please enable WITH_NVIDIA.") + if (NOT WITH_NVIDIA AND NOT WITH_ILUVATAR) + message(FATAL_ERROR "NCCL backend requires NVIDIA or Iluvatar GPU support. Please enable `WITH_NVIDIA` or `WITH_ILUVATAR`.") endif() - find_library(NCCL_LIB NAMES nccl REQUIRED) - find_path(NCCL_INC NAMES nccl.h REQUIRED) + find_library(NCCL_LIB NAMES nccl HINTS ${_NCCL_HINTS} PATH_SUFFIXES lib lib64 REQUIRED) + find_path(NCCL_INC NAMES nccl.h HINTS ${_NCCL_HINTS} PATH_SUFFIXES include REQUIRED) include_directories(${NCCL_INC}) endif() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a5eeed2..9c052c7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -53,6 +53,10 @@ foreach(source_file ${EXAMPLE_SOURCES}) target_link_libraries(${target_name} PRIVATE MPI::MPI_CXX) endif() + if(WITH_NCCL) + target_link_libraries(${target_name} PRIVATE "${NCCL_LIB}") + endif() + # Explicitly allow examples to "peek" into the internal `src` and binary dirs. # This is necessary because these were marked `PRIVATE` in the library's CMake. target_include_directories(${target_name} PRIVATE diff --git a/src/backend_device_map.h b/src/backend_device_map.h index 687e7da..f5d8419 100644 --- a/src/backend_device_map.h +++ b/src/backend_device_map.h @@ -17,6 +17,10 @@ template <> struct IsSupportedCombination : std::true_type {}; +template <> +struct IsSupportedCombination + : std::true_type {}; + }; // namespace infini::ccl #endif // INFINI_CCL_BACKEND_DEVICE_MAP_H_ diff --git a/src/backends/ccl/nccl/iluvatar/api.h b/src/backends/ccl/nccl/iluvatar/api.h new file mode 100644 index 0000000..91fd0f9 --- /dev/null +++ b/src/backends/ccl/nccl/iluvatar/api.h @@ -0,0 +1,15 @@ +#ifndef INFINI_CCL_BACKENDS_CCL_NCCL_ILUVATAR_API_H_ +#define INFINI_CCL_BACKENDS_CCL_NCCL_ILUVATAR_API_H_ + +#include "devices/iluvatar/runtime_.h" +#include "backends/ccl/nccl/api.h" + +namespace infini::ccl { + +template <> +struct CclApi + : NcclApi {}; + +} // namespace infini::ccl + +#endif // INFINI_CCL_BACKENDS_CCL_NCCL_ILUVATAR_API_H_ From 54423a600ad1ff2673535d2e2ae0c39762f6939e Mon Sep 17 00:00:00 2001 From: Zimin Li Date: Tue, 14 Jul 2026 09:28:14 +0000 Subject: [PATCH 2/3] style: clang-format unformatted file --- src/backends/ccl/nccl/iluvatar/api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backends/ccl/nccl/iluvatar/api.h b/src/backends/ccl/nccl/iluvatar/api.h index 91fd0f9..9cc84d6 100644 --- a/src/backends/ccl/nccl/iluvatar/api.h +++ b/src/backends/ccl/nccl/iluvatar/api.h @@ -1,8 +1,8 @@ #ifndef INFINI_CCL_BACKENDS_CCL_NCCL_ILUVATAR_API_H_ #define INFINI_CCL_BACKENDS_CCL_NCCL_ILUVATAR_API_H_ -#include "devices/iluvatar/runtime_.h" #include "backends/ccl/nccl/api.h" +#include "devices/iluvatar/runtime_.h" namespace infini::ccl { From 8ef7d956d423d86ab6ab1bf897b08271e0384dba Mon Sep 17 00:00:00 2001 From: Zimin Li Date: Tue, 14 Jul 2026 09:35:50 +0000 Subject: [PATCH 3/3] docs: update `README.md` to reflect the supportiveness of NCCL on Iluvatar --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7800ae5..ce4cc60 100644 --- a/README.md +++ b/README.md @@ -352,7 +352,7 @@ export LD_LIBRARY_PATH=${INFINI_INSTALL}/lib:$LD_LIBRARY_PATH |---------|---------------|----------------------|---------------| | **OpenMPI** | Full | `WITH_OMPI=ON` | The default backend. Requires the OpenMPI development package.| | **MPICH** | Full | `WITH_MPICH=ON` | Requires the MPICH development package.| -| **NCCL** | Partial | `WITH_NCCL=ON` | Requires NVIDIA NCCL. Currently available only when `WITH_NVIDIA=ON`.| +| **NCCL** | Partial | `WITH_NCCL=ON` | Requires NVIDIA or Iluvatar NCCL. Currently available when `WITH_NVIDIA=ON` or `WITH_ILUVATAR=ON`.|