Files
TheRock/rocm-systems/projects/rccl/CHANGELOG.md
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

34 KiB

Changelog for RCCL

Full documentation for RCCL is available at https://rccl.readthedocs.io

RCCL 2.30.4 for ROCm 7.14.0

Added

  • Compatibility with NCCL 2.30.4.
  • Compatibility with NCCL 2.29.7.
  • Compatibility with NCCL 2.28.9.
  • Added proxytrace profiler plugin and core proxy-diagnostics hooks (RCCL_PROXYTRACE).
  • Added ncclBarrierSession LSA validation for barrier sessions.
  • Added symmetric-memory ReduceScatter kernel (RailA2A_LsaLD) on gfx942/gfx950.
  • Added bias (accumulation) AllReduce on gfx1250 (MI450).
  • Added optimized scale-up ReduceScatter, AllGather, and AllToAll kernels.
  • Added ROCProfiler-SDK coverage for ncclCommGrow and ncclCommGetUniqueId.
  • P2P batching auto-enabled for gfx950 in combination with non-AINIC NICs.
  • Display HIP/ROCm runtime versions in NCCL_DEBUG output.
  • Detect ROCm version via core symlink for multi-architecture installs.
  • Skip DDA IPC initialization for directMode and MNNVL topologies.
  • Load versioned libamd_smi SONAME instead of an unversioned symlink.
  • Added Pythonic API bindings under bindings/nccl4py/ (RCCL fork of NVIDIA nccl4py v0.2.0). Provides Python access to RCCL collectives via Cython bindings, an on-disk cuda.core HIP shim for ROCm hosts without cuda-bindings / cuda-core, and RCCL-only collective wrappers (ncclAllReduceWithBias, ncclAllToAllv).
  • Added RCCL examples to the repository.
  • Added RCCL host API pull-in from NCCL 2.30.

Changed

  • Enabled WarpSpeed auto mode for grow communicators.
  • Refactored AllGather algorithm selection; hierarchical AllGather now enabled by default for multi-node.
  • Swapped legacy net_ib with the net_ib implementation from NCCL 2.29.
  • Skip per-warp channel LDS copy when warpComm is disabled.
  • Hardened proxy RPC setup against malformed peer input.
  • The bootstrap AllGather now uses the bidirectional ring (N/2 steps) by default on the socket OOB path. NCCL_BOOTSTRAP_BIDIR_ALLGATHER now defaults to 1; set it to 0 to fall back to the unidirectional ring. The net OOB path (NCCL_OOB_NET_ENABLE) and its bidirectional variant (NCCL_BOOTSTRAP_BIDIR_NET) remain off by default.
  • NCCL_PXN_C2C is kept default-off (0); upstream NCCL defaults it to 1 since 2.28. The C2C PXN routing path is NVIDIA-specific and is not currently applicable on AMD hardware.

Removed

  • Removed NPKit profiling support (build option ENABLE_NPKIT, headers, device and proxy instrumentation, install script flag --npkit-enable, and related documentation and tooling). Use the profiler plugin API for profiling instead.
  • Removed kernel COLLTRACE support, including the COLLTRACE build option, device-side collective trace buffers, debug kernel variants, and related install/CI wiring. The host latency profiler is unchanged.
  • Removed legacy ENABLE_PROFILING device profiling support and the PROFILE build option. Use the profiler plugin API instead.

Optimized

  • Tuned symmetric memory kernels.
  • Parallelized communicator destruction across child processes to reduce teardown latency.

