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

3 hours ago

CCCL Python Libraries (v1.2.0)

Previous release: v1.1.1.

These are the release notes for the cuda-cccl Python package version 1.2.0.

The headline changes in this release are: bfloat16 support in cuda.compute and free-threaded (3.14t) wheel support for the cuda-compute-minimal extra. Under the hood, cuda.compute's JIT backend has migrated from numba-cuda to numba-cuda-mlir, with no public API changes.

Installation

Please refer to the install instructions here.

Packaging / breaking changes

  • cuda.coop._experimental removed from cuda-cccl (#10104)

    The experimental cooperative-primitives module (cuda.coop, including cuda.coop._experimental) has been removed from cuda-cccl wheels entirely — implementation, tests, benchmarks, examples, docs, and CI jobs. It depended on the classic numba-cuda JIT path, which is not compatible with free-threaded Python, and removing it clears the way for publishing free-threaded cuda.compute wheels. A significantly improved cuda.coop is in development, targeted for a future release. This does not affect cuda.compute, cuda.cccl, or any C++ cooperative APIs (CUDA Experimental, CUB).

  • cuda.compute's JIT backend migrated from numba-cuda to numba-cuda-mlir (#9421)

    User-operator and gpu_struct compilation now goes through numba-cuda-mlir, the MLIR-based successor to numba-cuda. This is an internal backend swap with no change to cuda.compute's public API or performance (compile-time or runtime). Installing cuda-cccl[cu12]/[cu13] now pulls in numba-cuda-mlir instead of numba-cuda.

Features

  • bfloat16 support in cuda.compute (#10933)

    Algorithms in cuda.compute now accept bfloat16 arrays (_nv_bfloat16 in CUDA C++). NumPy has no native bfloat16 dtype, so this relies on the ml_dtypes package, which is not a required dependency — install it yourself if you want to use bfloat16. Verified compatible with CuPy arrays and PyTorch tensors. Python callables cannot be JIT-compiled for bfloat16 (Numba has no support), so operators must be either well-known OpKind operations or pre-compiled device code.

    import numpy as np
    import ml_dtypes
    import cuda.compute as cc
    
    BFLOAT16 = np.dtype(ml_dtypes.bfloat16)
    h_in = np.array([1.0, 2.0, 3.0], dtype=BFLOAT16)
    # reduce, scan, sort, transform, histogram, etc. now accept bfloat16 arrays
    cc.reduce_into(d_in=h_in, d_out=..., op=cc.OpKind.PLUS, h_init=np.array([0], dtype=BFLOAT16))
  • Free-threaded (Python 3.14t) wheel support (#9475, #11311, #10803, #10789, #11311)

    cuda.compute is now thread-safe and can run with the GIL disabled.

  • reduce_into accepts h_init=None (#10953)

    reduce_into no longer requires an explicit identity/init value — pass h_init=None to reduce using the first element as the seed, mirroring cub::DeviceReduce's no-init overload. (Not supported together with Determinism.NOT_GUARANTEED.)

    cc.reduce_into(d_in=d_in, d_out=d_out, op=cc.OpKind.MAX, h_init=None)

Bug Fixes

  • Fixed TransformIterator ignoring stateful-op state (#11213) — TransformIterator previously composed its state bytes from only the underlying iterator's state, dropping the state of a stateful op. It now combines both correctly.

Internal / CI

  • Simplified the Python CMake configuration (#9883).
  • Replaced device-array usage outside examples with a wrapper independent of CuPy/numba-cuda (#9653).
  • Added CI coverage: thread-sanitizer job for c.parallel (#9986), pytest-run-parallel (#9886), benchmark smoke tests (#9885), tests against the system CTK instead of a pip-installed one (#10500), running Python test payloads in a minimal sibling container (#11018).
  • Enabled precompiled headers for cuda.compute HostJIT builds (#10628); split the Clang/LLD HostJIT library out separately (#9583); serialized HostJIT builds and improved related tests (#9998).
  • Fixed mypy cache_dir handling and re-enabled mypy on pre-commit.ci (#10876); applied mypy fixes to benchmark infra scripts (#11099).
  • pre-commit.ci autoupdate (#10729); fixed broken links to the Python docs on github.io (#10585).
  • Fixed an overflow bug in the segmented-reduce test suite (#11327).

Notes

  • v1.2.0 includes all commits from v1.1.1 plus the above; there were no releases between v1.1.1 and v1.2.0.

Don't miss a new cccl release

NewReleases is sending notifications on new releases.