Add BMM_Theory: docs/02_分支理论/03_转Matmul分支.md
This commit is contained in:
35
BMM/BMM_Theory/docs/02_分支理论/03_转Matmul分支.md
Normal file
35
BMM/BMM_Theory/docs/02_分支理论/03_转Matmul分支.md
Normal 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 范围内重复建设。
|
||||
Reference in New Issue
Block a user