Resolved issues

  • Fixed ncclCommGrow channel-count divergence causing incorrect collective routing.
  • Fixed ncclCommGrow hang when growing to an 8-rank single-node communicator.
  • Fixed symmetric LDS under-reservation in legacy (non-device-linker) builds.
  • Fixed LL128 protocol correctness for gfx1250 (MI450).
  • Fixed XGMI topology mapping for multi-system (NPS) nodes.
  • Fixed gfx950 collective hang caused by a tuner race condition.
  • Fixed net_ib_cast: gate CTS offload path on per-connection state.
  • Fixed net_ib: avoid flagging a non-fatal Isend CTS no-match as a fatal error.
  • Fixed acquire-tail polling for gfx950 P2P host staging.
  • Fixed LDS overflow in device-linker builds.
  • Fixed symmetric memory correctness issues.
  • Fixed ncclCommFree to free symmetric window objects automatically (NCCL 2.29.7 defect).
  • Fixed DDA IPC initialization skip on architectures that do not run DDA.
  • Fixed static build (BUILD_SHARED_LIBS=OFF) failing with install(EXPORT "rccl-targets" ...) error when fmt is fetched via FetchContent. The fmt-header-only target is now scoped to the build interface and excluded from RCCL's exported usage requirements.
  • Fixed proxy channel staging buffers ignoring the new GDR mode selection on HIP < 7.12 builds. The legacy #else branch in sendProxyConnect / recvProxyConnect now honors resources->useDmaBuf, so peermem-equipped hosts on older HIP no longer fall through to hsa_amd_portable_export_dmabuf when peermem was selected in *ProxySetup. Workaround for affected RCCL builds: NCCL_DMABUF_ENABLE=0.
  • Fixed RCCL initialization failing (Failed to find ROCm runtime library) on runtime-only ROCm trees that ship no unversioned libhsa-runtime64.so developer symlink (e.g. TheRock multi-arch pip-wheel /opt/rocm-less deployments). RCCL no longer dlopens the HSA runtime by name; instead it directly links hsa-runtime64::hsa-runtime64 (already a hard transitive dependency via the HIP runtime) and binds hsa_init, hsa_system_get_info, hsa_status_string, and hsa_amd_portable_export_dmabuf to those symbols. The linker records DT_NEEDED libhsa-runtime64.so.1 and resolves it through librccl's existing RPATH, removing the SONAME version-string fragility and load-scope (RTLD_LOCAL) issues. The RCCL_ROCR_PATH override is no longer needed and has been removed.
  • Retagged the RCCL-only COLLTRACE destroy-time log lines from NCCL_INIT to NCCL_DESTROY and documented the DESTROY NCCL_DEBUG_SUBSYS subsystem. The NCCL 2.30.3 sync added NCCL_DESTROY and retagged the shared comm-destroy/plugin-unload log lines, but missed these RCCL-specific lines since COLLTRACE has no upstream equivalent; they are now excluded from NCCL_DEBUG=INFO output by default, consistent with the other destroy-time lines.

Known issues

  • On gfx90a (MI210/MI250/MI250X) with ROCm 7.13 or later, per-launch scratch-memory reclaim in the runtime degrades RCCL performance. Set HSA_NO_SCRATCH_RECLAIM=1 to restore performance.
  • Elastic-buffer support for GIN (multi-segment symmetric memory windows backed by a mix of device and CPU/HOST_NUMA memory, exposed through NCCL_ELASTIC_BUFFER_REGISTER and NCCL_SYM_REUSE_SYSMEM_HANDLES) was newly synced from upstream and compiles on ROCm, but is unverified on AMD hardware.

RCCL 2.28.3 for ROCm 7.13

Added

  • Added CAST network transport (ncclNetCast / net_ib_cast) for AMD AINIC hardware.
  • Added built-in CSV tuner for runtime algorithm/protocol/channel selection without rebuilds.
  • Added multi-node hierarchical AllGather algorithm for MI350. Hierarchical AllGather is enabled by default for 8 or more nodes. The message size threshold is 64MB on 8 nodes and 128MB for more than 8 nodes. Set RCCL_HIERARCHICAL_ALLGATHER=0 to disable.
  • Initial support for symmetric memory kernels on gfx942 and gfx950.
  • Added RCCL_IB_SPLIT_DATA_THRESHOLD to split payload across multiple QPs/NICs in ncclIbMultiSend.
  • Round-robin single-QP payload and fifo-head-based QP selection in ncclIbMultiSend.
  • Added User Buffer and Graph Registration (NCCL_NVLS_ENABLE / CUMEM) gated on Linux kernel version.
  • Added runtime QP tracking with atomic counters in net_ib and net_ib_cast.
  • Enable Copy Engine (CE) collectives support in RCCL.
  • Added gfx1250 (MI450) GPU target support in RCCL and RCCL-Tests.
  • Strix-Halo (gfx1151) tuning support.
  • Add amd-smi wrapper functions for projected scale-up support, fabric capability dumping, and MNNVL fabric checks.
  • Added RCCL_IB_P2P_DISABLE_CTS to disable CTS offload for P2P connections on AINIC. Defaults to 1 (disabled). When RCCL_CTS_OFFLOAD_ENABLED=1 is explicitly set, it overrides this flag and forces CTS on all connections including P2P.
  • Merged RCCL_CTS_INLINE_DATA into RCCL_CTS_OFFLOAD_ENABLED. CTS offload and CTS inline data are now controlled by a single tri-state variable: -1 (default, auto-enable on AINIC), 0 (force disable), 1 (force enable for all connections).

