1.2 达芬奇架构:AI Core 与三大计算单元
深入昇腾达芬奇架构的核心——AI Core,拆解 AI Cube 矩阵单元、AI Vector 向量单元与 AI Scalar 标量单元的分工,理解昇腾 NPU 与 NVIDIA GPU 在计算组织方式上的根本差异
昇腾 AI 处理器采用的自研架构叫 达芬奇(Da Vinci)架构。达芬奇不仅是一位文艺复兴大师的名字,也暗合昇腾的设计哲学:像文艺复兴一样,让「计算艺术」在 NPU 上重新展开。理解昇腾,第一站就是理解达芬奇架构中最核心的单元——AI Core。
📑 目录
- 1. 达芬奇架构的总体布局
- 2. AI Core:昇腾的「算力心脏」
- 3. AI Cube:矩阵计算单元
- 4. AI Vector:向量计算单元
- 5. AI Scalar:标量与控制单元
- 6. 三大单元的协作:一次矩阵乘的旅程
- 7. 达芬奇架构 vs NVIDIA GPU
- 总结
- 延伸阅读
1. 达芬奇架构的总体布局
昇腾 AI 处理器的片上结构大致可以分成几层:
昇腾 AI 处理器(SoC)
┌────────────────────────────────────────────┐
│ 多个 AI Core(训练芯片集成更多) │
│ 每个 AI Core 内部: │
│ ┌───────────────────────────┐ │
│ │ AI Cube(矩阵) │ │
│ │ AI Vector(向量) │ │
│ │ AI Scalar(标量/控制) │ │
│ │ Unified Buffer / L0 缓存 │ │
│ └───────────────────────────┘ │
│ │
│ L2 Cache(片上二级缓存) │
│ HBM(片外高带宽内存) │
│ 互联:HCCS / PCIe / RoCE 控制器 │
└────────────────────────────────────────────┘
一句话概括:昇腾把算力组织成「多个 AI Core 并行 + 分级存储(HBM → L2 → AI Core 片上 Buffer)」的形态。这和 GPU「多个 SM 并行 + 分级存储(HBM → L2 → 共享内存/寄存器)」的形态是高度同构的——这也是为什么「GPU 的知识能平滑迁移到昇腾」的原因。
2. AI Core:昇腾的「算力心脏」
AI Core 是昇腾执行 AI 计算的基本单元,相当于 GPU 里的 Streaming Multiprocessor(SM)。
关键事实:
- 每个 AI Core 内部又细分为 AI Cube(矩阵)、AI Vector(向量)、AI Scalar(标量) 三类计算单元。
- 昇腾 910 系列训练芯片集成数十个 AI Core;昇腾 310 系列推理芯片集成少量 AI Core(以官方规格为准)。
- 芯片的「算力」大体上 = 单 AI Core 算力 × AI Core 数量 × 频率,因此训练芯片通过堆叠 AI Core 获得高算力。
为什么 AI Core 内部要分三种计算单元?因为神经网络的计算负载天然是「混合」的:
- 矩阵运算(GEMM/卷积)→ 交给 Cube
- 逐元素/规约类运算(激活、归一化、池化的向量实现)→ 交给 Vector
- 控制流、地址计算、少量标量计算 → 交给 Scalar
把三种负载分别用专用硬件处理,比「用同一种通用单元处理一切」更省面积、更省功耗、更快——这就是昇腾 NPU 与通用处理器最本质的区别之一。
3. AI Cube:矩阵计算单元
AI Cube 是昇腾里负责「重活」的单元,专门做矩阵乘法和卷积这类高密度计算。
要点:
- 昇腾把矩阵计算组织成 Cube(立方体) 运算:一次指令就能完成一小块矩阵乘,类似 GPU 的 Tensor Core 做「HMMA(half-precision matrix multiply-accumulate)」。
- 典型的输入输出精度组合包括 FP16×FP16→FP32 累积、INT8×INT8→INT32 累积 等;新一代芯片还逐步引入 BF16/FP8 支持(以具体芯片规格为准)。
- Cube 的输入来自 AI Core 内部的 L0A / L0B 缓冲,结果输出到 L0C 缓冲,这样矩阵乘的计算路径不需要频繁访问片外 HBM。
从编程角度看,你在 Ascend C 里调用的 matmul / 矩阵类 API,最终就是落到 AI Cube 上执行的。可以类比 CUDA 里的 mma.sync / cuBLAS 的 Tensor Core 路径。
4. AI Vector:向量计算单元
AI Vector 负责对一组数据进行「按元素」或「规约」类运算。
典型负载:
- 逐元素运算:激活函数(ReLU/Sigmoid/GELU)、逐元素加减乘除、归一化的向量部分
- 规约运算:求和、求最大值/最小值(softmax 的 max/sum 部分)
- 位运算、类型转换(如 FP32→FP16 的精度转换)
设计上,AI Vector 的位宽很宽,一条指令可以同时处理很多元素,类似 GPU 上利用向量指令(如 vadd)或 CUDA 里 32 线程一个 warp 的 SIMT 协同。你在 Ascend C 中调用的 vector 类 API(如 Add、Exp、SoftMax)最终都落到 AI Vector。
5. AI Scalar:标量与控制单元
AI Scalar 承担「指挥官」角色:
- 执行循环控制、分支跳转、条件判断等控制流逻辑
- 计算地址、生成 Tiling 参数
- 处理少量标量计算(如标量除法、标量指数)
它有点像 CPU,但职责更专一:为 Cube 和 Vector 这两大计算单元「编排节奏」。在 Ascend C 编程中,很多看起来像 CPU 代码的标量操作(for 循环的索引计算等)其实就是在 AI Scalar 上执行的。
6. 三大单元的协作:一次矩阵乘的旅程
把上面三个单元串起来,看一次典型矩阵乘(GEMM)在单个 AI Core 内的执行流程:
1. AI Scalar 计算本次要处理的数据块(Tiling:从大矩阵里切出一小块)
2. 数据从 HBM → L2 → 搬运到 L0A / L0B
3. AI Cube 执行小块矩阵乘:L0A × L0B → L0C(FP32 累积)
4. 若需要激活/归一化:
结果从 L0C → 经过向量路径 → AI Vector 执行激活/归一化
5. 结果写回 Unified Buffer,再由 AI Scalar 调度写回 HBM
6. 循环下一块,直到整个大矩阵算完
可以看到,一条完整的数据流(HBM → 片上 → 计算 → 写回)由 Scalar 调度、Cube/Vector 分工计算。这就是达芬奇架构「多核并行 + 异构分工」的精髓。
7. 达芬奇架构 vs NVIDIA GPU
把昇腾与 NVIDIA GPU 并排对比,能更快建立直觉:
| 对比项 | NVIDIA GPU(如 H100) | 昇腾 AI 处理器 |
|---|---|---|
| 基本计算单元 | SM(Streaming Multiprocessor) | AI Core |
| 矩阵加速 | Tensor Core(MMA) | AI Cube(Cube 运算) |
| 向量/通用计算 | CUDA Core | AI Vector |
| 控制单元 | SM 内的调度器/通用核心 | AI Scalar |
| 片上缓存 | 共享内存(SMEM)+ L1/L2 | Unified Buffer + L0A/B/C + L2 |
| 片外内存 | HBM(GDDR 用于消费卡) | HBM(推理芯片用 LPDDR 等) |
| 线程模型 | Thread/Block/Grid(SIMT) | 无 Thread 概念,强调 Tiling + 数据搬运(见第3章) |
| 编程语言 | CUDA / Triton | Ascend C / aclnn |
最重要的差异:GPU 是「海量线程 + SIMT 灵活调度」的模型,而昇腾是「计算单元专用化 + 显式数据搬运(Tiling + DataCopy)」的模型。这个差异直接决定了 CUDA 开发者迁移到 Ascend C 时需要调整思维——这也是本系列第 3 章的重点。
总结
- 昇腾采用达芬奇架构,基本计算单元是 AI Core,内部由 AI Cube(矩阵)/ AI Vector(向量)/ AI Scalar(标量控制) 三大单元协同工作。
- 训练芯片通过「更多 AI Core + 更大 HBM」获取算力;推理芯片通过「精简 + 能效优化」换取部署密度。
- 达芬奇架构与 GPU 高度同构(SM ↔ AI Core、Tensor Core ↔ AI Cube、SMEM ↔ UB),掌握映射关系后 GPU 知识可以平滑迁移。
- 昇腾最独特的思维是「专用单元 + 显式数据搬运」,学习 Ascend C 时务必把这点放在心上。