cs.ARJun 2, 2026

P-Cast Precision in FP8 Attention: Sink-Induced Collapse and the Optimality of S=2^8

Authors: Reed Lau

Organizations: Tencent

Abstract

FP8 (E4M3) acceleration for attention computation offers significant throughput gains, but the 3-bit mantissa introduces precision challenges when the softmax probability matrix~PP is cast to FP8 before the P⋅VP \cdot V matrix multiplication. We analyze two implementation choices that affect output precision under the \emph{Attention Sink} phenomenon: (1)~the KV block iteration order, and (2) the static scaling factor applied to PP before casting. We show that forward KV iteration causes \emph{P-collapse} -- to leading order a fraction Φ(Δ+δk−6.93−ln⁡S)Φ(Δ+ δ_k - 6.93 - \ln S) of non-sink PP values underflow to zero, where the small shift δk≈1δ_k \approx 1 (for ksink=4k_{\text{sink}}{=}4) is the expected within-sink-block score maximum -- and that reverse iteration removes it, with a zero-underflow guarantee when reverse is combined with S=256S{=}256. We further give a constructive characterization of S=256=28S = 256 = 2^8 as the static scale that simultaneously satisfies (i)~bit-exact IEEE 754 scaling, (ii) the lower envelope of a sawtooth function dp(S)dp(S) over the E4M3 number line (dp=2−4dp = 2^{-4}, the minimum worst-case quantization step), and (iii)~the maximum normal-range coverage \emph{among bit-exact (2k2^k) scales} (a non-bit-exact scale such as 448448 attains slightly higher coverage; sec.5}). Both optimizations are already deployed in FlashAttention-3/4 on engineering grounds; our contribution is a quantitative account of \emph{why} these choices are good and a closed-form threshold Δc=6.93+ln⁡S−δkΔ_c = 6.93 + \ln S - δ_k for predicting kernel-level precision loss. Kernel-faithful experiments (Q,K,VQ, K, V in FP32 to isolate the P-cast effect) show 33-10×10\times MSE improvement at moderate sink strengths, and paired tests confirm both fixes saturate to the same precision floor when combined -- which motivated updating the hpc-ops kernel from S=1S{=}1 to S=256S{=}256.

Explore similar work

CardsList