Changed

  • Removed MSCCL and MSCCL++ collective integration; legacy mscclLoadAlgo, mscclRunAlgo, and mscclUnloadAlgo APIs remain as no-ops for link compatibility.
  • Removed roc-obj tools and perl build dependency.
  • Disable P2P batching by default on MI350.
  • Disable AMD-SMI (amdsmi_init) by default due to a concurrency issue in amdsmi_init; enable explicitly for ROCm 7.0 and above when the issue is addressed.
  • RCCL_ENABLE_CONTEXT_TRACKING replaced by NCCL_LAUNCH_ORDER_IMPLICIT for controlling launch-order tracking.
  • Moved tuning log messages from NCCL_INIT to the NCCL_TUNING debug subsystem.
  • Gate multi-node Direct AllGather on PXN enablement.
  • Use 256 threads per block on gfx950 (increased from 512).
  • Set algorithm to Ring for Navi4x (gfx1100/gfx1101) AllReduce.
  • Proxy busy-spin loop replaced with architecture-specific pause instruction on GDA-eligible topologies.
  • RCCL adds a NCCL CMake alias shim layer for CMake-based build compatibility.
  • CTS offload is now controlled per-connection rather than globally, allowing P2P connections to fall back to standard RDMA writes while non-P2P traffic continues to use CTS.

Resolved Issues

  • Fixed netOverride being skipped when rail-optimized trees are enabled (restores desired NIC mapping for targeted 4-NIC systems).
  • Fixed RCCL Inspector plugin teardown segfault/hang and collective-count correctness.
  • Fixed ncclGroupSimulateEnd planner state leak and resource cleanup.
  • Fixed validation errors with all_reduce_bias kernel on gfx950.
  • WarpSpeed now errors out with a warning when the requested channel count exceeds the maximum supported.
  • Fixed --generate-sym-kernels option when used with the default --device-linker.
  • Fixed CUCHECK and CUCHECKGOTO macros to clear the HIP error state before returning.
  • Fixed amd-smi/rocm-smi enum mismatch.
  • Fixed CTS-offload corner cases in net_ib_rocm and net_ib_cast (including mutual dependency enforcement with NIC fusion).
  • Fixed IPC registration incorrect #ifdef guard that disabled registration.
  • Fixed symmetric kernels validation errors on gfx942 and gfx950.

RCCL 2.28.3 for ROCm 7.12

Added

  • Added gfx1151 (Strix-Halo) GPU target support.
  • Added AMD AINIC support within the RCCL default internal network plugin.
  • Added RCCL_P2P_SHIFT_SIZE environment variable for advanced tuning of P2P channel and part mapping.
  • Added Direct Reduce Scatter implementation for improved multi-node performance.
  • Added WarpSpeed support for single-node AllGather and ReduceScatter.
  • Added virtual device enablement support (minimal changes for virtual GPU topology).
  • Added Navi4 (gfx1100) LL protocol enablement and tuning.
  • Added add-smi wrapper for firmware version queries (switched from rocm-smi to amd-smi).

Changed

  • Changed GPU Direct RDMA mode selection logic to prefer peermem over DMAbuf by default. NCCL_DMABUF_ENABLE now defaults to 1 (previously 0). When both peermem and DMAbuf are available, RCCL will use peermem. If peermem is unavailable, RCCL will automatically fall back to DMAbuf (if available and enabled). Setting RCCL_FORCE_ENABLE_DMABUF=1 forces DMAbuf usage exclusively, skipping peermem even if available, and disables GPU Direct RDMA if DMAbuf is unavailable.
  • Remove P2P batching node-count cap; P2P batching now applies for all node counts (previously capped at 32 nodes).
  • Halved default CU usage for gfx950 single-node all-reduce for better resource efficiency.
  • Set default maximum channels to 48 for gfx950 multi-node collectives.
  • Set default maximum channels to 48 for MI350 multi-node collectives.
  • WarpSpeed auto-mode handling improved; WarpSpeed enabled for MI350 single-node.
  • NCCL_LAUNCH_ORDER_IMPLICIT replaces RCCL_ENABLE_CONTEXT_TRACKING for controlling implicit launch ordering.
  • Disable Direct Reduce Scatter automatically when PXN is disabled.
  • Tuning: constant values used for CorrectionFactor tables for improved consistency.
  • DMABUF disabled configurations now correctly respected in rocm_net_ib.

Resolved Issues

  • Fixed shutdown ordering race condition and use-after-free crash in proxy cleanup.
  • Fixed DMABUF support check failure (SWDEV-579889 / ROCM-2855).
  • Fixed qpIndex selection in ncclIbIrecv for AINIC mode.
  • Fixed per-device UD map indexing for NIC fusion configurations.
  • Fixed potential segfaults from malloc failure paths.
  • Fixed bfloat16 reduce kernel bug for ROCm >= 6.0.
  • Fixed memory leak in ncclCommInitRankFunc.
  • Fixed memory leaks (ROCM-1721, ROCM-1722).

