Fix #40: 切换 Cube 算力为白皮书 Cube-only 口径 (单核统一 13.5T)

用户裁决: cube_peak_tflops 取白皮书表3-1 "Cube算力" 单行 (不含 Vector)。

- 数值: 950PR 486->432, 950PR_C28 425->378, 950DT 547->486,
  950DT_C32 486->432, 950DT_C28 425->378; 单核全系列精确 13.5T
  (16^3 MAC/拍 x 1.65GHz), 28 核档 0.06% 取整偏差随之消失
- 传导 (无结构改动, 全部经 q16/q_cube/r16 派生):
  MMAD 时延 x486/432 (+12.5%); R16 607.5->540 (MergeBatch 条件5/b0 上限);
  StreamK θ_c 12.24->10.9; ASW 面积/周长分界 93.5->83.1, MMAD/FIX 304->270
- 文档同步: README, docs/00 (R16 公式), 04 (607.5 实例), 05 (硬件事实/复核算例),
  06/07 (翻出阈值 187->166), 05_StreamK (θ_c 及 K 阈值 396->360);
  理论归档 (BMM算子优化分析_Release/) 与历史测评报告不动
- 验证: 单测 88/88; examples 重生成 —— recommend 27/44 行变化
  (计算Bound 行精确 +12.5%; b8_m32768_n2048_k512 瓶颈 MTE2->MMAD 翻转;
  17 行访存主导不变), plans.csv 仅 merge_demo_k_trunc note 的算存比上限
  23.7->21.1 一处文案; 压力回归 10000 例干净, MergeBatch 386->392 /
  IterBatch 2389->2384 (R16 下移致 b0 上限收小, 边界 case 换边, 预期行为)
This commit is contained in:
2026-09-09 11:05:21 +08:00
parent 8e784a748c
commit ec4fee99b8
13 changed files with 151 additions and 140 deletions

View File

