diff --git a/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.5.html b/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.5.html index 2194c16..89e063d 100644 --- a/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.5.html +++ b/BMM/BMM算子优化分析_Release/ASW_Basic分支分析_v1.5.html @@ -287,14 +287,50 @@ $$
*SingleCoreM/N 的具体确定过程*(host 端枚举,与尾轮处理联动):
*与源码的差异*:源码用 cubeBound 模型 + balanceRate ≥ 0.9 剪枝,不解耦 SingleCoreM/N 与 BaseM/N(baseM=256 已是 SingleCore 级参数,L0 tile 由 stepM/stepN 二次切分)。理论的两层分离使约束链更清晰——SingleCoreM/N 由 L1 + 并行度 + 搬移效率决定,BaseM/N 由 L0C 决定,各司其职。
-*例*(B=8、M=N=2048、K=1024、BF16):$\lceil C/B \rceil = 4$,取 $mCnt = nCnt = 2$ → singleCoreM = singleCoreN = 1024。BaseM = BaseN = $\lfloor\sqrt{32768}\rfloor_{16} = 176$。SingleCoreM/BaseM = 1024/176 ≈ 5.8 → 取 5(整数倍)→ singleCoreM = 880。约束 2:$k_{L1} \le 512\text{KB}/(2 \times 1760 \times 2\text{B}) = 74$ → 取 64(16 对齐)= 128B ✓。
+a. 枚举空间(有界):由约束 4 给出上界 $mCnt \le \lceil M/\text{BaseM} \rceil$、$nCnt \le \lceil N/\text{BaseN} \rceil$(SingleCore 不能小于 Base),约束 1 给出 $B \cdot mCnt \cdot nCnt \ge C$。候选数最多 $\lceil M/\text{BaseM} \rceil \times \lceil N/\text{BaseN} \rceil$(如 M=N=4096、Base=256 时 256 个),host 端遍历开销可忽略
+b. 每个候选的评估流水线($(mCnt, nCnt) \to$ 对齐 $\to$ 约束过滤 $\to$ 目标值):
+*约束 4 过滤*:singleCoreM/singleCoreN 是 BaseM/BaseN 的整数倍;*约束 2 求 $k_{L1}$*:
+*约束 3 过滤*:$k_{L1} \cdot dtype \ge 256\text{B}$ 且 $\text{singleCoreM} \cdot k_{L1} \cdot dtype \ge min\_TileSize$ 且 $k_{L1} \cdot \text{singleCoreN} \cdot dtype \ge min\_TileSize$
+*目标值(§3 时延模型的搬移项)*:
+**c. 为什么目标函数是 $T_{MTE2}$**:$T_{MMAD} = 2BMNK/(C \cdot Q_{16})$ 与 $T_{FIX} = B \cdot MN \cdot outB/(C \cdot W_{pc})$ 只依赖全量 B/M/N/K,与切分无关——候选之间的唯一差异在搬入时延(§3)。约束 2/3/4 只是可行性过滤,不足以选最优:多个可行解的 $T_{MTE2}$ 可差 2 倍(§6.3 源码过度切分示例)
+d. 最优选取:通过全部约束的候选中取 $T_{MTE2}$ 最小者;并列时取尾轮块数 $r = B \cdot mCnt \cdot nCnt \bmod C$ 最大者(尾轮块越多,§5.3 重切的 $s^*$ 越小、越省)
+*完整实例*(B=8、M=N=2048、K=1024、BF16,BaseM=BaseN=256、$min\_TileSize$=16KB):
+| (mCnt, nCnt) | sM × sN | $k_{L1}$(约束 2 上限,16 对齐) | 约束 3 过滤 | $T_{MTE2} \propto (1/sM + 1/sN) \cdot k_{L1}$ |
|---|---|---|---|---|
| (2, 2) | 1024 × 1024 | 64(128B) | ✗ dValue < 256B | — |
| (4, 2) | 512 × 1024 | 80(160B) | ✗ | — |
| (4, 4) | 512 × 512 | 128(256B) | ✓(512×128×2 = 128KB ≥ 16KB) | 0.500 |
| (8, 4) | 256 × 512 | 160(320B) | ✓ | 0.938 |
| (4, 8) | 512 × 256 | 160 | ✓ | 0.938 |
| (8, 8) | 256 × 256 | 256(512B) | ✓ | 2.000 |
$k_{L1}$ 上限公式:$\lfloor 131072/(sM{+}sN) \rfloor$(131072 = L1/(2·dtype) = 512KB/4B)。评估过程展示三个要点:
+*与源码的差异*:源码用 cubeBound 模型 + balanceRate ≥ 0.9 剪枝,不解耦 SingleCoreM/N 与 BaseM/N(baseM=256 已是 SingleCore 级参数,L0 tile 由 stepM/stepN 二次切分),且枚举目标为"算存比/负载均衡帕累托"而非"搬入时延最小"。理论的两层分离使约束链更清晰、目标函数($T_{MTE2}$)有闭式表达——SingleCoreM/N 由 L1 + 并行度 + 搬移效率决定,BaseM/N 由 L0C 决定,各司其职。