Known issues

  • The upstream one-sided RMA subsystem (src/rma) was newly synced and uses RCCL's direct-HIP batch memory-operation path (hipStreamBatchMemOp, in place of the upstream CUDA ncclCuStreamBatchMemOp driver wrapper which is not built on ROCm). It is unverified at scale on ROCm.
  • The upstream Copy-Engine (CE) collective redesign (device-side sequence-number buffer driven by cuStreamWriteValue32/cudaMemcpyAsync) is not adopted. RCCL retains its existing self-consistent HIP Copy-Engine implementation, which is structurally incompatible with the new upstream path.
  • The Copy-Engine profiler path (ncclProfiler_v6) is not enabled; RCCL remains on ncclProfiler_v5. The profiler plugin needs to be verified on ROCm.
  • GIN GDAKI host support now uses the shared InfiniBand context (ibv_context/ibv_pd) rather than opening its own device. The GDAKI path is DOCA/Mellanox-specific and is unverified on AMD NICs.
  • The RCCL InfiniBand GIN proxy backend was ported to the reworked NCCL 2.30.3 ncclGin_v13_t interface (opaque per-communicator context with mandatory createContext/destroyContext), but does not implement GIN GET or FLUSH (iget/iflush are left unset); the GIN host proxy reports an unsupported-op error if a device kernel requests one.
  • Elastic-buffer support for GIN (multi-segment symmetric memory windows backed by a mix of device and CPU/HOST_NUMA memory, exposed through NCCL_ELASTIC_BUFFER_REGISTER and NCCL_SYM_REUSE_SYSMEM_HANDLES) was newly synced from upstream and compiles on ROCm, but is unverified on AMD hardware.

RCCL 2.28.3 for ROCm 7.11

Known issues

  • AllToAllv and AllToAll for a single GPU is hanging.
  • AllGather regression for small message sizes (less than 1 MB) due to the Direct algorithm.
  • ROCTx feature needs to be verified.
  • Profiler plugin needs to be verified.

Added

  • Compatibility with NCCL 2.28.3.
  • Added ncclAllReduceWithBias API for fused all-reduce with elementwise accumulation-bias operations.
  • Added collective latency profiler tool (--latency-profiler in install.sh) for per-collective timing analysis.
  • Added dynamic pipelining for reduction collectives via the Simple protocol to improve single-node performance.
  • Added unroll=2 device-code variant for gfx950 multi-node collectives.
  • Enable LL128 protocol for gfx942 with 4-NIC configurations using a unified tuning table.
  • Added reduce/broadcast algorithm and protocol selection tuning table for multi-node gfx940.
  • Pass NET_OPTIONAL_RECV_COMPLETION hint to the network plugin to enable potential network-side optimizations.
  • Expose symbols for RCCL algorithm, protocol, and channels selection functions (rcclOverrideAlgorithm, rcclOverrideProtocol).
  • Added rail-optimized tree topology support for MI3XX nodes with 4 NICs.
  • Added single-node AllGather and ReduceScatter performance optimizations.
  • Enable GDRCopy option for gfx950.
  • Enable single-node one-slice optimization for gfx950 and MI300A.
  • Added environment variable to cap the number of QPs created for send/recv collectives.
  • Added support for additional paths when loading the RCCL DMABUF kernel configuration file.
  • Added ncclCommDump API for communicator state inspection.
  • Added rocSHMEM GDA alltoall integration (GDA-accelerated alltoall via rocSHMEM).

Changed

  • PIX and PXB are now treated as equivalent GDR distances for more consistent topology detection.
  • Optimized AllToAll for 64 or more GPUs on gfx942.
  • Optimize threadfence for the LL64 protocol on the sender side.
  • Disable __threadfence on the sender side of the Simple protocol when it is not needed for correctness.
  • Use rocm-smi API instead of CLI invocation for firmware version querying.
  • Adjusted gfx950 thread-block size to improve LL64 and Simple protocol performance for AllReduce, AllGather, and ReduceScatter.
  • __threadfence bypass on the multinode gfx950 sender side is now the default.
  • Updated multi-node LL/LL128 tuning for gfx950 to improve large-message bandwidth.
  • Disabled graph mode memory registration and user buffer registration as unsupported features on current hardware.
  • Updated Direct AllGather threshold for single-node and multi-node cases.
  • Experimental support for traffic shaping using warp specialization (also known as WarpSpeed) is now available for the Ring algorithm.
  • Enabling WarpSpeed in auto mode using RCCL_WARP_SPEED_AUTO optimizes performance and reduces the CU count by 50% on a single node for AllReduce, AllGather from 64MB, and ReduceScatter from 256MB.
  • The following configuration knobs control WarpSpeed behavior for debugging purposes: RCCL_WARP_SPEED_ENABLE, RCCL_UNROLL_FACTOR, RCCL_WARP_SPEED_CU_COUNT, and RCCL_THREADS_PER_BLOCK. Note that the effective unroll factor is calculated as 2 raised to the value of RCCL_UNROLL_FACTOR.

