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:
@@ -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 TFLOPS,issue#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. 重叠区仲裁
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|---|---|---|
|
||||
| 1 | `P ≤ C/2` | **并行缺口**:不切 K 时至多一半核有事做,K 是唯一剩余的并行维度。阈值取 C/2 而非 C:StreamK 定义即 grid_K≥2(至少 2 路切 K),grid_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>49;grid_K=4 → K>66;grid_K=8 → K>112。L2 读写(1.54 ps/元素)是主导项,AIV 求和仅占 5%。
|
||||
(Q16 为 Cube-only 口径 13.5T,issue#40;旧总算力口径 15.1875T 时 θ_c≈12。)代入数值:grid_K=2 → K>44;grid_K=4 → K>58;grid_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。
|
||||
|
||||
修正后的归约阈值(θ_c≈12,grid_K=32 时 K>396)远低于 8192,说明 **8192 的绑定约束是 dValue(条件 2),不是归约代价(条件 3)**。源码不动态算 grid_K,用固定阈值保守合并两条条件。本软件按理论动态计算 grid_K 与 θ_c,进入条件更精细。
|
||||
修正后的归约阈值(θ_c≈10.9,grid_K=32 时 K>360)远低于 8192,说明 **8192 的绑定约束是 dValue(条件 2),不是归约代价(条件 3)**。源码不动态算 grid_K,用固定阈值保守合并两条条件。本软件按理论动态计算 grid_K 与 θ_c,进入条件更精细。
|
||||
|
||||
@@ -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 直读)**:
|
||||
|
||||
@@ -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.5T(issue#40):MMAD/MTE2 分界 93.5→**83.1**,MMAD/FIX 分界 304→**270**。)
|
||||
|
||||
**缩放类型二分**:MMAD 与 FIX 都 ∝ 面积 sM·sN,MTE2 ∝ 周长 (sM+sN)。
|
||||
|
||||
- **面积型主导**(MMAD 或 FIX 最大):tile 大(sM·sN/(sM+sN)≥93.5,L2 命中)且(K≥304 时 MMAD、K<304 时 FIX)——**主流 prefill/decode case 均属此类**;
|
||||
- **周长型主导**(MTE2 最大):tile 小(<93.5,L2 命中)或工作集超 L2 的 GM 直读(<304)——边角 case。
|
||||
- **面积型主导**(MMAD 或 FIX 最大):tile 大(sM·sN/(sM+sN)≥83.1,L2 命中)且(K≥270 时 MMAD、K<270 时 FIX)——**主流 prefill/decode case 均属此类**;
|
||||
- **周长型主导**(MTE2 最大):tile 小(<83.1,L2 命中)或工作集超 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/s)²,Cube-only 口径下 187→166,issue#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<r≤C/2,无翻出 | A1a,s*=⌊C/r⌋ | T_block(n_wave−1+1/s*) |
|
||||
| 3 | 面积型,r>C/2,无翻出 | A1b 或方案 B(严格打平) | T_block(n_wave−1+ρ) |
|
||||
| 4 | 面积型,ρ<(187/s)²(翻出) | 方案 B | T_block·n_wave/g |
|
||||
| 4 | 面积型,ρ<(166/s)²(翻出,issue#40 口径) | 方案 B | T_block·n_wave/g |
|
||||
| 5 | 周长型,ρ≥ρ_dv,B 可行 | A1b | T_load(n_wave−1+√ρ) |
|
||||
| 6 | 周长型,ρ<ρ_dv 且分界成立且 B 可行 | 方案 B | T_load·n_wave/√g |
|
||||
| 7 | 周长型,广义 B 损失>0 | A1b(恒不劣) | 广义枚举 min w×T_block |
|
||||
|
||||
@@ -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=540(issue#40),fp32 时 R16 再减半但 bmmv3 不会 |
|
||||
|
||||
### 2.2 b0 计算
|
||||
|
||||
|
||||
@@ -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 §五 理论前提需另行裁决)。
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user