v1.4: 修正方形结论适用范围——最少切分原则+B≥C不切分跟随M/N+B<C才方形

This commit is contained in:
2026-08-27 09:40:14 +00:00
parent ecf4dfd74a
commit 93f8730f89

View File

@@ -329,40 +329,57 @@ $$
**约束 4——SingleCoreM/N 是 BaseM/N 的整数倍**工程实现要求保证 L0 tile 边界对齐)。 **约束 4——SingleCoreM/N 是 BaseM/N 的整数倍**工程实现要求保证 L0 tile 边界对齐)。
*选取策略*在满足约束 1 的前提下SingleCoreM/N 尽量大搬移效率和 L2 复用最大化)。**长宽比由搬入时延建模确定** *选取策略***最少切分原则 + 切分时方形分配**
*建模*每块的 GML1 搬入A $[\text{singleCoreM}, k_{L1}]$ + B $[k_{L1}, \text{singleCoreN}]$时延为 $(\text{singleCoreM} + \text{singleCoreN}) \cdot k_{L1} \cdot dtype / BW$。每核处理 $mCnt \cdot nCnt \cdot B / C$ 单核总搬入时延 *建模* batch $mCnt \cdot nCnt$ 每块的 GML1 搬入A $[\text{singleCoreM}, k_{L1}]$ + B $[k_{L1}, \text{singleCoreN}]$时延为 $(\text{singleCoreM} + \text{singleCoreN}) \cdot k_{L1} \cdot dtype / BW$。每核处理 $B \cdot mCnt \cdot nCnt / C$ 单核总搬入时延
$$ $$
T_{MTE2} = \frac{MN}{C/B} \cdot \Big(\frac{1}{\text{singleCoreM}} + \frac{1}{\text{singleCoreN}}\Big) \cdot \frac{k_{L1} \cdot dtype}{BW} = \frac{MN}{C/B} \cdot \Big(\frac{mCnt}{M} + \frac{nCnt}{N}\Big) \cdot \frac{k_{L1} \cdot dtype}{BW} T_{MTE2} = \frac{MN}{C/B} \cdot \Big(\frac{mCnt}{M} + \frac{nCnt}{N}\Big) \cdot \frac{k_{L1} \cdot dtype}{BW}
$$ $$
$MN/(C/B)$ $k_{L1} \cdot dtype/BW$ 为常数目标函数化为 展开验证 batch 总搬入 = $(M \cdot nCnt + N \cdot mCnt) \cdot k_{L1} \cdot dtype$——A 矩阵每 batch $nCnt$ 个列块共享读 $nCnt$ B 矩阵被 $mCnt$ 个行块共享读 $mCnt$ 与直觉一致。)
目标函数 $mCnt/M + nCnt/N$ $mCnt = nCnt = 1$ 时取得**全局最小值**$1/M + 1/N$)——**不切分时每 batch A/B 只搬一次零重复读**。因此第一步是**尝试最少切分**
$$ $$
\min\;\Big(\frac{mCnt}{M} + \frac{nCnt}{N}\Big),\qquad \text{s.t.}\; mCnt \cdot nCnt \ge \lceil C/B \rceil mCnt \cdot nCnt = \Big\lceil \frac{C}{B} \Big\rceil \triangleq P
$$ $$
拉格朗日$nCnt = P/mCnt$$P = \lceil C/B \rceil$求导 $1/M - P/(mCnt^2 N) = 0$ 多切无益切分越多重复读越多搬入量单调增大。)
**情形 1B ≥ CP = 1**——不切分$mCnt = nCnt = 1$$\text{singleCoreM} = M$、$\text{singleCoreN} = N$。**tile 跟随 M/N非方形**。前提是 L1 容量与 dValue 满足约束 2/3不满足时须 K 分块$k_{L1} < K$或退化为情形 2
**情形 2B < CP > 1**——必须切分 $mCnt \cdot nCnt = P$ 下最小化 $mCnt/M + nCnt/N$
$$ $$
mCnt^* = \sqrt{\frac{P \cdot M}{N}},\qquad nCnt^* = \sqrt{\frac{P \cdot N}{M}} \Rightarrow \frac{mCnt^*}{nCnt^*} = \frac{M}{N} \frac{\partial}{\partial mCnt}\Big(\frac{mCnt}{M} + \frac{P}{mCnt \cdot N}\Big) = 0 \Rightarrow mCnt^* = \sqrt{\frac{P \cdot M}{N}},\; nCnt^* = \sqrt{\frac{P \cdot N}{M}}
$$ $$
代入得 $\text{singleCoreM} = M/mCnt^* = \sqrt{MN/P} = N/nCnt^* = \text{singleCoreN}$——**方形**。 $$
\frac{mCnt^*}{nCnt^*} = \frac{M}{N} \Rightarrow \text{singleCoreM} = \text{singleCoreN} = \sqrt{\frac{MN}{P}}
$$
**结论:搬入时延最优 ⟺ mCnt/nCnt ≈ M/N ⟺ SingleCoreM ≈ SingleCoreN方形 tile**之前的"SingleCoreM/N 长宽比跟随 M/N"说法是错的——跟随 M/N 的是**块数比** mCnt/nCnt其效果恰恰是 singleCoreM/N 方形 ——**方形**连续松弛下的理论最优)。整数 + BaseM/N 对齐约束下取离方形最近的可行组合
*数值验证*M=4096、N=1024、P=32mCnt=16,nCnt=2sM=256,sN=512 0.5成本 0.005859mCnt=11,nCnt=3sM=372,sN=341 1.09成本 0.005615——**方形更优搬入时延省 4.2%**。 *数值验证*M=2048、N=512、C=32
*约束 4 的修正*方形受 BaseM/N 整数倍约束实际取离 $\sqrt{MN/P}$ 最近且满足 $\text{singleCoreM} \ge \text{BaseM}$、$\text{singleCoreN} \ge \text{BaseN}$ 16 对齐组合 N 太小$\text{singleCoreN} = N < \text{BaseN}$ case 不存在因为 $\text{BaseN} \le \min(256, N)$时方形自然退化为跟随 N | B | P = ⌈C/B⌉ | 最优 (mCnt, nCnt) | sM × sN | 形状 |
|---|---|---|---|---|
| 32 | 1 | (1, 1) | 2048 × 512 | 跟随 M/N不切分 |
| 16 | 2 | (2, 1) | 1024 × 512 | 2:1整数约束偏离方形 |
| 8 | 4 | (4, 1) | 512 × 512 | 方形M/N=4 P=4 匹配 |
| 4 | 8 | (4, 2) | 512 × 256 | 2:1 |
B=32 时不切分 cost = 0.002441 < B=8 时方形 0.003906——**切分越少搬入越少方形只是"被迫切分"时的次优选择**。用户反例成立M=2048、N=512、B≥32 SingleCoreM=2048、SingleCoreN=512 优于方形 512×512 batch 零重复读)。
*此前推导的错误* $mCnt \cdot nCnt = P$ 当作固定等式且未讨论 P=1 的情形——方形结论只适用于 B < C 的强制切分场景不适用于 B C 的不切分场景
*SingleCoreM/N 的具体确定过程*host 端枚举与尾轮处理联动 *SingleCoreM/N 的具体确定过程*host 端枚举与尾轮处理联动
1. 从约束 1 得到最小块数$mnCnt_{min} = \lceil C/B \rceil$ 1. 计算最少切分 $P = \lceil C/B \rceil$
2. 枚举 $(mCnt, nCnt)$ 组合$mCnt \cdot nCnt \ge mnCnt_{min}$从大到小遍历 singleCoreM = $\lceil M/mCnt \rceil_{16}$singleCoreN = $\lceil N/nCnt \rceil_{16}$ 2. **若 P = 1**$mCnt = nCnt = 1$$\text{singleCoreM} = M$、$\text{singleCoreN} = N$检查约束 2L1 容量与约束 3dValue满足则确定不满足则 K 分块$k_{L1} = \lfloor L1/(2(M{+}N) \cdot dtype) \rfloor_{16}$ $k_{L1} \cdot dtype \ge 256\text{B}$仍不满足则进入步骤 3
3. 对每个组合检查约束 2/3/4L1 容量搬移效率BaseM/N 整数倍 3. **若 P > 1**枚举 $(mCnt, nCnt)$$mCnt \cdot nCnt \ge P$ $\sqrt{PM/N}$ 附近的整数开始方形优先检查约束 2/3/4L1 容量搬移效率BaseM/N 整数倍
4. 计算尾波占比$r = B \cdot mCnt \cdot nCnt \bmod C$优先选 $r = 0$ $r$ 大的组合尾波核数多 重切后 $s^*$ 小块 dValue 有保障 4. 计算尾波占比$r = B \cdot mCnt \cdot nCnt \bmod C$优先选 $r = 0$ $r$ 大的组合
5. $n_{wave} = \lceil B \cdot mCnt \cdot nCnt / C \rceil \le 3$ $r > 0$,计算尾轮重切参数 $s^*$ 并评估重切后收益 5. $n_{wave} = \lceil B \cdot mCnt \cdot nCnt / C \rceil \le 3$ $r > 0$,计算尾轮重切参数 $s^*$ 并评估重切后收益
6. 选总时延最短的组合:$T_{total} = (n_{wave} - 1) \cdot T_{block} + T_{tail}$,其中 $T_{tail} = T_{block}/s^*$(重切)或 $T_{block}$(不重切) 6. 选总时延最短的组合:$T_{total} = (n_{wave} - 1) \cdot T_{block} + T_{tail}$,其中 $T_{tail} = T_{block}/s^*$(重切)或 $T_{block}$(不重切)