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._experimentalremoved fromcuda-cccl(#10104)The experimental cooperative-primitives module (
cuda.coop, includingcuda.coop._experimental) has been removed fromcuda-ccclwheels entirely — implementation, tests, benchmarks, examples, docs, and CI jobs. It depended on the classicnumba-cudaJIT path, which is not compatible with free-threaded Python, and removing it clears the way for publishing free-threadedcuda.computewheels. A significantly improvedcuda.coopis in development, targeted for a future release. This does not affectcuda.compute,cuda.cccl, or any C++ cooperative APIs (CUDA Experimental, CUB). -
cuda.compute's JIT backend migrated fromnumba-cudatonumba-cuda-mlir(#9421)User-operator and
gpu_structcompilation now goes throughnumba-cuda-mlir, the MLIR-based successor tonumba-cuda. This is an internal backend swap with no change tocuda.compute's public API or performance (compile-time or runtime). Installingcuda-cccl[cu12]/[cu13]now pulls innumba-cuda-mlirinstead ofnumba-cuda.
Features
-
bfloat16support incuda.compute(#10933)Algorithms in
cuda.computenow acceptbfloat16arrays (_nv_bfloat16in CUDA C++). NumPy has no nativebfloat16dtype, so this relies on theml_dtypespackage, which is not a required dependency — install it yourself if you want to usebfloat16. Verified compatible with CuPy arrays and PyTorch tensors. Python callables cannot be JIT-compiled forbfloat16(Numba has no support), so operators must be either well-knownOpKindoperations 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.computeis now thread-safe and can run with the GIL disabled. -
reduce_intoacceptsh_init=None(#10953)reduce_intono longer requires an explicit identity/init value — passh_init=Noneto reduce using the first element as the seed, mirroringcub::DeviceReduce's no-init overload. (Not supported together withDeterminism.NOT_GUARANTEED.)cc.reduce_into(d_in=d_in, d_out=d_out, op=cc.OpKind.MAX, h_init=None)
Bug Fixes
- Fixed
TransformIteratorignoring stateful-op state (#11213) —TransformIteratorpreviously composed its state bytes from only the underlying iterator's state, dropping the state of a statefulop. 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.computeHostJIT builds (#10628); split the Clang/LLD HostJIT library out separately (#9583); serialized HostJIT builds and improved related tests (#9998). - Fixed mypy
cache_dirhandling and re-enabled mypy on pre-commit.ci (#10876); applied mypy fixes to benchmark infra scripts (#11099). pre-commit.ciautoupdate (#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.