移动 昇腾950PR架构解读.md 到昇腾950PR硬件目录
This commit is contained in:
177
昇腾950PR/昇腾950PR架构解读.md
Normal file
177
昇腾950PR/昇腾950PR架构解读.md
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
# 昇腾 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 个高速片上内存模块**(950PR;950DT 为 4 个内存模块),通过高速 D2D Clink 与 Memory Interface 互连
|
||||||
|
- 全芯片 **UMA(统一内存访问)**:地址空间统一管理,可跨 Die 访问 L2 Cache,Die 间 L2 一致性由硬件维护、软件不感知;L2 具有局部亲和性
|
||||||
|
- 满配 36 个 AI 子系统(每个含 1 Cube Core + 2 Vector Core)、4 个 AI CPU Cluster(自研 Linx816,ARMv8-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.0:18 Port × 4×112Gbps,2016GB/s 双向;PCIe 5.0 x16(128GB/s,EP/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 line,4×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 带宽数值总表(950PR,32 核 / 1.65GHz 满配)
|
||||||
|
|
||||||
|
| 链路 | 带宽 | 出处与说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| **GM(HBM)总带宽** | **1.6TB/s** | 白皮书规格值,**不区分读写单向** |
|
||||||
|
| **L2 Cache 带宽** | **5.2TB/s**(≈ GM 的 3.3 倍) | cann-samples matmul_story 性能建模文档(32核/1.65GHz/1.6TB/s 参数与 950PR 满配一一对应) |
|
||||||
|
| MTE2(GM/L2→L1) | 受 HBM 与 L2 共同决定,见 4.3 综合带宽模型 | 矩阵数据唯一入口 |
|
||||||
|
| MTE1(L1→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 单元、可独立加载代码段。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 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×16;INT8 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 Cache(128B/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 Linx816(ARMv8-A,物理双线程),承载控制类任务与 CPU 类算子
|
||||||
|
- **互联**:灵衢 UB 2.0,2016GB/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 Bound:baseM = baseN ≥ 80(16 的倍数)即可使 MTE1 耗时低于 MMAD;
|
||||||
|
- 避免 MTE2 Bound:baseM = 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 带宽**:权重驻留 L2(hint)、一次性输出设 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(每 AIC);512KB(每 AIV) |
|
||||||
|
| MTE1 / MTE3 带宽 | 256 BPC ≈ 422.4GB/s(单 AIC) |
|
||||||
|
| Cube Bound 最小 MTE2 带宽(baseM=baseN=256) | 2.64TB/s(L2 命中率 ≥28.9% 可达成) |
|
||||||
|
| 互联带宽 | UB 2.0 2016GB/s 双向;PCIe 5.0 x16 128GB/s |
|
||||||
Reference in New Issue
Block a user