Resolved Issues

  • Fixed missing memory fence in the LL protocol for gfx950, which caused collective hangs.
  • Fixed segmentation fault in the external profiler plugin on communicator teardown.
  • Fixed LL128 protocol selection to respect the user's explicit protocol override setting.
  • Fixed rcclNetP2pPolicy returning incorrect policy for multi-NIC configurations.
  • Fixed missing proxy-counter updates in the proxy loop leading to stalled counters.
  • Fixed P2P batching hang when using batch operations.
  • Fixed P2P self-copy for batched operations to prevent hangs when communicator size exceeds 32 nodes.
  • Fixed WarpSpeed auto mode selection bug.

RCCL 2.27.7 for ROCm 7.2.0

Changed

  • RCCL error messages have been made more verbose in several cases. RCCL now prints out fatal error messages by default. Fatal error messages can be suppressed by setting NCCL_DEBUG=NONE.
  • Disabled reduceCopyPacks pipelining for gfx950.

Known issues

  • AllToAllv/AlltoAll for single GPU is hanging.

RCCL 2.27.7 for ROCm 7.1.1

Changed

  • Enabling P2P batching with RCCL_P2P_BATCH_ENABLE=1 is only applicable up to 32 nodes.

Resolved Issues

  • Fixed crash when using the librccl-profiler plugin with the all-to-all collective after the 2.27 update.

RCCL 2.27.7 for ROCm 7.1.0

Added

  • Added RCCL_IB_QPS_PER_P2P to set the number of QPs per connection for P2P operations. When set (≥1), P2P operations (Send/Recv) use RCCL_IB_QPS_PER_P2P, while other collective operations continue to use NCCL_IB_QPS_PER_CONNECTION. When not set, NCCL_IB_QPS_PER_CONNECTION applies to all operations.
  • Added RCCL_FORCE_ENABLE_DMABUF as a debugging feature if the user wants to explicitly enable DMABUF and forego system/kernel checks.
  • Added RCCL_P2P_BATCH_THRESHOLD to set the message size limit for batching P2P operations. This mainly affects small message performance for alltoall at a large scale but also applies to alltoallv.
  • Added RCCL_P2P_BATCH_ENABLE to enable batching P2P operations to receive performance gains for smaller messages up to 4MB for alltoall when the workload requires it. This is to avoid performance dips for larger messages.
  • Added RCCL_CHANNEL_TUNING_ENABLE to enable channel tuning that overrides RCCL's internal adjustments based on threadThreshold.

Changed

  • The MSCCL++ feature is now disabled by default. The --disable-mscclpp build flag is replaced with --enable-mscclpp in the rccl/install.sh script.
  • Compatibility with NCCL 2.27.7.

Optimized

  • Enabled and optimized batched P2P operations to improve small message performance for AllToAll and AllGather.
  • Optimized channel count selection to improve efficiency for small to medium message sizes in ReduceScatter.
  • Changed code inlining to improve latency for small message sizes for AllReduce, AllGather, and ReduceScatter.

Known issues

  • Symmetric memory kernels are currently disabled due to ongoing CUMEM enablement work.
  • When running this version of RCCL using ROCm versions earlier than 6.4.0, the user must set the environment flag HSA_NO_SCRATCH_RECLAIM=1.

RCCL 2.26.6 for ROCm 7.0.0

Resolved issues

  • Resolved an issue when using more than 64 channels when multiple collectives are used in the same ncclGroup() call.
  • Fixed unit test failures in tests ending with ManagedMem and ManagedMemGraph suffixes.
  • Suboptimal algorithmic switching point for AllReduce on MI300x.
  • Fixed the known issue "When splitting a communicator using ncclCommSplit in some GPU configurations, MSCCL initialization can cause a segmentation fault." with a design change to use comm instead of rank for mscclStatus. The Global map for comm to mscclStatus is still not thread safe but should be explicitly handled by mutexes for read writes. This is tested for correctness, but there is a plan to use a thread-safe map data structure in upcoming changes.
  • Fixed broken functionality within the LL protocol on gfx950 by disabling inlining of LLGenericOp kernels.

