From a64fbd72a621a0d192d97df4c461bfc86902ce72 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 3 Sep 2026 09:25:48 +0000 Subject: [PATCH] =?UTF-8?q?Add=20BMM=5FTheory:=20docs/02=5F=E5=88=86?= =?UTF-8?q?=E6=94=AF=E7=90=86=E8=AE=BA/04=5F=E7=89=B9=E6=AE=8A=E5=88=86?= =?UTF-8?q?=E6=94=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/02_分支理论/04_特殊分支.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 BMM/BMM_Theory/docs/02_分支理论/04_特殊分支.md diff --git a/BMM/BMM_Theory/docs/02_分支理论/04_特殊分支.md b/BMM/BMM_Theory/docs/02_分支理论/04_特殊分支.md new file mode 100644 index 0000000..fe49e7c --- /dev/null +++ b/BMM/BMM_Theory/docs/02_分支理论/04_特殊分支.md @@ -0,0 +1,32 @@ +# 特殊分支理论(K=0 / K=1) + +> 整理自《BMM算子优化分析 v0.98》§九. 对应软件实现 `bmm_theory/branches/special.py`. + +## 1. 为什么单列 + +K 维度是 Cube(MMAD)存在的意义——`C = Σ_k A[..,k]·B[k,..]` 的累加深度。K=0 / K=1 时累加深度为 0/1,Cube 的 16×16×16 粒度完全浪费(K=1 时浪费 15/16),**走 AIV 向量通路(GM→UB→逐元素算→GM)远优于 Cube 通路**。这是与切分正交的前置判断。 + +## 2. K=0:纯写值 + +无任何计算,`C = bias`(有 bias)或 `C = 0`(无 bias)。纯 AIV 写值: + +- 数据流:GM →(写)→ GM,连输入都不用读; +- 时延:仅 Fixpipe/AIV 写出,`T = B·M·N·outB / W_GM`(或 AIV 写吞吐上限),访存写出 Bound; +- 无 tile 概念,按行均分到 AIV 核即可。 + +## 3. K=1:逐元素乘 + +退化为逐元素乘 `C = A ⊙ B`(无累加深度): + +- 数据流:GM→UB(读 A、B)→ Mul → GM(写 C),全程 AIV; +- 时延:`T = max(搬入, 搬出)`,AIV 算力远剩,瓶颈在搬移:`T ≈ B·(MK + KN + MN)·dt / W_GM`; +- **触发条件**:`B ≥ 2×AIV核数 = 128`(开 UB 乒乓需要每核至少 2 个 batch 块)且单 batch 输入输出能驻留 UB。 + +## 4. 软件处理 + +`router.py` 前置归约中,`k ≤ 1` 直接路由到特殊分支: + +- `K=0` → 标注"纯 AIV 写值",评估时延 = 写出时延; +- `K=1` → 标注"AIV 逐元素乘",评估时延 = 搬入/搬出较大者。 + +不进入 Cube 切分体系,无 ImplPlan 的 tile 字段(除 used_core_num = AIV 核数外均不适用)。