diff --git a/BMM算子优化分析_Release/BMM算子优化分析_v0.92.md b/BMM算子优化分析_Release/BMM算子优化分析_v0.92.md index 15cec58..18bfb10 100644 --- a/BMM算子优化分析_Release/BMM算子优化分析_v0.92.md +++ b/BMM算子优化分析_Release/BMM算子优化分析_v0.92.md @@ -160,20 +160,28 @@ $$ *端到端时延模型*:对每核执行过程建模。稳态流水(unitflag 交叠 batch 间 drain/startup)加上 batch 边界固定开销 $T_{bd}$(每边界一次): - $$T_{iter} = \underbrace{b_{core} \cdot n_K \cdot \max(T_{load},\, T_{comp})}_{\text{稳态流水}} + \underbrace{T_{comp} + T_{write}}_{\text{末 batch drain}} + \underbrace{b_{core} \cdot T_{bd}}_{\text{边界开销}}$$ + $$ + T_{iter} = \underbrace{b_{core} \cdot n_K \cdot \max(T_{load},\, T_{comp})}_{\text{稳态流水}} + \underbrace{T_{comp} + T_{write}}_{\text{末 batch drain}} + \underbrace{b_{core} \cdot T_{bd}}_{\text{边界开销}} + $$ - $$T_{mb} = \underbrace{b_{core} \cdot n_K \cdot \max(T_{load},\, b_0 T_{comp})}_{\text{稳态流水}} + \underbrace{b_0(T_{comp} + T_{write})}_{\text{末合并 batch drain}} + \underbrace{\frac{b_{core}}{b_0} \cdot T_{bd}}_{\text{边界开销}}$$ + $$ + T_{mb} = \underbrace{b_{core} \cdot n_K \cdot \max(T_{load},\, b_0 T_{comp})}_{\text{稳态流水}} + \underbrace{b_0(T_{comp} + T_{write})}_{\text{末合并 batch drain}} + \underbrace{\frac{b_{core}}{b_0} \cdot T_{bd}}_{\text{边界开销}} + $$ 其中 MergeBatch 合并后 $k_{L1}^m = \min(K,\; k_{L1}/b_0)$——L1 绑定($k_{L1} b_0 T_{comp}$),两式相减: - $$\Delta = T_{mb} - T_{iter} = \underbrace{(b_0-1)(T_{comp} + T_{write})}_{\text{drain 惩罚}} - \underbrace{b_{core}\Big(1-\frac{1}{b_0}\Big) T_{bd}}_{\text{边界节省}}$$ + $$ + \Delta = T_{mb} - T_{iter} = \underbrace{(b_0-1)(T_{comp} + T_{write})}_{\text{drain 惩罚}} - \underbrace{b_{core}\Big(1-\frac{1}{b_0}\Big) T_{bd}}_{\text{边界节省}} + $$ **分界条件**(MergeBatch 优于 IterBatch 当且仅当 $\Delta < 0$): - $$b_{core} > \frac{b_0 \cdot \text{penalty}}{T_{bd}},\qquad - \text{penalty} = \begin{cases} (b_0-1)(T_{comp} + T_{write}) & \text{L1 绑定(}k_{L1} \lt K\text{)} \\ (b_0^2-1)T_{comp} + (b_0-1)T_{write} & \text{K 截断(}k_{L1} = K\text{)} \end{cases}$$ + $$ + b_{core} > \frac{b_0 \cdot \text{penalty}}{T_{bd}},\qquad + \text{penalty} = \begin{cases} (b_0-1)(T_{comp} + T_{write}) & \text{L1 绑定(}k_{L1} \lt K\text{)} \\ (b_0^2-1)T_{comp} + (b_0-1)T_{write} & \text{K 截断(}k_{L1} = K\text{)} \end{cases} + $$ penalty 两种情形的含义:drain 暴露 = 末(合并)batch 最后一个 K 分块的计算时延 + 输出写回时延——这部分没有下一块搬移可交叠,是流水线的 drain 尾部。 - **L1 绑定**($k_{L1} < K$):L1 容量限制了 K 分块粒度,MergeBatch 合并后 tile 更大 → $k_{L1}$ 减半 → 每分块计算量 $b_0$ 倍 → drain 惩罚 $= (b_0-1)(T_{comp}+T_{write})$;