pub fn absorb_o(
cfg: &Glm5NextDsaConfig,
o_local: &[f32],
kv_b_local: &[f32],
local_heads: usize,
) -> Result<Vec<f32>>Expand description
2026-09-25: The output-side absorption:
o_absorb[i][h*kvl + c] = Σ_r o_proj[i][h*vd + r] · kv_b[h*(nope+vd) + nope + r][c].
The output-side counterpart of absorb_q: it maps the decode kernel’s latent output
back through kv_b_proj’s V half. It runs on this rank’s heads only (o_local,
kv_b_local): output columns of head h read only head h’s o_proj columns and
kv_b rows. Each head’s V half starts at row qk_nope_head_dim of that head’s kv_b
block.