--- tags: - kernel - cuda - blackwell - int4 - experimental --- # FlashRT INT4 Blackwell Experimental native E0M3/INT4 tensor-core primitives for NVIDIA Blackwell GPUs. SM120/SM121 use `OMMA.SF.16864`; SM100/SM103/SM110 use the distinct `tcgen05` block-scaled tensor-core path. Both paths select the uniform signed INT4 codebook `0..7, -0, -1..-7`. ```python from kernels import get_kernel import torch int4 = get_kernel("flashrt/int4-blackwell", version=1) print(int4.codebook_probe("ab")) # tensor([ 0., 1., 2., 3., 4., 5., 6., 7., 0., -1., ..., -7.]) # Asynchronous register-resident MMA probe for CUDA-event benchmarking. scratch = torch.empty((680, 256), device="cuda", dtype=torch.float32) int4.mma_probe("ab", iterations=8192, blocks=680, launches=20, out=scratch) ``` Available functions: - `codebook_probe(mode="ab", device=None) -> Tensor[16]` - `mma_probe(mode="ab", iterations=8192, blocks=None, launches=1, device=None, out=None) -> Tensor` - `tcgen05_int4_gemm_bf16(a_packed, sfa_physical, b_packed, sfb_physical) -> Tensor` On SM120/SM121, modes are `e2m1`, `a` (INT4 A), `b` (INT4 B), and `ab` (INT4 A and B). The tcgen05 codebook canary currently exposes `ab`. ## Scope and support - Packaged targets: SM100a, SM103a, SM110a, SM120a, and SM121a. The SM12x paths use bundled architecture-specific cubins; tcgen05 is compiled into the extension for CUDA 13.0 variants. - Runtime-validated targets: SM120/SM120a and SM110/SM110a. SM121 carries the same generated instruction encoding and must pass the exact runtime canary before a device result is reported. SM100 and SM103 are build targets but remain runtime candidates until tested on those GPUs. - Extension variants: CUDA 12.8 through 13.0; the bundled native cubins were generated with CUDA 13.0 and therefore require a CUDA 13.0-capable driver. - The E0M3 selector bits are undocumented. SM12x uses reproducibly patched cubins. The tcgen05 backend uses a package-local CUTLASS descriptor override; it does not alter CUTLASS for any other package. - `mma_probe` is an SM12x instruction-throughput probe. The tcgen05 GEMM API is experimental, requires M/N/K multiples of 128, and accepts CUTLASS physical UE4M3 scale layouts with conservatively sized backing storage. It is not a drop-in replacement for `torch.mm`. On RTX 5090 (driver 580.159.03, CUDA 13.0.88), all 16 code points match the uniform `0..7, -0, -1..-7` codebook exactly, all 128 accumulators agree, and the INT4 x INT4 probe reaches 2026.8 TFLOPS versus 2026.6 TFLOPS for the same register-resident E2M1 x E2M1 probe. On NVIDIA Thor (SM110, CUDA 13.0.48), all 16 native tcgen05 E0M3 values match `0..7, -0, -1..-7` exactly. A constant 128 x 128 x 128 GEMM produces the exact expected BF16 tile for every code point. See `SYNC.md` for provenance and the exact binary-rewrite contract. ## Credit The SM120 `OMMA.SF` element-format bits were first documented publicly by the **Ling Team**, author **@im0qianqian** (`@千千`). FlashRT reproduces and productizes that finding and is extending its hardware validation. Read the [original article](https://zhuanlan.zhihu.com/p/2059376150565089368).