@@ -18,7 +18,9 @@ $$T_{total} = \max\big(T_{MMAD},\; T_{MTE2},\; T_{MTE1},\; T_{Fixpipe}\;[,\;T_{R
case 固有算存比与 16bit 位宽平衡点:
$$AI = \frac{2MN}{M+N},\qquad R_{16} = \frac{486\ \text{TFLOPS}}{1.6\ \text{TB/s}\,/\,2\ \text{B}} \approx 607.5$$
$$AI = \frac{2MN}{M+N},\qquad R_{16} = \frac{432\ \text{TFLOPS}}{1.6\ \text{TB/s}\,/2\ \text{B}} = 540$$
Cube 算力为白皮书 Cube-only 口径 432 TFLOPSissue#40;此前 v0.98 沿用总算力 486 → R₁₆=607.5。)
AI < R₁₆ 访存 Bound反之计算 Bound
@@ -66,7 +68,7 @@ case (B, M, N, K, dtype)
▼ P ≤ C/2 (B/M/N 都买不满)
StreamK: 核间切 K + 归约
进入: P ≤ C/2, K/grid_K ≥ 256B/dtype, K > grid_K²/(grid_K-1)·θ_c (θ_c≈12)
进入: P ≤ C/2, K/grid_K ≥ 256B/dtype, K > grid_K²/(grid_K-1)·θ_c (θ_c≈10.9, issue#40 Cube-only 口径)
```
## 4. 重叠区仲裁

View File

@@ -16,7 +16,7 @@
|---|---|---|
| 1 | `P ≤ C/2` | **并行缺口**:不切 K 时至多一半核有事做K 是唯一剩余的并行维度。阈值取 C/2 而非 CStreamK 定义即 grid_K≥2至少 2 路切 Kgrid_K=2 时每块需 2 核,总核数需求 = ⌈P⌉×2 ≤ C |
| 2 | `K/grid_K ≥ 256B/dtype` | **单核 K 段下限**:每核 K 段内轴连续长度不小于 dValue 推荐值保证段内搬移效率不崩。grid_K = ⌊C/⌈P⌉⌋ |
| 3 | `K > grid_K²/(grid_K-1)·θ_c`θ_c≈12 | **归约代价可接受**:切 K 后总时延须小于不切 K降核 ASW推导见 §3 |
| 3 | `K > grid_K²/(grid_K-1)·θ_c`θ_c≈10.9 | **归约代价可接受**:切 K 后总时延须小于不切 K降核 ASW推导见 §3 |
| 4 | 确定性等级 ≤ 1 且 ND 格式 | 归约顺序不定引入浮点非确定性,确定性等级 2/3 的业务禁用 |
## 3. 归约代价与 θ_c 推导(条件 3 的来源)
@@ -34,13 +34,13 @@ $$T_{Reduce}^t = \underbrace{\frac{grid_K\cdot M^t N^t\cdot 4B}{W_{L2}}}_{\text{
**计算 Bound 情形**T_pipe = T_MMAD^t代入判据两边除以 L0C/4B **tile 尺寸消去**——K 阈值不依赖 M/N 具体值
$$K > \frac{grid_K^2}{grid_K-1}\cdot\theta_c,\qquad \theta_c = \frac{Q_{16}}{2}\Big(\frac{8B}{W_{L2}}+\frac{1}{Q_{AIV}}\Big) \approx 12$$
$$K > \frac{grid_K^2}{grid_K-1}\cdot\theta_c,\qquad \theta_c = \frac{Q_{16}}{2}\Big(\frac{8B}{W_{L2}}+\frac{1}{Q_{AIV}}\Big) \approx 10.9$$
代入数值grid_K=2 → K>49grid_K=4 → K>66grid_K=8 → K>112。L2 读写1.54 ps/元素是主导项AIV 求和仅占 5%。
Q16 为 Cube-only 口径 13.5Tissue#40;旧总算力口径 15.1875T 时 θ_c≈12。代入数值grid_K=2 → K>44grid_K=4 → K>58grid_K=8 → K>100。L2 读写1.54 ps/元素是主导项AIV 求和仅占 5%。
访存 Bound 情形阈值恒低于计算 Boundθ_m·[M^tN^t/(M^t+N^t)]/θ_c ≤ 128/304 ≈ 0.42 < 1**汇总条件取计算 Bound 阈值**保守覆盖两种情形)。
访存 Bound 情形阈值恒低于计算 Boundθ_m·[M^tN^t/(M^t+N^t)]/θ_c ≤ 128/270 ≈ 0.47 < 1**汇总条件取计算 Bound 阈值**保守覆盖两种情形)。
> **注意**θ_c 对 workspace 落点敏感——部分和落 GM 时读写带宽从 5.2TB/s 降到 ~0.64TB/sθ_c 升至约 97。**设计时应优先保证 workspace 驻留 L2**。
> **注意**θ_c 对 workspace 落点敏感——部分和落 GM 时读写带宽从 5.2TB/s 降到 ~0.64TB/sθ_c 升至约 86。**设计时应优先保证 workspace 驻留 L2**。
## 4. 实现方案
@@ -70,4 +70,4 @@ $$T_{SK} = \max\Big(\frac{T_{MMAD}}{grid_K},\; \frac{T_{MTE2}}{grid_K}\Big) + T_
- `8192` = C×512B = dValue 推荐值在最大 grid_K=C 下的保障同为条件 2取推荐值
- max 取更严的 8192
修正后的归约阈值θ_c12grid_K=32 K>396远低于 8192说明 **8192 的绑定约束是 dValue条件 2不是归约代价条件 3**。源码不动态算 grid_K用固定阈值保守合并两条条件。本软件按理论动态计算 grid_K 与 θ_c进入条件更精细。
修正后的归约阈值θ_c10.9grid_K=32 K>360)远低于 8192说明 **8192 的绑定约束是 dValue条件 2不是归约代价条件 3**。源码不动态算 grid_K用固定阈值保守合并两条条件。本软件按理论动态计算 grid_K 与 θ_c进入条件更精细。

View File

@@ -172,7 +172,7 @@ A 行块 block_a = a_b/m_cnt、B 列块 block_b = b_b/n_cnt。
- A1b 与方案 B **理论时延严格相等**(总量守恒 `T = c·B·M·N/C`
- **默认选方案 B工程简洁一套 tile、无尾轮分支**;追求搬移下限选 A1b周长和恒 ≤ 方案 B均值不等式
- r 小(ρ < (187/s)²)时 A1b 尾轮翻出为周长型,**方案 B 微优 ~6%**
- r 小(ρ < (166/s)²Cube-only 口径下由 187 修正issue#40)时 A1b 尾轮翻出为周长型,**方案 B 微优 ~6%**
- A1a 是 A1b 真子集,仅在 r | C 且 s*=⌊C/r⌋ 完美时打平,工程上可不单列。
**边角场景(周长型主导,小 tile 或工作集超 L2 的 GM 直读)**

View File

@@ -17,12 +17,14 @@ $$T_{MMAD} = \frac{2\cdot sM\cdot sN\cdot K}{Q_{16}},\qquad T_{MTE2} = \frac{K(s
| 对比 | 判据 | 决定因素 |
|---|---|---|
| MMAD vs MTE2 | `sM·sN/(sM+sN)``dt·Q16/(2·BW_eff)` | **tile 尺寸**K 约掉) |
| MMAD vs FIX | `K``outB·Q16/(2·BW_pc)`304 | **K** |
| MMAD vs FIX | `K``outB·Q16/(2·BW_pc)`270 | **K** |
Q16 为 Cube-only 口径 13.5Tissue#40MMAD/MTE2 分界 93.5→**83.1**MMAD/FIX 分界 304→**270**。)
**缩放类型二分**MMAD 与 FIX 都 ∝ 面积 sM·sNMTE2 ∝ 周长 (sM+sN)。
- **面积型主导**MMAD 或 FIX 最大tile 大sM·sN/(sM+sN)≥93.5L2 命中K≥304 时 MMAD、K<304 FIX)——**主流 prefill/decode case 均属此类**
- **周长型主导**MTE2 最大tile <93.5L2 命中或工作集超 L2 GM 直读<304)——边角 case
- **面积型主导**MMAD 或 FIX 最大tile 大sM·sN/(sM+sN)≥83.1L2 命中K≥270 时 MMAD、K<270 FIX)——**主流 prefill/decode case 均属此类**
- **周长型主导**MTE2 最大tile <83.1L2 命中或工作集超 L2 GM 直读<270)——边角 case
## 2. 四种策略定义
@@ -54,7 +56,7 @@ $$\big(n_{wave}-1+\sqrt{\rho}\big)^2 \le n_{wave}(n_{wave}-1+\rho) \iff (\sqrt{\
**A1b 周长和恒 ≤ 方案 B**搬入总量少、L2 重复读少、掩盖余量大)。离散 16 对齐后时延互有胜负(<3%数值依赖无系统性方向)。
**尾轮翻出修正**(§7.2.4面积型主导但 r ρ < (187/s)²) A1b 尾轮 tile 缩得太小周长/面积比上升使主导项翻转为周长型搬入翻出方案 B 的全局 tile 缩得温和1/√g > √ρ 恒成立)不翻出——**r 小的面积型 case 方案 B 可微优 ~6%**。
**尾轮翻出修正**(§7.2.4面积型主导但 r ρ < (166/sCube-only 口径下 187166issue#40 A1b 尾轮 tile 缩得太小周长/面积比上升使主导项翻转为周长型搬入翻出方案 B 的全局 tile 缩得温和1/√g > √ρ 恒成立)不翻出——**r 小的面积型 case 方案 B 可微优 ~6%**。
## 4. 周长型主导(边角场景)
@@ -79,7 +81,7 @@ $$\big(n_{wave}-1+\sqrt{\rho}\big)^2 \le n_{wave}(n_{wave}-1+\rho) \iff (\sqrt{\
| 1 | r = 0 | A0 | n_wave·T_block |
| 2 | 面积型0<rC/2无翻出 | A1as*=⌊C/r | T_block(n_wave1+1/s*) |
| 3 | 面积型r>C/2无翻出 | A1b 或方案 B严格打平 | T_block(n_wave1+ρ) |
| 4 | 面积型,ρ<(187/s)²(翻出) | 方案 B | T_block·n_wave/g |
| 4 | 面积型,ρ<(166/s)²(翻出issue#40 口径 | 方案 B | T_block·n_wave/g |
| 5 | 周长型ρρ_dvB 可行 | A1b | T_load(n_wave1+√ρ) |
| 6 | 周长型,ρ<ρ_dv 且分界成立且 B 可行 | 方案 B | T_load·n_wave/√g |
| 7 | 周长型广义 B 损失>0 | A1b恒不劣 | 广义枚举 min w×T_block |

View File

@@ -44,7 +44,7 @@
| M≤N 约束 | 有(条件 13 | 无 | bmmv3 源码特有(实现限制,非理论必要) |
| 转置 view | 非连续转置 view 排除 | 不建模 | bmmv3 源码特有 |
| bias | `has_bias=false` | 不建模 | bmmv3 源码特有 |
| 访存 Bound | `2MN/(M+N) < 607/2`(经验常数) | `2MN/(M+N) < R16/b0`R16=算存比) | **我们更通用**——607.5 是 R16 在 fp16 下的数值实例fp32 时 R16 减半但 bmmv3 不会 |
| 访存 Bound | `2MN/(M+N) < 607/2`(经验常数) | `2MN/(M+N) < R16/b0`R16=算存比) | **我们更通用**——bmmv3 的 607 对应旧总算力口径 R16=607.5;现行 Cube-only 口径 R16=540issue#40fp32 时 R16 减半但 bmmv3 不会 |
### 2.2 b0 计算

View File

@@ -25,7 +25,9 @@
- L2: 128MB, **5.2TB/s, 读口/写口各自独享** —— L2 重复读(读口)与 Fixpipe→L2 写(写口)互不竞争 (issue#23 已落地)。
- 输入首访一律走 GM 带宽计一次, 不叠加 L2 (issue#24 已落地); L2 只吸收"驻留后的再次读取"。
- Cube 算力分精度 (白皮书: FP8/MXFP8/HiF8 = 2×FP16, MXFP4 = 4×FP16; 16bit 档 = 基准):
BF16 486 TFLOPS/芯片 (=15.1875 TFLOPS/核)。FP32/TF32 同代比值白皮书未给 → **假设 ½, 待实测标定** (见 §2 假设表)。
BF16 **432 TFLOPS/芯片 (=13.5 TFLOPS/核, Cube-only 口径 = 白皮书表3-1 "Cube算力" 单行,
issue#40 用户裁决; 486 为 Cube+Vector 总算力, 不作为 Cube 时延基准)**。
FP32/TF32 同代比值白皮书未给 → **假设 ½, 待实测标定** (见 §2 假设表)。
- AIV (Vector): 64 核 × 128 fp32 lane/拍 × 1.65GHz = 13.5T 元素/s (fp32 档)。
---
@@ -201,7 +203,8 @@ dma_cmd_count 为**单核**命令数 (各核 DMA 引擎并行执行, 墙钟 T_cm
CSV 证据 (merge_demo_k_trunc, B=2048 M=N=32 K=256, b0=4, b_core=64):
flops_step = 2·128·128·256 = 8,388,608; 步数 16; 合计 134,217,728 = 代码值 = CSV cube_flops ;
t_mmad = 134,217,728 / 15.1875e12 = 8.837us = CSV t_mmad。**结论: 无需数值修改**;
t_mmad = 134,217,728 / 13.5e12 = 9.942us = CSV t_mmad (Cube-only 口径 issue#40;
旧总算力口径 15.1875T 时为 8.837us)。**结论: 无需数值修改** ( flops 公式);
若意图是"只算对角块"则与全网格 GEMM 语义冲突 (冗余消失, v0.98 § 理论前提需另行裁决)。
---