Eyeriss 架构中的访存行为解析(腾讯元宝)

发布于:2025-07-23 ⋅ 阅读:(19) ⋅ 点赞:(0)

Eyeriss 架构中的访存行为解析

Eyeriss 是 MIT 提出的面向卷积神经网络(CNN)的能效型 NPU(神经网络处理器)架构,其核心创新在于通过硬件结构优化访存行为,以解决传统 GPU 在处理 CNN 时因数据搬运导致的能效瓶颈。以下从访存行为的关键问题、Eyeriss 的解决方案及技术细节展开说明。


一、CNN 的访存挑战:数据复用与带宽压力

CNN 的计算以卷积为核心,其特点是局部性(locality)强但数据复用模式复杂​:

  • 空间局部性​:卷积核在输入特征图上滑动,相邻输出单元的计算共享大量输入数据(如 3x3 卷积核覆盖的 9 个输入像素)。
  • 通道局部性​:同一输入通道的数据会被多个卷积核重复使用(如 16 个卷积核共享同一输入通道)。
  • 批处理局部性​:同一批次(batch)的输入数据在不同输出通道间复用。

传统 GPU 的全局内存(DRAM)→共享内存(Shared Memory)→寄存器三级存储层次,虽能缓解带宽压力,但仍存在:

  1. 数据搬运量大​:CNN 的参数(权重)和激活值(中间结果)需频繁在 DRAM 和计算单元间传输。
  2. 访存带宽成为瓶颈​:计算单元常因等待数据而闲置(计算密度低),能效比差。

二、Eyeriss 的访存优化设计

Eyeriss 通过数据流(Dataflow)架构片上存储层次的协同设计,最大化数据复用,减少 DRAM 访问次数。其核心思想是:​​“让数据尽可能靠近计算单元”​

1. 数据流架构:控制数据流动路径

Eyeriss 定义了四种经典数据流模式(后扩展为更灵活的 ​NoC-aware 数据流),每种模式针对不同的数据复用场景:

  • Weight Stationary (WS)​​:权重固定在一个 PE(Processing Element)中,输入激活值和部分和(Partial Sum)流动。
    → ​优势​:适合权重复用高的场景(如小卷积核),减少权重从片上存储到 PE 的重复加载。
  • Output Stationary (OS)​​:输出激活值固定在 PE 中,权重和输入激活值流动。
    → ​优势​:适合输出通道复用高的场景(如多卷积核并行),减少部分和的频繁更新。
  • Input Stationary (IS)​​:输入激活值固定在 PE 中,权重和部分和流动。
    → ​优势​:适合输入通道复用高的场景(如深层网络),减少输入数据的重复搬运。
  • No Local Reuse (NLR)​​:无数据复用,直接按计算顺序搬运数据(类似传统矩阵乘法)。

Eyeriss 的灵活性​:通过动态配置数据流模式,适配不同层的计算特征(如浅层用 WS,深层用 OS)。

2. 片上存储层次:多级缓存与数据分布

Eyeriss 的存储层次分为四级,逐级减少对 DRAM 的访问:

  1. 片外 DRAM​:存储权重和激活值,带宽有限(如 12GB/s)。
  2. 片上全局缓冲区(Global Buffer)​​:暂存从 DRAM 加载的数据,按需分发给处理单元(PE Array)。
  3. PE Array 内的局部存储​:
    • PE 级寄存器​:每个 PE 包含少量寄存器,存储当前计算的输入、权重和部分和。
    • 行缓冲区(Row Buffer)​​:每个 PE 行共享的缓冲区,用于暂存输入激活值(支持空间局部性复用)。
  4. 数据广播与共享机制​:
    • 权重广播​:同一权重可被多个 PE 共享(通过行缓冲区或全局缓冲区)。
    • 输入激活值共享​:同一输入数据可通过行缓冲区广播给多个 PE(支持通道局部性复用)。

3. 稀疏性与零值跳过

CNN 中存在大量冗余计算(如 ReLU 激活后的零值),Eyeriss 通过稀疏数据流跳过零值计算:

  • 标记零值​:在数据加载时标记零激活值,PE 直接跳过相关计算。
  • 动态调整数据流​:零值跳过后,剩余数据重新分配到 PE,避免无效搬运。

三、Eyeriss 的访存行为示例(以卷积层为例)​

假设一个 3x3 卷积层,输入特征图尺寸 32x32,输出特征图 30x30,输入/输出通道数各为 16:

  1. 数据加载​:
    • 权重(3x3x16x16)从 DRAM 加载到全局缓冲区,按 WS 数据流分发给 PE。
    • 输入激活值(32x32x16)分块加载到全局缓冲区,通过行缓冲区广播给 PE 行。
  2. PE 计算​:
    • 每个 PE 计算局部 3x3 区域的输出(如 1x1 输出单元),权重固定,输入激活值从行缓冲区流动。
    • 部分和(Partial Sum)存储在 PE 寄存器中,逐步累加。
  3. 数据复用​:
    • 空间复用​:同一输入激活值的 3x3 区域被多个 PE 共享(通过行缓冲区)。
    • 通道复用​:同一输入通道被多个卷积核(16 个)重复使用(通过全局缓冲区)。
  4. 结果写回​:
    • 输出激活值(30x30x16)暂存于全局缓冲区,按需写回 DRAM(非实时写入,减少带宽压力)。

四、Eyeriss 的能效优势

通过上述设计,Eyeriss 实现了:

  1. 数据复用率提升​:输入激活值的空间复用率达 90%+,权重复用率达 80%+。
  2. DRAM 访问减少​:相比 GPU,DRAM 访问量降低 10-100 倍。
  3. 计算密度优化​:PE 利用率(Utilization)从 GPU 的 10% 提升至 30%-50%。

总结

Eyeriss 的访存行为优化核心是​“数据流驱动存储层次”​​:通过动态数据流模式匹配计算特征,结合多级片上存储和数据复用机制,最大限度减少 DRAM 访问,从而显著提升能效。这一设计为后续 NPU(如 Google TPU、华为 Da Vinci)的访存优化奠定了基础。


网站公告

今日签到

点亮在社区的每一天
去签到