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.

from kernels import get_kernel
import torch

int4 = get_kernel("flashrt/int4-blackwell", version=2)
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.

Downloads last month
-
kernel
cuda
blackwell
int4
experimental
Supported hardwares new
CUDA
12.110.0a10.3a11.0a12.0a
GPU
B300
288GB
NVIDIA SXM
B200
192GB
DGX Spark
GB10
128GB
GPU
RTX PRO 6000 WS
96GB
GPU
RTX PRO 6000 Max-Q
96GB
GPU
RTX PRO 5000
48GB
GPU
RTX PRO 4500 WS
32GB
GPU
RTX PRO 4000
24GB
GPU
RTX PRO 4000 SFF
24GB
GPU
RTX PRO 2000
16GB
RTX
RTX 5090
32GB
RTX
RTX 5090 D
32GB
RTX
RTX 5090 Mobile
24GB
RTX
RTX 5080
16GB
RTX
RTX 5080 Mobile
16GB
RTX
RTX 5070
12GB
RTX
RTX 5070 Mobile
8GB
RTX
RTX 5070 Ti
16GB
RTX
RTX 5070 Ti Mobile
12GB
RTX
RTX 5060 Ti
16GB
RTX
RTX 5060
8GB
RTX
RTX 5060 Mobile
8GB
RTX
RTX 5050
8GB
RTX
RTX 5050 Mobile
8GB
OS
linux
Arch
x86_64aarch64