Add BMM_Theory: docs/03_测评报告/ 软件测评报告 v1.0

This commit is contained in:
2026-09-03 18:56:03 +08:00
parent 5ab04bab11
commit d36e224eb1

View File

@@ -0,0 +1,266 @@
# BMM/BMM_Theory 理论最优实现分析软件 测评报告
- 测评对象:`git.magicnetworld.com/admin/matmul-analysis` 仓库中的 **BMM/BMM_Theory**Python 包 `bmm_theory`batch_mat_mul_v3 在 Ascend950PR 上的理论最优实现分析软件)
- 测评日期2026-09-06本地环境
- 测评基准:仓库 HEAD `5ab04bab11c80e544c6969fbfdbd9869871f7aa3`2026-09-03 09:25:58 UTC, main 分支)
- 测评方式:静态代码审查 + 文档对照审计 + 全量运行复现 + 随机压力/自洽性测试 + 公式手工核验(无法在真实 950PR 硬件上运行验证,见 §7 局限说明)
---
## 0. 测评结论摘要TL;DR
BMM_Theory 是一个**立意清晰、理论文档资产扎实、代码与理论公式可追溯性好**的"BMM 分支决策 + 时延评估"分析工具雏形(`__version__ = 0.1.0`纯标准库、零第三方依赖Python 包共 17 个源文件 / 2125 行 + 148 行单测):
| 维度 | 结论 | 评分 |
|---|---|---|
| 设计架构 | 分层清晰CLI → 路由/评估 → 分支插件 → 时延引擎 → 硬件参数表 → CSV IOImplPlan 作为推荐/评估的"通用货币" | 9/10 |
| 理论-代码映射 | 6 个分支的进入条件/方案生成/时延模型与自建理论文档v0.98、v1.1、v1.5 等逐条对应公式常数θ_c≈12、R16≈607.5、93.5/304 分界)抽查一致 | 8/10 |
| 功能完成度 | recommend / evaluate 双模式可运行10 个 demo case 全部跑通,输出与仓库固化示例**逐字段一致**确定性良好17 个单测全过 | 8/10 |
| 内部一致性(正确性) | **发现 P0 级崩溃 bug 与 ~6%~18% 的"推荐方案自检不可行"矛盾**(约束在生成与校验两侧不共享) | 5/10 |
| 鲁棒性/错误处理 | 崩溃路径、输入面缺口out_nd 不可达、dtype 不一致无警告)、裸 traceback | 4/10 |
| 测试充分性 | 17 条测试只覆盖 router + 2 个分支文件,未覆盖 CLI/io_csv/约束器/StreamK/ASW/特殊分支故障面 | 5/10 |
| 工程化/交付 | 无打包、无 CI、无版本门禁、无 .gitignore/LICENSE大量历史重复提交与文档-代码漂移 | 5/10 |
**总体评价:约 6.2/10。作为"概念验证POC"质量良好、理论分析价值高;作为"可交付的可信工具"仍属早期——推荐先修复 P0 崩溃与约束自洽问题,再补测试与标定验证后使用其结果做决策。**
关键发现速览(详见 §5
1. **【P0 崩溃】** 任意 `K=1 且 batch < 128` 的 case`B=64, M=8192, N=32, K=1`)走 `recommend` 直接抛 `AttributeError: 'NoneType' object has no attribute 'used_core_num'` 崩溃——router 无条件把 `k≤1` 路由到特殊分支,但该分支 K=1 需 `B≥128` 才 capable返回空方案后未做兜底。
2. **【P1 自相矛盾】** 推荐模式**从不做可行性校验**,而其自带 evaluate 约束器与分支生成逻辑存在冲突8 000 个随机 case 中 480 个6.0%"推荐方案"被软件自己判为不可行(违规集中在 dValue<128B 下限 344 L0A/L0B 超容量 210 换用典型 LLM 形状 6 000 比例高达 **18.0%**
3. **P2 覆盖缺口】** case 输入列 `out_nd`决定 StreamK 可用性的关键工程约束 `io_csv.load_cases` 中未解析CLI 层无法表达非 ND 输出场景`trans_a/trans_b/has_bias` 被解析但全部未参与建模`models.py` 注释承诺的 "A/B dtype 不一致告警" 实际没有实现
4. **P2 口径疑点】** StreamK 的归约时延既进稳态 `max()` 又作 `drain` 追加归约主导时会重复计账fixpipe 写出口径C dtype 2B vs 部分和 4B与文档/plan 字段不一致
5. **P2 文档漂移】** README 目录树与 `docs/01_软件架构.md` 仍把分支层描述为 "MergeBatch+IterBatch 本期asw_basic/stream_k 待迭代"与实际 6 分支现状不符
---
## 1. 仓库概况
`git clone` 后实测main 分支 HEAD 5ab04ba
| 指标 | 数值 |
|---|---|
| 提交数 | 3972026-08-20 2026-09-03全部作者 "admin" |
| 跟踪文件 | 127 / 4.48 MB |
| 顶层目录 | `BMM/``Matmul/``昇腾950PR/` |
| 软件本体 | `BMM/BMM_Theory/`32 个跟踪文件18 `.py` + 10 `.md` + 4 `.csv`162.6 KB |
| 理论文档 | `BMM/BMM算子优化分析_Release/`v0.4v0.98 .md+.html 双版本ASW_Basic 分支分析 v1.0v1.91 系列MergeBatch_vs_IterBatch v1.0/1.1尾轮处理策略 v1.0v1.5L0C 流水机制等 60+ 个文件 |
| 源码对照 | `Matmul/3_源码对比/3.1_mat_mul_v3源码解析.md(.html)``BMM/` BatchMatMulV3 分析等 |
| 其他 | 无根 README LICENSE .gitignore CI 配置无打包文件pyproject/setup |
仓库演进脉络8/208/31 全部用于**理论分析文档**的多轮自审迭代提交信息可见 v0.4v0.98分支文档 v1.0v1.91 的逐版修正9/3 一次性新增 **BMM_Theory 软件包**把理论固化为可执行代码同日把 0307 分支理论文档示例与测试入库软件是"理论文档体系 + 一次性代码化"的产物天然带有"单日成仓文档与代码由不同轮次生成"的痕迹(§5.6)。
---
## 2. 软件定位与设计(阅读源码后的理解)
README `docs/01_软件架构.md`软件回答两个问题
1. 任意 BMM case **理论最优实现方案**是什么走哪个分支核间怎么切核内 tile/流水怎么配
2. 该方案在 950PR 上的**端到端各级时延**与瓶颈MTE2 搬入/Cube 计算/Fixpipe 搬出/StreamK 归约)。
设计要点与源码一致
- **两种模式**`python -m bmm_theory recommend cases.csv`方案推荐输出 result + plans)、`python -m bmm_theory evaluate cases.csv plans.csv`用户方案评估约束校验 + 时延 + 瓶颈 + 建议`-v` 人类可读
- **ImplPlan 标准结构体**models.py34 字段分四组分支与核间切分 / 核内 tiling / 存储 Cache 策略 / 尾轮与流水策略作为推荐输出与评估输入的统一格式字段名与理论文档符号一一对应
- **分支插件化**branches/base.py统一 `check_conditions / make_plan / evaluate / analyze` 接口6 个分支文件MergeBatchIterBatch转Matmul特殊分支(K=0/1)、StreamK、ASW_Basic(含降核模式)。
- **决策树路由**router.py):① 单边 batch=1 转Matmul;② K1 特殊分支;③ BC BatchA==BatchB MergeBatch/IterBatch分界公式预判 + 端到端时延双保险仲裁);④ PC/2 且切 K 条件满足 StreamK;⑤ 兜底 ASW_BasicP<C 时降核)。
- **时延引擎**timing.py`T = max(MMAD, MTE2_GM, MTE2_L2, FIXPIPE[, REDUCE]) + T_drain`搬入分 GML1 直读1.6TB/s L2L1 命中5.2TB/s两段带宽按"每核独立 DMA单核份额=聚合/C"建模。
- **硬件参数隔离**hardware/ascend950pr.py核数 32 AIC/64 AIVBF16 486 TFLOPSL1 512KBL0A/L0B 64KBL0C 256KBL2 128MBT_cmd=50ns标注为估计值
亮点评价
- "决策树成本排序切B=0 < 切M/N() 切K()"**第一性问题划分**非常清晰代码实现忠实
- MergeBatch vs IterBatch 采用"K截断 + b_core 阈值"解析分界 **与** 端到端模型双保险且裁决说明arbitration字符串把两边数值与公式都打印出来**可解释性做得好**
- 时延结果附 `bound_type`计算/访存/写出/归约 Bound与针对性建议作为"理论对照工具"比裸数值更有用
---
## 3. 测评环境与方法
- 环境Windows 11 本机Python 3.14.7该仓库声明 "Python 3.8, 仅标准库"git 2.55无任何第三方 pip 包安装
- 方法
1. 逐文件阅读 18 `.py`2125 + 10 篇架构/分支文档 + 测试与示例
2. 全量运行单测recommend/evaluate 双模式 demo与仓库固化的 `examples/result_*.csv` 逐字段比对可复现性
3. 手工公式核验附录 B
4. 随机压力测试宽范围 8 000 + 典型 LLM 形状 6 000 检测崩溃/NaN/负值/推荐-自检矛盾
5. 针对性构造最小复现P0 崩溃三类约束矛盾样例
6. 文档-代码一致性审计
---
## 4. 运行结果与功能核验
### 4.1 单元测试17/17 通过
`python -m unittest discover -s tests -v`Ran 17 tests in 0.011s, OKexit 0)。覆盖 router 决策Merge/Iter 仲裁时延模型自洽dtype 换算等——**覆盖面窄** import MergeBatch/IterBatch 两个分支类其余分支只经 router 间接覆盖CLIio_csv约束校验器StreamK/ASW/转Matmul/特殊分支的 evaluate 细节均无直接单测 §6)。
### 4.2 recommend / evaluate10 个 demo 全部跑通
`recommend` 10 各分支各命中一例`evaluate` 用输出 plans 回灌 10/10 feasible分支归属转Matmul特殊分支(K=0/1)、MergeBatch、IterBatch(形态 b/d)、StreamK(grid_K=32)、ASW_Basic、ASW_Basic_降核。
### 4.3 可复现性:与仓库固化示例逐字段一致
将新生成的 `out_recommend.csv` 与仓库 `examples/result_recommend.csv`10 × 全部列 advice/arbitration 文本比对**0 处差异**。纯函数式确定性输出这对"可审计工具"很重要
### 4.4 demo 输出快照(时延单位 us
| case | B | M×N×K | 分支 | T_total | 瓶颈 |
|---|---|---|---|---|---|
| to_matmul_demo | 1 | 2048³ | 转Matmul | 35.35 | MMAD |
| special_k0_demo | 128 | 256²×0 | 特殊分支 | 10.49 | FIXPIPE |
| special_k1_demo | 128 | 256²×1 | 特殊分支 | 10.49 | FIXPIPE |
| merge_demo_k_trunc | 2048 | 32²×256 | MergeBatch(b0=4) | 43.04 | MTE2_GM |
| merge_iter_arbitrate | 128 | 64²×512 | IterBatch | 11.13 | MTE2_GM |
| iter_demo_form_b | 128 | 64²×256 | IterBatch(b) | 5.74 | MTE2_GM |
| iter_demo_form_d | 64 | 64²×8192 | IterBatch(d) | 85.40 | MTE2_GM |
| streamk_demo | 4 | 128²×10240 | StreamK(×32) | 9.96 | MTE2_GM+归约3.41 |
| asw_demo_full | 2 | 8192²×1024 | ASW_Basic | 565.59 | MMAD |
| asw_demo_reduce_core | 16 | 256²×128 | ASW_Basic_降核(16核) | 2.62 | MTE2_GM |
抽检数值手工核算见附录 BIterBatch GM=5.24us、MMAD=0.55us、FIX=0.66us、cmd=0.20us、drain=0.30us 全部与公式一致MergeBatch 41.94+0.80+0.30 亦一致。**时延引擎内部自洽易于审计**。
---
## 5. 发现的问题(按严重度分级,附证据定位)
### 5.1 【P0-崩溃】K=1 且 batch<128 → recommend 必崩
**复现**最小 case
```
case_id,batch_a,batch_b,m,n,k,dtype_a,dtype_b,dtype_c
bug1,64,64,8192,32,1,int8,int8,int8
```
```
$ python -m bmm_theory recommend bug.csv -o out.csv -v
AttributeError: 'NoneType' object has no attribute 'used_core_num'
-v 在 __main__.py:85 _print_case不带 -v 在 models.py:271 EvalResult.to_row带 --plans 在 save_plans 同样崩溃)
```
**根因链**
1. `router.py:49-52` `k ≤ 1` **无条件**路由到特殊分支决策树文档 00 总纲/04 特殊分支也是这么写的
2. `special.py:26-32` K=1 附加 `batch_c ≥ 2×AIV核数(128)` capable文档 §3 触发条件
3. `base.py:56-63` capable=False `plan=None`
4. 下游 `__main__` / `EvalResult.to_row` 无空值防护 AttributeError
**K=1 且 B<128 是"决策树文档声称覆盖、代码实际无解、路由不设兜底"的空洞**K=1/B<128 在真实场景并非不可能如小 batch 头数 × K 退化为 1 的元素级 case且触发无需任何特殊 dtype建议capable=False 时回退其它通路 AIV 单缓冲 / Cube 兜底或显式报"该区域暂无理论方案"**不崩溃**。
### 5.2 【P1-自相矛盾】推荐方案与自带约束校验冲突(随机 6%18%
**现象** recommend 输出的 plans 回灌 evaluate本应全部 feasible实测大量被判违反约束——**生成阶段完全没跑约束校验**`router.route` `branch.analyze` 只做条件判定与时延评估`PlanEvaluator._check_constraints` 只在 evaluate 模式生效两套约束规则还互相矛盾)。
**实测统计**均为合法输入已剔除 P0 场景
| 实验 | 样本 | 自检不可行 | 主要分布 |
|---|---|---|---|
| A宽范围随机B/M/N/K/dtype 全谱 | 8 000 | 4806.0% | IterBatch 206ASW_降核 237MergeBatch 37违规条目dValue 344L0A 111L0B 99L1 20L0C 9 |
| B典型 LLM 形状B1..512M/N16..8192K8..16384 | 6 000 | 1 079**18.0%** | IterBatch 656ASW_降核 422MergeBatch 1IterBatch dValue 违规占绝对多数 |
另一次 5 000 例实验为 6.4%。**违规分支的典型最小样例**
| 分支 | 样例 | 违规 |
|---|---|---|
| IterBatch | B=256, M=128, N=1024, K=8, bf16 | dValue = K×2B = 16B < 128B 下限 |
| IterBatch | B=64, M=64, N=512, K=2, fp8 | dValue = 2B |
| MergeBatch | B=1024, M=2, N=512, K=32, fp8 | dValue = 32B |
| ASW_Basic_降核 | B=2, M=64, N=16, K=32, fp16 | dValue = 64B |
| ASW_Basic_降核 | B=51, M=255, N=42, K=682, fp32 | L0A tile 超容量 |
| MergeBatch | B=128, M=512, N=16, K=2048, fp32 | L0A tile 超容量 |
**三条具体矛盾**
1. **IterBatch 形态 a/b 豁免 vs 约束器一刀切**`iter_batch.py:95-104` 对形态 a/b 的搬移效率条件标注"恒满足"k_L1=K 整体驻留不切分 `evaluator.py:83-84` 对所有 `k_l1>0` 的方案无条件要求 `k_L1×dtype ≥ 128B`K 小的整驻留 caseK=8/16/32必然冲突——小矩阵单次 DMA 是否必须满足 dValue 下限属于**理论口径问题**"生成说可行校验说不可行"的产品级矛盾不容回避也说明小 K batch case 的时延估算按满带宽偏乐观未计 T_cmd/min_TileSize 崩坏效应)。
2. **ASW 降核 base_k 与 dtype 容量脱钩**`asw_basic.py:148` 硬编码 `base_k = min(K, 64)` `base_m=single_m=min(M,256)`fp32(dt=4B) `base_m×64×4B×2 > 64KB` 必然 L0A/L0B 溢出代码却照常生成 16 核方案并给出乐观时延)。正常 ASW 模式有 `base_k` L0A/L0B 容量反推:67-70降核模式漏了这一步
3. **MergeBatch fp8/int8 dValue**`merge_batch.py:104` `dvalue_recommend(512B)//dt` 截断后 `align_down(…,16)` `max(16)`fp8 k_L1 可低至 16~32 元素 16~32B < 128B与条件 4/评估口径冲突
**共性根因**约束知识分散在三处各分支 `check_conditions``make_plan` 内部硬编码evaluate `_check_constraints`三套规则由不同轮次独立写出互相不一致且生成路径从不调用校验器修复方向抽单一 `constraints.py` 供生成与校验共用生成后强制校验并在不可行时降级/报错
### 5.3 【P2-输入面缺口】
- `out_nd`StreamK 工程约束之一输出需 ND 格式 `io_csv.load_cases`:44-68**没有解析**CSV 输入恒为默认 True——CLI 无法构造 `out_nd=False` 的评估`deterministic_level` 解析正常且 `≥2 禁用 StreamK` 实测有效B=4,M=N=128,K=10240,det=2 正确落入 ASW_降核)。
- `trans_a/trans_b`影响 ND/NZ 数据排布与 dValue 语义 `has_bias`bias 读取/写出增量 CSV 解析但**全链路未参与任何建模**——"理论最优"完备性有影响模型里 bias 免费转置免费)。
- `models.py:93-94` 注释承诺"A/B dtype 不一致时取较大者**并在校验中报 warning**"全仓 grep 无任何 warning 实现 evaluate case stderr 提示)。dtype_adtype_b 时静默按大者建模
- 无任何输入合法性校验负维度/ M/N/非法 dtype 等会产出无意义结果或裸 traceback文件不存在直接抛完整堆栈
### 5.4 【P2-StreamK 计账口径疑点】(需作者澄清,非定论)
- `stream_k.py:161` `drain = t_reduce` `timing.py:104-112` 又把 REDUCE 放进稳态 `max(stages)`——归约同时被"取最大""串行追加"**REDUCE 为主导时会近似双倍计账**文档语义是"归约串行追加不可掩盖"若如此则 REDUCE 不应进 max())。
- `stream_k.py:152-153` fixpipe **C 矩阵 dtype2B/1B** `t_fix`而其 plan(`out_dtype_bytes=4`:116) 与归约子模型 `timing.py:77-93`部分和写读按 4B + 最终写回口径不一致`t_fix` 存在低估/ `t_reduce` 内含写回重复计账的可能
- StreamK 评估基于" tile=65536 元素"近似:140-142把整 case 的并行/ tile 处理折算为 `tile/grid_K` plan 中实际 m_cnt/n_cnt/b 切分未严格联动plan 里算了 M/N 切分与 workspaceevaluate 却只用单 tile 缩放)—— B 场景每核多 tile的流水评估粗糙
### 5.5 【P2-文档-代码漂移】
- `README.md:71` 分支目录注释仍写"(本期: MergeBatch + IterBatch)"目录树:76-84只列了 00/01/02 三篇分支文档——实际已 6 分支 + 03~07 文档
- `docs/01_软件架构.md` 分层图与 §4"扩展指南"仍写"asw_basic.py/stream_k.py **待迭代**新建 branches/asw_basic.py 接入…"与现状已实现且为兜底主干直接矛盾该文档更新时间早于 9/3 代码落地后未同步
- README 声称 "Python 3.8"代码大量使用 `X | None`PEP 6043.10+与内置泛型 `list[...]`3.9+语法——虽有 `from __future__ import annotations` 兜底标注字符串化大概率可在 3.8 运行**未经任何 3.8/3.9/3.10/3.11/3.12/3.13 实测**本机仅 3.14 验证通过声明与验证脱节
- 特殊分支文档 `04_特殊分支.md:27` 自称"router.py 前置归约中 k1 直接路由到特殊分支"——恰好是该空洞区域 B128 时方案的说明文档把 bug 区域描述成了正常行为
### 5.6 【P3-工程/过程痕迹】
- 无打包 pyproject/setup)、 CI .gitignore运行即产生 `__pycache__` 噪音)、无根 README/LICENSE`__version__=0.1.0` 397 个提交的演进不成比例——9/3 一天之内整包落地
- 提交信息大量重复同一条目重复 2 次以上、"目录整理"条目 ×20+历史信息熵低`.md/.html` 双版本靠人工同步提交里可见多次 "同步HTML"易产生漂移
- 少量无用导入 `models.Optional``merge_batch.MoveInPlan/BranchResult``iter_batch.BranchResult` 与注释式常量 lint 门禁
- 时延模型的 `t_cmd=50ns` 等经验参数在文档中诚实标注为"估计值需实测标定"架构文档 §4.4是加分项但也意味着**当前所有输出数值都未经真实硬件校准**。
---
## 6. 测试充分性评估
`tests/test_branches.py`148 17 质量尚可边界 case 都来自理论文档断言具体
- 只直接导入 MergeBatch/IterBatch 两个分支StreamK/ASW/转Matmul/特殊分支全部只经 router 冒烟
- io_csvCLI__main__)、evaluator 约束器models 往返HardwareTiming 明细错误路径的任何测试
- K=1×B<128P0 漏洞区)、 dtype_adtype_b trans/bias/out_nd 变体无小 K BdValue 矛盾区)、 fp32 降核 L0A 溢出P1 矛盾区测试
- 覆盖率视角 bug 场景固化进测试正是 README 宣称的"可验证——文档典型边界 case 全部固化改动不破结论"但实际只固化了一半
---
## 7. 局限说明(本次测评的边界)
1. 无法在真实 Ascend950PRCANN/硬件上实测时延数值的**绝对精度无法验证**只能验证"模型内部自洽 + 与文档公式一致 + 相对排序合理"
2. 芯片规格486 TFLOPS1.6/5.2TB/s搬移效率经验值等为仓库自述未与外部公开资料交叉验证昇腾950PR 属于新芯片公开资料有限
3. 随机压力测试覆盖了形状谱系但不可能穷举数值结论6%/18%随采样分布变化属量级参考而非精确声称
4. 未对理论文档的数学推导本身做正确性复审超出软件测评范围仅抽查了代码中使用的关键常数
---
## 8. 总评与建议
### 8.1 定位判断
这是**"理论分析文档的代码化 POC"**不是经过生产打磨的工具它最有价值的资产不在代码量而在**决策树 + 分界公式 + 逐分支时延模型的可执行化****可解释输出**。方向上与 ops-nn 源码"当前实现 vs 理论上限"对照的初衷一致但当前版本还缺少把结论与真实算子实现/实测对标的能力无对照数据输入无标定通道)。
### 8.2 改进路线(按优先级)
1. **P0**修复特殊分支空洞K=1×B<128 兜底或显式报错不崩溃`BranchResult` plan 时路由层必须 fallback plan None 的路径补全链路防护 + 回归测试
2. **P1**抽出单一约束源L0C/L0A/L0B/L1/dValue/min_TileSize/核数 `make_plan` `_check_constraints` 共用recommend 生成后强制自检不可行则修复/降级对齐 IterBatch a/b 豁免与 dValue 检查的口径并补充小 K T_cmd 主导的时延修正降核模式 base_k dtype 容量反推
3. **P2**io_csv 支持 `out_nd`实现 dtype 不一致告警明确 trans/bias 的建模边界或在文档声明不支持StreamK 归约计账口径max vs drainfixpipe 4B vs C dtype请作者复核并写清约定输入校验与友好报错
4. **测试** CLI/io/evaluator/约束器单测把本文 §5 全部复现样例固化为回归用例跑多 Python 版本矩阵并修正版本声明
5. **工程化** README 目录树与架构文档同步机制或引入文档 lint打包pyproject+ CI参数表增加"来源/置信度/待标定"标定流程文档化
6. **远期**接入真实 kernel 时延/电源剖面数据做模型标定T_cmd带宽利用率曲线dValue 实际影响使"理论最优"能回答"离实测最优差多远"输出"与源码方案对比"通道兑现 README 定位
### 8.3 是否推荐使用
- 用于**理论学习分支归属直觉方案生成的结构化探索**推荐0.1 版本已具备核心价值
- 用于**对真实 NPU 性能做定量决策**当前**不建议**——先完成 P0/P1 修复与硬件标定
---
## 附录 A复现命令
```bash
# 克隆
git clone https://oauth2:<TOKEN>@git.magicnetworld.com/admin/matmul-analysis.git
# 单测
cd BMM/BMM_Theory && python -m unittest discover -s tests -v
# 双模式
python -m bmm_theory recommend examples/cases_demo.csv -o r.csv --plans p.csv -v
python -m bmm_theory evaluate examples/cases_demo.csv p.csv -o e.csv -v
# P0 崩溃复现
python -m bmm_theory recommend <(printf 'case_id,batch_a,batch_b,m,n,k,dtype_a,dtype_b,dtype_c\nx,64,64,8192,32,1,int8,int8,int8\n')
```
## 附录 B手工核验样例与程序输出一致
`iter_demo_form_b`B=128, M=N=64, K=256, bf16为例单核带宽份额 GM=1.6TB/s÷32=50GB/s、L2=5.2÷32=162.5GB/s、单核 Cube=486÷32=15.1875 TFLOPS
- 每核搬入 = b_core(4)×(M·K+K·N)×2B = 4×65536B = 256KB 256KB/50GB/s = **5.24us**GM=5.24 ✓)
- MMAD = 4×2×64×64×256 / 15.1875e12 = **0.55us**
- Fixpipe = 4×64×64×2B / 50GB/s = **0.66us** C bf16 2B 写出
- DMA 命令 = b_core×n_K = 4×50ns = **0.20us**
- drain = T_comp_chunk + T_write = 0.138+0.164 = **0.30us**
- T_total = max(5.24+0.20, 0.55, 0.66)+0.30 = **5.74us**
常数抽检R16=486e12/(1.6e12/2)=**607.5** ✓;θ_c=Q16/2·(8/W_L2+1/Q_AIV)=**12.24≈12** ✓;ASW 面积/周长分界的 93.5=dt·Q16/(2·BW_L2pc) 304=outB·Q16/(2·BW_pc)与文档一致 ✓;L0C=65536 元素 ✓。
## 附录 C随机压力测试分支分布供参考
实验 A宽范围 8000剔除 P0 IterBatch 501ASW_Basic 1581StreamK 154转Matmul 1459ASW_降核 685MergeBatch 580特殊分支 40
实验 B典型形状 6000ASW_Basic 2222IterBatch 1609StreamK 476ASW_降核 1029转Matmul 570MergeBatch 94
两实验未见 NaN/负时延/崩溃P0 区除外另一次 5 000 例实验对 NaN 与负时延做了显式断言全部通过说明数值层面稳定问题集中在**约束一致性**。
---
*报告生成:本地静态审查与动态测试相结合;所有"问题"均有文件:行号或可复现命令支撑。*