|
1 | | -<!--- SPDX-FileCopyrightText: Copyright (c) <2025> NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> |
| 1 | +<!--- SPDX-FileCopyrightText: Copyright (c) <2026> NVIDIA CORPORATION & AFFILIATES. All rights reserved. --> |
2 | 2 | <!--- SPDX-License-Identifier: Apache-2.0 --> |
3 | 3 |
|
4 | 4 | Release Notes |
5 | 5 | ============= |
6 | 6 |
|
| 7 | +{#release-1-5-0} |
| 8 | +1.5.0 (2026-07-08) |
| 9 | +------------------ |
| 10 | + |
| 11 | +This release adds finer control over kernel specialization by making selected |
| 12 | +array shape dimensions compile-time constants and declaring scalar divisibility |
| 13 | +assumptions. Autotuning is faster and can isolate hanging kernels. |
| 14 | +The supported Python subset now includes tuple comprehensions, |
| 15 | +tuple-valued kernel arguments, enums, dictionaries, and variadic keyword |
| 16 | +parameters. |
| 17 | + |
| 18 | +### Features |
| 19 | +- Add {py:func}`ct.assume_divisible_by(x, divisor) <cuda.tile.assume_divisible_by>`, |
| 20 | + a compiler hint that declares an integer scalar to be divisible by a constant. |
| 21 | + The compiler propagates this fact through arithmetic, which can prove the |
| 22 | + alignment of derived indices and pointer offsets and enable wider memory |
| 23 | + operations. |
| 24 | +- Add support for specializing array shape dimensions to their launch-time |
| 25 | + values, making them compile-time constants inside the kernel. Use |
| 26 | + {py:class}`ct.ArrayAnnotation <cuda.tile.ArrayAnnotation>` as `Annotated` |
| 27 | + metadata and list the dimensions to specialize, for example, |
| 28 | + `Annotated[ct.Array, ct.ArrayAnnotation(static_shape_dims=(0, -1))]`. |
| 29 | +- Add the `single_run_timeout_sec` argument to |
| 30 | + {py:func}`ct.tune.exhaustive_search() |
| 31 | + <cuda.tile.tune.exhaustive_search>` to prevent a hanging kernel from stalling |
| 32 | + the entire search. |
| 33 | +- Add support for passing Python tuples as kernel arguments. Elements may be |
| 34 | + arrays, scalars, lists, or nested tuples. Annotations may apply to the entire |
| 35 | + tuple or individual elements: `ct.Constant[tuple[int, float]]` makes the |
| 36 | + whole tuple compile-time constant, while `tuple[ct.Constant[int], float]` |
| 37 | + makes only the first element constant. |
| 38 | + |
| 39 | +### Python features |
| 40 | +- Add support for tuple comprehensions. |
| 41 | +- Add support for the `in` and `not in` operators on tuples. |
| 42 | +- Add limited support for dictionaries, variadic keyword parameters in |
| 43 | + user-defined functions (for example, `def foo(**kwargs)`), and dictionary |
| 44 | + unpacking (for example, `foo(x, **y)`). |
| 45 | +- Add comparison and constructor support for Python `enum.Enum` inside kernels. |
| 46 | + Enum members can be compared with `==` and `!=` and constructed from a |
| 47 | + constant value, such as `Color(0)`. |
| 48 | +- Add support for printing dataclass instances. |
| 49 | +- Allow frozen dataclass instances to be used as globals in device code. |
| 50 | + |
| 51 | +### Bug Fixes |
| 52 | +- Fix a bug in automatic propagation of divisibility when an assumed variable |
| 53 | + created in a block is used outside that block. |
| 54 | +- Fix a bug where strictly typed numeric constants |
| 55 | + (for example, `ct.uint32(-3)`, `ct.int8(300)`, and `ct.float16(0.2)`) were not |
| 56 | + converted according to their dtype. Out-of-range integers are now wrapped to |
| 57 | + the dtype's range, and floating-point values are rounded or clamped according |
| 58 | + to the dtype's precision and range. |
| 59 | +- Honor wrappers installed on user-defined functions, including wrappers added |
| 60 | + by decorators that use `functools.wraps()`. |
| 61 | +- Reject repeated axes in the `order` arguments of `load()`, `store()`, and |
| 62 | + `num_tiles()`. |
| 63 | + |
| 64 | +### Enhancements |
| 65 | +- Extend {py:func}`ct.arange() <cuda.tile.arange>` with optional `start` and |
| 66 | + `step` arguments: `ct.arange(size, start=0, step=1, dtype=...)`. `size` must |
| 67 | + be a constant integer, while `start` and `step` may be dynamic values. For |
| 68 | + example, `ct.arange(8, start=7, step=-1, dtype=ct.int32)` |
| 69 | + creates a reversed range. |
| 70 | +- Improve exhaustive search performance by stopping early for slow |
| 71 | + configurations. |
| 72 | + |
| 73 | +### ABI Changes |
| 74 | +- Introduce {py:class}`calling convention v2 |
| 75 | + <cuda.tile.compilation.CallingConvention>` for kernels with static shape |
| 76 | + annotations or tuple arguments. |
| 77 | + |
7 | 78 | {#release-1-4-0} |
8 | 79 | 1.4.0 (2026-05-26) |
9 | 80 | ------------------ |
|
0 commit comments