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

14 KiB
Raw Permalink Blame History

昇腾 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架构旗舰芯片包含 950PR950DT 两款,共架构设计,通过搭配不同的片上内存实现差异化:

昇腾 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不是 950PRL2 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_bwGM 读/写带宽)、ub_read_bw / ub_write_bwl1_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 架构版本 351xAIC/AIV 分离架构,配比 1:2,每核有独立 Scalar 单元、可独立加载代码段。

昇腾950PR_数据通路

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×16FP8 系 = 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 hintallocate / non-allocateCMOPrefetch/Writeback/Invalid/Flush离散小包、随机访存场景同带宽下性能较上代提升 2 倍+
  • STARS 2.02048 条任务流 Host 下沉HSCB 专用高速控制总线,调度开销 ns 级;支持最多 8 个 Group 的亲和性调度(按 Die 分组利用 L2 局部性算力切分AIC/AIV/SDMA 最多 16 资源池)
  • AI CPU4 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-blasgemm代码仓/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