目标芯片:昇腾 950PR(DAV_3510)。本文自包含——不依赖其他分析文档,全部推导在文内完成;仅引用外部公开资料(昇腾白皮书、CANN 文档、开源算子源码仓)。
版本:v1.3,2026-08-31(修正 $T_{MTE2}$ 模型:分子 kL1→K(稳态流水约掉证明);三维主导项判定取代单一 K* 判据;面积型/周长型缩放分类;§2.5 方形结论严格证明;§4.3 符号交代;§7.2 按修正模型全面刷新——主流场景 B1 零损失)
历史:v1.1 新增 §七 B1 无脑版门限与损失分析;v1.0 首版(三策略两两对比与 Batch/M/K/N 判定流程)
历史:v1.0 首版(三策略两两对比与 Batch/M/K/N 判定流程)
BMM(BatchMatMul)算子在核间切分 M/N 后,总输出块数 $N_{blk} = \text{Batch} \cdot mCnt \cdot nCnt$ 一般不是核数 C 的整数倍,尾轮只有 $r = N_{blk} \bmod C$ 个核工作、其余核空转。本文对四种尾轮处理策略做严格的两两对比:A0(不重切)、A1a(尾轮整数倍切分)、A1b(尾轮 tile 重选凑满核)、B(整轮均匀重切),在计算 Bound 与访存 Bound 两类场景下给出完整的时延公式与适用条件分界。
核心结论:
BatchMatMulV3 在昇腾 NPU 上的兜底分支(ASW_Basic)按输出块并行。适用范围说明:ASW_Basic 是兜底分支——能进入更靠前特殊分支(K=0、转 Matmul/Mul、StreamK、MergeBatch、IterBatch、AL1/BL1 全载等)的 case 会被优先截胡、不会进入 ASW_Basic,因此本文只讨论 ASW_Basic 场景(核间切 M/N)的尾轮处理,那些在特殊分支下被承接的 case 不在本文对比范围。输出平面 $M \times N$ 被切为 $mCnt \times nCnt$ 个块,乘上 batch 维共 $N_{blk} = \text{Batch} \cdot mCnt \cdot nCnt$ 个独立输出块,按序分配到 $C$ 个 AIC 核。每个核内执行标准 Cube 数据流:
GM ──MTE2──> L1 ──MTE1──> L0A/L0B ──MMAD──> L0C ──Fixpipe──> GM
↑_____________ L2 Cache(读 5.2TB/s)_____________↑
核间不切 K(singleCoreK = K),每个输出块独立累加完成后经 Fixpipe 写出 GM。块与块之间无依赖——这是尾轮可以独立重切的前提。
块按序分配:核 $i$ 处理块 $i, i+C, i+2C, \ldots$。总块数 $N_{blk}$ 不能被 $C$ 整除时,最后一轮(尾轮)只有 $r = N_{blk} \bmod C$ 个核有块可算,$C - r$ 个核空转一个整块时间。
问题:给定 Batch、M、K、N、dtype 与首轮切分(singleCoreM/N),如何处理尾轮使端到端时延最小?
昇腾 950PR 关键规格([昇腾 950 NPU 架构白皮书](https://public-download.obs.cn-east-2.myhuaweicloud.com/ascend/%E6%98%87%E8%85%BE950%20NPU%E6%9E%B6%E6%9E%84%E7%99%BD%E7%9A%AE%E4%B9%A6.pdf)):
| 符号 | 含义 | 取值 |
|---|---|---|
| $C$ | AIC 核数 | 32 |
| $Q_{16}$ | 单核 Cube BF16 峰值算力 | 486/32 ≈ 15.2 TFLOPS |
| $W_{GM}$ | GM(HBM)总带宽 | 1.6 TB/s |
| $BW_{pc}$ | 单核 GM 带宽份额 | $W_{GM}/C = 50$ GB/s |
| $L1$ | L1 容量/核 | 512 KB |
| $L0C$ | L0C 容量/核 | 256 KB |
| $dtype$ / $outB$ | 输入/输出元素字节数 | BF16 → 2B |
*Tiling 符号*:$sM, sN$ = 单核输出 tile 的 M/N 维度(singleCoreM/N 的简写);$k_{L1}$ = GM→L1 的 K 向粒度;$mCnt = \lceil M/sM \rceil$、$nCnt = \lceil N/sN \rceil$。
*尾轮符号*:$N_{blk} = \text{Batch} \cdot mCnt \cdot nCnt$(总块数);$n_{wave} = \lceil N_{blk}/C \rceil$(总轮次);$r = N_{blk} \bmod C$(尾轮块数);$\rho = r/C$(尾轮占比)。
单个输出块 $[sM, sN]$(K 维全量累加)的三段时延。先推导搬入项——这是本文的修正重点。
**搬入时延的推导(为什么分子是 K 而不是 $k_{L1}$)**:块 $[sM, sN]$ 的输入为 A 行带 $[sM, K]$ 与 B 列带 $[K, sN]$,总搬入量
GM→L1 按 $k_{L1}$ 的 K 向粒度分 $K/k_{L1}$ 次搬入,每次搬 $k_{L1}(sM+sN) \cdot dtype$,与 MMAD 流水。稳态下总搬入时延 = 次数 × 单次时延:
**$k_{L1}$ 在稳态流水中约掉**——搬入总时延只取决于总数据量与有效带宽,与分次粒度无关。$k_{L1}$ 的真实角色是搬移效率约束(§2.3):$k_{L1} \cdot dtype \ge 256$B(dValue 下限)与单次搬移量 ≥ 16KB 决定是否触发带宽打折,不满足时体现为 $BW_{eff}$ 下降,而不是出现在时延分子中。
**有效带宽 $BW_{eff}$ 的分层**:尾轮分析执行时,主轮已把输入工作集读入 L2——工作集 ≤ L2(128MB)时尾轮小块的搬入全部 L2 命中,$BW_{eff} = BW_{L2}/C = 5.2\text{TB/s}/32 \approx 162.5$ GB/s;工作集超 L2 时部分回 GM,$BW_{eff}$ 介于 $BW_{pc} = 50$ GB/s(GM 直读下界)与 162.5 GB/s 之间。
三段时延汇总:
单块时延取主导项:$T_{block} = \max(T_{MMAD}, T_{MTE2}, T_{FIX})$。
三维主导项判定(两两比值,取代此前单以 K 判定的不完整做法):
| 对比 | 比值 | 判据 | 决定因素 |
|---|---|---|---|
| MMAD vs MTE2 | $\dfrac{2 sM \cdot sN \cdot BW_{eff}}{(sM+sN) \cdot dtype \cdot Q_{16}}$ | $\dfrac{sM \cdot sN}{sM+sN} \gtrless \dfrac{dtype \cdot Q_{16}}{2 BW_{eff}}$ | tile 尺寸(K 约掉) |
| MMAD vs FIX | $\dfrac{2K \cdot BW_{pc}}{outB \cdot Q_{16}}$ | $K \gtrless \dfrac{outB \cdot Q_{16}}{2 BW_{pc}}$ | K(BF16 输出临界 ≈304) |
| MTE2 vs FIX | 由前两条推出 | — | — |
两个临界值(BF16、L2 命中 $BW_{eff}$=162.5GB/s):tile 临界 $\dfrac{sM \cdot sN}{sM+sN} \approx 93.5$(方形 $sM=sN$ 时 $s \approx 187$;GM 直读 $BW_{eff}$=50GB/s 时临界 304、方形 $s \approx 608$);K 临界 304。
关键推论(缩放类型二分):三项中 MMAD 与 FIX 都 $\propto$ 面积 $sM \cdot sN$,MTE2 $\propto$ 周长 $(sM+sN)$。主导项的缩放类型决定尾轮分析的结构:
注意:"K 大计算 Bound"的准确含义是"K 大使 MMAD 超过 FIX"(写出量与 K 无关);MMAD 与 MTE2 的相对大小与 K 无关(两者都 $\propto K$)。此前版本以 $K^*$ 单一判据分类的做法混淆了这两个维度,本版更正。
把块数放大 $g$ 倍(面积缩 $g$ 倍、线性尺寸缩 $\sqrt{g}$ 倍,近方形比例)时:
| 时延项 | 依赖 | 缩放律 |
|---|---|---|
| $T_{MMAD}$ | $\propto$ 面积 $sM \cdot sN$ | $\propto g^{-1}$ |
| $T_{MTE2}$ | $\propto$ 周长 $(sM + sN)$ | $\propto g^{-1/2}$ |
| $T_{FIX}$ | $\propto$ 面积 | $\propto g^{-1}$(总量与切分无关) |
搬移随周长缩放是关键:切分越多,计算缩 $g$ 倍而搬移只缩 $\sqrt{g}$ 倍——"切分越多重复读越多"在每块粒度上的体现(输出是面积、输入搬运是周长:A 行带 $sM \times K$ + B 列带 $K \times sN$)。
GM→L1 搬移(Nd2Nz DMA)的两级效率阈值:
昇腾 950PR 每核 MTE2 为独立 DMA 引擎、带宽按核数配平,建模为每核带宽上限 = 聚合带宽/核数。该假设对 GM 与 L2 两层同构:GM 层每核 $BW_{pc} = W_{GM}/C = 50$ GB/s;L2 层每核 $BW_{L2}/C = 5.2\text{TB/s}/32 \approx 162.5$ GB/s(§2.1 的 $BW_{eff}$ 按工作集是否驻留 L2 在两层间取值)。尾轮 $r$ 核的聚合带宽 = $r \times$ 单核份额 < 满载聚合——尾轮搬移不加速,$r$ 个整块用 $r$ 核、每核 1 块,时延仍为一个整块搬移时间 $T_{load} = T_{MTE2}$。HBM 全局共享池模型的敏感性见 §八边界说明。
首轮切分 $(mCnt, nCnt, sM, sN)$ 的确定是尾轮分析的前提。本节给出完整推导链:问题 → 建模 → 证明 → 离散修正 → 结论。
问题:$\text{Batch} < C$ 时须切分 M/N 填满 C 核。选什么样的 $(sM, sN)$ 使端到端时延最小?
建模:由 §2.1,主导项中唯一随切分变化的是搬入(MMAD/FIX 只依赖全量 Batch/M/N/K)。单核搬入总量 = 每核块数 × 单块搬入量:
代入 $mCnt = \lceil M/sM \rceil$、$nCnt = \lceil N/sN \rceil$(连续近似下取等号):
目标函数:$\min\; (1/sM + 1/sN)$($\text{Batch}, M, N, K, dtype, C$ 均为常数)。约束:①并行度 $mCnt \cdot nCnt \ge \lceil C/\text{Batch} \rceil \triangleq P$;②L1 容量 $2(sM+sN) k_{L1} \cdot dtype \le L1$;③搬移效率(dValue、min_TileSize,§2.3);④$sM, sN$ 为 16 倍数且为 BaseM/N 整数倍。
证明(两步):
*第一步:块数最少原则*。目标函数展开为 $\dfrac{B \cdot K \cdot dtype}{C} \cdot \big(mCnt \cdot N + nCnt \cdot M\big)$——块数越多($mCnt, nCnt$ 越大)搬入越多(重复读),故取最少块数 $mCnt \cdot nCnt = P$(并行度下界取等)。此时单块面积固定:
*第二步:面积固定 → 方形严格最优*。目标函数改写为周长形式:
面积 $A_0$ 固定时最小化周长 $sM + sN$。由均值不等式(或等周不等式——矩形面积固定时周长最小当且仅当方形):
严格成立——无任何近似。物理本质:输出是面积、输入搬运是周长(A 行带 $sM \times K$ + B 列带 $K \times sN$),方形使"边界/面积比"最小,即单位输出的输入搬运最少。
离散修正(连续最优 → 工程可行):
对前一版本表述的更正:v1.2 及之前版本曾以"K 全载 regime 方形最优、L1 主导 regime 仅面积相关、形状自由"描述方形结论的适用范围——该说法源自把 $k_{L1}$ 误置时延分子的建模($(1/sM+1/sN) \cdot k_{L1}$ 中 $k_{L1} = L1/(2(sM{+}sN)dtype)$ 恰好抵消周长)。§2.1 已证 $k_{L1}$ 在稳态流水中约掉,正确目标函数为 $(1/sM+1/sN) \cdot K$——形状敏感性在两个 regime 下统一存在,方形恒为连续最优;$k_{L1}$ 只通过 dValue/min_TileSize 约束(§2.3)影响可行性,不影响目标函数的排序。
小结:
| 策略 | 做法 | 块大小 |
|---|---|---|
| A0:不重切 | 尾轮 $r$ 核各处理 1 个整块,$C-r$ 核空转 | 主轮尾轮同大小 |
| A1a:尾轮整数倍切分 | 尾轮每块沿 N(或 M)切 $s^*$ 份,$r \cdot s^*$ 个小块分给 C 核 | 主轮整块 + 尾轮 $1/s^*$ 小块 |
| A1b:尾轮 tile 重选凑满核 | 尾轮 $r$ 个原块覆盖的区域(面积 $r \cdot sM \cdot sN$)用更小 tile $(sM_t, sN_t)$ 重新切分,凑满 C 核 | 主轮整块 + 尾轮小 tile |
| 方案 B:整轮均匀重切 | 总块数向上取整到 $N_{blk}' = n_{wave} \cdot C$,全局重新枚举 tile 使每轮每核恰好一个同样大小的块 | 全部块同大小 |
实现方式对比:
| 策略 | host 侧 tiling | kernel 侧执行 | tile 参数套数 |
|---|---|---|---|
| A0 | 一套参数 | 线性映射 index = blockIdx + round × usedCoreNum,尾轮不满载核跳过 | 1 |
| A1a | 主参数 + 尾轮切分参数($s^*$) | 最后一轮切换小块尺寸 | 2 |
| A1b | 主参数 + 尾轮 tile($sM_t, sN_t$) | 尾轮区域独立子网格映射 | 2 |
| 方案 B | 一套重切后参数 | 全程统一 tile,无尾轮分支 | 1 |
对齐约束的平等性:16 对齐是 Cube 计算粒度(16×16×16 基本块)的硬件要求,四种策略的 tile——无论重切前后——都必须是 16 的倍数,无一例外。差异只在枚举空间(A1b 对尾轮子区域、方案 B 对全局)与 tile 套数。
A1b 的理想 tile(方形同步缩小):
再按 16 对齐调整,使重切块数 $\lceil r \cdot sM \cdot sN / (sM_t \cdot sN_t) \rceil \le C$;也允许非方形枚举($(sM_t, sN_t)$ 独立按 16 步进)选最贴合的组合。
A1a 是 A1b 的真子集:A1a 的尾轮 tile 为 $(sM, sN/s^*)$ 或 $(sM/s^*, sN)$($s^* \in \{2, \ldots, \lfloor C/r \rfloor\}$ 整数),恰为 A1b 枚举空间中 $sM_t = sM$、$sN_t = sN/s^*$ 的特定组合——其 16 对齐、dValue、块数约束在 A1b 枚举中同样检查。记 A1b 枚举空间为 $\Omega_{A1b}$,A1a 解空间 $\Omega_{A1a} \subseteq \Omega_{A1b}$,枚举取最优:
A1b 恒不劣于 A1a,且通常严格优:A1a 受"$s^*$ 整数"与"每块切同样份数"双重限制($r > C/2$ 时 $s^* = \lfloor C/r \rfloor = 1$ 完全失效),A1b 允许非整数比例与凑满 C 核(无 $r \le C/2$ 限制)。下文 A1 一律指 A1b(A1a 视为退化形态)。
A1a 时 $T_{tail} = T_{block}/s^*$(计算 Bound);A1b 凑满 C 核时尾轮小块面积为 $\rho \cdot sM \cdot sN$,计算 Bound 下 $T_{tail}^{A1b} = \rho \cdot T_{block}$。
本章适用条件:主导项为面积型($\propto sM \cdot sN$)——MMAD 主导($K \ge 304$ 且 tile 判据满足,§2.1)或 FIX 主导($K < 304$)。两子型缩放律相同(都 $\propto$ 面积),推导中以 $T_{MMAD}$ 为记号;FIX 主导时将 $T_{MMAD}$ 替换为 $T_{FIX}$ 结论不变。主流 prefill/decode case 均属本章范畴。
A1a 可行时($r \le C/2$):$\Delta_{A0 \to A1a} = T_{MMAD}(1 - 1/s^*)$。$r > C/2$ 时 A1a 失效,但 A1b 不退化:
A1 恒优于 A0($r > 0$),A0 在计算 Bound 下永不最优。
代入 $T_{block}' = T_{MMAD}/g$ 与 $n_{wave}/g = N_{blk}/C = n_{wave}-1+\rho$:
方案 B 恒优于 A0(可行性校验:搬移掩盖 $\sqrt{g} \le T_{MMAD}/T_{MTE2}$;分解对齐)。
A1b 凑满核时 $T_{A1b} = T_{MMAD}(n_{wave} - 1 + \rho)$,与 $T_B = T_{MMAD}(n_{wave} - 1 + r/C)$ 理论时延严格相等——两者都是"总计算量/C"(面积型主导项下时延与切分方式无关,只要轮轮满载)。
结构性差异在搬入总量。先交代符号(v1.3 补充,避免误读):
两策略的周长和:
A1b:主轮 $(n_{wave}-1)C$ 块保持大 tile(周长 $2s$)+ 尾轮 C 块小 tile(边长 $s\sqrt{\rho}$,周长 $2s\sqrt{\rho}$):
方案 B:$n_{wave} C$ 块均匀 tile,边长 $s_B = s\sqrt{N_{blk}/(n_{wave}C)}$(总面积守恒 $n_{wave} C \cdot s_B^2 = N_{blk} \cdot s^2$):
比较(两边约去 $2sC$):
均值不等式:A1b 周长和恒 ≤ 方案 B(等号当 $\rho = 1$ 即无尾轮)。搬入总量少意味着 L2 重复读少、周长型项的掩盖余量更大。
结论(面积型主导):A1b 与方案 B 理论时延严格相等;离散 16 对齐后互有胜负(数值依赖、无系统性优劣——对齐约束对两者平等);A1b 搬入总量恒 ≤ 方案 B(结构性)。工程简洁选方案 B(一套 tile);追求搬移下限选 A1b。
*例 1(MMAD 主导,$r > C/2$)*:Batch=1、M=N=1792、K=4096、BF16、C=32。首轮 $mCnt=nCnt=7$($sM=sN=256$),$N_{blk}=49$、$n_{wave}=2$、$r=17$、$\rho=0.53$。单块 $T_{MMAD}=35.3\mu s$、$T_{MTE2}^{L2}=25.8\mu s$、$T_{FIX}=2.6\mu s$——MMAD 面积型主导 ✓。
A1b 与方案 B 打平(54.6 vs 54.1,差 <1%,纯离散对齐的数值依赖)。相对 A0 均省约 23%。
*例 2(MMAD 主导,$r \mid C$ 完美点)*:M=1536、N=2048、K=4096、BF16。$N_{blk}=48$、$r=16$。A1a:$s^* = 2 = C/r$ 完美,$T_{A1a} = 53.0\mu s$;方案 B:$T_B = 53.0\mu s$。A1a = 方案 B($1/s^* = r/C$),选 A1a(搬移增量小)。
*例 3(FIX 主导,$r$ 小、尾轮小块搬入翻出)*:M=N=1536、K=256、BF16。$mCnt=nCnt=6$、$N_{blk}=36$、$n_{wave}=2$、$r=4$、$\rho=0.125$。单块 $T_{FIX} = 2.62\mu s$、$T_{MMAD}=2.21\mu s$、$T_{MTE2}^{L2}=1.61\mu s$——FIX 面积型主导($K=256 < 304$)。
翻出效应下方案 B 微优 8.5%——$r$ 小时 A1b 的尾轮 tile 缩得太小、搬入翻出,方案 B 的全局 tile 缩得温和($1/\sqrt{g} = 0.75 > \sqrt{\rho} = 0.35$)不翻出。
*例 4(FIX 主导,$r$ 大、不翻出,打平)*:M=N=2304、K=256、BF16。$mCnt=nCnt=9$、$N_{blk}=81$、$n_{wave}=3$、$r=17$、$\rho=0.53$。单块 $T_{FIX}=2.62\mu s$ 主导。
打平(6.71 vs 6.64,差 1%,离散对齐的数值依赖)——面积型主导且尾轮不翻出时 A1b 与方案 B 时延相等(总量守恒)的实证。
本章适用条件:主导项为周长型 $T_{MTE2}$($\propto$ 周长 $(sM+sN)$)——小 tile($sM \cdot sN/(sM+sN) < 93.5$,L2 命中)或工作集超 L2 的 GM 直读($< 304$)场景。主导项 $T_{block} = T_{load} = K(sM + sN) \cdot dtype / BW_{eff}$(§2.1 修正后的 K 版;$K$ 在单 case 三策略比较中为公共因子,可约掉)。
A1a($r \le C/2$):尾轮沿 N 切 $s^*$ 份,小块搬移 $(sM + sN/s^*) k_{L1} dtype$(**A 行带 $[sM, k_{L1}]$ 每个小块都要完整搬一次,不随 $s^*$ 缩小**——结构性弱点),方形下 $T_{tail} = T_{load}(1+1/s^*)/2$:
受 dValue 硬约束 $s^* \le sN \cdot dtype/256\text{B}$(BF16、sN=256 时 $s^* \le 2$)。
A1b(任意 $r$):尾轮区域用 $s_t = s\sqrt{\rho}$ tile 重切凑满 C 核,尾轮总搬移 $= C \cdot 2s\sqrt{\rho} \cdot k_{L1}$,C 核满载聚合带宽 $C \cdot BW_{pc}$:
A1 恒优于 A0(dValue 允许时)。
方案 B 恒优于 A0(dValue 约束 $g \le (sN \cdot dtype/256\text{B})^2$ 满足时)。物理解释:尾轮 $r$ 核聚合带宽仅 $r \cdot BW_{pc}$,搬移不加速;方案 B 让所有轮次满核满带宽。
**(i)无约束 regime($\rho \ge \rho_{dv}$,A1b 可凑满)**:总时延正比于周长和(满载轮聚合带宽相同),由 §4.3 的均值不等式:
A1b 恒不劣于方案 B,$\rho$ 小时优势大($\rho=0.1$、$n_{wave}=2$ 时优 11%)。
(ii)关键结构事实:A1b 的 dValue 约束恒比方案 B 更严。A1b 的尾轮 tile 缩放因子为 $\sqrt{\rho}$,方案 B 的全局 tile 缩放因子为 $1/\sqrt{g} = \sqrt{(n_{wave}-1+\rho)/n_{wave}}$:
物理含义:A1b 只缩尾轮 $r$ 块的区域去凑满 C 核,tile 必须缩得比方案 B 的全局缩放更狠——所以 A1b 的尾轮 tile 更早跌破 dValue 下限。这是方案 B 可能反超的唯一通道。
(iii)三区间判定($\rho_{dv} = (256\text{B}/(sN \cdot dtype))^2$):
| 区间 | 条件 | 结论 |
|---|---|---|
| I | $\rho \ge \rho_{dv}$(A1b 凑满可行;此时 $1/g > \rho \ge \rho_{dv}$ 故方案 B 也可行) | A1b 恒优(均值不等式) |
| II | $\rho < \rho_{dv} \le 1/g$(A1b 卡死、方案 B 可行) | 分界公式判定(下) |
| III | $\rho_{dv} > 1/g > \rho$(都卡死) | A0/A1a 兜底 |
区间 II 中 A1b 退化为 $s_t = 256\text{B}/dtype$(dValue 下限),尾轮块数 $= r/\rho_{dv} < C$(凑不满),尾轮时延 $= \sqrt{\rho_{dv}} \cdot T_{load}$(小块搬移按 $s_t/sN = \sqrt{\rho_{dv}}$ 缩放):
方案 B 严格优当且仅当:
物理解读:A1b 卡死后尾轮时延被锁在 $\sqrt{\rho_{dv}} \cdot T_{load}$(dValue 下限决定),不再随 $\rho$ 减小;而方案 B 的 $n_{wave}/\sqrt{g}$ 随 $\rho$ 减小而降低(全局重切幅度减小)。$\rho$ 足够小(卡死足够深)时方案 B 反超。
访存 Bound 数值实例(周长型主导,v1.3 重新构造):
*例 3(工作集超 L2、GM 直读的周长型,方案 B 不可行)*:Batch=34、M=N=1024、K=2048、BF16,tile $sM=sN=512$。输入总量 $34 \times 2 \times 1024 \times 2048 \times 2 = 285$MB > L2 128MB——工作集超 L2,搬入部分回 GM 直读($BW_{eff} \to BW_{pc}=50$GB/s)。单块:$T_{MMAD} = 70.7\mu s$、$T_{MTE2} = 2048 \times 1024 \times 2/50\text{G} = 83.9\mu s$(周长型主导 ✓:tile 判据 $512^2/1024 = 256 < 304$)、$T_{FIX} = 10.5\mu s$。$N_{blk} = 34 \times 4 = 136$、$n_{wave}=5$、$r=8$、$\rho=0.25 \ge \rho_{dv}=0.0625$。
*例 4(周长型、方案 B 可行的打平区)*:Batch=8、M=N=2176、K=4096、BF16,tile $sM=sN=256$。输入 $8 \times 2 \times 2176 \times 4096 \times 2 = 285$MB 超 L2 → GM 直读周长型(tile 判据 $128 < 304$ ✓)。$T_{load} = 4096 \times 512 \times 2/50\text{G} = 83.9\mu s$。$N_{blk} = 8 \times 81 = 648$、$n_{wave}=21$、$r=8$、$\rho=0.038 < \rho_{dv}=0.25$(A1b 凑满卡死)。
周长型场景的规律:工作集超 L2 的 case 通常 Batch 大或形状大 → $N_{blk}$ 大 → $n_{wave}$ 大 → 尾轮占比小($\rho$ 小或 $w$ 大),损失/收益天然被稀释;且方案 B 的分解可行性($N_{blk}' = n_{wave} C$ 须分解为 $\text{Batch} \cdot mCnt' \cdot nCnt'$ 且 16 对齐 + dValue)在此类场景常不满足。周长型场景的"收益/损失"更多是可行性问题而非时延百分比问题。
主导项判定(§2.1 三维判据):面积型主导 = $T_{MMAD}$ 或 $T_{FIX}$ 最大(tile 判据 $\frac{sM \cdot sN}{sM+sN} \ge 93.5$(L2 命中)且 MMAD/FIX 间由 $K \gtrless 304$ 分);周长型主导 = $T_{MTE2}$ 最大(小 tile 或工作集超 L2 的 GM 直读)。
| 场景 | A0 vs A1 | A0 vs 方案 B | A1 vs 方案 B | 最优策略 |
|---|---|---|---|---|
| 面积型主导,$r \le C/2$ 且 $r \mid C$ | A1a 优 | 方案 B 优 | A1a = 方案 B(选 A1a,搬移少) | A1a |
| 面积型主导,$r \le C/2$ 且 $r \nmid C$ | A1a 优 | 方案 B 优 | 方案 B 略优(取整损失) | A1a/方案 B 皆可 |
| 面积型主导,$r > C/2$ | A1b 优(不退化) | 方案 B 优 | 时延严格相等(总量守恒),离散打平 | A1b 或方案 B(工程简洁选方案 B,搬移下限选 A1b) |
| 面积型主导 + $r$ 小($\rho < (187/s)^2$,尾轮翻出) | A1b 优但尾轮翻出 | 方案 B 优 | 方案 B 微优(~6-8%,翻出效应 §7.2.4) | 方案 B |
| 周长型主导,$\rho \ge \rho_{dv}$ 且方案 B 可行 | A1b 优 | 方案 B 优 | A1b 恒优(均值不等式) | A1b |
| 周长型主导,$\rho < \rho_{dv}$ 且分界公式成立且方案 B 可行 | A1b 部分凑满 | 方案 B 优 | 方案 B 严格优 | 方案 B |
| 周长型主导,$\rho < \rho_{dv}$ 且分界公式不成立 | A1b 部分凑满 | 方案 B 优 | 打平 | A1b/方案 B 皆可 |
| 周长型主导,方案 B 不可行(分解自由度不足:decode 小 M、大 Batch 超 L2) | A1b 优 | 方案 B 不可行 | 不可比(A1b 唯一) | A1b |
| dValue 全面卡死(A1b 也不可凑满) | A1a($s^* \ge 2$)或 A0 | 方案 B 不可行 | — | A1a/A0 |
五步闭式前置计算后查表即得最优策略,无需逐项建模仿真:
决策表:
| # | 条件 | 最优策略 | 端到端时延 |
|---|---|---|---|
| 1 | $r = 0$ | A0(无尾轮) | $n_{wave} \cdot T_{block}$ |
| 2 | 面积型主导,$0 < r \le C/2$,无翻出 | A1a,$s^* = \lfloor C/r \rfloor$ | $T_{block}(n_{wave} - 1 + 1/s^*)$ |
| 3 | 面积型主导,$r > C/2$,无翻出 | A1b 或方案 B——时延严格相等 | $T_{block}(n_{wave} - 1 + \rho)$ |
| 4 | 面积型主导,$\rho < (187/s)^2$(翻出) | 方案 B(翻出时 A1b 尾轮变周长型) | $T_{block} \cdot n_{wave}/g$(近似) |
| 5 | 周长型主导,$\rho \ge \rho_{dv}$,方案 B 可行 | A1b | $T_{load}(n_{wave} - 1 + \sqrt{\rho})$ |
| 6 | 周长型主导,$\rho < \rho_{dv}$ 且 $\sqrt{\rho_{dv}} > n_{wave}/\sqrt{g} - (n_{wave}-1)$ 且方案 B 可行 | 方案 B | $T_{load} \cdot n_{wave}/\sqrt{g}$ |
| 7 | 周长型主导,方案 B 不可行 | A1b(凑不满则部分凑满)/ A1a / A0 | 按实际分解计算 |
判定流程图:
[Batch, M, K, N, dtype]
│
▼
<首轮枚举(§2.5)→ mCnt, nCnt, sM, sN>
│
▼
<N_blk, n_wave, r, ρ = r/C>
│
├─ r = 0 ────────────────────▶ A0(无尾轮)
▼
<三维主导项判定(§2.1)>
│
├─ 面积型(MMAD 或 FIX 最大)
│ │
│ ├─ ρ < (187/s)²(尾轮翻出)? ── 是 ─▶ 方案 B
│ │ 否 ── r ≤ C/2 ? ── 是 ─▶ A1a(s* = ⌊C/r⌋)
│ │ 否 ─▶ A1b 或方案 B(时延严格相等)
│ │ (工程简洁选方案 B)
│
└─ 周长型(MTE2 最大)
│
├─ 方案 B 分解可行 ? ── 否 ─▶ A1b(唯一可行重切)/ A1a / A0
│
└─ 可行 ── ρ ≥ ρ_dv ? ── 是 ─▶ A1b(周长和恒 ≤ 方案 B)
└─ 否 ─▶ 分界公式判定:
√ρ_dv > n_wave/√g −(n_wave−1) ? ── 是 ─▶ 方案 B
└─ 否 ─▶ A1b/方案 B 打平
前文方案 B(整轮均匀重切)与 A1b 的分界判定需要逐 case 计算 $\rho$、$\rho_{dv}$、分界公式——本节回答两个工程问题:①能否给方案 B 一个无脑版门限(满足条件就直接整数轮满核切,不做 A1b/方案 B 分界)?②若完全采用方案 B(无论无脑版 B1 还是完整版 B0),相对理论最优的 A1b 会损失多少、最大损失多少?
B1 门限推导:B1 要成立需两个条件——
*条件 1(有尾轮)*:$r = N_{blk} \bmod C > 0$(否则无尾轮可处理);
*条件 2(可行 + 值得)*:B0 恒优于 A0(§4.2/§5.2 已证),故"可行即值得"。可行性只在访存 Bound 下受 dValue 约束($g \le g_{dv}$);计算 Bound 下无条件(dValue 放宽为搬移掩盖,且 §4.3 已证方案 B 与 A1b 时延严格相等)。
合起来,B1 的判定门限(闭式,仅依赖 Batch/M/K/N/dtype):
即:**计算 Bound 时无条件直接整数轮满核切;访存 Bound 时满足 dValue 门限($g \le g_{dv}$)就直接整数轮满核切**。门限的全部输入($r$、$g$、$K^*$、$sN$)都来自首轮切分结果,host 端一次计算即可。
B0/B1 相对 A1b 的"损失"定义为 $T_B/T_{A1b} - 1$(方案 B 更慢为正)。按 §2.1 的主导项缩放类型分两类讨论——**v1.3 修正模型($T_{MTE2}$ 用全量 K、三维主导项判定)下,结论与 v1.2 有实质差异**。
面积型主导项(MMAD 或 FIX)的时延 $\propto$ 块面积。设主导项单块时延 $T_{block} = c \cdot sM \cdot sN$($c$ 为与 tile 无关的系数:MMAD 时 $c = 2K/Q_{16}$,FIX 时 $c = outB/BW_{pc}$)。总量守恒:所有块的面积之和 = 总输出 $\text{Batch} \cdot M \cdot N$,与切分方式无关。轮轮满载时:
A1b(主轮整块 + 尾轮凑满)与方案 B(全局均匀重切)都做到轮轮满载 → 时延严格相等,损失恒为 0。
*证明*:$T_{A1b} = (n_{wave}-1) \cdot c \cdot A + \rho \cdot c \cdot A = cA(n_{wave}-1+\rho)$(尾轮凑满时尾轮小块面积 $= \rho A$、时延 $\rho \cdot cA$);$T_B = n_{wave} \cdot c \cdot A/g = cA(n_{wave}-1+\rho)$($n_{wave}/g = N_{blk}/C = n_{wave}-1+\rho$)。严格相等。
离散 16 对齐后互有胜负(<3%,数值依赖、无系统性方向)。面积型主导下 B1 零损失——这是 v1.3 相对 v1.2 最重要的修正(v1.2 用 $k_{L1}$ 版错误模型把大量面积型 case 误标为"访存 Bound"并算出 5.4%~30% 的虚假损失)。
周长型主导(MTE2 最大:小 tile 或工作集超 L2 的 GM 直读)时,时延 $\propto$ 周长和。分四步:
第一步:两策略时延表达式。A1b 主轮整块 + 尾轮 tile 缩 $\sqrt{\rho}$ 凑满 C 核:
方案 B:$N_{blk}' = n_{wave} C$ 块均匀重切、单块搬移缩 $\sqrt{g}$ 倍($g = n_{wave} C/N_{blk}$):
第二步:消元。$N_{blk}/C = n_{wave}-1+\rho$ 代入 $1/\sqrt{g} = \sqrt{N_{blk}/(n_{wave} C)}$:
第三步:作比。
第四步:最大值定位。$f$ 对 $\rho$ 单调减、对 $n_{wave}$ 单调减($\rho \to 1$ 或 $n_{wave} \to \infty$ 时 $f \to 1$),最大损失在 $\rho = \rho_{min} = \max(1/C, \rho_{dv})$、$n_{wave} = 2$ 处:
| $sN$(BF16) | $\rho_{dv}$ | $f_{max}-1$(理论,方形近似) |
|---|---|---|
| 256 | 0.25(r=8) | 5.4% |
| 512 | 0.0625(r=2) | 16.6% |
数值核验($sN=256$、$r=8$、$n_{wave}=2$、$N_{blk}=40$、$g=1.6$):$T_B = 2/\sqrt{1.6} = 1.581\,T_{load}$ vs $T_{A1b} = (1+\sqrt{0.25})\,T_{load} = 1.5\,T_{load}$ → $f = 1.054$ ✓。
损失公式建立在三个近似上,逐一审视:
(1)方形近似与非方形惩罚。$N_{blk}'$ 的整数分解偏离方形比例时周长和上升,惩罚因子 $p(\lambda) = (\sqrt{\lambda} + 1/\sqrt{\lambda})/2 \ge 1$($\lambda$ 为分解长宽比)。修正后:
非方形惩罚同时作用于 $p_B$(方案 B 全局分解)与 $p_t$(A1b 尾轮分解)——损失方向由均值不等式的结构保持(两策略在同一基准形状上缩放),但大小偏离理论值:$p_B > p_t$ 时放大、$p_B < p_t$ 时缩小甚至反超。理论值应视为损失下界。
**(2)$k_{L1}$ 的角色更正**(v1.3 修正)。$k_{L1}$ 不进时延分子(§2.1 已证稳态约掉),其影响通过 dValue/min_TileSize 约束体现:重切使周长缩小 → $k_{L1}$ 的 L1 容量上限放松,但 dValue 下限 $sN' \cdot dtype \ge 256$B 不变——**约束检查的对象是 tile 尺寸本身,$k_{L1}$ 不产生额外的时延放大**。v1.2 中"$k_{L1}$ 跨 regime 使搬移反升"的解释是 $k_{L1}$ 版错误建模的残余,本版删除。
(3)方案 B 的可行性约束(周长型场景的决定性因素)。方案 B 要求 $N_{blk}' = n_{wave} C$ 分解为 $\text{Batch} \cdot mCnt' \cdot nCnt'$ 且 16 对齐 + dValue。三重约束叠加下,周长型场景(工作集超 L2 的大 Batch 小形状、或 decode 小 M)中方案 B 常不可行:
此时"损失"问题转化为可行性问题——方案 B 不可用,A1b/A1a/A0 承接。
面积型主导下 A1b 的尾轮 tile 缩到 $s_t = s\sqrt{\rho}$;tile 缩小使周长/面积比上升,$s_t$ 跌破搬入临界($s_t \lesssim 187$,L2 命中)时尾轮小块的主导项从面积型翻转为周长型(搬入翻出),尾轮时延高于面积型公式 $\rho \cdot T_{block}$。翻转条件:
$s=256$ 时 $\rho < 0.533$($r < 17$)即翻出。此时 A1b 尾轮时延按周长型计算($T_{tail} = T_{load}(s_t)$),方案 B 的全局 tile $s/\sqrt{g}$ 缩得更温和($1/\sqrt{g} > \sqrt{\rho}$ 恒成立)更不易翻出——**$r$ 小的面积型 case 中方案 B 可微优(例:M=N=1536、K=256 的 FIX 主导 case,方案 B 微优约 6%)**。
大模型推理 BMM 典型形状:prefill Batch∈[2,128]、M∈[4k,128k]、K/N∈[128,10240];decode Batch∈[2,128]、M∈[1,128]、K/N∈[128,10240]。
**(1)prefill(M 大):面积型主导 + 大 $n_{wave}$ → 损失 0**
(2)decode(M ≤ 128 小):周长型主导但方案 B 常不可行 → A1b 主力
(3)主流场景损失结论
| 场景 | 主导项类型 | 方案 B 可行性 | B0/B1 相对 A1b 损失 |
|---|---|---|---|
| prefill,$M,N$ 为 256 倍数 | — | — | **0($r=0$ 无尾轮)** |
| prefill,$M$ 奇异 | 面积型 | 可行 | 0(严格打平;离散 <3% 互有胜负) |
| decode,$M \le 128$ | 周长型 | 常不可行 | 不可比(A1b 唯一可行) |
| 工作集超 L2 的大 Batch case | 周长型 | 常不可行 | 不可比 / A1b 优 |
| 周长型 + 方案 B 可行 + $\rho \ge \rho_{dv}$ + $n_{wave}=2$ | 周长型 | 可行 | ≤ 5.4%($sN=256$)/ 16.6%($sN=512$,理论下界) |
| 面积型 + $r$ 小($\rho < 0.53$) | 面积型(尾轮翻出周长型) | 可行 | ≤ 0(方案 B 微优 ~6%,翻出效应) |
**v1.2 的"~30% 极端例损失"是 $k_{L1}$ 错误模型的产物——正确模型(K 版 + 三维主导项)下该例(M=16896、N=512、K=140)为 FIX 面积型主导,A1b 与方案 B 打平(差异 <1%)。主流 prefill/decode case 中 B1 零损失或不可比(方案 B 不可行时 A1b 承接)——B1 在主流场景是安全的工程选择。**
| 场景(修正模型:K 版 $T_{MTE2}$ + 三维主导项) | B0/B1 相对 A1b 的损失 | 说明 |
|---|---|---|
| 面积型主导(MMAD:$K \ge 304$;FIX:$K < 304$ 且 tile 大) | 0(严格打平,总量守恒) | 主流 prefill/decode 均属此类;离散对齐 <3% 互有胜负 |
| 面积型主导 + $r$ 小($\rho < (187/s)^2$,尾轮翻出) | ≤ 0(方案 B 微优 ~6-8%) | 翻出效应(§7.2.4),A1b 尾轮 tile 太小 |
| 周长型主导(MTE2),方案 B 可行,$\rho \ge \rho_{dv}$,$n_{wave}=2$ | ≤ 5.4%($sN=256$)/ 16.6%($sN=512$,理论下界) | $f(\rho)-1$ 公式;实际 case 罕见 |
| 周长型主导,方案 B 不可行(decode 小 M、大 Batch 超 L2) | 不可比(A1b 唯一可行) | 可行性问题而非损失问题 |
| 周长型主导,$\rho < \rho_{dv}$(A1b dValue 卡死)且方案 B 可行 | ≤ 0(方案 B 反超)或打平 | 分界公式 §5.3(iii) |
| 主流 prefill/decode case | 0 ~ 2.5% | §7.2.5 |
工程建议(v1.3 刷新):
op_kernel/arch35/batch_mat_mul_v3_asw_block_advanced.h(UpdateBasicIndex:index = newBlockIdx + roundIdx × usedCoreNum,if (index < totalCnt) 跳过空转核——即本文的策略 A0)