Added

  • Added new GPU target gfx950.
  • Added support for unroll=1 in device-code generation to improve performance,
  • Set a default of 112 channels for a single node with 8 * gfx950,
  • Enabled LL128 protocol on gfx950.
  • Added MSCCL support for AllGather multinode gfx942/gfx950 (i.e., 16 and 32 GPUs). To enable, set the environment variable RCCL_MSCCL_FORCE_ENABLE=1. Max message size for MSCCL AllGather usage is 12292 * sizeof(datatype) * nGPUs.
  • Thread thresholds for LL/LL128 are selected in Tuning Models for the MI300X. This impacts the number of channels used for AG and RS. Channel tuning model is bypassed if NCCL_THREAD_THRESHOLDS, NCCL_MIN_NCHANNELS', or 'NCCL_MAX_NCHANNELS are set.
  • Multi-node tuning for AllGather, AllReduce, and ReduceScatter that leverages LL/LL64/LL128 protocol to use nontemporal vector load/store for tunable message size ranges.
  • LL/LL128 usage ranges for AR, AG, and RS are part of the tuning models, which enable architecture-specific tuning in conjunction with the existing Rome Models scheme in RCCL.
  • Two new APIs are exposed as part of an initiative to separate RCCL code. These APIs are rcclGetAlgoInfo and rcclFuncMaxSendRecvCount. However, user-level invocation requires that RCCL be built with RCCL_EXPOSE_STATIC enabled.
  • Enabled double-buffering in reduceCopyPacks to trigger pipelining, especially to overlap bf16 arithmetic and bridge the gap between fp32 performance and bf16 for both gfx942 and gfx950. Pipelining has been made tunable via rcclSetPipelining, similar to algorithms/protocols so that regression is avoided in certain message sizes.
  • Added a direct allgather algorithm. This is enabled by default for multi-node if there are 16 nodes or fewer. The message size threshold is 4MB.
  • Added RCCL_OVERRIDE_PROTO and RCCL_OVERRIDE_ALGO to allow direct replacement of protocol and algorithm choices. Unlike NCCL_PROTO and NCCL_ALGO, which re-run the model across enabled combinations and may not guarantee the intended override, these new options enforce the specified selections explicitly.

Changed

  • Compatibility with NCCL 2.23.4.
  • Compatibility with NCCL 2.24.3.
  • Compatibility with NCCL 2.25.1.
  • Compatibility with NCCL 2.26.6.

Optimized

  • Improved the performance of the FP8 Sum operation by upcasting to FP16.

Known Issues

  • When running this version of RCCL using ROCm versions earlier than 6.4.0, the user must set the environment flag HSA_NO_SCRATCH_RECLAIM=1.

RCCL 2.22.3 for ROCm 6.4.2

Added

  • Added support for the LL128 protocol on gfx942.

RCCL 2.22.3 for ROCm 6.4.1

Resolved issues

  • Fixed the accuracy issue for MSCCLPP allreduce7 kernel in graph mode.
  • Fixed IntraNet performance.
  • Fixed an issue where, in rare circumstances, the application could stop responding due to a proxy thread synchronization issue.

Known issues

  • When splitting a communicator using ncclCommSplit in some GPU configurations, MSCCL initialization can cause a segmentation fault. The recommended workaround is to disable MSCCL with export RCCL_MSCCL_ENABLE=0.
  • Within the RCCL-UnitTests test suite, failures occur in tests ending with the ManagedMem and ManagedMemGraph suffixes. These failures only affect the test results and do not affect the RCCL component itself. This issue will be resolved in the next major release.

RCCL 2.22.3 for ROCm 6.4.0

Added

  • RCCL_SOCKET_REUSEADDR and RCCL_SOCKET_LINGER environment parameters.
  • Setting NCCL_DEBUG=TRACE NCCL_DEBUG_SUBSYS=VERBS will generate traces for fifo and data ibv_post_sends.
  • Added --log-trace flag to enable traces through the install.sh script (e.g. ./install.sh --log-trace).

Changed

  • Compatibility with NCCL 2.22.3
  • Added support for the rail-optimized tree algorithm for the MI300 series. This feature requires the use of all eight GPUs within each node. It limits NIC traffic to use only GPUs of the same index across nodes and should not impact performance on non-rail-optimized network topologies. The original method of building trees can be enabled by setting the environment variable RCCL_DISABLE_RAIL_TREES=1.
  • Additional debug information about how the trees are built can be logged to the GRAPH logging subsys by setting RCCL_OUTPUT_TREES=1.
  • Added documentation about the NPS4 and CPX partition modes performance benefits on the MI300X.

RCCL 2.21.5 for ROCm 6.3.1

Added

Changed

  • Enhanced user documentation

Resolved issues

  • Corrected user help strings in install.sh

RCCL 2.21.5 for ROCm 6.3.0

