From c8fabc39db528b7ab4b79a05b9e6a8eb8d76b67c Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 24 Aug 2026 03:42:59 +0000 Subject: [PATCH] =?UTF-8?q?v0.9:=20MergeBatch=20b=5Fcore=3D2=20drain?= =?UTF-8?q?=E6=9A=B4=E9=9C=B2=E8=A7=A3=E9=87=8A=E6=BE=84=E6=B8=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BMM算子优化分析_Release/BMM算子优化分析_v0.9.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.9.md b/BMM算子优化分析_Release/BMM算子优化分析_v0.9.md index a3809d1..261c4af 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.9.md +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.9.md @@ -140,7 +140,7 @@ $$ 1. **batch 关系与每核份额**:无广播才能逐 batch 对应合并;每核至少分到 $2b_0$ 个 batch——$b_0$ 是合并搬移有收益的最小合并数(取 2),2 组起步才能构成合并组间乒乓流水(即 $b_{core} \ge 4$)。 - **为何不允许 $b_{core}=2$**(合并后每核仅 1 个合并 batch):此时与 IterBatch($b_{core}=2$,形态 b/d)对比——MergeBatch 合并后 $k_{L1}$ 减半($L1/((2M{+}2N)\cdot\text{dtype})$ vs $L1/((M{+}N)\cdot\text{dtype})$),K 分块数翻倍;IterBatch 有 2 个 batch,每批 K 分块数不变。两者总 K 分块数相同、每块搬移量相同(均填满 L1),**总搬移时延相同**。访存 Bound 下(条件 5 保证),MergeBatch 的 2× 冗余计算被搬移掩盖,总时延 ≈ IterBatch。但 MergeBatch 引入了 50% 冗余算力——一旦 tile 内 K 段过短导致计算暴露,性能退化。$b_{core} \ge 2b_0$ 确保合并后仍有 ≥2 个合并 batch 做 batch 级乒乓,且 $b_{core}$ 越大 MergeBatch 相对 IterBatch 的 dValue 优势越明显。 + **为何不允许 $b_{core}=2$**(合并后每核仅 1 个合并 batch):此时与 IterBatch($b_{core}=2$,形态 b/d)对比——MergeBatch 合并后 $k_{L1}$ 减半($L1/((2M{+}2N)\cdot\text{dtype})$ vs $L1/((M{+}N)\cdot\text{dtype})$),K 分块数翻倍;IterBatch 有 2 个 batch,每批 K 分块数不变。两者总 K 分块数相同、每块搬移量相同(均填满 L1),**总搬移时延相同**。访存 Bound 下(条件 5 保证),MergeBatch 的 2× 冗余计算在稳态流水中被搬移掩盖(第 $i$ 块计算与第 $i{+}1$ 块搬移交叠),总时延 ≈ IterBatch。但流水 drain 阶段(最后一个 K 分块无下一块搬移可交叠)计算暴露,MergeBatch 每分块计算量 = 2× IterBatch → drain 暴露也是 2×。K 分块数越少,暴露占比越大($\sim T_{comp}/(n \cdot T_{load})$);$b_{core} \ge 2b_0$ 确保合并后仍有 ≥2 个合并 batch 做 batch 级乒乓,且 $b_{core}$ 越大 MergeBatch 相对 IterBatch 的 dValue 优势越明显。 2. **L0C 容量**:合并 $b_0$ 个 batch 的输出块 $[b_0M, b_0N]$(FP32 累加、双缓冲两份)必须放得下 L0C;连最小合并都放不下,合并无从谈起。 3. **单核搬移总量**:单核搬移数据总量低于 min_DatamountPerCore 时,GM 带宽利用率上不去(重要性第 2 位的经验约束)。 4. **搬移 tile 大小**:单 batch 单矩阵的最大连续搬移块须达到 min_TileSize;合并是在此之上进一步放大,不是替代。