diff --git a/BMM算子优化分析_Release/ASW_Basic分支分析_v1.4.html b/BMM算子优化分析_Release/ASW_Basic分支分析_v1.4.html index b68fba5..f6a568a 100644 --- a/BMM算子优化分析_Release/ASW_Basic分支分析_v1.4.html +++ b/BMM算子优化分析_Release/ASW_Basic分支分析_v1.4.html @@ -256,29 +256,40 @@ $$ \underbrace{\text{singleCoreM} \cdot k_{L1} \cdot \text{dtype} \ge min\_TileSize}_{\text{A 单次搬移量}},\qquad \underbrace{k_{L1} \cdot \text{singleCoreN} \cdot \text{dtype} \ge min\_TileSize}_{\text{B 单次搬移量}} $$
约束 4——SingleCoreM/N 是 BaseM/N 的整数倍(工程实现要求,保证 L0 tile 边界对齐)。
-*选取策略*:在满足约束 1 的前提下,SingleCoreM/N 尽量大(搬移效率和 L2 复用最大化)。长宽比由搬入时延建模确定:
-*建模*:每核每块的 GM→L1 搬入(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$ 块,每块的 GM→L1 搬入(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$ 块,单核总搬入时延:
$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 只搬一次,零重复读。因此第一步是尝试最少切分:
拉格朗日:$nCnt = P/mCnt$($P = \lceil C/B \rceil$),求导 $1/M - P/(mCnt^2 N) = 0$:
+(多切无益:切分越多重复读越多,搬入量单调增大。)
+情形 1:B ≥ C(P = 1)——不切分,$mCnt = nCnt = 1$,$\text{singleCoreM} = M$、$\text{singleCoreN} = N$。tile 跟随 M/N,非方形。前提是 L1 容量与 dValue 满足(约束 2/3);不满足时须 K 分块($k_{L1} < K$)或退化为情形 2。
+情形 2:B < C(P > 1)——必须切分。在 $mCnt \cdot nCnt = P$ 下最小化 $mCnt/M + nCnt/N$:
代入得 $\text{singleCoreM} = M/mCnt^* = \sqrt{MN/P} = N/nCnt^* = \text{singleCoreN}$——方形。
-结论:搬入时延最优 ⟺ mCnt/nCnt ≈ M/N ⟺ SingleCoreM ≈ SingleCoreN(方形 tile)。之前的"SingleCoreM/N 长宽比跟随 M/N"说法是错的——跟随 M/N 的是块数比 mCnt/nCnt,其效果恰恰是 singleCoreM/N 方形。
-*数值验证*(M=4096、N=1024、P=32):mCnt=16,nCnt=2(sM=256,sN=512,比 0.5)成本 0.005859;mCnt=11,nCnt=3(sM=372,sN=341,比 1.09)成本 0.005615——方形更优,搬入时延省 4.2%。
-*约束 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。
+——方形(连续松弛下的理论最优)。整数 + BaseM/N 对齐约束下取离方形最近的可行组合。
+*数值验证*(M=2048、N=512、C=32):
+| 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 端枚举,与尾轮处理联动):