v0.9: MergeBatch b_core=2 drain暴露解释澄清

This commit is contained in:
2026-08-24 03:42:59 +00:00
parent 73b9cb2b06
commit c8fabc39db

View File

@@ -140,7 +140,7 @@ $$
1. **batch 关系与每核份额**无广播才能逐 batch 对应合并每核至少分到 $2b_0$ batch——$b_0$ 是合并搬移有收益的最小合并数 22 组起步才能构成合并组间乒乓流水 $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合并是在此之上进一步放大不是替代