From ea3f74ea7318776c453a6b1e9ebe4de50779ac42 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 29 Aug 2026 08:28:56 +0000 Subject: [PATCH] =?UTF-8?q?v1.7=20=E4=BF=AE=E8=AE=A2=EF=BC=9A=C2=A75.10=20?= =?UTF-8?q?=E9=87=8D=E5=86=99=E4=B8=BA=E4=B8=89=E7=AD=96=E7=95=A5=EF=BC=88?= =?UTF-8?q?A0/A1/B=EF=BC=89=E4=B8=A4=E4=B8=A4=E5=AF=B9=E6=AF=94=E2=80=94?= =?UTF-8?q?=E2=80=94=E8=AE=A1=E7=AE=97/=E8=AE=BF=E5=AD=98=20Bound=20?= =?UTF-8?q?=E4=B8=8B=E5=AE=8C=E6=95=B4=E6=8E=A8=E5=AF=BC=E4=B8=8E=E9=80=82?= =?UTF-8?q?=E7=94=A8=E5=88=86=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ASW_Basic分支分析_v1.7.md | 221 ++++++++++++------ 1 file changed, 154 insertions(+), 67 deletions(-) diff --git a/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.7.md b/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.7.md index 2944028..3faa233 100644 --- a/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.7.md +++ b/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.7.md @@ -6,7 +6,7 @@ ASW_Basic 是 BMM 的兜底分支——核间切 M/N(或混合切),不做 batch 合并或 K 维切分。本文给出完整的时延建模、核间分配策略分析(证明 B 优先分组在任何场景下都不优于线性映射)、实现方案的逐步推导(含尾轮重切的 Bound 类型分级策略),以及与源码实现的逐维度对比。 -v1.7 新增 §5.10:**尾轮处理的第二种策略——整轮均匀重切**(不做尾轮与主轮差异化,把总块数向上取整到 C 的整数倍后全局重切 SingleCoreM/N)。按算力 Bound / 访存 Bound 分类给出与尾轮差异化重切的严格时延对比与适用条件:计算 Bound 下两策略在 $s^*=\lfloor C/r\rfloor$ 完美时等价,但 $r > C/2$(尾轮无法重切)时整轮重切收益达 $T_{block}(1-r/C)$(数值例 23.4%);访存 Bound 下(固定带宽份额模型)搬移时延与块周长成正比,整轮重切使单块搬移缩 $\sqrt{g}$ 倍,收益 $n_{wave}T_{load}(1-1/\sqrt{g})$ 恒正(数值例 6.2%),但受 dValue ≥ 256B 硬约束。v1.6 新增 §7 程序实现流程图:**从 case 输入(B/M/K/N/dtype)出发,分别给出源码 ASW_Basic(`BatchMatMulV3AswBasicTiling` 六阶段:进入判定 → ResetBase → cubeBound 枚举 → CalL1Tiling → 参数打包 → kernel 滑窗蛇形)与理论最优实现(八阶段:分支判定 → BaseM/N/K → SingleCoreM/N 有界枚举 → 核间分配 → 尾轮重切 → swizzle → L2 分组 → 端到端校验)两张完整流程图**,每步标注计算公式与产出参数,并给出两图差异对照。v1.5 扩充 §6 源码对比:cubeBound 模型三项的物理推导(工作集超 L2 倾向更小 tile、K 大倾向更大 tile)、**源码 singleCore = base 不分层导致过度切分**(K 小时搬入时延可达理论 2 倍)、尾轮不实际重切。核心结论:**B 优先分组不优于线性映射;理论的最少切分原则 + SingleCore/Base 分层 + 尾轮重切是相对源码的三条实质改进;源码的 cubeBound 解析模型与平台自适应值得理论吸收。** +v1.7 新增 §5.10:**尾轮处理三策略(A0 不重切 / A1 仅尾轮差异化重切 / B 整轮均匀重切)的两两对比与适用分界**。计算 Bound 与访存 Bound 下分别推导 A0 vs A1、A0 vs B、A1 vs B 的完整时延公式:计算 Bound 下 B 恒不劣于 A1($\Delta = T_{MMAD}(1/s^* - r/C)$),$r \mid C$ 完美重切时等价、$r > C/2$ 时 A1 失效 B 收益达 $T_{MMAD}(1-r/C)$(数值例 23.4%);访存 Bound 下搬移随块周长缩放($\sqrt{g}$),A1 收益被 dValue 与 A 行带不缩小双重压缩,A1 vs B 的分界为 $n_{wave}(1-1/\sqrt{g})$ vs $(1-1/s^*)/2$(数值例:$n_{wave}=2$ 时 B 省 14.3%、$n_{wave}=4$ 时临界打平、$r=17$ 时 B 省 6.2%)。**总体结论:A0 从来不是最优;$r > C/2$ 时 B 唯一可重切;其余按分界公式判定。**v1.6 新增 §7 程序实现流程图:**从 case 输入(B/M/K/N/dtype)出发,分别给出源码 ASW_Basic(`BatchMatMulV3AswBasicTiling` 六阶段:进入判定 → ResetBase → cubeBound 枚举 → CalL1Tiling → 参数打包 → kernel 滑窗蛇形)与理论最优实现(八阶段:分支判定 → BaseM/N/K → SingleCoreM/N 有界枚举 → 核间分配 → 尾轮重切 → swizzle → L2 分组 → 端到端校验)两张完整流程图**,每步标注计算公式与产出参数,并给出两图差异对照。v1.5 扩充 §6 源码对比:cubeBound 模型三项的物理推导(工作集超 L2 倾向更小 tile、K 大倾向更大 tile)、**源码 singleCore = base 不分层导致过度切分**(K 小时搬入时延可达理论 2 倍)、尾轮不实际重切。核心结论:**B 优先分组不优于线性映射;理论的最少切分原则 + SingleCore/Base 分层 + 尾轮重切是相对源码的三条实质改进;源码的 cubeBound 解析模型与平台自适应值得理论吸收。** --- @@ -693,144 +693,231 @@ $\text{BaseM} \times \text{BaseN} \times 4\text{B} \times DB \le L0C$;$\text{B tiling 时 `usedCoreNum = ⌈P⌉`(不强制 C),SingleCoreM/N 在 L0C 容量内取最大($\text{singleCoreM} \times \text{singleCoreN} \times 4\text{B} \le L0C$),每核按标准核内流水(L1→L0→Cube→L0C→Fixpipe)处理自己的输出块;核间无共享无依赖,无需 swizzle 与 L2 切分。降核后 GM 并发搬移核数若 < minCoreNum,带宽利用率上限被压低——这正是降核区 case 时延的瓶颈所在,也是"时延绝对值小、不再继续优化"的定量注脚。 -### 5.10 尾轮处理的第二种策略:整轮均匀重切 +### 5.10 尾轮处理的三种策略对比与适用分界 -§5.3 的尾轮重切是**差异化策略**:主轮块保持最少切分原则下的大 tile,只把尾轮 $r$ 个块再切 $s^*$ 份。本节分析另一种**均匀化策略**——不做尾轮与主轮的差异化,而是先把总块数向上取整到 C 的整数倍,再按新块数全局重切 SingleCoreM/N,使每轮每核恰好一个同样大小的块。两种策略孰优,取决于算子是计算 Bound 还是访存 Bound。 +给定 B、M、K、N、dtype,按 §5.1/§5.2 确定 BaseM/BaseN/SingleCoreM/SingleCoreN 后,总块数 $N_{blk} = B \cdot mCnt \cdot nCnt$ 一般不是 C 的整数倍,尾轮只有 $r = N_{blk} \bmod C$ 个核工作。对尾轮有三种处理策略: -**问题**:给定 B、M、N、K、dtype,首轮按 §5.2 最优切分出 $N_{blk} = B \cdot mCnt \cdot nCnt$ 个块后,若 $r = N_{blk} \bmod C \neq 0$,尾轮只有 $r$ 核工作。策略 A(§5.3)在尾轮内部差异化重切;策略 B 直接令 +| 策略 | 做法 | 块大小 | +|---|---|---| +| **A0:不重切** | 尾轮 $r$ 核各处理 1 个整块,$C-r$ 核空转 | 主轮尾轮同大小 | +| **A1:仅尾轮差异化重切**(§5.3) | 尾轮 $r$ 块沿 N(或 M)再切 $s^*$ 份,$r \cdot s^*$ 个小块分给 $C$ 核 | 主轮整块 + 尾轮小块 | +| **B:整轮均匀重切** | 总块数向上取整到 $N_{blk}' = n_{wave} \cdot C$,全局重新枚举 SingleCoreM/N 使每轮每核恰好一个同样大小的块 | 全部块同大小 | -$$ -N_{blk}' = \Big\lceil \frac{N_{blk}}{C} \Big\rceil \cdot C = n_{wave} \cdot C -$$ +本节在计算 Bound / 访存 Bound 两类场景下,分别对 A0 vs A1、A0 vs B、A1 vs B 三组对比做完整推导,给出适用条件分界。 -重新枚举 $(mCnt', nCnt')$ 使 $B \cdot mCnt' \cdot nCnt' = N_{blk}'$(目标函数仍是 $T_{MTE2}$ 最小、即重复读最少优先,搬移效率次优先——枚举算法复用 §5.2,仅约束 1 从 $B \cdot mCnt \cdot nCnt \ge C$ 改为等式 $= N_{blk}'$)。**何时 B 优于 A?** +**统一建模** -**建模:块几何对三类时延的缩放律** +符号:$n_{wave} = \lceil N_{blk}/C \rceil$(总轮次),$r = N_{blk} \bmod C$(尾轮块数),$s^*$ 为 A1 的尾轮重切因子(§5.3),$g = N_{blk}'/N_{blk} = n_{wave}C/N_{blk} > 1$ 为 B 的块数放大倍数。 -记块数放大倍数 $g = N_{blk}'/N_{blk}$($g > 1$,且 $g \le (N_{blk} + C - 1)/N_{blk}$,$n_{wave}=2$ 时 $g < 2$)。重切后单块输出面积缩 $g$ 倍、块的线性尺寸(M/N 向边长)缩 $\sqrt{g}$ 倍(保持近方形比例时): +*块几何对三类时延的缩放律*(B 重切后单块面积缩 $g$ 倍、线性尺寸缩 $\sqrt{g}$ 倍,保持近方形比例): | 时延项 | 依赖 | 缩放律 | |---|---|---| | $T_{MMAD}$(单块 Cube 计算) | $\propto$ 面积 $sM \cdot sN$ | $T_{MMAD}' = T_{MMAD}/g$ | | $T_{MTE2}$(单块 GM→L1 搬入) | $\propto$ 周长 $(sM + sN)$ | $T_{MTE2}' \approx T_{MTE2}/\sqrt{g}$ | -| $T_{FIX}$(单块写出) | $\propto$ 面积 $sM \cdot sN \cdot outB$ | $T_{FIX}' = T_{FIX}/g$(总量与切分无关) | +| $T_{FIX}$(单块写出) | $\propto$ 面积 | $T_{FIX}' = T_{FIX}/g$(总量与切分无关) | -**搬移时延随周长缩放是关键**:重切使计算缩 $g$ 倍、搬移只缩 $\sqrt{g}$ 倍——这正是"切分越多重复读越多"(§5.2)在每块粒度上的体现。 +**搬移随周长缩放是关键**:切分越多,计算缩 $g$ 倍而搬移只缩 $\sqrt{g}$ 倍——"切分越多重复读越多"(§5.2)在每块粒度上的体现。 -**带宽模型声明**:昇腾 950PR 每核 MTE2 引擎带宽上限按 $BW_{pc} = W_{GM}/C = 50$ GB/s 建模(§1.3)。该假设下,尾轮只有 $r$ 核工作时聚合带宽为 $r \cdot BW_{pc} < W_{GM}$,尾轮搬移时延不随核数减少而缩短——尾轮 $r$ 个块用 $r$ 核,每核 1 块,时延仍为一个整块搬移时间 $T_{load}$。(若 HBM 为全局共享池、单核 MTE2 无独立上限,则尾轮可吃满 $W_{GM}$,结论相反,见本节末的边界说明。) +*带宽模型声明*:昇腾 950PR 每核 MTE2 带宽上限按 $BW_{pc} = W_{GM}/C = 50$ GB/s 建模(§1.3)。该假设下尾轮 $r$ 核的聚合带宽仅 $r \cdot BW_{pc}$,尾轮搬移不加速——$r$ 个整块用 $r$ 核,每核 1 块,时延仍为一个整块搬移时间 $T_{load}$。HBM 全局共享池模型的边界说明见本节末。 -**两策略总时延(通用式)**: +*三策略通用时延式*($T_{block} = \max(T_{MMAD}, T_{MTE2}, T_{FIX})$ 为单块主导项): $$ -T_A = (n_{wave}-1) \cdot T_{block} + \frac{T_{block}}{s^*},\qquad T_B = n_{wave} \cdot T_{block}' +T_{A0} = n_{wave} \cdot T_{block} $$ -其中 $T_{block} = \max(T_{MMAD}, T_{MTE2}, T_{FIX})$(单块主导项),$s^*$ 为 §5.3 的尾轮重切因子。 +$$ +T_{A1} = (n_{wave}-1) \cdot T_{block} + T_{tail}(s^*) +$$ + +$$ +T_B = n_{wave} \cdot T_{block}' +$$ + +其中 $T_{tail}(s^*)$ 为 A1 尾轮小块主导项时延,$T_{block}'$ 为 B 重切后小块主导项时延。 --- -**情形一:计算 Bound($T_{MMAD} > T_{MTE2}$,即 $K \ge K^*$)** +#### 情形一:计算 Bound($T_{MMAD} > T_{MTE2}$) -代入缩放律 $T_{block}' = T_{MMAD}/g$,并利用 $n_{wave}/g = n_{wave} \cdot N_{blk}/N_{blk}' = N_{blk}/C = n_{wave}-1+r/C$: +主导项 $T_{block} = T_{MMAD} = 2 \cdot sM \cdot sN \cdot K / Q_{16}$。A1 尾轮沿 N 切 $s^*$ 份后小块面积缩 $s^*$ 倍:$T_{tail} = T_{MMAD}/s^*$。B 重切后 $T_{block}' = T_{MMAD}/g$,代入 $n_{wave}/g = N_{blk}/C = n_{wave}-1+r/C$: $$ -T_B^{calc} = \frac{n_{wave}}{g} \cdot T_{MMAD} = T_{MMAD}\Big(n_{wave} - 1 + \frac{r}{C}\Big) +T_B^{calc} = T_{MMAD}\Big(n_{wave} - 1 + \frac{r}{C}\Big) $$ -与策略 A 比较: +**(1)A0 vs A1** $$ -\Delta_{calc} = T_A^{calc} - T_B^{calc} = T_{MMAD}\Big(\frac{1}{s^*} - \frac{r}{C}\Big) +\Delta_{A0 \to A1}^{calc} = T_{A0} - T_{A1} = T_{MMAD}\Big(1 - \frac{1}{s^*}\Big) \ge 0 $$ -由于 $s^* = \min(\lfloor C/r \rfloor,\; s_{max}) \le \lfloor C/r \rfloor \le C/r$,故 $1/s^* \ge r/C$,**$\Delta_{calc} \ge 0$ 恒成立——计算 Bound 下策略 B 恒不劣于策略 A**。收益分档: - -1. **$r \le C/2$ 且 $\lfloor C/r \rfloor$ 与 $C/r$ 接近**(如 $r \mid C$:$r=16 \Rightarrow s^*=2=C/r$):$1/s^* = r/C$,$\Delta = 0$,两策略等价;此时策略 B 徒增搬移量($\sqrt{g}$ 倍)与启动开销,**不应重切**; -2. **$r \le C/2$ 但 $\lfloor C/r \rfloor$ 取整损失大**(如 C=32、$r=10$:$s^*=3$,$1/3 - 10/32 \approx 0.021$):策略 B 收益约 2% 每轮,边际; -3. **$r > C/2$**:$\lfloor C/r \rfloor = 1$,$s^* = 1$——**策略 A 完全无法重切尾轮**(切 1 份等于不切),尾轮 $r$ 核工作、$C-r$ 核空转一个整块时间。策略 B 收益: +A1 恒不劣于 A0,分界在可行性:计算 Bound 下重切约束放宽为对齐与搬移掩盖(§5.3),$s^* = \min(\lfloor C/r \rfloor,\; sN/16,\; sN/x_{min})$。$r \le C/2$ 时 $\lfloor C/r \rfloor \ge 2$,A1 可用;**$r > C/2$ 时 $s^* = 1$,A1 退化为 A0**。即: $$ -\Delta_{calc}\big|_{r>C/2} = T_{MMAD}\Big(1 - \frac{r}{C}\Big) +\text{A0 vs A1(计算 Bound):} \begin{cases} r \le C/2 \Rightarrow \text{A1 优,收益 } T_{MMAD}(1 - 1/s^*) \\ r > C/2 \Rightarrow \text{A1 不可行,A0 = A1} \end{cases} $$ -**适用前提(两条校验)**: +**(2)A0 vs B** -- **搬移掩盖校验**:重切后单块 $T_{MTE2}' = T_{MTE2}/\sqrt{g}$ 仍须被计算掩盖,即 $T_{MTE2}/\sqrt{g} \le T_{MMAD}/g$,化简得 +$$ +\Delta_{A0 \to B}^{calc} = T_{A0} - T_B = T_{MMAD}\Big(n_{wave} - \frac{N_{blk}}{C}\Big) = T_{MMAD} \cdot \frac{C - r}{C} +$$ + +$r < C$(有尾轮)时 **$\Delta > 0$ 恒成立——计算 Bound 下 B 恒优于 A0**(只要可行)。收益随 $r$ 减小而增大:尾轮越空,A0 浪费越多。可行性校验两条: + +- *搬移掩盖*:重切后单块搬移仍被计算掩盖,$T_{MTE2}/\sqrt{g} \le T_{MMAD}/g$,即 $$ \sqrt{g} \le \frac{T_{MMAD}}{T_{MTE2}} $$ -计算 Bound 余量($T_{MMAD}/T_{MTE2}$)越大,可承受的块数放大越多。$n_{wave}=2$ 时 $g < 2$,$\sqrt{g} < 1.42$,校验通常自动通过; +- *分解可行*:$N_{blk}'$ 可分解为 $B \cdot mCnt' \cdot nCnt'$,$sM'/sN'$ 满足 16 对齐与 BaseM/N 整数倍。 -- **可行性校验**:$N_{blk}'$ 可分解为 $B \cdot mCnt' \cdot nCnt'$ 且 $sM', sN'$ 满足 16 对齐与 BaseM/N 整数倍(约束 4);计算 Bound 下 dValue 约束放宽为搬移掩盖条件(§5.3)。 +**(3)A1 vs B** -**数值实例(计算 Bound,$r > C/2$)**:B=1、M=N=1792、K=4096、BF16、C=32。首轮最优切分 $mCnt=nCnt=7$($sM=sN=256$),$N_{blk}=49$,$n_{wave}=2$,$r=17$。单块 $T_{MMAD}=2 \times 256^2 \times 4096/15.2\text{T} = 35.3\mu s$,$T_{MTE2}=5.2\mu s$($k_{L1}=288$,计算 Bound ✓)。 +$$ +\Delta_{A1 \to B}^{calc} = T_{A1} - T_B = T_{MMAD}\Big(\frac{1}{s^*} - \frac{r}{C}\Big) +$$ -- 策略 A:$s^* = \lfloor 32/17 \rfloor = 1$,无法重切,$T_A = 2 \times 35.3 = 70.6\mu s$; -- 策略 B:$N_{blk}' = 64 = 8 \times 8$,$sM'=sN'=224$($8 \times 224 = 1792$ 恰好整除),$g=64/49=1.31$。校验:$\sqrt{g}=1.14 \le T_{MMAD}/T_{MTE2}=6.7$ ✓;$T_{MTE2}'=5.2\mu s < T_{MMAD}'=27.0\mu s$ ✓;dValue $= 224 \times 2 = 448$B ≥ 256B ✓。$T_B = 2 \times 27.0 = 54.1\mu s$。 +由 $s^* \le \lfloor C/r \rfloor \le C/r$ 知 $\Delta \ge 0$ 恒成立,**B 恒不劣于 A1**。分界: -**收益 23.4%**——这就是 $r > C/2$ 场景下整轮重切的价值:策略 A 的差异化重切在 $r > C/2$ 时完全失效,整轮重切把尾轮的 $C-r=15$ 个空转核次利用起来。 +$$ +\text{A1 vs B(计算 Bound):} \begin{cases} s^* = C/r \text{(} r \mid C \text{ 完美重切)} \Rightarrow \Delta = 0 \text{,A1 = B} \\ s^* < C/r \Rightarrow \text{B 优,收益 } T_{MMAD}(1/s^* - r/C) \end{cases} +$$ + +注意 $s^* < C/r$ 有两类来源:$\lfloor C/r \rfloor$ 取整损失($r \nmid C$),以及 $r > C/2$ 时 $s^* = 1$ 的完全失效。 + +**计算 Bound 数值实例**: + +*例 1($r > C/2$,A1 失效)*:B=1、M=N=1792、K=4096、BF16、C=32。首轮 $mCnt=nCnt=7$($sM=sN=256$),$N_{blk}=49$、$n_{wave}=2$、$r=17$。单块 $T_{MMAD} = 2 \times 256^2 \times 4096/15.2\text{T} = 35.3\mu s$($T_{MTE2}=5.2\mu s$,计算 Bound ✓)。 + +- A0:$T_{A0} = 2 \times 35.3 = 70.6\mu s$; +- A1:$s^* = \lfloor 32/17 \rfloor = 1$,退化为 A0,$T_{A1} = 70.6\mu s$; +- B:$N_{blk}' = 64 = 8 \times 8$,$sM'=sN'=224$($8 \times 224 = 1792$ 整除),$g = 64/49 = 1.31$。掩盖校验 $\sqrt{g}=1.14 \le T_{MMAD}/T_{MTE2} = 6.7$ ✓;dValue $= 448$B ≥ 256B ✓。$T_B = 2 \times 27.0 = 54.1\mu s$。 + +**B 相对 A0/A1 省 23.4%**;公式核验 $\Delta_{A1 \to B} = 35.3 \times (1 - 17/32) = 16.5\mu s$ ✓。 + +*例 2($r \mid C$ 完美重切,A1 = B 等价点)*:M=1536、N=2048、K=4096、BF16。$mCnt=6, nCnt=8$($sM=sN=256$),$N_{blk}=48$、$n_{wave}=2$、$r=16$。$s^* = \min(2, 16) = 2 = C/r$ 完美: + +- A0:$70.6\mu s$; +- A1:$35.3 + 35.3/2 = 53.0\mu s$; +- B:$N_{blk}' = 64 = 8 \times 8$,$sM'=192, sN'=256$,$T_B = 2 \times 26.5 = 53.0\mu s$。 + +**A1 = B**($1/s^* = r/C = 1/2$,$\Delta = 0$)✓。此时应选 A1——时延相同但 B 徒增搬移量($\sqrt{g} = 1.15$ 倍)与块数(48→64,启动/排空开销增多),无补偿收益。 --- -**情形二:访存 Bound($T_{MTE2} \ge T_{MMAD}$,即 $K < K^*$)** +#### 情形二:访存 Bound($T_{MTE2} \ge T_{MMAD}$) -代入缩放律 $T_{block}' = T_{MTE2}/\sqrt{g}$: +主导项 $T_{block} = T_{load} = (sM + sN) \cdot k_{L1} \cdot dtype / BW_{pc}$。A1 尾轮沿 N 切 $s^*$ 份后小块搬移量为 $(sM + sN/s^*) \cdot k_{L1} \cdot dtype$(**A 行带 $[sM, k_{L1}]$ 每个小块都要完整搬一次,不随 $s^*$ 缩小**——这是差异化重切的结构性弱点),方形下: $$ -T_B^{mem} = \frac{n_{wave}}{\sqrt{g}} \cdot T_{load} +T_{tail}^{A1} = T_{load} \cdot \frac{1 + 1/s^*}{2} $$ -策略 A 在访存 Bound 下的尾轮重切受 dValue 硬约束(§5.3:$s \le sN \cdot dtype/256\text{B}$),$s^*$ 通常很小;$r > C/2$ 时同样 $s^* = \lfloor C/r \rfloor = 1$。即使 $s^* \ge 2$($r \le C/2$),尾轮沿 N 切 $s^*$ 份后小块搬移量为 $(sM + sN/s^*) \cdot k_{L1}$,方形下时延为 $T_{load} \cdot (1 + 1/s^*)/2$,仍显著高于策略 B 的 $T_{load}/\sqrt{g}$。固定带宽份额模型下: +B 重切后单块 $T_{load}' \approx T_{load}/\sqrt{g}$(近方形缩放)。 + +**(1)A0 vs A1** $$ -\Delta_{mem} = T_A^{mem} - T_B^{mem} = n_{wave} \cdot T_{load}\Big(1 - \frac{1}{\sqrt{g}}\Big) > 0 \quad (g > 1) +\Delta_{A0 \to A1}^{mem} = T_{load} - T_{load}\frac{1 + 1/s^*}{2} = \frac{T_{load}}{2}\Big(1 - \frac{1}{s^*}\Big) \ge 0 $$ -**访存 Bound 下策略 B 恒优于策略 A**。物理解释:尾轮 $r$ 核的聚合带宽只有 $r \cdot BW_{pc}$,搬移不加速;整轮重切让所有轮次满核满带宽,虽然总搬移量增 $\sqrt{g}$ 倍(周长缩放),但轮次不变、每轮时延缩 $\sqrt{g}$ 倍,净收益为正。 - -**dValue 硬约束**(访存 Bound 不可放宽):B 非转置时 $sN' \cdot dtype \ge 256\text{B}$,方形缩放下 +A1 恒不劣于 A0,但访存 Bound 下 $s^*$ 受 dValue **硬约束**(§5.3,小块搬移效率不能降): $$ -g \le \Big(\frac{sN \cdot dtype}{256\text{B}}\Big)^2 +s^* = \min\Big(\Big\lfloor \frac{C}{r} \Big\rfloor,\; \frac{sN \cdot dtype}{256\text{B}},\; \frac{k_{L1} \cdot sN \cdot dtype}{min\_TileSize},\; \frac{sN}{16}\Big) $$ -$sN=256$、BF16 时 $g \le 4$——$n_{wave}=2$ 时 $g < 2$ 自动满足;$sN$ 更小(如 128)时 $g \le 1$,策略 B 不可行。同时校验搬移量 $k_{L1} \cdot sN' \cdot dtype \ge min\_TileSize$ 与 16 对齐。 +BF16、sN=256 时 dValue 项给出 $s^* \le 2$——即使 $r$ 很小($\lfloor C/r \rfloor$ 大),尾轮最多切 2 份,收益上限 $T_{load}/4$。分界: -**数值实例(访存 Bound)**:B=1、M=N=2304、K=256、BF16、C=32。首轮 $mCnt=nCnt=9$($sM=sN=256$),$N_{blk}=81$,$n_{wave}=3$,$r=17$。单块 $T_{load}=(256+256) \times 256 \times 2/50\text{G} = 5.24\mu s$($k_{L1}=256=K$),$T_{MMAD}=2.21\mu s$(访存 Bound ✓)。 +$$ +\text{A0 vs A1(访存 Bound):} \begin{cases} s^* \ge 2 \Rightarrow \text{A1 优,收益 } \frac{T_{load}}{2}(1 - 1/s^*) \\ s^* = 1 \Rightarrow \text{A1 = A0} \end{cases} +$$ -- 策略 A:$s^*=1$ 无法重切,$T_A = 3 \times 5.24 = 15.7\mu s$; -- 策略 B:$N_{blk}' = 96$,近方形分解 $(mCnt', nCnt') = (8, 12)$($sM'=288, sN'=192$),$g=96/81=1.19$。校验:dValue $= 192 \times 2 = 384$B ≥ 256B ✓;搬移量 $256 \times 192 \times 2 = 128$KB ≥ 16KB ✓。$T_{load}' = (288+192) \times 256 \times 2/50\text{G} = 4.92\mu s$,$T_B = 3 \times 4.92 = 14.7\mu s$。 +**(2)A0 vs B** -**收益 6.2%**(非方形分解使实际收益略低于 $1-1/\sqrt{g}=8.2\%$ 的理论值)。 +$$ +\Delta_{A0 \to B}^{mem} = n_{wave} T_{load}\Big(1 - \frac{1}{\sqrt{g}}\Big) > 0 \quad (g > 1) +$$ + +**B 恒优于 A0**(dValue 可行时)。物理解释:尾轮 $r$ 核聚合带宽仅 $r \cdot BW_{pc}$,搬移不加速;B 让所有轮次满核满带宽,总搬移量虽增 $\sqrt{g}$ 倍(周长缩放),但轮次不变、每轮时延缩 $\sqrt{g}$ 倍,净收益为正。dValue 硬约束(不可放宽): + +$$ +g \le \Big(\frac{sN \cdot dtype}{256\text{B}}\Big)^2 \quad \text{(方形缩放)} +$$ + +sN=256、BF16 时 $g \le 4$;sN=128 时 $g \le 1$,B 不可行。 + +**(3)A1 vs B** + +$$ +\Delta_{A1 \to B}^{mem} = T_{A1} - T_B = T_{load}\Big(n_{wave}\Big(1 - \frac{1}{\sqrt{g}}\Big) - \frac{1}{2}\Big(1 - \frac{1}{s^*}\Big)\Big) +$$ + +(访存 Bound 下 A1 与 B 都受 dValue 约束,但作用点不同:A1 的 $s^*$ 受限于尾轮小块的 dValue,B 的 $g$ 受限于全局小块的 dValue。)分界: + +$$ +\text{A1 vs B(访存 Bound):} \begin{cases} n_{wave}\big(1 - 1/\sqrt{g}\big) > \frac{1}{2}(1 - 1/s^*) \Rightarrow \text{B 优} \\ n_{wave}\big(1 - 1/\sqrt{g}\big) < \frac{1}{2}(1 - 1/s^*) \Rightarrow \text{A1 优} \\ \text{相等} \Rightarrow \text{临界打平(选 A1:搬移增量小)} \end{cases} +$$ + +趋势:$g$ 大($r/N_{blk}$ 占比大、$n_{wave}$ 小)→ B 优;$g$ 接近 1($n_{wave}$ 大、尾轮占比小)→ A1 优。注意实际收益还受**非方形惩罚**:$N_{blk}'$ 的整数分解 $(mCnt', nCnt')$ 偏离方形时,$T_{load}'$ 高于 $T_{load}/\sqrt{g}$ 理论值,B 的实际收益打折(下面的例 4)。 + +**访存 Bound 数值实例**: + +*例 3($n_{wave}=2$、$g$ 大,B 优)*:B=1、M=N=1536、K=256、BF16、C=32。$mCnt=nCnt=6$($sM=sN=256$),$N_{blk}=36$、$n_{wave}=2$、$r=4$。$T_{load} = 512 \times 256 \times 2/50\text{G} = 5.24\mu s$($k_{L1}=256=K$),$T_{MMAD}=2.21\mu s$(访存 Bound ✓)。 + +- A0:$2 \times 5.24 = 10.5\mu s$; +- A1:$s^* = \min(8,\; 2,\; 16) = 2$(dValue 卡死),尾轮小块 $[256, 128]$ 搬移 $3.93\mu s$,$T_{A1} = 5.24 + 3.93 = 9.2\mu s$; +- B:$N_{blk}' = 64 = 8 \times 8$,$sM'=sN'=192$,dValue $= 384$B ✓,$T_{load}' = 384 \times 256 \times 2/50\text{G} = 3.93\mu s$,$T_B = 2 \times 3.93 = 7.9\mu s$。 + +**B 相对 A1 省 14.3%**;分界公式核验:$n_{wave}(1-1/\sqrt{g}) = 2 \times (1-0.75) = 0.50 > (1-1/s^*)/2 = 0.25$ → B 优,$\Delta = 5.24 \times (0.50-0.25) = 1.31\mu s$ ✓ 精确吻合。 + +*例 4($n_{wave}=4$、临界打平)*:M=N=2560、K=256、BF16。$mCnt=nCnt=10$、$N_{blk}=100$、$n_{wave}=4$、$r=4$、$g=128/100=1.28$。 + +- A0:$4 \times 5.24 = 21.0\mu s$; +- A1:$s^*=2$,$T_{A1} = 3 \times 5.24 + 3.93 = 19.7\mu s$; +- B:$N_{blk}' = 128$,最方形分解 $(8, 16)$($sM'=320, sN'=160$),$T_{load}' = 480 \times 256 \times 2/50\text{G} = 4.92\mu s$,$T_B = 4 \times 4.92 = 19.7\mu s$。 + +**A1 = B 打平**:B 的理论缩放 $1/\sqrt{g} = 0.884$ 被非方形惩罚(周长 480 vs 方形等效 452)吃掉,实际缩放仅 0.938,$n_{wave}(1 - 0.938) = 0.25 = (1-1/s^*)/2$ 恰好临界。此时选 A1(搬移增量小、块数少)。 + +*例 5($r > C/2$,A1 退化)*:M=N=2304、K=256、BF16。$mCnt=nCnt=9$、$N_{blk}=81$、$n_{wave}=3$、$r=17$。 + +- A0:$3 \times 5.24 = 15.7\mu s$; +- A1:$s^* = \min(1, 2) = 1$,退化为 A0; +- B:$N_{blk}' = 96$,$(mCnt', nCnt') = (8, 12)$($sM'=288, sN'=192$),dValue $=384$B ✓,$T_{load}' = 4.92\mu s$,$T_B = 3 \times 4.92 = 14.7\mu s$。 + +**B 省 6.2%**(非方形分解使实际收益略低于 $1-1/\sqrt{g} = 8.2\%$ 的理论值)。 --- -**Bound 判据与分档决策** +#### 三策略决策总表 -计算/访存 Bound 的分界由单块时延等式 $T_{MMAD} = T_{MTE2}$ 解出: +Bound 判据:$K^* = \dfrac{k_{L1} \cdot dtype \cdot Q_{16}}{2 \cdot BW_{pc}}\Big(\dfrac{1}{sM} + \dfrac{1}{sN}\Big)$,$K \ge K^*$ 为计算 Bound,否则访存 Bound。 -$$ -K^* = \frac{k_{L1} \cdot dtype \cdot Q_{16}}{2 \cdot BW_{pc}}\Big(\frac{1}{sM} + \frac{1}{sN}\Big) -$$ +| 场景 | A0 vs A1 | A0 vs B | A1 vs B | 最优策略 | +|---|---|---|---|---| +| 计算 Bound,$r \le C/2$ 且 $r \mid C$ | A1 优 | B 优 | **A1 = B**(选 A1,搬移少) | A1 | +| 计算 Bound,$r \le C/2$ 且 $r \nmid C$ | A1 优 | B 优 | B 略优(取整损失) | A1/B 皆可,B 略优 | +| 计算 Bound,$r > C/2$ | A1 退化 | B 优 | **B 显著优** | B(收益 $T_{MMAD}(1-r/C)$) | +| 访存 Bound,$s^* = 1$($r > C/2$ 或 dValue 卡死) | A1 退化 | B 优 | B 优 | B(若 $g$ 满足 dValue) | +| 访存 Bound,$n_{wave}(1-1/\sqrt{g}) > (1-1/s^*)/2$ | A1 优 | B 优 | **B 优** | B | +| 访存 Bound,$n_{wave}(1-1/\sqrt{g}) \le (1-1/s^*)/2$ | A1 优 | B 优 | **A1 优/打平** | A1 | +| 访存 Bound,dValue 不满足($g > (sN \cdot dtype/256\text{B})^2$) | — | B 不可行 | — | A1 或 A0 | +| 写出 Bound($K$ 小使 $T_{FIX}$ 主导) | 同计算 Bound(缩放律同为面积) | 同计算 Bound | 同计算 Bound | 按计算 Bound 判定 | -$K \ge K^*$ 为计算 Bound,否则访存 Bound(例:sM=sN=256、$k_{L1}=256$、BF16 时 $K^* \approx 608$;$k_{L1}=128$ 时 $K^* \approx 304$)。 +**整体结论**: -**决策表**($r = N_{blk} \bmod C$,$g = n_{wave} C/N_{blk}$): +1. **A0 从来不是最优**——任何有尾轮($r > 0$)的场景,A1 或 B 至少不劣于 A0;A0 只是可行性兜底; +2. **计算 Bound**:$r > C/2$ 是 A1/B 的硬分界(A1 失效,B 唯一可重切);$r \le C/2$ 且整除良好时 A1 与 B 等价,选 A1(搬移增量小); +3. **访存 Bound**:A1 的收益被双重压缩(dValue 限 $s^*$、A 行带不随 $s^*$ 缩小),B 的收益随 $g$ 增大;分届公式 $n_{wave}(1-1/\sqrt{g})$ vs $(1-1/s^*)/2$ 给出精确判定,$n_{wave}$ 小、$g$ 大时 B 优,反之 A1 优; +4. B 的代价(相对 A1):总搬移量增 $\sqrt{g}$ 倍(访存 Bound 下已被时延公式计入;计算 Bound 下须掩盖校验)、块数增多带来 MMAD 启动/排空与 L0C 切换开销(未建模,量级为 $(N_{blk}' - N_{blk}) \cdot t_0 / C$,$t_0$ 为单块固定开销)。 -| 条件 | 结论 | 收益 | -|---|---|---| -| $r = 0$ | 无尾轮,两者皆不需要 | — | -| 计算 Bound,$r \le C/2$ 且 $\lfloor C/r \rfloor \approx C/r$ | 策略 A(§5.3)足够 | $\Delta \approx 0$,B 徒增搬移 | -| 计算 Bound,$r > C/2$,且 $\sqrt{g} \le T_{MMAD}/T_{MTE2}$,且 $N_{blk}'$ 可分解对齐 | **策略 B** | $T_{MMAD}(1-r/C)$,$r \to C/2^+$ 时趋近 $T_{block}/2$ | -| 访存 Bound,且 $g \le (sN \cdot dtype/256\text{B})^2$,搬移量/对齐满足 | **策略 B** | $n_{wave} T_{load}(1-1/\sqrt{g})$ | -| 访存 Bound,dValue 或搬移量不满足 | 策略 A(不可重切) | — | -| $B \nmid N_{blk}'$ | 按 batch 分组切分,部分 batch 多一块;收益略降,判定不变 | — | +**边界说明(带宽模型敏感性)**:访存 Bound 结论依赖"每核 MTE2 带宽上限 $BW_{pc}$"假设。若 HBM 为全局共享池(尾轮 $r$ 核可吃满 $W_{GM}$),则 A0 尾轮搬移时延已是 $r/C \cdot T_{load}$ 接近理想,B 的 $\sqrt{g}$ 倍搬移增量无带宽补偿,A0 vs B 结论反转。昇腾 950PR 的 MTE2 为每核独立 DMA 引擎、带宽按核数配平,采用固定份额结论;临界 case 建议实测复核。 -**边界说明(带宽模型敏感性)**:上述访存 Bound 结论依赖"每核 MTE2 带宽上限 $BW_{pc}$"假设。若硬件实际为 HBM 全局共享池(尾轮 $r$ 核可吃满 $W_{GM}$),则策略 A 尾轮搬移时延为 $r/C \cdot T_{load}$ 已接近理想,策略 B 的 $\sqrt{g}$ 倍搬移增量得不到带宽补偿,结论反转为策略 A 更优。昇腾 950PR 的 MTE2 为每核独立 DMA 引擎、带宽按核数配平($W_{GM}/C$),采用固定份额结论;临界 case 建议实测复核。 - -**与流程图的衔接**:策略 B 嵌入 §7.2 理论流程图的阶段 4——尾轮判定处增加分支:先算 $g$、按 Bound 类型查上表,命中策略 B 条件时回到阶段 2 的枚举算法(约束 1 改为等式 $B \cdot mCnt' \cdot nCnt' = N_{blk}'$),产出新的 SingleCoreM/N 后跳过尾轮差异化重切。 +**与流程图的衔接**:三策略决策嵌入 §7.2 理论流程图阶段 4——先算 $r$、$g$、$s^*$,按 Bound 类型查决策总表;选 B 时回到阶段 2 的枚举算法(约束 1 改为等式 $B \cdot mCnt' \cdot nCnt' = N_{blk}'$)重出 SingleCoreM/N,选 A1 时按 §5.3 计算 $s^*$ 与尾轮 tiling 变体。 ---