From 416362dec423d8da9f7e684887d70fbed5efcc16 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 3 Sep 2026 09:25:51 +0000 Subject: [PATCH] =?UTF-8?q?Add=20BMM=5FTheory:=20docs/02=5F=E5=88=86?= =?UTF-8?q?=E6=94=AF=E7=90=86=E8=AE=BA/07=5F=E5=B0=BE=E8=BD=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=AD=96=E7=95=A5.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/02_分支理论/07_尾轮处理策略.md | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 BMM/BMM_Theory/docs/02_分支理论/07_尾轮处理策略.md diff --git a/BMM/BMM_Theory/docs/02_分支理论/07_尾轮处理策略.md b/BMM/BMM_Theory/docs/02_分支理论/07_尾轮处理策略.md new file mode 100644 index 0000000..2e59089 --- /dev/null +++ b/BMM/BMM_Theory/docs/02_分支理论/07_尾轮处理策略.md @@ -0,0 +1,97 @@ +# 尾轮处理策略完整推导(参考文档) + +> 本文是《BMM尾轮处理策略对比分析 v1.5》的推导细节存档,供深入参考. +> **工程结论已内化进 [06_ASW_Basic分支.md](06_ASW_Basic分支.md) §6**——尾轮是 ASW_Basic 最优实现的必要环节, 不是独立方案. +> 对应软件实现: `bmm_theory/branches/asw_basic.py` 中的尾轮决策. + +## 1. 单块时延三项与主导项判定 + +单个输出块 [sM, sN](K 维全量累加)的三段时延: + +$$T_{MMAD} = \frac{2\cdot sM\cdot sN\cdot K}{Q_{16}},\qquad T_{MTE2} = \frac{K(sM+sN)\cdot dt}{BW_{eff}},\qquad T_{FIX} = \frac{sM\cdot sN\cdot outB}{BW_{pc}}$$ + +**关键修正(v1.3)**:T_MTE2 分子是全量 K 而非 k_L1——稳态流水下 k_L1 约掉(单块搬入总量 K(sM+sN)dt 与分次粒度无关),k_L1 只通过 dValue/min_TileSize 约束影响有效带宽,不进时延分子。 + +**三维主导项判定**(取代单一 K 判据): + +| 对比 | 判据 | 决定因素 | +|---|---|---| +| MMAD vs MTE2 | `sM·sN/(sM+sN)` ⋛ `dt·Q16/(2·BW_eff)` | **tile 尺寸**(K 约掉) | +| MMAD vs FIX | `K` ⋛ `outB·Q16/(2·BW_pc)` ≈ 304 | **K** | + +**缩放类型二分**:MMAD 与 FIX 都 ∝ 面积 sM·sN,MTE2 ∝ 周长 (sM+sN)。 + +- **面积型主导**(MMAD 或 FIX 最大):tile 大(sM·sN/(sM+sN)≥93.5,L2 命中)且(K≥304 时 MMAD、K<304 时 FIX)——**主流 prefill/decode case 均属此类**; +- **周长型主导**(MTE2 最大):tile 小(<93.5,L2 命中)或工作集超 L2 的 GM 直读(<304)——边角 case。 + +## 2. 四种策略定义 + +| 策略 | 做法 | 块大小 | tile 套数 | +|---|---|---|---| +| **A0 不重切** | 尾轮 r 核各处理 1 整块,C−r 核空转 | 主尾同大小 | 1 | +| **A1a 尾轮整数倍切分** | 尾轮每块沿 N(或 M)切 s* 份,r·s* 小块分给 C 核 | 主整块 + 尾 1/s* 小块 | 2 | +| **A1b 尾轮 tile 重选凑满核** | 尾轮 r 个原块区域用更小 tile 重切,凑满 C 核 | 主整块 + 尾小 tile | 2 | +| **方案 B 整轮均匀重切** | 总块数向上取整到 n_wave·C,全局重新枚举 tile 使每轮每核恰好一同大小块 | 全部同大小 | 1 | + +通用时延式:`T_A0 = n_wave·T_block`,`T_A1 = (n_wave−1)·T_block + T_tail`,`T_B = n_wave·T_block'`。 + +**A1b 的 tile 确定**:理想 tile `s_t* = s·√(r/C)`(sM=sN 时),按 16 对齐调整使重切块数 ≤ C;允许非方形枚举。**A1a 是 A1b 的真子集**(A1a 的尾轮 tile (sM, sN/s*) 恰为 A1b 枚举空间特定组合),故 **A1b 恒不劣于 A1a**。 + +## 3. 面积型主导(主流场景) + +**A0 永不最优**(r>0 时 A1 或方案 B 严格优): + +- `Δ_{A0→A1b} = T_block(1 − r/C) > 0`; +- `Δ_{A0→B} = T_block·(C−r)/C > 0`。 + +**A1b 与方案 B 理论时延严格相等**(总量守恒):面积型主导项下时延 ∝ 块面积,所有块面积之和 = 总输出 B·M·N 与切分方式无关,轮轮满载时 `T = c·B·M·N/C`: + +$$T_{A1b} = cA(n_{wave}-1+\rho) = T_B,\qquad \rho = r/C$$ + +结构性差异在**搬入总量**(周长和 S):A1b 主轮整块 + 尾轮小 tile,周长和 `S_A1b = 2sC(n_wave−1+√ρ)`;方案 B 全局均匀 tile `S_B = 2sC√(n_wave(n_wave−1+ρ))`。均值不等式: + +$$\big(n_{wave}-1+\sqrt{\rho}\big)^2 \le n_{wave}(n_{wave}-1+\rho) \iff (\sqrt{\rho}-1)^2 \ge 0\ \checkmark$$ + +**A1b 周长和恒 ≤ 方案 B**(搬入总量少、L2 重复读少、掩盖余量大)。离散 16 对齐后时延互有胜负(<3%,数值依赖、无系统性方向)。 + +**尾轮翻出修正**(§7.2.4):面积型主导但 r 小(ρ < (187/s)²)时 A1b 尾轮 tile 缩得太小,周长/面积比上升使主导项翻转为周长型(搬入翻出),方案 B 的全局 tile 缩得温和(1/√g > √ρ 恒成立)不翻出——**r 小的面积型 case 方案 B 可微优 ~6%**。 + +## 4. 周长型主导(边角场景) + +- **A1 恒优于 A0**(dValue 允许时):`Δ_{A0→A1b} = T_load(1−√ρ) > 0`; +- **方案 B 恒优于 A0**:`Δ_{A0→B} = n_wave·T_load(1−1/√g) > 0`; +- **A1b vs 方案 B**:ρ ≥ ρ_dv 时 **A1b 恒优**(均值不等式);ρ < ρ_dv(A1b 被 dValue 卡死,ρ_dv = (256B/(sN·dt))²)且方案 B 可行时,**方案 B 严格优当且仅当** `√ρ_dv > n_wave/√g − (n_wave−1)`——方案 B 反超的唯一通道是 dValue(A1b 尾轮 tile 缩放 √ρ 恒狠于方案 B 的 1/√g,卡死更深时方案 B 胜出)。 + +**v1.5 广义方案 B**:去掉"整除满载"强约束,允许尾轮核利用率 ≥80%、所有分块统一重切。广义方案 B ≡ 修正首轮枚举 min w×T_block。**A1b 恒不劣于广义方案 B**(枚举空间包含尾轮凑满),方案 B 真实损失 3.7%~11.1%,价值在工程简洁。 + +## 5. 决策流程(闭式,无需逐项仿真) + +五步前置计算 + 查表: + +1. 首轮切分(搬入时延最小化枚举)得 mCnt, nCnt, sM, sN; +2. N_blk, n_wave=⌈N_blk/C⌉, r=N_blk mod C, ρ=r/C; +3. 三维主导项判定得 T_block = max(T_MMAD, T_MTE2, T_FIX); +4. dValue 可行性 ρ_dv = (256B/(sN·dt))²,g = n_wave·C/N_blk; +5. 查决策表: + +| # | 条件 | 最优策略 | 端到端时延 | +|---|---|---|---| +| 1 | r = 0 | A0 | n_wave·T_block | +| 2 | 面积型,0C/2,无翻出 | A1b 或方案 B(严格打平) | T_block(n_wave−1+ρ) | +| 4 | 面积型,ρ<(187/s)²(翻出) | 方案 B | T_block·n_wave/g | +| 5 | 周长型,ρ≥ρ_dv,B 可行 | A1b | T_load(n_wave−1+√ρ) | +| 6 | 周长型,ρ<ρ_dv 且分界成立且 B 可行 | 方案 B | T_load·n_wave/√g | +| 7 | 周长型,广义 B 损失>0 | A1b(恒不劣) | 广义枚举 min w×T_block | + +## 6. 工程建议(主流场景) + +1. **B1(无脑整数轮满核切)在主流场景安全**:面积型主导下与 A1b 严格相等(零损失),prefill 大 M/N 场景 r=0 居多; +2. **decode 小 M / 大 Batch 超 L2 场景**:广义方案 B 退回原切分(dValue 边界块数不可减),A1b 恒不劣; +3. 方案 B 损失 <12% 换实现简化(一套 tile、无尾轮分支)是合理工程权衡。 + +## 7. 边界说明 + +- **带宽模型敏感性**:结论依赖"每核 MTE2 带宽上限 BW_pc"假设(950PR 的 MTE2 为每核独立 DMA 引擎、带宽按核数配平)。若 HBM 为全局共享池,A0 尾轮搬移已接近理想,结论反转——临界 case 建议实测复核; +- **A1b 工程代价**:需两套 tile 参数 + 尾轮区域边界处理(r 个原块一般为 L 形,按矩形分解重切),不改变时延结论但影响实现成本; +- 16 对齐是 Cube 计算粒度(16×16×16)的硬件要求,四种策略的 tile 无论重切前后都必须是 16 的倍数。