| CUDA Graph decode (conditional graph + PDL) | +95–376% decode | CudaGraphConditionalRunner; max_steps sized per request. Biggest gain on small-GEMM models. Requires CUTLASS NVFP4 fast-path active first. |
| CUTLASS sm_120a NVFP4 weight cache | enables graph win | StorageTier::CUTLASS_NVFP4 (src/core/storage_tier.h); plain StorageTier::NVFP4 = slowpath. |
mma.sync.kind::mxf4nvf4.block_scale | 2.6× raw MMA over f8f6f4 | k=64 vs k=32; HW applies UE4M3 scale inside MMA. Needs compute_120a (see Compile flags). |
FA2 register-resident prefill (attention.fmha_fa2, default on) | +13–19% long-ctx NVFP4 prefill | S/P/O in registers, 1 barrier/KV tile; hd=128 and hd=256 both served (see next row); other head dims decline safely. |
FA2 hd=256 instance (attention.fa2_hd256, default on) | kernel 4.3× vs WMMA; pp8192 +24.8%; +26% pp4096 on uniform hybrids (single-shot FA2) | PRs #930/#932: <Bq=64, TWOSLOT, pv-f16>, 228 reg/0 spills. Dropped the FP8-KV forcing for hd=256. Split-D warp-pairing (stage 2) is REFUTED — the kernel is ILP-saturated, not latency-limited; warp-count levers are dead (references/known-issues.md). S-matrix skip on all FA2-served configs saves −128…−381 MiB VRAM. |
| FP8-tile decode attention (+GQA batching) | +51% decode-attention kernel (PR #899); +14% GQA-batched (PR #900) | The wall was the latency chain (dependent instruction sequence), not occupancy. Q8-perf-gate blind spot: it does NOT see the FP8-KV path; PagedOracle doesn't test split-K. |
| Graph-captured spec-decode verify | Coder suffix-echo +65% (PR #856); 27B echo +156% w/ hybrid spec (PR #852) | Verify steps captured as conditional graph nodes; batched verify-LM-head (PR #854) prerequisite. GDN device-length state-commit (PR #933) extends capture to hd=256 hybrids. |
FP16-QK FA2 for short prefill (attention.fa2_fp16qk, default on) | +25–35% pp512 NVFP4 | QK^T in f16 mma — avoids the short-seq e4m3 quality cliff (#511/#512); declined configs fall back to cuBLAS. |
| FA2 smem row-stride padding | 1.54× FA2 kernel, +27% pp16384 | head_dim=128 stride aliased all 32 banks (PR #484). ("Post-fix LSU-bound" was later corrected — see next row.) |
| FA2 cp.async K/V double-buffer | −11.6% FA2 kernel long-ctx | prefetch tile j+1 while j computes |
FA2 f16-acc QK^T (attention.fa2_f16acc, opt-in) | +3–4% pp2048/4096, +0.37% PPL | PR #643. Profiling correction (#597): post-#609 FA2 is NOT LSU-bound — tensor pipe is busiest (52.8%), occupancy smem-capped at 16.7%, wait-latency-limited at 0.75 waves. Don't re-pursue Bq=64 / occupancy without smem surgery. |
| FA2 Bq=64/Bkv=32 variant in the grid-underfill band | kernel −6.7% pp512 / −2.9% pp4096 | PR #648: 2 CTAs/SM where the grid underfills. |
| INT8-IMMA prefill GEMM family (default on) | 30B-MoE GGUF prefill gap 2.4×→1.05× and ABOVE llama.cpp; gemma-4 +111%; Q8 pp512 ≈12.1k | PRs #612–#617: fused dequant on int8 tensor cores. Q8_0 (gemm.q8_imma_enabled), Q4_K raw-read, Q6_K half-MMA split, Q5_1 raw-read, N-tail support, gemm.moe_imma_prefill. Note gemm.q4k_imma_prefill default OFF for dense — dense-IMMA loses to cuBLAS; the win is MoE prefill. |
cuBLAS f16-accumulate prefill (gemm.cublas_fp16_acc=auto) | +17% Q8 pp512 | PR #611 default-on via per-arch auto (denied: Gemma-3/4, gpt-oss — PPL). |
| Warp-per-row FP16 RMSNorm for batch prefill | shipped | PR #620 (#602). |
NVFP4 lm_head (gemm.nvfp4_lm_head, …_gdn default ON) | +8–16% dense, +11.4% Qwen3.6 decode | BF16 lm_head quantized to NVFP4 at load; costs +2.2% PPL (owner-accepted). |
FP8 SSM sidecar (gemm.fp8_ssm_proj, default ON) | +19% native (#949), +21% GGUF-Q8_0 (#962) Qwen3.6-35B decode | per-row-scale FP8 copy for GDN in/out projections, decode-only; nvfp4_attn_proj +3.8% Nemotron. NVFP4 on GDN in/out projections REGRESSES −9 to −20% — dead end (the old nvfp4_ssm_proj opt-in was removed 2026-07-11). |
| NVFP4 prmt register LUT | +4.7–16% | prmt.b32 replaces SMEM LUT |
| Inline Q8_1 in O-projection | +5–10% | Eliminates 1 launch + 1 DRAM round-trip |
__ldcs on KV cache reads | +2–4% decode | Bypass L1, evict-first L2. KV only, NOT weights. |
| 8-warp Blackwell attention | better SM util | 256 threads vs Hopper's 128 |