v0.91: MergeBatch分界建模补充执行模型/符号定义/K截断区分

This commit is contained in:
2026-08-25 03:21:19 +00:00
parent 826b662a96
commit aad0a0e359

View File

@@ -142,36 +142,50 @@ $$
**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}$。
*执行模型*两分支的核间切分相同——B 维切分到 C 每核 $b_{core} = B/C$ batch核内不切 M/N差异在核内 K 维处理
- **IterBatch**形态 d batch K $n_K = \lceil K/k_{L1} \rceil$ 逐块流水MTE2 $A[M,k_{L1}]+B[k_{L1},N]$→L1L0Cube 部分和累加 L0C最后一块算完 fixpipe 排空 L0CGM
- **MergeBatch**$b_0$ batch 合并为 $[b_0M, K]@[K, b_0N]$ K $n_K^m$ 同理流水
IterBatch$b_{core}$ batch/unitflag 交叠 batch drain/startup
$$T_{iter} = b_{core} \cdot n_K \cdot \max(T_{load}, T_{comp}) + T_{comp} + T_{write}$$
*符号*
MergeBatch合并后 $k_{L1}$ 减半 $n_K$ 翻倍每分块搬移量不变每分块计算量 ×b₀,合并 batch = $b_{core}/b_0$
$$T_{mb} = b_{core} \cdot n_K \cdot \max(T_{load},\; b_0 \cdot T_{comp}) + b_0(T_{comp} + T_{write})$$
| 符号 | 含义 | 表达式 |
|---|---|---|
| $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
$$T_{iter} = b_{core} \cdot n_K \cdot \max(T_{load},\, T_{comp}) + T_{comp} + T_{write}$$
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 绑定为例
$$T_{mb} = b_{core} \cdot n_K \cdot \max(T_{load},\; b_0 T_{comp}) + b_0(T_{comp} + T_{write})$$
条件 5 保证合并后仍访存 Bound$T_{load} > b_0 T_{comp}$),此时:
条件 5 保证合并后仍访存 Bound$T_{load} > b_0 \cdot T_{comp}$),此时:
$$T_{mb} - T_{iter} = (b_0-1)(T_{comp} + T_{write}) > 0$$
**一阶模型下 MergeBatch 始终不优于 IterBatch**——稳态吞吐相同总搬移量、每块大小、总块数都相同MergeBatch 的 drain 暴露是 IterBatch 的 $b_0$ 倍。
*二阶修正——batch 边界固定开销*:每 batch 边界有固定开销 $T_{bd}$fixpipe 同步、L1 状态切换、流水线冲刷)MergeBatch 边界数少 $b_0$ 倍:
*二阶修正——batch 边界固定开销*:每 batch 边界有固定开销 $T_{bd}$MergeBatch 边界数少 $b_0$ 倍:
$$T_{iter} = \text{一阶} + b_{core} \cdot T_{bd},\qquad T_{mb} = \text{一阶} + \frac{b_{core}}{b_0} \cdot T_{bd}$$
MergeBatch 净收益 = 边界节省 - drain 惩罚:
**分界条件**MergeBatch 优于 IterBatch 当且仅当 $\Delta = T_{mb} - T_{iter} < 0$
$$\Delta = b_{core}\Big(1-\frac{1}{b_0}\Big) T_{bd} - (b_0-1)(T_{comp} + T_{write})$$
$$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} < K\text{} \\ (b_0^2-1)T_{comp} + (b_0-1)T_{write} & \text{K 截断}k_{L1} = K\text{} \end{cases}$$
**MergeBatch 优于 IterBatch 的分界条件**
K 截断时 MergeBatch $k_{L1}$ 不减半 每分块计算量 $b_0^2$ 而非 $b_0$ )→ drain 惩罚更大 MN $T_{comp}$ penalty MergeBatch 更容易赢 B $b_{core}$ 边界节省多 MergeBatch 更容易赢
$$b_{core} > \frac{b_0 \cdot (T_{comp} + T_{write})}{T_{bd}}$$
条件 1$b_{core} \ge 2b_0$是该分界在典型 $T_{bd}$ 下的保守近似精确边界依赖 $T_{bd}$ 实测标定
$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 容量256KBMergeBatch 合并后 $b_0^2 MN \cdot 4\text{B}$ 更接近满载但访存 Bound 下计算被搬移掩盖L0C 利用率不影响总时延——**不构成 MergeBatch 的优势**。
**L0C 利用率说明** MN IterBatch L0C tile$MN \cdot 4\text{B}$远小于 L0C 容量MergeBatch 合并后更接近满载但访存 Bound 下计算被搬移掩盖L0C 利用率不影响总时延——**不构成 MergeBatch 的优势**
2. **L0C 容量**合并 $b_0$ batch 的输出块 $[b_0M, b_0N]$FP32 累加双缓冲两份必须放得下 L0C连最小合并都放不下合并无从谈起
3. **单核搬移总量**单核搬移数据总量低于 min_DatamountPerCore GM 带宽利用率上不去重要性第 2 位的经验约束)。
4. **搬移 tile 大小** batch 单矩阵的最大连续搬移块须达到 min_TileSize合并是在此之上进一步放大不是替代