不再读写庞大的 O(N2) 注意力矩阵 S 和 P。将输入切分为 Block,
通过 Tiling (分块) 和 Algebraic Aggregation (代数聚合),完全在快速 SRAM 中计算后直接写回 HBM。
传统注意力痛点: 需要完整的 S = QKT 来计算 Softmax 的分母,因此必须把 O(N2) 的庞大矩阵暂存到慢速 HBM 中,导致 IO 瓶颈。
FlashAttention 的解法: Softmax 的分母本质是行的指数和 (rowsum)。我们在 HBM 中只维护 O(N) 级别的统计量:当前的最大值 mi 和指数和 li。
当内层计算出一个新的 Sij 块时:
1. 计算当前块的局部最大值 m̃ij 和局部和 l̃ij。
2. 通过公式 minew = max(mi, m̃ij) 获取全局新最大值。
3. 使用缩放因子 emi - minew 修正历史结果 Oi 和历史和 li。
结果: 算完一块就丢掉一块 Sij,绝不写回 HBM,完美融合了局部计算与全局 Softmax。