Module fp8_down

Module fp8_down 

Source
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_arm returns PerProjection for a non-SiLU layer or a missing w8a16_gemv_dual, and returns SplitSilu or FusedSilu only 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.