CCCL Python Libraries (v1.3.0)
Previous release: v1.2.1.
These are the release notes for the cuda-cccl Python package version 1.3.0. This is a maintenance release with no new public Python APIs. The main changes are a wider numba-cuda-mlir version pin, correctness fixes for gpu_struct and stateful-operator caching, a Windows/CTK 12.4 link error fix, and reduced per-call overhead in cuda.compute.
Installation
Please refer to the install instructions here.
Packaging and dependencies
-
numba-cuda-mlirpin widened to allow 0.6.0 (#12226)The
cu12,cu13,sysctk12, andsysctk13extras now requirenumba-cuda-mlir>=0.5.2,!=0.5.3,<0.7(previously<0.6). The fullcuda.computetest suite was validated againstnumba-cuda-mlir==0.6.0before widening the bound.
Bug fixes
-
gpu_structno longer treats NumPy field titles as separate struct members (#11578)gpu_structnow builds its field mapping fromdtype.namesinstead of iterating every entry indtype.fields, so a structured NumPy dtype with field titles (aliases) is interpreted correctly instead of appearing to have extra fields. -
Stateful operators no longer recompile when only a captured array's length changes (#11592)
A closure-captured device array's length was previously baked into the generated LLVM IR as a constant, so the build cache had to key on
(dtype, shape)and any length-only change forced a full recompile. The length is now packed alongside the pointer in the existing state buffer and loaded at call time, so the build cache for closure-captured device arrays depends on dtype only. -
Fixed a Windows + CTK 12.4 NVVM link error (
__half/__nv_bfloat16multiply defined) (#11928) -
_make_merge_sort's cache key now matches the single-call API (#12164)The prepared (
make_*) and one-shot (*_into) merge-sort entry points previously produced different build results (NoopBuildResultvs.DeviceMergeSortBuildResult) for equivalent calls because_make_merge_sortomitted the explicitd_in_values=None/d_out_values=Nonethe single-call API passes. It now passes them explicitly so both paths share a cache key.
Performance
-
Less per-call overhead in
cuda.computereduce/scan (#11895)reduceandscanbuilt a freshnp.ndarray | GpuStructunion object on every call because the runtime-evaluated form ofcast(...)was used instead of a quoted (no-op) annotation. Quoting the type removes that per-call allocation; host overhead on representative benchmarks dropped from 4.32→3.70 µs (reduce) and 3.06→2.55 µs (exclusive scan).