[BUG]: cuda.lang Array.slice rejects valid integer bounds as non-tile scalars
まだ誰も着手していません。
評価
調査の方向性
src/cuda/tile/_ir/ops.py の共有 slice 実装とその require_signed_integer_0d_tile_type バリデーターから始め、次に experimental/cuda-lang/src/cuda/lang/_ir/type.py と _ir/ops.py にある CUDA Lang の型およびポインターのマッピングを比較してください。まず、提供されている compile_simt 再現コードを実行してください。符号付きリテラルと動的な CUDA Lang の境界値がコンパイルされ、文書化されているゼロコピー・ビューの動作を生成すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Version
- cuTile Python source commit:
a9ae75fc9a5fb4e4e07ea71da7407dc4c23330ab cuda-tile:9.9.99cuda-lang:9.9.99- Installation method: source
- CUDA Toolkit: not required for this reproducer; the failure occurs during front-end HIR-to-IR type checking before CUDA code generation. The reproducing environment does not have
nvccinstalled. - Python: 3.10.12
Describe the bug
cuda.lang.Array.slice() fails type checking for valid signed integer bounds, including integer literals.
The inherited API contract says start and stop may be integer scalars or 0D tiles. However, the shared implementation requires CUDA Tile's concrete TileTy, while CUDA Lang represents rank-zero values as ScalarTy.
This prevents natural zero-copy view construction, including compile-time-expanded code such as splitting a one-dimensional array into four equal views:
parts = tuple(
x.slice(0, i * chunk, (i + 1) * chunk)
for i in cl.static_iter(range(4))
)
Minimum reproducible example
import cuda.lang as cl
from cuda.lang.compilation import KernelSignature
def kernel():
a = cl.shared_array((8,), cl.int32)
a.slice(axis=0, start=1, stop=4)
cl.compile_simt(
kernel,
[KernelSignature(())],
gpu_name="sm_80",
arch="compute_80",
)
Expected behavior
Compilation succeeds. The result is a zero-copy view of a[1:4], with shape (3,), sharing the original storage.
This follows the documented Array.slice contract: start and stop may be integer scalars or 0D tiles. Dynamic bounds such as values derived from x.shape[0] should work as well.
Actual behavior
Compilation raises:
cuda.tile._exception.TypeCheckingError:
Invalid argument "start" of slice(): Expected a scalar or a 0D tile, but given value has type int32
"/tmp/cuda_lang_array_slice_repro.py", line 3, col 5-36, in kernel:
a.slice(axis=0, start=1, stop=4)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The message is contradictory: the value is a valid CUDA Lang int32 scalar, but it is rejected.
Likely cause
cuda.lang.Array subclasses cuda.tile.Array, so it inherits slice:
experimental/cuda-lang/src/cuda/lang/_stub/core_api.py:10-15,32src/cuda/tile/_stub.py:177-190
CUDA Lang installs CUDA Tile's shared array implementation registry:
experimental/cuda-lang/src/cuda/lang/_ir/ops.py:40-47,176-181
The shared slice implementation validates both bounds with require_signed_integer_0d_tile_type:
src/cuda/tile/_ir/ops.py:782-787
That validator requires the concrete type to be TileTy, while CUDA Lang maps rank-zero values to ScalarTy:
src/cuda/tile/_ir/op_impl.py:553-559,598-602experimental/cuda-lang/src/cuda/lang/_ir/type.py:43-57,284-295
Consequently, literal and runtime CUDA Lang integer scalars fail before slicing is lowered.
There may be a second representation mismatch after correcting validation: the shared implementation calls CUDA Tile's pointer_offset, while CUDA Lang arrays use PointerTy and their own pointer arithmetic implementation. A complete fix may need a CUDA Lang-specific slice implementation, or a representation-neutral shared implementation.
Workaround
For scalar access, rebase the index manually:
value = a[start + i]
For a contiguous, compile-time-sized view, reconstruct an array from an offset pointer:
ptr = a.get_element_pointer(start)
sub = cl.reinterpret_pointer_as_array(
ptr,
dtype=cl.int32,
shape=(3,),
)
This is not equivalent to the documented slice API: reconstructed shapes must currently be compile-time constants, custom strides are not implemented, and bounds are not checked.
Contributing guidelines
- I agree to follow cuTile Python's contributing guidelines.
- I searched open and closed issues for
Array.slice, CUDA Lang slicing, and the reported error text and found no duplicate.
- 主要言語
- Python
- スター
- 2.2k
- フォーク
- 155
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NVIDIA/cutile-python のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
NVIDIA/cutile-python#105 · コメント 2 件 ·
-
bug status: needs-triage
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
NVIDIA/cutile-python#102 ·
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
NVIDIA/cutile-python#97 · コメント 1 件 ·
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
NVIDIA/cutile-python#96 · コメント 1 件 ·
-
bug
NVIDIA/cutile-python#95 · コメント 1 件 · 担当者 1 名 ·
NVIDIA/cutile-python の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
zostera/django-bootstrap4#894 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
use-agent-os/agent-os#3276 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
NousResearch/hermes-agent#117848 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
zilliztech/memsearch#759 ·