Expand description
2026-09-25: Arm choice for the native-FP8 decode FFN.
2026-09-25: Chooses the arm that runs the native-FP8 decode FFN for one token
(Fp8DownArm), as a pure function DenseFfnLayer::forward calls.
Owner: model-layers (dense FFN). Invariants:
fp8_down_armreturnsPerProjectionfor a non-SiLU layer or a missingw8a16_gemv_dual, and returnsSplitSiluorFusedSiluonly when every kernel that arm launches resolved.
Why SplitSilu is the preferred arm: w8a16_gemv_silu_input gives each of the 4
outputs of a 256-thread CTA a 64-lane team that walks the whole K and evaluates
(g / (1 + __expf(-g))) * u for every element, so one launch computes the SwiGLU once
per output rather than once per element. SplitSilu computes it once with
moe_silu_mul and then runs the plain w8a16_gemv. Measured 2026-09-11 on 1xH100,
Qwen/Qwen3.8-27B-FP8, C=1: the fused down projection took 6.65 ms (30.4%) of a
21.891 ms decode step at 858 GB/s, against 1,979 GB/s for w8a16_gemv_dual.