Files
cutlass/test
Johnson 05fd39dca2 [CuTeDSL] Add SM103 grouped block-scaled GEMM kernel and tests (#3124)
* Add SM103 grouped block-scaled GEMM kernel

Implements sm103_grouped_blockscaled_gemm.py combining SM103 kernel
internals (7-warp layout, MXF4/NVF4 ops, K=768, dedicated TMA SF warp)
with SM100 grouped scheduling (StaticPersistentGroupTileScheduler,
per-group tensormap updates via SMEM, 5 tensormaps).

* [CuTeDSL] Port SM103 grouped block-scaled GEMM to v4.5 + fix scale correctness

Rebases the SM103 grouped block-scaled GEMM onto the current tree, which
reorganized the CuTeDSL examples (#3202) and changed the TMEM-storage API.

Port:
- Move kernel to cute/blackwell/kernel/blockscaled_grouped_gemm/
  sm103_grouped_blockscaled_gemm.py (beside the SM100 grouped kernel);
  update the test import to the new package path.
- Adopt the v4.5 TMEM storage API: struct field tmem_dealloc_mbar_ptr ->
  tmem_dealloc_mbar; pointers via storage.<field>.ptr; local
  tmem_holding_buf -> tmem_holding_buf_ptr.
- Rename 3xFP4 -> FP4 Ultra terminology to match the v4.5 dense kernel.

Correctness fix at scale:
The AB/SF TMA producer wait tokens (try_acquire peek) were initialized
once before the persistent tile loop. Each tile's final stage skips the
next try_acquire(), so a stale token was carried into the next work tile,
letting acquire_and_advance(True) overwrite a pipeline buffer stage before
MMA released it -> wrong results once total output tiles exceeded ~1-2K
(launch failure at the largest sizes), while small-shape tests passed.
Refresh ab_producer / sf_producer at each work-tile boundary inside the
loop, matching the SM103 dense and SM100 grouped kernels. Add a large
persistent regression test (8 x 2048^3).

Verified on NVIDIA GB300 (sm_103, CUTLASS DSL 4.5.2): pytest
test/examples/CuTeDSL/sm_103/ --runtime-sm 103 => 23 passed;
compute-sanitizer memcheck clean on 8 x 4096^3.
2026-07-13 22:15:42 -04:00
..
2026-07-06 22:05:33 -04:00
2026-01-08 15:02:56 -05:00