Added

  • MSCCL++ integration for AllReduce and AllGather on gfx942
  • Performance collection to rccl_replayer
  • Tuner Plugin example for MI300
  • Tuning table for large number of nodes
  • Support for amdclang++
  • Allow NIC ID remapping using NCCL_RINGS_REMAP environment variable

Changed

  • Compatibility with NCCL 2.21.5
  • Increased channel count for MI300X multi-node
  • Enabled MSCCL for single-process multi-threaded contexts
  • Enabled gfx12
  • Enabled CPX mode for MI300X
  • Enabled tracing with rocprof
  • Improved version reporting
  • Enabled GDRDMA for Linux kernel 6.4.0+

Resolved issues

  • Fixed model matching with PXN enable

RCCL 2.20.5 for ROCm 6.2.1

Fixed

  • GDR support flag now set with DMABUF

Known issues

  • On systems running Linux kernel 6.8.0, such as Ubuntu 24.04, Direct Memory Access (DMA) transfers between the GPU and NIC are disabled and impacts multi-node RCCL performance.
    • This issue was reproduced with RCCL 2.20.5 (ROCm 6.2.0 and 6.2.1) on systems with Broadcom Thor-2 NICs and affects other systems with RoCE networks using Linux 6.8.0 or newer.
    • Older RCCL versions are also impacted.
    • This issue will be addressed in a future ROCm release.

RCCL 2.20.5 for ROCm 6.2.0

Changed

  • Compatibility with NCCL 2.20.5
  • Compatibility with NCCL 2.19.4
  • Performance tuning for some collective operations on MI300
  • Enabled NVTX code in RCCL
  • Replaced rccl_bfloat16 with hip_bfloat16
  • NPKit updates:
    • Removed warm-up iteration removal by default, need to opt in now
    • Doubled the size of buffers to accommodate for more channels
  • Modified rings to be rail-optimized topology friendly
  • Replaced ROCmSoftwarePlatform links with ROCm links

Added

  • Support for fp8 and rccl_bfloat8
  • Support for using HIP contiguous memory
  • Implemented ROC-TX for host-side profiling
  • Enabled static build
  • Added new rome model
  • Added fp16 and fp8 cases to unit tests
  • New unit test for main kernel stack size
  • New -n option for topo_expl to override # of nodes
  • Improved debug messages of memory allocations

Fixed

  • Bug when configuring RCCL for only LL128 protocol
  • Scratch memory allocation after API change for MSCCL

RCCL 2.18.6 for ROCm 6.1.0

Changed

  • Compatibility with NCCL 2.18.6

RCCL 2.18.3 for ROCm 6.0.0

Changed

  • Compatibility with NCCL 2.18.3

RCCL 2.17.1-1 for ROCm 5.7.0

Changed

  • Compatibility with NCCL 2.17.1-1
  • Performance tuning for some collective operations

Added

  • Minor improvements to MSCCL codepath
  • NCCL_NCHANNELS_PER_PEER support
  • Improved compilation performance
  • Support for gfx94x

Fixed

  • Potential race-condition during ncclSocketClose()

RCCL 2.16.2 for ROCm 5.6.0

Changed

  • Compatibility with NCCL 2.16.2

Fixed

  • Remove workaround and use indirect function call

RCCL 2.15.5 for ROCm 5.5.0

Changed

  • Compatibility with NCCL 2.15.5
  • Unit test executable renamed to rccl-UnitTests

Added

  • HW-topology aware binary tree implementation
  • Experimental support for MSCCL
  • New unit tests for hipGraph support
  • NPKit integration

Fixed

  • rocm-smi ID conversion
  • Support for HIP_VISIBLE_DEVICES for unit tests
  • Support for p2p transfers to non (HIP) visible devices

Removed

RCCL-2.13.4 for ROCm 5.4.0

Changed

  • Compatibility with NCCL 2.13.4
  • Improvements to RCCL when running with hipGraphs
  • RCCL_ENABLE_HIPGRAPH environment variable is no longer necessary to enable hipGraph support
  • Minor latency improvements

Fixed

  • Resolved potential memory access error due to asynchronous memset

RCCL-2.12.10 for ROCm 5.3.0

Changed

  • Improvements to LL128 algorithms

Added

RCCL-2.12.10 for ROCm 5.2.3

Added

  • Compatibility with NCCL 2.12.10
  • Packages for test and benchmark executables on all supported OSes using CPack.
  • Adding custom signal handler - opt-in with RCCL_ENABLE_SIGNALHANDLER=1
    • Additional details provided if Binary File Descriptor library (BFD) is pre-installed
  • Adding support for reusing ports in NET/IB channels
    • Opt-in with NCCL_IB_SOCK_CLIENT_PORT_REUSE=1 and NCCL_IB_SOCK_SERVER_PORT_REUSE=1
    • When "Call to bind failed : Address already in use" error happens in large-scale AlltoAll (e.g., >=64 MI200 nodes), users are suggested to opt-in either one or both of the options to resolve the massive port usage issue
    • Avoid using NCCL_IB_SOCK_SERVER_PORT_REUSE when NCCL_NCHANNELS_PER_NET_PEER is tuned >1

