v0.6 修订:补 MergeBatch 边界 case、降核模式定义与实现

This commit is contained in:
2026-08-22 09:27:28 +00:00
parent fa8896e90c
commit 2502e6fe7e

View File

@@ -300,15 +300,17 @@ mCnt、nCnt 收拢为 blocksPerBatch 的因子(避免碎核尾块);由条
1. $P = \dfrac{B \cdot MN \cdot 4\text{B}}{L0C} \ge C$
2. 无 batch 结构限制BatchA=BatchB、交叉广播均可典型进入路径$B < C$ B 买不满核 $B \ge C$ IterBatch/MergeBatch 条件不满足时的兜底
3. **降核模式**$P < C$ 且不满足 StreamK 进入条件 只用 $\lceil P \rceil$ 个核其余核闲置
### 逐条解释
1. **并行度补齐** L0C 满载为基本块粒度B×M×N 能切出至少 C 个独立输出块则切 M/N或混合切并行度够用 M/N 的固有代价是共享矩阵被多核重复读但共享部分驻留 128MB L2 时重复读以 5.2TB/s 命中 L2 而非 1.6TB/s GM代价大部分被吸收
2. **兜底性质**ASW_Basic 是实践中最常命中的分支——B 可大可小可等 1交叉广播也由此承接对广播侧做 L1/L2 驻留共享关系与切 M/N 同构)。
3. **降核模式**P < C K 也不够格走 StreamK 并行度凑不满核此时与其强行把 M/N 切得更碎tile 跌破 min_TileSizedValue 跌破 128B搬移效率崩塌反而更慢不如**只用 P 个核**、每核承担一个完整输出块L0C 满载粒度其余核闲置这类 case 的时延绝对值小继续切分引入的调度与搬移效率损失大于并行收益——降核是理性选择而非偷懒
### 实现方案
**1、核间切分维度选择按共享代价从低到高** B零共享先试)→ M右矩阵 $KN\cdot\text{dtype} \le L2$ 则驻留 L2)→ N对称)→ 混合切 swizzle + L2 切分管理)→ 降核P 远小于 C StreamK 也不满足时宁可部分核闲置)。
**1、核间切分维度选择按共享代价从低到高** B零共享先试)→ M右矩阵 $KN\cdot\text{dtype} \le L2$ 则驻留 L2)→ N对称)→ 混合切 swizzle + L2 切分管理)→ 降核见第 6 )。
**2、swizzleASW 滑窗蛇形**M 向按窗口 W 分组窗内 N 向蛇形遍历
@@ -324,6 +326,8 @@ $$
**5、内部特化参数极限不是独立分支**单边无 batch 且该侧矩阵小$M \le 256$、$MK\cdot\text{dtype}\cdot 2 \le L1$、对侧每核循环 4 时小侧整个常驻 L1只搬一次L1 全载)。
**6、降核模式实现**tiling `usedCoreNum = ⌈P⌉`不强制 C基本块在 L0C 容量内取最大$M^t N^t \cdot 4\text{B} \le L0C$每核按标准核内流水L1L0CubeL0CFixpipe处理自己的输出块核间无共享无依赖无需 swizzle L2 切分降核后 GM 并发搬移核数若 < minCoreNum带宽利用率上限被压低——这正是降核区 case 时延的瓶颈所在也是"时延绝对值小不再继续优化"的定量注脚
---
## 九、特殊分支
@@ -343,7 +347,7 @@ $$
|---|---|---|---|---|
| ASW_Basic | 7290 | 35.2% | 2 ~ 2048 | 通用B<C PC BC L1 五形态不满足M/N |
| IterBatch | 4544 | 21.9% | 32 ~ 2048 | BC负载均衡L1 五形态之一满足 |
| 降核 ASW_Basic | 3190 | 15.4% | 2 ~ 128 | P<C K 不满足 StreamK 阈值 case时延绝对值小 |
| 降核 ASW_Basic | 3190 | 15.4% | 2 ~ 128 | P<C K 不满足 StreamK 阈值 只用 P 定义与实现见 §.6 |
| 特殊分支 | 1728 | 8.3% | 任意 | K=0 / K=1 |
| MergeBatch | 1674 | 8.1% | 128 ~ 2048 | $b_{core}\ge 4$ $MN \le L0C/(2b_0^2\cdot4\text{B})=8192$ 等五条全过 |
| 转Matmul | 1584 | 7.6% | B=1 | 单边 batch=1 |
@@ -364,11 +368,13 @@ $$
| B | M | N | K | 分支 | 说明 |
|---|---|---|---|---|---|
| 1 | 2048 | 2048 | 2048 | 转Matmul | batch Matmul |
| 128 | 32 | 128 | 64 | IterBatch | MergeBatch 条件 3 不满足单核搬移 80KB < 480KB |
| 128 | 64 | 64 | 512 | **MergeBatch** | 五条全过$b_{core}$=4MN=4096≤8192单核搬移 512KB480KBAI=64<304 |
| 128 | 64 | 64 | 256 | IterBatch | 与上行仅 K 不同单核搬移 256KB < 480KB条件 3 不满足 IterBatch形态 b |
| 512 | 128 | 128 | 128 | IterBatch | MN=16384 > 8192MergeBatch 条件 2 不满足 → 落 IterBatch |
| 32 | 4096 | 4096 | 4096 | ASW_Basic | L1 五形态均不满足M/N 太大),切 M/N |
| 2 | 8192 | 8192 | 1024 | ASW_Basic | B<CP=204832 |
| 16 | 256 | 256 | 128 | 降核 ASW | P=4<32K=128 不满足 StreamK |
| 4 | 128 | 128 | 10240 | StreamK | P=0.25<32K≥8192 |
| 2 | 8192 | 8192 | 1024 | ASW_Basic | B<CP=2048 32 |
| 16 | 256 | 256 | 128 | 降核 ASW | P=4 < 32 K=128 不满足 StreamK 4 其余闲置 |
| 4 | 128 | 128 | 10240 | StreamK | P=0.25 < 32K8192 |
| 2048 | 1024 | 1024 | 512 | IterBatch | batch形态 b |
| 8 | 512 | 512 | 512 | ASW_Basic | B<CP=32 恰好满核 |
| 64 | 64 | 64 | 8192 | IterBatch | M×N K 形态 e |
@@ -376,6 +382,7 @@ $$
### 遍历结论
1. **六个分支全部有真实 case 命中**无空分支覆盖矩阵无空洞P<C K 小的残余由降核 ASW_Basic 兜底——此时时延绝对值小调度开销主导分支选择不敏感
2. **MergeBatch 的区域由条件 2$MN \le 8192$)与条件 3480KB)夹出** M×N 且单核搬移量足够的大 batch case两个条件缺一不可 B=128/M=32/N=128/K=64 恰因条件 3 落入 IterBatch
2. **MergeBatch 的区域由条件 2$MN \le 8192$)与条件 3min_DatamountPerCore)夹出** M×N 且单核搬移量足够的大 batch case两个条件缺一不可典型分界对照B=128/M=N=64 K=256 单核搬移 256KB 不达标落 IterBatchK=512 512KB 达标进 MergeBatch
3. **IterBatch 与 ASW_Basic 的分界就是 L1 五形态是否满足** batch 输入 $(MK+KN)\cdot\text{dtype}$ 相对 L1 的比例决定归属——这正是"核内零重复读"原则的定量体现
4. **StreamK 的区域为 P<C 且 K≥8192**B M/N K 大的"细长" case与理论预期一致
4. **StreamK 的区域为 P<C 且 K≥8192**B M/N K 大的"细长" case与理论预期一致
5. **降核 ASW_Basic 是 P<C 且 K 小区域的理性归宿**B∈[2,128] 15.4%并行度凑不满 K 又不划算时只用 P 个核每核一个 L0C 满载输出块比强行碎切tile 跌破搬移效率下限更快