Fork changes
Algeon pins cuDF, cuGraph and cuVS as Git submodules of its own forks. The
generic bug fixes are proposed upstream so each fork can shrink, and each
section records which changes upstream 26.10 already contains. cuML has no
fork. Its submodule pins upstream v26.08.00, and the native build applies
scripts/build/patches/nvforest-196-move-buffers.patch to the nvForest sources
that cuML's CPM build fetches.
cuDF
The pinned fork is upstream v26.08.00 plus the changes below on branch
algeon-26.08. Upstream v26.10.00 supersedes the memory-resource parameters
on the device-view factories, row preprocessing, sizes_to_offsets and gather
temporaries, and the pinned-pool stream change; every other change is still
absent upstream and is re-applied on the 26.10 HashCSR hash join, per-thread
stream pool and reworked Parquet pruning code. Five preflight commits that the
fork later reverted are not carried.
Features:
- Retained join state with exact output sizing and delayed materialization:
hash_join::pre_build_reservation_size,filtered_joinpre-build sizing withbegin_left_semi_probeandbegin_left_anti_probe,conditional_full_join_size,mixed_left_semi_join_size,mixed_left_anti_join_size,mixed_full_join_size, andmixed_left_join_statefor a chunked right side. Admission reserves the exact bytes before a build and materializes at most the admitted size. - An explicit memory resource reaches join temporaries, gather, lexicographic sort scratch and row-operator preprocessing; their scratch allocations are charged to the query reservation.
- Prepared regex backreference replacement,
replace_with_backrefs_output_sizeandreplace_with_backrefs_prepared: size first, then execute from retained state. - Stream routing:
cudf::detail::install_stream_providerlets libcudf's internalfork_streamsuse attempt-owned streams, and the device-buffer datasource stops using a global pool stream. - Worker future drain guard (
drain_futures,future_drain_guard) in the Parquet, CSV and compression paths. A failing worker leaves no future unjoined. - Remote Parquet byte ranges are coalesced across gaps up to
LIBCUDF_PARQUET_REMOTE_COALESCE_GAP_BYTES(64 KiB by default) to reduce the number of remote reads.
Bug fixes:
- Parquet predicate pushdown: a bare boolean column or literal used as the reader filter no longer crashes, the stats survivor count is reported only when the stats stage ran, the decimal literal type check honors scale, and decimal fixed-length dictionary values are decoded big-endian.
- cuco exception safety, applied as a build-time patch: temporary storage is neither leaked nor double-freed when an allocation throws.
- A GCC 14.2 internal compiler error in
make_datasourcesis avoided by naming the lambda parameter type.
Build:
CUDF_RMM_BUILD_SHAREDbuilds and installs RMM as a shared library and installs nvtx3 and rapids_logger; cuDF, cuGraph, cuVS and cuML then bind onelibrmm.soin a process.
cuGraph
The pinned fork is upstream v26.08.00 plus the changes below on branch
algeon-26.08. Upstream v26.10.00 supersedes none of them; every change
cherry-picks onto 26.10 without conflicts, and only the fork's BFS test needs
rework for the RMM 26.10 device_scalar constructor.
Features:
- Predicate-aware single-GPU BFS,
cugraph_bfs_with_predicatesandbfs_predicate_result_t, with vertex include and exclude lists, edge-ID filters lowered on the device, and target early exit. Backs SQLcugraph_bfs. - Error contract for the C API: typed allocation source
(
cugraph_error_allocation_source), query-domain attribution of allocation failures (cugraph_error_failure_source,cugraph_error_domain_id,cugraph_error_requested_bytesand related accessors), exception-safe result construction, and precondition or out-of-range vertex failures reported asCUGRAPH_INVALID_INPUTwith a reason. The RustErrorKindneeds no message-text parsing. - Effective device memory provider,
cugraph::detail::effective_device_memory. Internal temporary-buffer sizing reads the query budget supplied by the cuDF memory-resource owner instead oftotalGlobalMem. - Non-convergence reporting for eigenvector, Katz and HITS centrality
(
*_allow_nonconvergence,cugraph_hits_result_converged), matching the existing PageRank option.
Bug fixes:
- SSSP on an unweighted graph uses unit weights instead of dereferencing a null weight property.
- Cosine similarity normalizes over full neighborhoods and guards a zero denominator.
- Multisource betweenness stays exact under source batching and accumulates deterministically.
- Leiden returns only connected communities and the modularity of the returned partition.
- BFS
depth_limitcounts hops; oversized limits are clamped instead of wrapping. cugraph_k_corereads the caller'sdegree_type.- Strongly connected components rejects symmetric graphs as invalid input.
- Weighted graph construction uses less peak device memory.
Build:
build.shno longer passes an empty argument tocmake --build.- CMake discovers the cuDF
cudf_rust/error_boundary.hppheader from the RMM prefix and registers the fork's contract tests.
cuVS
The pinned fork is upstream v26.08.01 plus the commits below on branch
algeon-26.08. Upstream v26.10.00 contains none of them. All five carry
forward; the stream pool getters and the Lanczos patch need rework against the
26.10 RAFT headers.
Features (C API):
- Batched
select_kwith min or max selection,cuvsSelectKBatched. SQL top-k needs both directions; upstreamcuvsSelectKselects smallest only. - Stream pool accessors:
cuvsResourcesSetStreamPool,cuvsResourcesGetStreamPoolSizeandcuvsResourcesGetStreamPoolStream.CuvsResourcesattaches each pool stream to the query's stream reservation; RAFT allocations on pool streams are then charged to the query cap. Upstreammainafter 26.10 adds the setter only; the fork keeps the two getters from 26.12 on. - Typed out-of-memory errors,
cuvsGetLastErrorKindandcuvsErrorKind_t. Device OOM maps toErrorKind::OutOfMemorywithout parsing message text.
Bug fixes:
- L2 expanded distance: the self-pair clamp is bounded by
k * eps * norms. The upstream clamp zeroed distances up to 1e-3 between distinct rows with equal norms and misranked near-unit-norm embeddings in brute-force kNN, pairwise distance and fused L2 kNN. - RAFT Lanczos restart at an invariant-subspace breakdown, carried as
cpp/cmake/patches/raft-lanczos-invariant-subspace.diffand applied byget_raft.cmakeat configure time. Before the patch, spectral clustering through cuGraph returned arbitrary partitions or failed to converge on graphs with few distinct eigenvalues.