github NVIDIA/cccl python-1.3.0
CCCL Python Libraries (1.3.0)

3 hours ago

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-mlir pin widened to allow 0.6.0 (#12226)

    The cu12, cu13, sysctk12, and sysctk13 extras now require numba-cuda-mlir>=0.5.2,!=0.5.3,<0.7 (previously <0.6). The full cuda.compute test suite was validated against numba-cuda-mlir==0.6.0 before widening the bound.

Bug fixes

  • gpu_struct no longer treats NumPy field titles as separate struct members (#11578)

    gpu_struct now builds its field mapping from dtype.names instead of iterating every entry in dtype.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_bfloat16 multiply 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 (NoopBuildResult vs. DeviceMergeSortBuildResult) for equivalent calls because _make_merge_sort omitted the explicit d_in_values=None/d_out_values=None the single-call API passes. It now passes them explicitly so both paths share a cache key.

Performance

  • Less per-call overhead in cuda.compute reduce/scan (#11895)

    reduce and scan built a fresh np.ndarray | GpuStruct union object on every call because the runtime-evaluated form of cast(...) 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).

Don't miss a new cccl release

NewReleases is sending notifications on new releases.