diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html b/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html index 726da8c..d28bd91 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.91.html @@ -153,22 +153,23 @@ $$
*一阶流水模型*(unitflag 交叠 batch 间 drain/startup):
-MergeBatch 合并后 $k_{L1}^m = \min(K,\; k_{L1}/b_0)$——L1 绑定($k_{L1}<K$)时 $k_{L1}^m = k_{L1}/b_0$;K 截断($k_{L1}=K$)时 $k_{L1}^m = K$ 不减半。以 L1 绑定为例:
-条件 5 保证合并后仍访存 Bound($T_{load} > b_0 T_{comp}$),此时:
-一阶模型下 MergeBatch 始终不优于 IterBatch——稳态吞吐相同(总搬移量、每块大小、总块数都相同),MergeBatch 的 drain 暴露是 IterBatch 的 $b_0$ 倍。
-*二阶修正——batch 边界固定开销*:每 batch 边界有固定开销 $T_{bd}$,MergeBatch 边界数少 $b_0$ 倍:
-分界条件(MergeBatch 优于 IterBatch 当且仅当 $\Delta = T_{mb} - T_{iter} < 0$):
+*端到端时延模型*:对每核执行过程建模。稳态流水(unitflag 交叠 batch 间 drain/startup)加上 batch 边界固定开销 $T_{bd}$(每边界一次):
+其中 MergeBatch 合并后 $k_{L1}^m = \min(K,\; k_{L1}/b_0)$——L1 绑定($k_{L1}<K$)时 $k_{L1}^m = k_{L1}/b_0$;K 截断($k_{L1}=K$)时 $k_{L1}^m = K$ 不减半。以 L1 绑定为例。
+条件 5 保证合并后仍访存 Bound($T_{load} > b_0 T_{comp}$),两式相减:
+分界条件(MergeBatch 优于 IterBatch 当且仅当 $\Delta < 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}$ 实测标定。
+penalty 两种情形的含义:drain 暴露 = 末(合并)batch 最后一个 K 分块的计算时延 + 输出写回时延——这部分没有下一块搬移可交叠,是流水线的 drain 尾部。
+小 MN 时 $T_{comp}$ 小 → penalty 小 → MergeBatch 更容易赢;大 B 时 $b_{core}$ 大 → 边界节省多 → MergeBatch 更容易赢。条件 1($b_{core} \ge 2b_0$)是该分界在典型 $T_{bd}$ 下的保守近似,精确边界依赖 $T_{bd}$ 实测标定。
**$T_{bd}$ 的物理成因**(batch 边界处硬件必须完成的固定动作):
从 IterBatch 的 kernel 侧源码(cmct/block/block_mmad_iterbatch.h)可直接观察到 batch 边界的 Set/Wait 同步序列:
// 当前 batch 最后一个 K 分块结束后:
@@ -187,9 +188,9 @@ $$
证据来源:
证据 文件 内容
MMAD→Fixpipe 同步开销存在 CANN社区版9.2.0-beta.1/02_API参考/AscendC_API/180_..._UnitFlag.md"未开启UnitFlag功能时,MMAD和FIXPIPE是指令级别的同步……流水串行";实测 7.3% 改善(M=128,N=30720,K=64)
-同步指令是高开销指令 CANN社区版9.2.0-beta.1/01_AscendC算子开发/260_..._SIMT算子性能优化.md"除法、取模、同步、原子操作等都属于高开销指令"
编译器默认插入同步指令 CANN社区版9.2.0-beta.1/01_AscendC算子开发/048_..._算子编译基本用法.md"默认会插入内存同步指令……这些同步指令会带来性能开销"
同步机制是架构级关注点 00_硬件/昇腾950_NPU架构白皮书.pdf §4.1.6新增 BufferID 同步机制替代 set_flag/wait_flag——"降低了同步的复杂度"
+ 注:非融合场景下 IterBatch/MergeBatch 仅使用 AIC(Cube),AIV 不参与(kernel_matmul_iterbatch.h line 295-297:if (!enableFusion) { if ASCEND_IS_AIV { return; } }),故不引用 AIV 侧同步文献。
$T_{bd}$ ≈ fixpipe 启动握手延迟(寄存器写入 + DMA 启动),量级估计为数十 ns。知识库未给出精确数值,需实测标定。
这些开销与 batch 的计算量无关,是每次 batch 切换的固定成本。大 batch 时被大量计算分摊,占比可忽略;小 batch 时每个 batch 绝对时延短,边界开销占比显著。MergeBatch 把 $b_0$ 个 batch 并为一次大矩阵计算,边界数降 $b_0$ 倍——这是 MergeBatch 的结构性收益来源。
MergeBatch vs IterBatch 优势总结: