Files
matmul-analysis/BMM/昇腾950PR架构解读.md

178 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 昇腾 950PR 微架构及规格详解(面向高性能 Matmul 算子开发)
> 资料来源(均为华为官方一手资料):
> - 《昇腾 950 NPU 架构白皮书》—— `昇腾NPU知识库/00_硬件/昇腾950_NPU架构白皮书.pdf`
> - CANN 商用版 9.0.0《Ascend C 算子开发》编程指南NPU 架构版本 351x—— `昇腾NPU知识库/CANN商用版9.0.0/`
> - CANN 9.0.0 版本说明(确认 950PR 支持特性)
> - cann-samples `matmul_story` 性能建模文档L2 带宽、MTE 带宽、性能公式)—— `昇腾NPU知识库/代码仓/cann-samples/Samples/2_Performance/matmul_story/`
> - 昇腾官网 Ascend 950PR 产品页
---
## 1. 产品定位
昇腾 950 系列是华为第三代达芬奇DaVinci架构旗舰芯片包含 **950PR****950DT** 两款,**共架构设计**,通过搭配不同的片上内存实现差异化:
| | 昇腾 950PR | 昇腾 950DT |
|---|---|---|
| 定位 | LLM **Prefill**、高性能推荐、多模态推理 | 大模型训练 + 推理全流程(含 Decode |
| 片上内存 | 128GB / **1.6TB/s** | 144GB / **4TB/s** |
| 产品形态 | Atlas 350 加速卡 | Atlas 850E / 950 SuperPoD 超节点、Atlas 650E 服务器 |
**关键洞察950PR 是"算力/带宽比"极高的芯片。** 它的算力与 950DT 接近(同架构、同核心规模),但 HBM 带宽只有后者的 40%。这决定了它天然适合 Prefill、推荐这类**计算密集型(高算术强度)**负载。对 matmul 算子开发的直接推论:**在 950PR 上带宽是最宝贵的资源Tiling 与 L2/L1 数据复用策略比在 DT 上更关键。**
## 2. 芯片级架构Chiplet 合封
- 整芯片合封 **2 个 AI Die + 2 个 IO Die + 8 个高速片上内存模块**950PR950DT 为 4 个内存模块),通过高速 D2D Clink 与 Memory Interface 互连
- 全芯片 **UMA统一内存访问**:地址空间统一管理,可跨 Die 访问 L2 CacheDie 间 L2 一致性由硬件维护、软件不感知L2 具有局部亲和性
- 满配 36 个 AI 子系统(每个含 1 Cube Core + 2 Vector Core、4 个 AI CPU Cluster自研 Linx816ARMv8-A物理双线程每 Cluster 4MB L3、4 个 DVPP 子系统4 VPC + 4 JPEGE + 8 JPEGD
- 新一代硬件调度器 STARS 2.0、128MB 统一 L2 Cache
## 3. 核心规格表950PR
| 规格项 | 满配 | 衍生版 |
|---|---|---|
| Cube Core (AIC) | 32 | 28 |
| Vector Core (AIV) | 64 | 56 |
| **Cube 算力 BF16/FP16** | **432 TFLOPS** | 378 |
| Cube 算力 TF32 | 216 TFLOPS | 189 |
| Cube 算力 FP8 / HiF8 / MXFP8 | 865 TFLOPS | 756 |
| Cube 算力 **MXFP4** | **1730 TFLOPS** | 1513 |
| Cube 算力 INT8 | 865 TOPS | 756 |
| Vector 算力 FP16/BF16 | 54 TFLOPS | 47 |
| Vector 算力 FP32 | 27 TFLOPS | 23 |
| Vector 算力 INT8 / INT16 / INT32 / INT64 | 54 / 27 / 13 / 6 TOPS | 47 / 23 / 11 / 5 |
| Cube+Vector 总峰值 MXFP4 | **1784 TFLOPS** | 1561 |
| 片上内存容量 / 带宽 | 128GB / 1.6TB/s | 112GB / 1.4TB/s |
| L2 Cache | 128MB | 112MB |
| 互联 | 灵衢 UB 2.018 Port × 4×112Gbps2016GB/s 双向PCIe 5.0 x16128GB/sEP/RC 双模2×400G UBoE | 同 |
### 3.1 单核算力与频率(已确认值)
CANN 官方 matmul 性能建模文档给出的 950PR 硬件参数为 **32 核、1.65GHz**,由此可得:
- **单 AIC BF16 算力 = 432 / 32 = 13.5 TFLOPS**
- Cube 每拍完成 FP16/BF16 16×16×16 矩阵乘8192 FLOPs/拍13.5 TFLOPS / 8192 FLOPs ≈ **1.65GHz**,与官方参数自洽
- 单 AIC 分摊的 HBM 带宽仅约 **1.6TB/s ÷ 32 ≈ 50GB/s** → BF16 matmul 要喂饱一个 Cube需要约 270 FLOP/Byte 的算术强度,必须依靠 L1/L2 的大 tile 复用达成
## 4. 存储层级与带宽体系
### 4.1 存储层级容量(每核)
| 存储 | 容量 | 对齐要求 | 说明 |
|---|---|---|---|
| 高速片上内存GM | 128GB整芯片 | — | 950PR 1.6TB/s |
| L2 Cache | 128MB整芯片 | 512B line4×128B Sector | 全芯片 UMA 共享 |
| L1 Buffer | 512KB / AIC | 32B | 推荐 NZ 分形 |
| L0A Buffer | 64KB / AIC | 512B | 左矩阵,**351x 架构改为 NZ 分形** |
| L0B Buffer | 64KB / AIC | 512B | 右矩阵ZN 分形 |
| L0C Buffer | **256KB / AIC** | 64B | 矩阵乘结果/中间结果FP32 累加比上代更大Tiling 更灵活 |
| Unified Buffer (UB) | 512KB / AIV | 32B | 向量计算主存储,无格式要求 |
| SIMD RegFile | VL = 256B 位宽 | — | UB 与 Vector ALU 间新增寄存器层,中间结果不必回写 UB |
| SIMT RegFile | 128KB / AIV | — | SIMT 线程寄存器1~256 线程时每线程 127 个寄存器) |
### 4.2 带宽数值总表950PR32 核 / 1.65GHz 满配)
| 链路 | 带宽 | 出处与说明 |
|---|---|---|
| **GMHBM总带宽** | **1.6TB/s** | 白皮书规格值,**不区分读写单向** |
| **L2 Cache 带宽** | **5.2TB/s**(≈ GM 的 3.3 倍) | cann-samples matmul_story 性能建模文档32核/1.65GHz/1.6TB/s 参数与 950PR 满配一一对应) |
| MTE2GM/L2→L1 | 受 HBM 与 L2 共同决定,见 4.3 综合带宽模型 | 矩阵数据唯一入口 |
| MTE1L1→L0A/L0B | **256 BPC ≈ 422.4GB/s**(单 AIC | 同上BPC = Byte Per Cycle×1.65GHz 换算) |
| MTE3 / Fixpipe 搬出L0C→GM/UB | **256 BPC ≈ 422.4GB/s**(单 AIC | 同上 |
| Vector ALU | 256B/拍 | 架构规格文档 |
> 注意区分CANN 文档中"L2 192MB / 读写混合带宽 7TB/s / GM 1.6TB/s"的 L2 Cache 切分案例针对的是 Atlas A3 系列L2 192MB**不是 950PR**L2 128MB。950PR 应使用 **L2 = 5.2TB/s** 这一数值。
### 4.3 GM 带宽要不要区分读写?
**结论:建模与分析时要区分,但官方只发布总带宽 1.6TB/s单向读写带宽无公开数值需以 msProf 实测为准。** 要点如下:
1. **官方规格口径**:白皮书只给出 1.6TB/s 总量,未区分读/写。HBM 物理上读写共享数据总线,读+写合计不能超过总带宽读写混合流量还存在总线转向bus turnaround开销混合流的有效带宽低于纯读。
2. **Profiling 口径是分读写的**msProf `op_summary` 提供 `main_mem_read_bw` / `main_mem_write_bw`GM 读/写带宽)、`ub_read_bw` / `ub_write_bw``l1_read_bw` / `l1_write_bw` 等字段。注意 **Atlas 350 加速卡(即 950PR不支持 `l2_read_bw` / `l2_write_bw` 字段**L2 带宽需结合 MTE2 流水与命中率间接评估。
3. **Matmul 场景的读写竞争来源**
- 读侧MTE2 搬入 A/B 矩阵matmul 的主要 GM 流量);
- 写侧Fixpipe/MTE3 搬出 C 矩阵;
- 隐藏写流量:**L2 Cache 淘汰写回**。当数据访问总量超过 L2 容量128MB替换出的脏数据需先写回 GM占用 GM 写带宽,再读入新数据——这是大数据量 matmul 中容易被忽视的带宽损耗,也是对一次性输出设置 L2 `non-allocate` hint 的动机。
4. **MTE2 综合带宽模型**(官方 matmul 性能建模文档):
```
BandWidth_MTE2 ≈ (1 - L2HitRatio) × 1.6TB/s + L2HitRatio × 5.2TB/s
T_MTE2 ≈ Size_HBM / 1.6TB/s + Size_L2 / 5.2TB/s
```
其中 `Size_HBM` 为首次从 HBM 搬入的数据量,`Size_L2` 为命中 L2 的重复搬运量。工作集超过 L2 容量或存在多核竞争时以实测为准。
## 5. AI Core 微架构351x 架构版本)
950 系列对应 CANN 的 **NPU 架构版本 351x**AIC/AIV 分离架构,配比 **1:2**,每核有独立 Scalar 单元、可独立加载代码段。
![昇腾950PR_数据通路](昇腾950PR_数据通路.svg)
### 5.1 数据通路351x 相对上代的关键变化)
- **删除** GM→L0A/L0B 直达通路、L1→GM 回写通路 → **一切矩阵数据必须经 L1 进入**Tiling 设计围绕 L1(512KB) / L0A/L0B(64KB) / L0C(256KB) 三级组织
- **新增 L0C→UB、UB↔L1 直连通路CV 融合通道)**matmul 结果可从 L0C 直接送 AIV 的 UB 做后处理Softmax、GELU 等),不必绕道 GM——这是 FlashAttention 类融合算子单核性能提升 1.5~2 倍的硬件基础
- **新增 UB↔L1 硬通道**、GM↔UB 搬运支持 Loop 模式Normal/Compact
- **Fixpipe 随路硬化**L0C 输出阶段直接完成 FP32/INT32 → BF16/FP16/FP8/INT8 量化、ReLU/PReLU/LeakyReLU 激活、NZ↔ND/DN 排布转换Channel merge/split→ matmul+量化融合零额外搬运
- **NDDMA 指令**:核内多维 DMA最多 5 维重排随搬运完成,硬化地址生成,内置缓存把离散读聚合成 128B 访问
- **AIC↔AIV 核间通信走 SSBuffer**(上代走 GM延迟更低
### 5.2 Cube Core矩阵计算单元
- 支持 FP32 / TF32 / FP16 / BF16 / HiF8 / FP8_E4M3 / MXFP8 / MXFP4 / U8 / S8
- 每拍FP16 16×16×16INT8 16×32×16**FP8 系 = 2× BF16 算力MXFP4 = 4× BF16 算力**
- L0C 更大256KB→ 更灵活的 Tiling、更高数据复用率
- **HiF8**:华为自研 8bit 浮点变长前缀码指示阶码位宽锥形精度38 个阶码([-22, 15],接近 FP16 的 40 个),无需 MXFP8 的 8bit 缩放因子
### 5.3 Vector Core向量计算单元
- 从传统 SIMD 升级为**双发射 Register-Based SIMD**,支持乱序执行;单核 FP16/FP32 算力较上代**提升 100%**
- 原生 BF16丰富量化/反量化转换指令;针对 Softmax、GELU 优化微架构
- **SIMD/SIMT 混合编程**SIMD 为主、SIMT 为辅SIMT 面向 gather/scatter、复杂分支每 AIV 4 个 Warp Scheduler、128KB SIMT RegFile、最大 128KB DCache复用 UB 作 cacheline访存粒度 128B
- UB bank 结构升级:每个 bank group 两组读写口,最多同时 2 读或 1 读 1 写(上代 1 读或 1 写)
### 5.4 同步机制
- 新增 **BufferID 同步**`get_buf()`/`rel_buf()`,类互斥锁语义),比 set_flag/wait_flag 内聚性更强
- 核内同步SetFlag/WaitFlag + EventID需成对、及时释放、勿手动占用预留 ID
- 核间同步CrossCoreSetFlag/CrossCoreWaitFlag支持 AIC:AIV 1:1 与 1:2 模式flagId 0~10、同一 ID 最多计 15 次
- **注意Matmul 高阶 API 内部已使用 CrossCore 核间同步,不要与其混用,避免 flagId 冲突**
## 6. 周边子系统(简版)
- **L2 Cache 128MB**:多 Bank 分布式、512B 低位交织高位异或、512B Cache Line + 128B Sector Cache128B/256B 访问更高效)、每 Bank 支持同时读写;支持算子可控 **L2 hint**allocate / non-allocate与 **CMO**Prefetch/Writeback/Invalid/Flush离散小包、随机访存场景同带宽下性能较上代提升 2 倍+
- **STARS 2.0**2048 条任务流 Host 下沉HSCB 专用高速控制总线,调度开销 ns 级;支持最多 8 个 Group 的亲和性调度(按 Die 分组利用 L2 局部性算力切分AIC/AIV/SDMA 最多 16 资源池)
- **AI CPU**4 Cluster × 2 Linx816ARMv8-A物理双线程承载控制类任务与 CPU 类算子
- **互联**:灵衢 UB 2.02016GB/s 双向URMA 异步语义Jetty 队列RTP/CTP 两种传输层)+ UB Memory 同步语义Load/Store/Atomic最高 128TB 内存共享);**CCU 集合通信硬件卸载**Broadcast/ReduceScatter/AllGather/AllReduce/All2All(v));超节点规模 384 卡 → **8192 卡**,集群 >128K 卡
## 7. 对 Matmul 算子开发的启示
1. **数据通路约束**GM→L0A/L0B 无直达通路,一切矩阵数据经 L1。L0C 256KB 恰好放下 256×256 FP32 累加块(单份),即 baseM = baseN 的理论上限约 256。
2. **Tiling 目标 = Cube Bound**:以官方建模公式判断瓶颈流水,`T_total = max(T_MMAD, T_MTE2, T_MTE1, T_FIXPIPE [, T_VF])`
- 避免 MTE1 BoundbaseM = baseN ≥ 8016 的倍数)即可使 MTE1 耗时低于 MMAD
- 避免 MTE2 BoundbaseM = baseN = 256 时达成 Cube Bound 需 MTE2 带宽 ≥ 2.64TB/s——超过 HBM 的 1.6TB/s**必须靠 L2 命中补足L2 命中率达到约 28.9% 时 MTE2 不再是主瓶颈**
- 数据量超 L2 容量时使能 **L2 Cache 切分**Matmul 高阶 API 已支持)。
3. **AIC:AIV = 1:2**:优先使用 AscendC Matmul 高阶 API已处理 Cube/Vector 流水编排与核间同步);手写底层 matmul 注意 CrossCore flagId 冲突。
4. **优先利用 CV 融合通路**matmul 后接量化/激活/Softmax 时走 L0C→UB / Fixpipe 随路处理,避免 GM 往返——在带宽紧张的 950PR 上收益比 950DT 更大。
5. **低精度是算力大头**1784 TFLOPS 峰值只有 MXFP4 能达到FP8 系为 BF16 的 2 倍。推理 matmul 优先考虑 MXFP8/HiF8权重 weightNz 格式)+ Fixpipe 随路反量化CANN 9.0.0 起 950PR 新增 MM 融合算子与 mxfp8 weightNz 支持。
6. **精打细算 GM 带宽**:权重驻留 L2hint、一次性输出设 non-allocate避免挤占 L2 并减少淘汰写回的 GM 写流量);读写共享 1.6TB/s 总带宽C 矩阵搬出与 A/B 搬入存在竞争。
7. **参考实现**`昇腾NPU知识库/代码仓/catlass`(华为开源矩阵计算模板库,类 CUTLASS、`代码仓/ops-math`、`代码仓/ops-blas`gemm、`代码仓/cann-samples/Samples/2_Performance/matmul_story`(含普通/量化/MXFP8/MXFP4 matmul 的完整性能建模与调优案例)。
## 8. 关键数值速查
| 参数 | 数值 |
|---|---|
| AIC / AIV 数量 | 32 / 64满配28 / 56衍生 |
| 主频 | 1.65GHz |
| Cube 算力 BF16 | 432 TFLOPS单 AIC 13.5 |
| Cube 算力 FP8 / MXFP4 | 865 / 1730 TFLOPS |
| GM 容量 / 带宽 | 128GB / 1.6TB/s总带宽读写共享 |
| L2 容量 / 带宽 | 128MB / 5.2TB/s |
| L1 / L0A / L0B / L0C / UB | 512KB / 64KB / 64KB / 256KB每 AIC512KB每 AIV |
| MTE1 / MTE3 带宽 | 256 BPC ≈ 422.4GB/s单 AIC |
| Cube Bound 最小 MTE2 带宽baseM=baseN=256 | 2.64TB/sL2 命中率 ≥28.9% 可达成) |
| 互联带宽 | UB 2.0 2016GB/s 双向PCIe 5.0 x16 128GB/s |