# Validation Local source validation covers NVIDIA GeForce RTX 5090 (SM120) and NVIDIA Jetson AGX Thor (SM110). ```bash python fp4-gemm/tests/test_fp4_gemm.py \ --backend source \ --mode full \ --json-out internal-tests/fp4-gemm-source-full.json ``` Result: - SM120 full gate: `25/25` checks passed, including all fused epilogues and the aggregate BF16 direct-producer layout gate. - SM110 model-shape gate: `24/24` checks passed across PI0.5, GROOT, Cosmos Edge, and LingBot VLA projection shapes. - Variants `0`, `1`, and `2` were checked. - SM110 additionally checks production auto-dispatch (`variant=-1`). - `nvfp4_gemm_bf16` is the canonical public API. - Correctness reference dequantizes the same FP4/SFA and FP4/SFB inputs used by the kernel, then computes PyTorch GEMM on those dequantized values. - The direct BF16 producer is byte-exact against the established BF16-to-FP16 plus FP16-producer contract for packed E2M1, mapped SFA/SFB bytes, and dequantized output. Covered activation shapes are `(1,5120)`, `(1,6144)`, `(1,17408)`, `(16,2048)`, and `(128,512)`; SFB coverage uses `(64,1024)`. | Shape | Variant | Max abs | Mean abs | P99 abs | Cosine | | --- | ---: | ---: | ---: | ---: | ---: | | M=16, N=128, K=128 | 0 | 0.0 | 0.0 | 0.0 | 1.0 | | M=16, N=128, K=128 | 1 | 0.0 | 0.0 | 0.0 | 1.0 | | M=16, N=128, K=128 | 2 | 0.0 | 0.0 | 0.0 | 1.0 | | M=32, N=256, K=256 | 0 | 0.0 | 0.0 | 0.0 | 1.0 | | M=32, N=256, K=256 | 1 | 0.0 | 0.0 | 0.0 | 1.0 | | M=32, N=256, K=256 | 2 | 0.0 | 0.0 | 0.0 | 1.0 | | M=64, N=512, K=512 | 0 | 0.0 | 0.0 | 0.0 | 1.0 | | M=64, N=512, K=512 | 1 | 0.0 | 0.0 | 0.0 | 1.0 | | M=64, N=512, K=512 | 2 | 0.0 | 0.0 | 0.0 | 1.0 | ## Installed Artifact Validation The local kernel-builder release candidate produced and passed ABI, manylinux, layout, and builder `get_kernel` checks for: - `torch211-cxx11-cu128-x86_64-linux` - `torch211-cxx11-cu130-x86_64-linux` - `torch212-cxx11-cu130-x86_64-linux` - `torch212-cxx11-cu132-x86_64-linux` The cu128/Torch 2.11 artifact passed `10/10` runtime gates: all nine shape/variant correctness rows were exact against the staged reference, and the public `nvfp4_gemm_bf16` wrapper was exact under `torch.compile(fullgraph=True)`. The SM110 release flake pins kernel-builder commit `d720fa90fb9cd92d1bc60a9dc5c55bef2aafabb8`, which includes CUTLASS 4.5 support and the corrected CUTLASS 4.5.2 fixed-output hash. HF Jobs, the SM110 aarch64 artifact build, and cold Hub loads must pass before the rebuilt Hub release is considered complete. ## BF16 Direct Producer RTX 5090, 100 warmup iterations and 1000 measured iterations: | Shape | BF16 direct | BF16 cast + FP16 producer | Speedup | Native BF16 producer | Hub/native | | --- | ---: | ---: | ---: | ---: | ---: | | M=1, K=5120 | 4.098 us | 6.404 us | 1.563x | 6.150 us | 0.666x | | M=1, K=6144 | 4.098 us | 6.403 us | 1.562x | 8.190 us | 0.500x | | M=1, K=17408 | 4.096 us | 6.413 us | 1.566x | 18.442 us | 0.222x | The native BF16 producer is included as a latency comparison but uses a different FlashRT quantization strategy. Correctness acceptance is therefore against this package's established FP16 producer contract, where all tested packed and mapped scale bytes are exact. ## Thor Native Parity The Tensor wrapper was compared against the same native FlashRT launchers on Thor with 20 warmup and 100 measured iterations. For production auto-dispatch across the six model shapes, wrapper/native latency ratio had median `1.019` and maximum `1.086`. Correctness was exact (`max_abs=mean_abs=p99_abs=0`).