| 指标 | CPU | GPU | NPU |
|---|---|---|---|
| 计算密度 | 低 | 中 | 极高 |
| 能效比(TOPS/W) | ~0.1 | ~1-5 | ~10-100 |
| 内存利用率 | 低 | 中 | 高 |
| 灵活性 | 极高 | 高 | 低-中 |
数据有节奏流动,PE只与邻居通信,极高数据复用。
单指令多数据,WMMMA矩阵分块,灵活编程。
计算图直接映射硬件,最小化内存访问。
可重构互连+可配置功能单元,平衡灵活与效率。
计算密度 = FLOPs / 访存字节数。矩阵乘法计算密度高(O(√N)),受计算限制;向量加法计算密度低,受带宽限制。
顶层模块包含命令解码FSM(6态)、4个PE并行阵列和统一内存接口。FSM流程:IDLE→DECODE→LOAD→COMPUTE→STORE→FINISH。
当前AI加速器市场呈现百花齐放的格局,不同厂商根据自身技术积累和应用场景选择了不同的架构路线:
| 产品 | 厂商 | 架构 | 算力 | 工艺 | 功耗 |
|---|---|---|---|---|---|
| A100 | NVIDIA | Tensor Core+CUDA | 312 TFLOPS(FP16) | 7nm | 400W |
| TPU v4 | 脉动阵列 | 275 TOPS(INT8) | 7nm | 300W | |
| 昇腾910 | 华为 | 达芬奇架构 | 256 TFLOPS(FP16) | 7nm | 310W |
| MI250X | AMD | Matrix Core | 383 TFLOPS(FP16) | 6nm | 560W |
| 产品 | 厂商 | 架构 | 算力 | 功耗 |
|---|---|---|---|---|
| Jetson Orin | NVIDIA | Tensor Core | 40 TOPS | 15-60W |
| Neural Engine | Apple | 数据流 | 15.8 TOPS | ~5W |
| 昇腾310 | 华为 | 达芬奇 | 16 TOPS | 8W |
| 寒武纪220 | 寒武纪 | MLU | 8 TOPS | 5W |
设计一个AI加速器需要系统性的方法论,从应用需求到架构决策:
不同神经网络操作的计算密度差异巨大,直接影响加速器架构选择:
| 操作 | 矩阵维度 | FLOPs | DRAM(Bytes) | 计算密度 |
|---|---|---|---|---|
| FC层 | 1024×1024 | 2M | 12K | 167 |
| Conv3×3 | 64ch,56×56 | 23.7M | 648K | 36.6 |
| Conv1×1 | 256ch,14×14 | 25.6M | 411K | 62.3 |
| Depthwise | 64ch,56×56 | 376K | 154K | 2.4 |
| Attention | 512×64 | 67M | 295K | 227 |
AI加速器的能耗优化从算法到电路有多个层次:
| 层次 | 优化方法 | 节能比例 |
|---|---|---|
| 算法层 | 量化(INT8/INT4)、剪枝、蒸馏 | 2-10× |
| 架构层 | 数据复用、存内计算、近似计算 | 2-5× |
| 电路层 | 电压缩放、时钟门控、功耗门控 | 1.5-3× |
| 工艺层 | 先进工艺(7nm→3nm)、3D封装 | 1.3-2× |
| 年份 | 里程碑 | 影响 |
|---|---|---|
| 2016 | Google TPU v1发布 | 脉动阵列成为AI加速器主流架构 |
| 2017 | NVIDIA Volta(Tensor Core) | 混合精度训练成为标配 |
| 2018 | MIT Eyeriss v2 | 行驻留数据流展示了灵活数据复用 |
| 2019 | 华为昇腾910 | 达芬奇架构3D Cube |
| 2020 | Apple Neural Engine | 移动端AI加速器普及 |
| 2022 | NVIDIA H100(Transformer Engine) | FP8量化+专门Attention加速 |
| 2023 | 存内计算芯片(如后摩智能) | SRAM/RRAM存内计算开始落地 |
| 2024 | Chiplet NPU(如寒武纪) | 多芯粒扩展突破单芯片限制 |
完成本课后,你已掌握 AI加速器概述 的核心概念与硬件实现方法。
不同加速器的微架构设计遵循几种基本模式,理解这些模式有助于快速评估和设计新架构:
这是最经典的设计模式,几乎所有商用NPU都采用:
// 典型数据流:
// 1. CPU配置参数(层类型、维度、地址)
// 2. DMA搬运输入数据到片上SRAM
// 3. 计算单元从SRAM读取数据执行计算
// 4. 结果写回SRAM
// 5. DMA搬运结果到外存
//
// 关键:步骤2和3可以流水重叠(双缓冲)
// 关键:步骤4和5可以流水重叠(写回+下一层输入)
复杂NPU通常采用3-4级存储层次:
数据在层次间流动,每升一层延迟增大约10倍,但容量也增大约10倍。设计的核心是最小化L3访问(最慢、最耗能)。
CGRA架构允许动态重构PE间的互连网络:
// 可重构互连配置示例:
// 时隙0:配置PE阵列为4×4脉动阵列
// PE(0,0)→PE(0,1)→PE(0,2)→PE(0,3) 水平连接
// PE(0,0)→PE(1,0)→PE(2,0)→PE(3,0) 垂直连接
//
// 时隙1:配置为2路4×2并行
// 路径A: PE(0,0)→PE(0,1)→PE(1,0)→PE(1,1)
// 路径B: PE(2,0)→PE(2,1)→PE(3,0)→PE(3,1)
//
// 互连网络由配置SRAM控制,每个周期可切换
在架构探索阶段,需要快速估算不同设计的面积和功耗:
| 组件 | 面积(28nm, mm²) | 面积占比 |
|---|---|---|
| INT8 PE | 0.001 | 基线 |
| INT16 PE | 0.004 | 4× |
| FP16 PE | 0.012 | 12× |
| 6T SRAM(1KB) | 0.003 | - |
| 64KB SRAM | 0.19 | - |
| 256×256 INT8 阵列 | ~65 | - |
| 组件 | 功耗(28nm, mW/MHz) | 占比 |
|---|---|---|
| INT8 MAC | 0.001 | - |
| SRAM读(1KB) | 0.0005 | - |
| 时钟树(大阵列) | - | 20-30% |
| 互连网络 | - | 10-15% |
| 漏电功耗 | - | 10-20%(28nm) |
| 陷阱 | 症状 | 解决方案 |
|---|---|---|
| 阵列利用率低 | 实际算力远低于峰值 | 可变阵列大小/分块优化 |
| 带宽不足 | PE空转等待数据 | 增加Bank数/数据复用 |
| 控制开销大 | 状态机复杂难以验证 | 简化FSM/微码控制 |
| 精度不够 | INT8量化后精度崩塌 | 混合精度/累加器余量 |
| 时钟树困难 | 大阵列时序不满足 | 分区时钟/流水线切割 |
| 概念 | 定义 | 硬件影响 |
|---|---|---|
| 计算密度 | FLOPs/访存字节数 | 决定计算/带宽受限 |
| 数据复用 | 同一数据被多个PE使用 | 减少DRAM访问次数 |
| 流水线 | 多级操作重叠执行 | 提高吞吐量,增加延迟 |
| 双缓冲 | 两组缓冲区交替使用 | 隐藏数据加载延迟 |
| 分块计算 | 大矩阵分成小块处理 | 适配有限片上存储 |
| 饱和算术 | 溢出时钳位到极值 | 防止精度崩溃 |
| 时钟门控 | 空闲模块关闭时钟 | 降低动态功耗 |