Umbrella tracker for the batched-decode headroom left after #201 / PR #202. Work items are split into child issues:
Context
#201 / PR #202 landed the opt-in decode MMQ (SHARPI_BATCH_DECODE_MMQ=1): N=8 aggregate 246 -> 317 t/s. The N=8 step is now ~25.2 ms against a ~9.7 ms whole-step weight-streaming floor. Per-shape (nsys, 40-step capture, Qwen3-8B Q4_K_M @ 4070 Ti, N=8):
| shape |
ms/step |
vs floor |
path |
| q6k ffn_down [4096x12288] |
4.77 |
~3.2x |
WS-sw (bit-exact) -> #204 |
| q6k lm-head [151936x4096] |
2.76 |
~2.7x |
WS-sw -> #204 |
| q4k gate/up [12288x4096] |
6.89 |
1.7x |
MMQ n16 -> #205 (cp.async) |
| q4k Q/O + q4k-half ffn_down [4096x*] |
4.47 |
~2.7x |
MMQ n16, grid 64 blocks -> #205 (split-K) |
| q4k K/V [1024x4096] |
0.91 |
~6.6x |
WS (rows<2048 fallback) -> #205 (low prio) |
| q6k attn_v [1024x4096] |
0.77 |
~16x |
WS-sw -> #205 (low prio) |
Combined estimate if #204 + #205 land near floor: ~450-500 t/s aggregate at N=8.
Measured dead ends recorded in #201 / PR #202 (do not retry without new evidence): token-warp WS geometry; SoA-Q8_1-act WS reads (register-bound); sub-block-sized MMQ K-step (latency-serial).
🤖 Generated with Claude Code
Umbrella tracker for the batched-decode headroom left after #201 / PR #202. Work items are split into child issues:
SHARPI_BATCH_DECODE_MMQdefault-on for batched serving (N=5-7 cells + quality soak)Context
#201 / PR #202 landed the opt-in decode MMQ (
SHARPI_BATCH_DECODE_MMQ=1): N=8 aggregate 246 -> 317 t/s. The N=8 step is now ~25.2 ms against a ~9.7 ms whole-step weight-streaming floor. Per-shape (nsys, 40-step capture, Qwen3-8B Q4_K_M @ 4070 Ti, N=8):Combined estimate if #204 + #205 land near floor: ~450-500 t/s aggregate at N=8.
Measured dead ends recorded in #201 / PR #202 (do not retry without new evidence): token-warp WS geometry; SoA-Q8_1-act WS reads (register-bound); sub-block-sized MMQ K-step (latency-serial).
🤖 Generated with Claude Code