Add BMM_Theory: docs/02_分支理论/03_转Matmul分支.md

This commit is contained in:
2026-09-03 09:25:47 +00:00
parent 149de60c3d
commit df035598b4

View File

@@ -0,0 +1,35 @@
# 转Matmul 分支理论
> 整理自《BMM算子优化分析 v0.98》§四. 对应软件实现 `bmm_theory/branches/to_matmul.py`.
## 1. 一句话本质
单边 batch=1 的 BMM 与普通 Matmul **只差一个维度标签**——把 batch 维折叠掉即可复用 Matmul 的成熟优化体系,没必要在 BMM 框架内重新造一套。
## 2. 进入条件
$$BatchA = 1 \;\lor\; BatchB = 1$$
无 broadcast 歧义时(另一边 batch 任意)即可折叠。
## 3. 两种折叠形态(代价不对称)
| 情形 | 折叠方式 | 代价 |
|---|---|---|
| **BatchB = 1**(右矩阵单边) | 左矩阵 `[B, M, K]` 的 batch 维与 M 维在 ND 下内存相邻紧排,直接视图为 `[B·M, K]`,输出布局逐元素一致 | **零重排、零 split免费转换** |
| **BatchA = 1**(左矩阵单边) | 右矩阵需折叠为 `[K, B·N]`,要一次真实转置重排 O(B·K·N),且输出存在置换需 scatter | **有代价** |
## 4. BatchA=1 的细分决策
A 矩阵较小(`M·K·dtype ≤ L1`,可常驻 L1
- **优先留在 BMM 分支内**做广播友好形态A 常驻 L1、逐 batch 复用),避免转置重排开销;
- A 较大(放不进 L1广播扩展后**分别预估"BMM 分支"与"重排 + 转Matmul"两条路的时延,择优**——不是无条件转。
## 5. 实现方案要点
1. **BatchB=1**:直接视图折叠,零成本。折叠后按 Matmul 的标准分支(切 M/N必要时切 K
2. **BatchA=1 且 A 小**BMM 广播形态A 常驻 L1对 B 的每 batch 做 `[M,K]@[K,N]`
3. **BatchA=1 且 A 大**:广播扩展为 `[B,M,K]@[B,K,N]`,比较 (a) BMM 框架内 ASW_Basic 切分 vs (b) 重排转置 + 转 Matmul取时延小者。
> 软件中本分支当前只做**路由标注**`router.py` 前置归约),详细方案生成待与 Matmul 理论体系打通后补齐——折叠后的 Matmul 复用 MM 的切分逻辑,不在 BMM 范围内重复建设。