Hello, and thank you for the reviews on #99, #106 and the rest — the feedback shaped how we measure.
We have fourteen changes finished and waiting. Two of our PRs are open (#160, #167), which is the
cap, so we cannot open anything new. Both are in your court: every question on #160 was answered on
Sep 2 (including the T=1024 table you asked for, +5.99% end-to-end at the shipped default chunk),
and #167 has had no review yet.
Could you raise the cap for a day or two, or tell us the order you would prefer? We are happy to
open them one at a time and wait for each to land — we only want to stop sitting on finished work.
Everything below is measured on a single RTX 5090, end-to-end through ninfer-serve or
ninfer_bench unless the row says "operator". Each PR carries its own raw data, a bit-exactness
gate with a sabotage control, and a full ctest on both arms from one build directory.
Prefill — Qwen3.6-35B-A3B
| change |
effect |
| GDN input projection through an integer activation fold (W8G32) |
+3.0…3.5% |
output projections linear_add through the same fold |
+2.19…2.51% |
| attention input projection through the same fold |
+0.97…1.45% |
| routed gate/up: pipeline depth chosen by route, grid over work units |
−2.25% server time, all 23 length buckets |
Full flag split so a ragged token count stops taking the slow weight path |
recovers 14…32% of the ragged-length operator penalty |
The first three are one family and must land in that order — the second and third do not apply
without the first.
Decode — Qwen3.6-35B-A3B
| change |
effect |
| small-T expert selection: one CTA per token, and a 5-exchange merge network instead of 8 dependent warp rounds |
+1.598%, bit-exact |
| sigmoid gate folded into the causal-attention reduction epilogue |
+0.9…2.3% (and exactly zero on 27B) |
| SwiGLU activation plate held in half precision at small T |
+0.940% at mtp0; operation workspace halves, 74 240 → 37 376 B |
| deeper k-group staging where the schedule holds one CTA per SM |
+0.673%, bit-exact |
| two Q4 group quads in flight in the routed gate/up dot product |
+0.57%, bit-exact (−2.75% on the round's most expensive kernel) |
| linear-attention state pinned in L2 across the decode graph |
+0.778%, at the cost of −0.709% prefill; zero on 27B, where a guard disables it |
Rows2 window of routed down held at eleven tokens for the Q5 codec |
+1.5% at --mtp-draft-tokens 5, zero at any smaller draft window |
Host and 27B
| change |
model |
effect |
| NFC normalization skipped for pure-ASCII text |
any |
×62…71 on normalize_nfc, 4.9…14.8% of TTFT on a prefix-cache hit |
| flat BPE merge table instead of the hash map |
any |
−20…25% of Tokenizer::encode, −1.5 MiB live heap, output bit-exact |
guarded slow expf path removed from the fused NVFP4 SwiGLU epilogue |
27B NVFP4 |
epilogue is 162.8 µs of a 2842.6 µs kernel, 53.3 µs of it exact expf and exact division |
What we are not claiming
The decode figures are not additive: stacking everything measures +4.71…4.78% decode and
+7.81…7.90% prefill against master, less than the sum of the parts, and we say so in each body.
Where a change gives nothing on the second model, the body says that too — three of these are dead
on 27B by construction, and one of them ships with a guard so it costs nothing there.
Thanks either way, and no rush if the timing is bad.
Hello, and thank you for the reviews on #99, #106 and the rest — the feedback shaped how we measure.
We have fourteen changes finished and waiting. Two of our PRs are open (#160, #167), which is the
cap, so we cannot open anything new. Both are in your court: every question on #160 was answered on
Sep 2 (including the T=1024 table you asked for, +5.99% end-to-end at the shipped default chunk),
and #167 has had no review yet.
Could you raise the cap for a day or two, or tell us the order you would prefer? We are happy to
open them one at a time and wait for each to land — we only want to stop sitting on finished work.
Everything below is measured on a single RTX 5090, end-to-end through
ninfer-serveorninfer_benchunless the row says "operator". Each PR carries its own raw data, a bit-exactnessgate with a sabotage control, and a full
cteston both arms from one build directory.Prefill — Qwen3.6-35B-A3B
linear_addthrough the same foldFullflag split so a ragged token count stops taking the slow weight pathThe first three are one family and must land in that order — the second and third do not apply
without the first.
Decode — Qwen3.6-35B-A3B
mtp0; operation workspace halves, 74 240 → 37 376 BRows2window of routed down held at eleven tokens for the Q5 codec--mtp-draft-tokens 5, zero at any smaller draft windowHost and 27B
normalize_nfc, 4.9…14.8% of TTFT on a prefix-cache hitTokenizer::encode, −1.5 MiB live heap, output bit-exactexpfpath removed from the fused NVFP4 SwiGLU epilogueexpfand exact divisionWhat we are not claiming
The decode figures are not additive: stacking everything measures +4.71…4.78% decode and
+7.81…7.90% prefill against
master, less than the sum of the parts, and we say so in each body.Where a change gives nothing on the second model, the body says that too — three of these are dead
on 27B by construction, and one of them ships with a guard so it costs nothing there.
Thanks either way, and no rush if the timing is bad.