diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html b/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html index 395cecf..30b18f2 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html @@ -141,23 +141,35 @@ $$
MergeBatch vs IterBatch 分界建模:
-*一阶流水模型*:设 $n_K = K/k_{L1}$,每分块搬移 $T_{load} = k_{L1}(M{+}N)\cdot\text{dtype}/BW_{pc}$,每分块计算 $T_{comp} = 2MN \cdot k_{L1}/Q_{16}$,输出写回 $T_{write} = MN \cdot outB/W_{GM}$。
-IterBatch($b_{core}$ 个 batch/核,unitflag 交叠 batch 间 drain/startup):
-MergeBatch(合并后 $k_{L1}$ 减半 → $n_K$ 翻倍,每分块搬移量不变,每分块计算量 ×b₀,合并 batch 数 = $b_{core}/b_0$):
-条件 5 保证合并后仍访存 Bound($T_{load} > b_0 \cdot T_{comp}$),此时:
+*执行模型*:两分支的核间切分相同——B 维切分到 C 核,每核 $b_{core} = B/C$ 个 batch;核内不切 M/N。差异在核内 K 维处理:
+*符号*:
+| 符号 | 含义 | 表达式 |
|---|---|---|
| $k_{L1}$ | L1 级 K 分块粒度(双缓冲) | $\min\big(K,\; L1/(2(M{+}N)\cdot\text{dtype})\big)$ |
| $n_K$ | K 分块数 | $\lceil K/k_{L1} \rceil$ |
| $T_{load}$ | 每 K 分块搬移时延 | $k_{L1}(M{+}N)\cdot\text{dtype}/BW_{pc}$ |
| $T_{comp}$ | 每 K 分块计算时延 | $2MN \cdot k_{L1}/Q_{16}$ |
| $T_{write}$ | 单 batch 输出写回时延 | $MN \cdot outB/W_{GM}$ |
| $T_{bd}$ | batch 边界固定开销 | fixpipe 同步 + L1 状态切换 + 流水线冲刷 |
| $BW_{pc}$ | 单核 GM 带宽份额 | $W_{GM}/C$ |
*一阶流水模型*(unitflag 交叠 batch 间 drain/startup):
+ MergeBatch 合并后 $k_{L1}^m = \min(K,\; k_{L1}/b_0)$——L1 绑定($k_{L1} 条件 5 保证合并后仍访存 Bound($T_{load} > b_0 T_{comp}$),此时: 一阶模型下 MergeBatch 始终不优于 IterBatch——稳态吞吐相同(总搬移量、每块大小、总块数都相同),MergeBatch 的 drain 暴露是 IterBatch 的 $b_0$ 倍。 *二阶修正——batch 边界固定开销*:每个 batch 边界有固定开销 $T_{bd}$(fixpipe 同步、L1 状态切换、流水线冲刷),MergeBatch 边界数少 $b_0$ 倍: *二阶修正——batch 边界固定开销*:每 batch 边界有固定开销 $T_{bd}$,MergeBatch 边界数少 $b_0$ 倍: MergeBatch 净收益 = 边界节省 - drain 惩罚: MergeBatch 优于 IterBatch 的分界条件: $T_{comp}$ 的取值分两种情形——$k_{L1}$ 被 L1 绑定($k_{L1} < K$)时 $T_{comp}$ 为单 K 分块计算;$k_{L1}$ 被 K 截断($k_{L1} = K$,单分块)时 MergeBatch 的 $k_{L1}$ 不减半 → $T_{comp}^m = b_0^2 \cdot T_{comp}$,惩罚升至 $(b_0^2-1)T_{comp} + (b_0-1)T_{write}$,分界更严格。 条件 1($b_{core} \ge 2b_0$)是该分界在典型 $T_{bd}$ 下的保守近似:$b_{core} \ge 4$ 对应 $T_{bd} \ge b_0(T_{comp}+T_{write})/4$。 L0C 利用率说明:小 MN 时 IterBatch 的 L0C tile($MN \cdot 4\text{B}$)远小于 L0C 容量(256KB),MergeBatch 合并后 $b_0^2 MN \cdot 4\text{B}$ 更接近满载。但访存 Bound 下计算被搬移掩盖,L0C 利用率不影响总时延——不构成 MergeBatch 的优势。 分界条件(MergeBatch 优于 IterBatch 当且仅当 $\Delta = T_{mb} - T_{iter} < 0$): K 截断时 MergeBatch 的 $k_{L1}$ 不减半 → 每分块计算量 $b_0^2$ 倍(而非 $b_0$ 倍)→ drain 惩罚更大。小 MN 时 $T_{comp}$ 小 → penalty 小 → MergeBatch 更容易赢;大 B 时 $b_{core}$ 大 → 边界节省多 → MergeBatch 更容易赢。 条件 1($b_{core} \ge 2b_0$)是该分界在典型 $T_{bd}$ 下的保守近似。精确边界依赖 $T_{bd}$ 实测标定。 L0C 利用率说明:小 MN 时 IterBatch 的 L0C tile($MN \cdot 4\text{B}$)远小于 L0C 容量,MergeBatch 合并后更接近满载。但访存 Bound 下计算被搬移掩盖,L0C 利用率不影响总时延——不构成 MergeBatch 的优势。