# Matmul 算子分析 —— 情报信息清单 > 状态说明:✅ 已就绪(本地可读) | 🔶 待补充 | 📍 位置标注 > 根路径简写:`KB = /storage/Users/currentUser/WorkBuddy/昇腾NPU/昇腾NPU知识库/` --- ## 1. 硬件架构规格 | 情报 | 位置 | 状态 | 备注 | |---|---|---|---| | 昇腾950 NPU 架构白皮书(PDF 原版) | `KB/00_硬件/昇腾950_NPU架构白皮书.pdf` | ✅ | 40 页,6.3MB | | 白皮书全文文本(可 grep) | `KB/00_硬件/昇腾950_NPU架构白皮书.txt` | ✅ **本轮新增** | 27976 字符,由 pdf-parse 提取 | | Ascend 950PR 产品页 | `KB/00_硬件/Ascend_950PR_产品页.txt` | ✅ | 1784 TFLOPS / 128GB / 1.6TB/s / 灵衢2.0 2TB/s | | Ascend 950DT 产品页 | `KB/00_硬件/Ascend_950DT_产品页.txt` | ✅ | 144GB / 4TB/s | | 产品形态说明 | `KB/00_硬件/昇腾产品形态说明.md` | ✅ | 950PR=Atlas 350 加速卡 | | 950PR 微架构解读(含数据通路 SVG) | gitea `昇腾950PR/昇腾950PR架构解读.md` | ✅ | 已提炼出 351x 架构关键数值表与数据通路变化 | **关键硬件参数(已确认,供建模引用)**: | 参数 | 数值 | |---|---| | AIC / AIV | 32 / 64(满配),28 / 56(衍生) | | 主频 | 1.65GHz | | Cube BF16 / TF32 / FP8 / MXFP4 | 432 / 216 / 865 / 1730 TFLOPS | | GM 容量 / 带宽 | 128GB / 1.6TB/s(读写共享总带宽) | | L2 容量 / 带宽 | 128MB / 5.2TB/s | | L1 / L0A / L0B / L0C / UB | 512KB / 64KB / 64KB / 256KB(每 AIC);512KB(每 AIV) | | MTE1 / MTE3 | 256 BPC ≈ 422.4GB/s(单 AIC) | --- ## 2. 官方性能建模文档(任务 1 的核心公式来源) | 文档 | 位置 | 状态 | 关键内容 | |---|---|---|---| | 非量化 matmul 性能优化指南 | `KB/代码仓/cann-samples/Samples/2_Performance/matmul_story/docs/matmul_performance.md` | ✅ | T_cube/T_mte2/T_mte1/T_fixp 完整公式、MTE2 vs MMAD / MTE1 vs MMAD / FIXPIPE vs MMAD 的 Bound 判定、SWAT/StreamK/UnitFlag/Double Buffer/尾轮均衡 | | 量化 matmul(MX)性能 | `.../matmul_story/docs/quant_matmul_mx_performance.md` | ✅ | MXFP8/MXFP4 数据通路、scale 复用 | | 权重量化 matmul 性能 | `.../matmul_story/docs/weight_quant_matmul_mxfp8fp4_performance.md` | ✅ | weightNz、MXFP8FP4 | | mxfp4 tutorials | `.../matmul_story/docs/quant_matmul_mxfp4_tutorials.md` | ✅ | — | | 官方调优样例源码 | `.../matmul_story/matmul_recipes/examples/`(matmul_a16w16 / a32w32 / quant_matmul_int8 / mxfp4 / mxfp8 / hifp8 / weight mxfp8fp4) | ✅ | .asc 模板 kernel(swat/streamk 等) | --- ## 3. Matmul 算子源码 ### 3.1 mat_mul_v3(ops-nn,最常用 matmul,aclnnMatmul 后端)📍 完整 | 模块 | 位置 | 关键文件 | |---|---|---| | Host Tiling | `KB/代码仓/ops-nn/matmul/mat_mul_v3/op_host/op_tiling/arch35/` | `matmul_v3_tiling_advanced.cpp`、`matmul_v3_basic_aswt_tiling.cpp`、`matmul_v3_basic_streamk_tiling.cpp`、`matmul_v3_asw_tiling.cpp`、`matmul_v3_tiling_helper.cpp`、`matmul_v3_tiling_key.cpp` | | Kernel(核内) | `KB/代码仓/ops-nn/matmul/mat_mul_v3/op_kernel/arch35/` | `mat_mul_v3.cpp`、`mat_mul_asw_kernel.h`、`mat_mul_bl1_full_load.h`、`mat_mul_al1_full_load.h`、`mat_mul_full_load.h`、`mat_mul_fixpipe*.h`、`mat_mul_stream_k_kernel.h`、`mat_mul_streamk_split_k.h`、`mat_mul_basic_split_k.h`、`mat_mul_pingpong_basic*.h`、`block_scheduler_{aswt,mul,multi_mul,streamk}.h` | | API 入口 | `.../op_host/op_api/aclnn_matmul.cpp` 等 | aclnnMatmul/aclnnAddmm/aclnnMm | | 分型配置 | `.../op_host/config/` | 各芯片 runtime_kb.json(tiling 调参表) | ### 3.2 ops-blas blasLt matmul(aclnn 底层 GEMM,含量化)📍 完整 | 模块 | 位置 | 关键文件 | |---|---|---| | Engine | `KB/代码仓/ops-blas/blasLt/matmul/engine/` | `matmul_engine.cpp/.h` | | fp32 | `.../fp32/arch35/` | `matmul_fp32_host.cpp`、`matmul_fp32_kernel.cpp` | | mxfp4 | `.../mxfp4/arch35/` | `matmul_mxfp4_host.cpp`、`matmul_mxfp4_kernel.cpp` | | mxfp8 | `.../mxfp8/arch35/` | `matmul_mxfp8_host.cpp`、`matmul_mxfp8_kernel.cpp` | | epilogue | `.../epilogue/arch35/` | `epilogue_alpha_beta_*` | | tiling 公共 | `.../common/` | `quant_matmul_mx_tiling_swat_host.h`、`quant_matmul_tiling_data.h` | | gemm(blas/gemm) | `KB/代码仓/ops-blas/blas/gemm/arch35/` | `gemm_kernel.cpp/.h`、`gemm_tiling_data.h` | ### 3.3 catlass(华为开源矩阵乘模板库,类 CUTLASS)📍 | 内容 | 位置 | |---|---| | 头文件 | `KB/代码仓/catlass/include/catlass/` | | 示例 | `KB/代码仓/catlass/examples/00_basic_matmul`、`06_optimized_matmul`、`43_ascend950_basic_matmul`(950 专属示例) | ### 3.4 其他相关算子(对照参考) - `ops-nn/matmul/` 下 32 个 matmul 变体(quant_matmul*、batch_mat_mul_v3、gemm_v3 等)——索引见 `KB/CODE_INDEX.md` - BMM 源码锚点:`KB/代码仓/ops-nn/matmul/batch_mat_mul_v3/`(与 BMM 分析对应) --- ## 4. CANN 文档(开发/API/性能优化) | 类别 | 位置(社区版 9.2.0-beta.1 为主) | 状态 | |---|---|---| | AscendC 算子开发 | `KB/CANN社区版9.2.0-beta.1/01_AscendC算子开发/` | ✅ | | AscendC API 参考 | `KB/CANN社区版9.2.0-beta.1/02_API参考/AscendC_API/` | ✅ | | 算子库 aclnn | `KB/CANN社区版9.2.0-beta.1/02_API参考/算子库aclnn/` | ✅ | | 性能优化 / msProf | `KB/CANN社区版9.2.0-beta.1/03_性能优化/` | ✅ | | 编译器(毕昇 + PTO 虚拟指令集) | `KB/CANN社区版9.2.0-beta.1/08_编译器/` | ✅ | | 加速库 ATB | `KB/CANN社区版9.2.0-beta.1/07_加速库/` | ✅ | | 商用版 9.0.0 / 8.5.0 | `KB/CANN商用版9.0.0/`、`KB/CANN商用版8.5.0/` | ✅ 备用对照 | --- ## 5. 待补充情报(列为后续行动) | 情报 | 为什么需要 | 获取途径 | 优先级 | |---|---|---|---| | msProf 实测 profile(op_summary 等) | 校准/验证理论模型精度 | Atlas 350 真机、CANN 仿真、或官方公开性能数据 | 高 | | GM 读写单向带宽 | 读写竞争建模需要分读写 | msProf `main_mem_read_bw/write_bw` 反推 | 高 | | 950PR 上 matmul 的官方基准性能数据(TFLOPS 实测) | 模型验证的 ground truth | 官方性能白皮书 / 论坛 / 技术工单 | 高 | | 源码缺失文件补拉 | 若 3.x 分析发现个别 .cpp 缺失 | `.tmp/gitcode_fetch.py cann ops-nn master matmul/mat_mul_v3` | 中 | | CUTLASS/GEMM 建模对照(可选) | 方法论交叉验证 | 公开论文/文档 | 低 | --- ## 6. 情报就绪度总结 - 硬件规格:✅ 齐全(白皮书全文 + 解读 + 产品页) - 性能建模公式:✅ 齐全(官方 matmul_performance.md 全套) - 源码:✅ 基本齐全(mat_mul_v3 182 文件 + blasLt matmul 25 文件 + catlass + 官方样例) - 文档:✅ 齐全(13097 篇 CANN 文档) - **缺口集中在"实测数据"**:理论建模的**验证闭环**需要 msProf 实测数据,这是当前最需要补的一环,建议尽快落实真机/仿真途径。