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

@@ -12,10 +12,12 @@ dtype 感知算力 (issue#28, 设计文档 docs/05 §2):
(按 DaVinci 惯例 = 1/2, 白皮书未给同代比值), int8 假设同 FP8, 均待实测标定.
AIV 逐元素通量按 lane 位宽等比假设 (16bit x2 / 8bit x4 / 4bit x8, 待标定).
口径注意 (issue#38): cube_peak_tflops 沿用 v0.98/用户澄清口径 = 白皮书表3-1
"Cube+Vector 总算力" 行 (950PR 32核 = 486), 单核 15.1875T; 白皮书 "Cube算力"
单行为 Cube 单元独立口径 (950PR 32核 = 432, 单核 13.5T)。两者差 12.5%,
是否切换全模型口径待用户裁决 (本字段语义不变, 新增 SKU 同口径).
口径 (issue#40 用户裁决): cube_peak_tflops 采用白皮书表3-1 **"Cube算力"单行**
(Cube-only, 不含 Vector): 950PR 32核 = 432, 单核 13.5T = 16³ MAC/拍 × 1.65GHz;
全系列 SKU 单核精确统一 13.5T (432/32 = 378/28 = 486/36)。2026-09 前曾沿用
v0.98 的 "Cube+Vector 总算力" 口径 (486, 单核 15.1875T), 切换后全模型 MMAD
时延 ×486/432 (+12.5%), R16 607.5→540, StreamK θ_c 12.24→10.9,
ASW 面积/周长分界 93.5→83.1。
"""
from __future__ import annotations
@@ -48,7 +50,8 @@ class NpuSpec:
# ---- 核数与算力 ----
aic_num: int = 32 # C: AIC (Cube) 核数
aiv_num: int = 64 # AIV (Vector) 核数
cube_peak_tflops: float = 486.0 # 全芯片 Cube BF16 标称算力 (乘加各计一次)
cube_peak_tflops: float = 432.0 # 全芯片 Cube BF16 标称算力 (乘加各计一次,
# 白皮书表3-1 Cube 单行, issue#40)
aiv_freq_ghz: float = 1.65
aiv_fp32_per_cycle: int = 128 # 单 AIV 每拍 fp32 求和吞吐
@@ -90,7 +93,7 @@ class NpuSpec:
# ---- 派生量 (属性) ----
@property
def q16(self) -> float:
"""单核 Cube BF16/FP16 峰值算力 (FLOP/s) = 15.1875T."""
"""单核 Cube BF16/FP16 峰值算力 (FLOP/s) = 13.5T (issue#40 Cube-only)."""
return self.cube_peak_tflops * 1e12 / self.aic_num
@staticmethod
@@ -147,10 +150,10 @@ class NpuSpec:
@property
def r16(self) -> float:
"""16bit 位宽平衡点算存比 R_16 = Cube峰值 / (GM带宽/2B) ≈ 607.5 FLOP/元素.
"""16bit 位宽平衡点算存比 R_16 = Cube峰值 / (GM带宽/2B) = 540 FLOP/元素.
按 issue#28 速率表该比值对全 dtype 不变 (Cube 因子与元素字节数互成反比),
故入口条件沿用单一 R_16.
故入口条件沿用单一 R_16. (issue#40 Cube-only 口径: 607.5 -> 540)
"""
return self.cube_peak_tflops * 1e12 / (self.bw_gm / 2)
@@ -173,12 +176,11 @@ class NpuSpec:
ASCEND950PR = NpuSpec()
# 950PR 28 核衍生版 (白皮书表3-1: 28 AIC / 56 AIV, HBM 1.4TB/s 112GB,
# L2 112MB; L2 带宽未分档, 沿用 5.2TB/s 待标定; 总算力 425 为白皮书取整值,
# 单核 15.179T 与主 bin 15.1875T 差 0.06% 属取整误差)
# L2 112MB; L2 带宽未分档, 沿用 5.2TB/s 待标定)
ASCEND950PR_C28 = NpuSpec(
name="Ascend950PR_C28",
aic_num=28, aiv_num=56,
cube_peak_tflops=425.0,
cube_peak_tflops=378.0,
l2_bytes=112 * 1024 * 1024,
bw_gm=1.4e12,
gm_capacity_gb=112.0,