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

@@ -1040,7 +1040,9 @@ class TestIssue38(unittest.TestCase):
self.assertEqual(s.bw_gm, 1.6e12)
self.assertEqual(s.bw_l2, 5.2e12) # PR 保持 5.2TB/s
self.assertEqual(s.l2_bytes, 128 * 1024 * 1024)
self.assertAlmostEqual(s.q16, 486e12 / 32)
self.assertAlmostEqual(s.q16, 432e12 / 32) # 13.5T (issue#40 Cube-only)
self.assertEqual(s.cube_peak_tflops, 432.0)
self.assertAlmostEqual(s.r16, 540.0) # 432e12/(1.6e12/2)
self.assertEqual(s.gm_capacity_gb, 128.0)
self.assertIs(get_spec(), ASCEND950PR) # 默认 = 950PR 主bin
self.assertIs(get_spec("Ascend950PR"), ASCEND950PR)
@@ -1052,9 +1054,9 @@ class TestIssue38(unittest.TestCase):
"Ascend950DT", "Ascend950DT_C28", "Ascend950DT_C32",
"Ascend950PR", "Ascend950PR_C28"])
for s in SPECS.values():
# 共架构: 单核 Cube 口径全系列一致 (白皮书总算力行取整, 28核档
# 425/28=15.179T 与 15.1875T 差 0.06%, 容差 0.1%); AIV 恒为 AIC 两倍
self.assertLess(abs(s.q16 / (486e12 / 32) - 1), 1e-3)
# 共架构 + Cube-only 口径 (issue#40): 单核 Cube 全系列精确 13.5T
# (432/32=378/28=486/36); AIV 恒为 AIC 两倍
self.assertAlmostEqual(s.q16, 13.5e12, places=6)
self.assertEqual(s.aiv_num, 2 * s.aic_num)
self.assertEqual(s.l1_bytes, 512 * 1024) # 表4-2 各档一致
self.assertEqual(s.l0c_bytes, 256 * 1024)
@@ -1066,20 +1068,20 @@ class TestIssue38(unittest.TestCase):
self.assertEqual(ASCEND950DT.bw_gm, 4.0e12) # 4TB/s HBM
self.assertEqual(ASCEND950DT.l2_bytes, 128 * 1024 * 1024)
self.assertEqual(ASCEND950DT.gm_capacity_gb, 144.0)
self.assertEqual(ASCEND950DT.cube_peak_tflops, 547.0)
self.assertEqual(ASCEND950DT.cube_peak_tflops, 486.0) # Cube-only (issue#40)
# L2 带宽: DT 三档 7.5TB/s 读写各自独享 (issue#39 用户澄清)
for dt_spec in (ASCEND950DT, ASCEND950DT_C32, ASCEND950DT_C28):
self.assertEqual(dt_spec.bw_l2, 7.5e12)
self.assertAlmostEqual(ASCEND950DT.bw_l2_pc, 7.5e12 / 36)
self.assertEqual((ASCEND950DT_C32.aic_num,
ASCEND950DT_C32.cube_peak_tflops), (32, 486.0))
ASCEND950DT_C32.cube_peak_tflops), (32, 432.0))
self.assertEqual((ASCEND950DT_C28.aic_num,
ASCEND950DT_C28.cube_peak_tflops), (28, 425.0))
ASCEND950DT_C28.cube_peak_tflops), (28, 378.0))
self.assertEqual(ASCEND950DT_C28.gm_capacity_gb, 96.0)
# 派生量: 单核 GM 份额 4TB/36; r16 平衡点随带宽升至 4TB/s 而减半
self.assertAlmostEqual(ASCEND950DT.bw_pc, 4.0e12 / 36)
self.assertAlmostEqual(ASCEND950DT.r16, 547e12 / (4.0e12 / 2))
self.assertAlmostEqual(ASCEND950DT_C32.r16, 486e12 / (4.0e12 / 2))
self.assertAlmostEqual(ASCEND950DT.r16, 486e12 / (4.0e12 / 2)) # 243
self.assertAlmostEqual(ASCEND950DT_C32.r16, 432e12 / (4.0e12 / 2)) # 216
# AIV 白皮书交叉验证: fp32 通量 72 核 x 128 lane x 1.65GHz x 2 ≈ 30T
self.assertAlmostEqual(ASCEND950DT.aiv_elem_rate_fp32 * 2 / 1e12,
30.0, places=0)