Removed

  • Removed experimental clique-based kernels

RCCL-2.11.4 for ROCm 5.2.0

Changed

  • Unit testing framework rework
  • Minor bug fixes

Known issues

  • Managed memory is not currently supported for clique-based kernels

RCCL-2.11.4 for ROCm 5.1.0

Added

  • Compatibility with NCCL 2.11.4

Known issues

  • Managed memory is not currently supported for clique-based kernels

RCCL-2.10.3 for ROCm 5.0.0

Added

  • Compatibility with NCCL 2.10.3

Known issues

  • Managed memory is not currently supported for clique-based kernels

RCCL-2.9.9 for ROCm 4.5.0

Changed

  • Packaging split into a runtime package called rccl and a development package called rccl-devel. The development package depends on runtime. The runtime package suggests the development package for all supported OSes except CentOS 7 to aid in the transition. The suggests feature in packaging is introduced as a deprecated feature and will be removed in a future rocm release.

Added

  • Compatibility with NCCL 2.9.9

Known issues

  • Managed memory is not currently supported for clique-based kernels

[RCCL-2.8.4 for ROCm 4.3.0]

Added

  • Ability to select the number of channels to use for clique-based all reduce (RCCL_CLIQUE_ALLREDUCE_NCHANNELS). This can be adjusted to tune for performance when computation kernels are being executed in parallel.

Optimizations

  • Additional tuning for clique-based kernel AllReduce performance (still requires opt in with RCCL_ENABLE_CLIQUE=1)
  • Modification of default values for number of channels / byte limits for clique-based all reduce based on device architecture

Changed

  • Replaced RCCL_FORCE_ENABLE_CLIQUE to RCCL_CLIQUE_IGNORE_TOPO
  • Clique-based kernels can now be enabled on topologies where all active GPUs are XGMI-connected
  • Topologies not normally supported by clique-based kernels require RCCL_CLIQUE_IGNORE_TOPO=1

Fixed

  • Install script '-r' flag invoked alone no longer incorrectly deletes any existing builds.

Known issues

  • Managed memory is not currently supported for clique-based kernels

[RCCL-2.8.4 for ROCm 4.2.0]

Added

  • Compatibility with NCCL 2.8.4

Optimizations

  • Additional tuning for clique-based kernels
  • Enabling GPU direct RDMA read from GPU
  • Fixing potential memory leak issue when re-creating multiple communicators within same process
  • Improved topology detection

Known issues

  • None

[RCCL-2.7.8 for ROCm 4.1.0]

Added

  • Experimental support for clique-based kernels (opt in with RCCL_ENABLE_CLIQUE=1)
  • Clique-based kernels may offer better performance for smaller input sizes
  • Clique-based kernels are currently only enabled for AllReduce under a certain byte limit (controlled via RCCL_CLIQUE_ALLREDUCE_BYTE_LIMIT)

Optimizations

  • Performance improvements for Rome-based systems

Known issues

  • Clique-based kernels are currently experimental and have not been fully tested on all topologies. By default, clique-based kernels are disabled if the detected topology is not supported (override with RCCL_FORCE_ENABLE_CLIQUE)
  • Clique-based kernels may hang if there are differences between environment variables set across ranks.
  • Clique-based kernels may fail if the input / output device pointers are not the base device pointers returned by hipMalloc.

[RCCL-2.7.8 for ROCm 3.9.0]

Added

  • Adding support for alltoallv RCCL kernel

Optimizations

  • Modifications to topology based on XGMI links

Known issues

  • None

[RCCL-2.7.6 for ROCm 3.8.0]

Added

  • Support for static library builds

Known issues

  • None

[RCCL-2.7.6 for ROCm 3.7.0]

Added

  • Updated to RCCL API version of 2.7.6
  • Added gather, scatter and all-to-all collectives

[RCCL-2.7.0 for ROCm 3.6.0]

Added

  • Updated to RCCL API version of 2.6.4

[RCCL-2.7.0 for ROCm 3.5.0]

Added

  • Compatibility with NCCL 2.6
  • Network interface improvements with API v3

Optimizations

  • Fixing issues and built time improvements for hip-clang
  • Network topology detection
  • Improved CPU type detection
  • Infiniband adaptive routing support

Changed

  • Switched to hip-clang as default compiler

Deprecated

  • Deprecated hcc build