AiPaper
论文状态:已完成

ShiDianNao: Shifting Vision Processing Closer to the Sensor

原文链接
价格:0.10
已有 3 人读过
本分析由 AI 生成,可能不完全准确,请以原文为准。

TL;DR 精炼摘要

本文提出了一种名为ShiDianNao的卷积神经网络加速器,置于CMOS或CCD传感器旁,消除DRAM访问并优化数据访问模式,使能效提高60倍,速度比高端GPU快约30倍,面积仅为4.86mm²,功耗320mW,推动了图像应用的性能提升。

摘要

In recent years, neural network accelerators have been shown to achieve both high energy efficiency and high performance for a broad application scope within the important category of recognition and mining applications. Still, both the energy efficiency and performance of such accelerators remain limited by memory accesses. In this paper, we focus on image applications, arguably the most important category among recognition and mining applications. The neural networks which are state-of-the-art for these applications are Convolutional Neural Networks (CNN), and they have an important property: weights are shared among many neurons, considerably reducing the neural network memory footprint. This property allows to entirely map a CNN within an SRAM, eliminating all DRAM accesses for weights. By further hoisting this accelerator next to the image sensor, it is possible to eliminate all remaining DRAM accesses, i.e., for inputs and outputs. In this paper, we propose such a CNN accelerator, placed next to a CMOS or CCD sensor. The absence of DRAM accesses combined with a careful exploitation of the specific data access patterns within CNNs allows us to design an accelerator which is 60x more energy efficient than the previous state-of-the-art neural network accelerator. We present a full design down to the layout at 65 nm, with a modest footprint of 4.86 mm² and consuming only 320 mW, but still about 30x faster than high-end GPUs.

思维导图

论文精读

中文精读

1. 论文基本信息

1.1. 标题

ShiDianNao: Shifting Vision Processing Closer to the Sensor

1.2. 作者

Zidong Du†, Robert Fasthuber‡, Tianshi Chen†, Paolo Ienne‡, Ling Li†, Tao Luo†‡, Xiaobing Feng†, Yunji Chen†, Olivier Temam§

  • † 中国科学院计算技术研究所 (Institute of Computing Technology, Chinese Academy of Sciences, China)
  • ‡ 瑞士洛桑联邦理工学院 (EPFL, Switzerland)
  • § 法国国家信息与自动化研究所 (Inria, France)

1.3. 发表期刊/会议

该论文在摘要和引言中提到其引用了 ASPLOS、MICRO 等计算机体系结构领域的顶级会议论文,且从其内容和排版来看,是典型的会议论文。根据文末参考文献 [4] (Yunji Chen et al., 2015) 的格式,推测本文也是在 2015 年左右的顶级计算机体系结构会议上发表。

1.4. 发表年份

根据参考文献 [4] 的发表年份 (2015),以及论文内容描述的“最近几年”的趋势,该论文应发表于 2015 年

1.5. 摘要

近年来,神经网络加速器 (Neural Network Accelerators) 在识别与挖掘 (recognition and mining) 应用中展现出高能效和高性能。然而,这些加速器的能效和性能仍受限于内存访问 (memory accesses)。本文聚焦于图像应用 (image applications),这被认为是识别与挖掘应用中最重要的类别。针对图像应用最先进的神经网络是卷积神经网络 (Convolutional Neural Networks, CNN),它们有一个重要特性:权重在许多神经元之间共享 (weights are shared among many neurons),这显著减少了神经网络的内存占用 (memory footprint)。这一特性使得整个 CNN 可以完全映射到片上 SRAM (SRAM) 中,从而消除了所有用于权重的 DRAM 访问 (DRAM accesses)。通过进一步将加速器部署在图像传感器 (image sensor) 旁边,可以消除所有剩余的 DRAM 访问,即针对输入和输出的访问。

本文提出了一种这样的 CNN 加速器,名为 ShiDianNao,其放置在 CMOS 或 CCD 传感器 (CMOS or CCD sensor) 旁边。消除 DRAM 访问并结合对 CNN 中特定数据访问模式 (data access patterns) 的精细利用,使得该加速器比之前最先进的神经网络加速器能效高出 60 倍。作者展示了在 65 纳米 (nm) 工艺下完整的芯片布局设计,其面积仅为 4.86 mm²,功耗仅为 320 mW,但速度仍比高端 GPU (GPU) 快约 30 倍。

1.6. 原文链接

/files/papers/6915a0914d6b2ff314a02e49/paper.pdf (PDF 文件链接,发布状态为已发表的学术论文)

2. 整体概括

2.1. 研究背景与动机

2.1.1. 论文试图解决的核心问题

论文试图解决的核心问题是:神经网络加速器,特别是用于视觉识别任务的卷积神经网络 (CNN) 加速器,其能效和性能受限于内存访问瓶颈 (memory access bottlenecks)。 具体来说,频繁的片外动态随机存取存储器 (DRAM) 访问,无论是为了获取模型权重 (weights) 还是输入/输出数据 (inputs/outputs),都消耗了大量的能量并限制了处理速度。

2.1.2. 为什么这个问题在当前领域是重要的?现有研究存在哪些具体的挑战或空白?

  • 重要性: 图像应用是识别和挖掘领域中最重要的类别之一。随着智能手机、安防系统、自动驾驶汽车等嵌入式设备对实时、高能效视觉处理需求的增长,如何在这些资源受限的设备上高效运行复杂的 CNN 模型变得至关重要。传统的中央处理器 (CPU) 和图形处理器 (GPU) 虽然功能通用,但在能效和功耗方面无法满足嵌入式设备的需求。
  • 现有挑战与空白:
    • 内存访问瓶载: 尽管专门的神经网络加速器 (Neural Network Accelerators) 已经出现,但它们仍然面临内存访问,特别是与片外 DRAM 通信的巨大能耗和带宽限制。数据移动的能量开销远高于计算本身的开销。
    • 通用性与特定性之间的权衡: 以往的一些加速器(如作者团队的 DianNao [3])为了支持更广泛的神经网络类型(如深度神经网络 DNN 和 CNN),采用了相对通用的架构。这种通用性使得它们无法充分利用 CNN 特有的二维数据局部性 (2D data locality) 和权重共享 (weight sharing) 等特性,导致在处理 CNN 时仍需频繁访问内存,能效未能达到极致。
    • 嵌入式集成挑战: 在嵌入式视觉系统中,图像通常由 CMOS 或 CCD 传感器捕获,然后传输到 DRAM,再由 CPU/GPU 处理。这个过程涉及多次数据在片内和片外存储器之间移动,带来巨大的能耗。如何将复杂的视觉处理直接集成到传感器旁,减少数据移动,是一个重要的挑战。

2.1.3. 这篇论文的切入点或创新思路是什么?

论文的创新思路主要有两点:

  1. 片上存储整个 CNN 模型: 充分利用 CNN 权重共享的特性,其权重内存占用比 DNN 小得多。这使得将整个 CNN 模型的权重存储在片上静态随机存取存储器 (SRAM) 中成为可能,从而彻底消除所有用于模型权重的片外 DRAM 访问。

  2. 将加速器部署在图像传感器旁: 通过将小型化后的 CNN 加速器物理上放置在 CMOS 或 CCD 传感器旁边,可以消除所有剩余的 DRAM 访问,即用于输入图像和输出识别结果的访问。传感器直接将数据流传输给加速器,加速器处理后只将少量的高级识别结果(如图像类别)传回给主处理器或 DRAM。

    通过这两个切入点,ShiDianNao 旨在实现极致的能效和性能,特别适用于嵌入式和移动端的视觉识别任务。

2.2. 核心贡献/主要发现

2.2.1. 论文最主要的贡献是什么?

论文最主要的贡献在于提出了 ShiDianNao,一个将视觉处理任务前移到图像传感器旁边的、高能效、高性能且小尺寸的卷积神经网络加速器。其核心创新点和贡献包括:

  1. 彻底消除 DRAM 访问: 通过将整个 CNN 模型(包括权重)存储在片上 SRAM 中,并利用其与图像传感器紧密集成,实现了输入、输出和权重数据流的片上处理,从而几乎完全消除了与片外 DRAM 的所有通信,显著降低了能量消耗和延迟。
  2. 针对 CNN 2D 数据局部性的深度优化: ShiDianNao 采用二维处理单元 (Processing Element, PE) 阵列 (2D PE Array),并设计了精密的片上缓冲区 (on-chip buffers) 和 PE 间数据传播 (inter-PE data propagation) 机制。这种机制能够高效地复用输入神经元数据,进一步最小化片上数据移动,充分利用 CNN 特有的 2D 数据局部性。
  3. 高能效和高性能: 实验证明,ShiDianNao 比最先进的神经网络加速器 (DianNao) 能效高出 60 倍,比高端 GPU 快约 30 倍。
  4. 紧凑的硬件实现: 在 65nm 工艺下,ShiDianNao 实现了 4.86 mm² 的小尺寸和 320 mW 的低功耗,使其非常适合集成到移动设备和嵌入式视觉传感器中。
  5. 灵活支持多种 CNN 配置: 通过两级分层有限状态机 (Hierarchical Finite State Machine, HFSM) 和精心设计的缓冲控制器,ShiDianNao 能够灵活地映射和执行不同参数设置和层类型的 CNN 模型,而非仅仅支持固定参数的 CNN。

2.2.2. 论文得出了哪些关键的结论或发现?这些发现解决了什么具体问题?

论文得出的关键结论和发现如下:

  1. 内存访问是神经网络加速器的主要瓶颈: 论文通过与 DianNao 的比较,再次强调了即使在片上计算效率很高的情况下,片外 DRAM 访问仍然是能效和性能的主要限制因素。ShiDianNao 通过消除这些访问,展示了其巨大的优势。
  2. CNN 的权重共享特性可被深度利用: CNN 较小的权重内存占用使得将整个模型存储在片上 SRAM 中成为可能,这是实现零 DRAM 访问的关键前提。这解决了传统加速器需要频繁从 DRAM 获取权重的问题。
  3. 靠近传感器处理是实现极致能效的关键: 将视觉处理单元直接集成到图像传感器旁,能够避免将原始图像数据传输到主内存,从而消除输入/输出数据移动带来的巨大能耗。这解决了嵌入式视觉系统中数据传输效率低下的问题。
  4. 2D PE 阵列和 PE 间数据复用对 CNN 至关重要: 针对 CNN 的 2D 结构,设计专门的 PE 阵列和数据传播机制,能够显著减少片上内存带宽需求,进一步提升能效。这解决了通用加速器无法充分利用 CNN 2D 局部性的问题。
  5. ShiDianNao 在嵌入式视觉应用中具有巨大潜力: 其高性能、低功耗和小面积的特点使其非常适合集成到智能手机、可穿戴设备等移动终端,能够降低云端服务器的负载,提升新兴视觉应用的质量服务 (Quality of Service, QoS)。

3. 预备知识与相关工作

3.1. 基础概念

3.1.1. 神经网络加速器 (Neural Network Accelerators)

神经网络加速器是为高效执行神经网络计算而设计的专用硬件。它们通常包含大量并行处理单元、优化的内存层次结构和数据路径,以加速矩阵乘法、卷积等核心运算。与通用处理器 (CPU) 和图形处理器 (GPU) 相比,加速器通过定制化设计,可以在特定任务上实现更高的能效比和性能。

3.1.2. 卷积神经网络 (Convolutional Neural Networks, CNN)

卷积神经网络 (CNN) 是一种专门用于处理具有网格状拓扑数据(如图像、视频、音频等)的深度学习模型。它通过一系列卷积层 (Convolutional Layer)、池化层 (Pooling Layer) 和全连接层 (Fully Connected Layer) 提取特征并进行分类或回归。CNN 的关键特性包括:

  • 局部感受野 (Local Receptive Fields): 神经元只连接到输入数据的局部区域。
  • 权重共享 (Weight Sharing): 同一卷积核 (kernel) 在输入特征图 (feature map) 的所有位置上共享相同的权重。这大大减少了模型的参数数量,降低了内存占用。
  • 池化 (Pooling): 通过下采样 (downsampling) 操作(如最大池化或平均池化)减少特征图的维度,提高模型的平移不变性 (translation invariance)。

3.1.3. 深度神经网络 (Deep Neural Networks, DNN)

深度神经网络 (DNN) 是指具有多层隐藏层的神经网络,能够从大量数据中学习复杂模式。与 CNN 不同,传统的 DNN 通常是全连接的,即每一层的每个神经元都与前一层的每个神经元相连,且没有权重共享。因此,DNN 的权重数量通常远大于 CNN,内存占用也更大。论文提到,与 CNN 相比,DNN 更具通用性,但 CNN 更适合图像处理应用,因为它利用了图像的平移不变性。

3.1.4. 能效 (Energy Efficiency) 与性能 (Performance)

  • 能效 (Energy Efficiency): 指完成特定计算任务所需的能量(通常以焦耳 J 或毫焦耳 mJ 衡量)。高能效意味着在消耗更少能量的情况下完成更多工作。对于嵌入式设备和移动应用,能效是关键指标。
  • 性能 (Performance): 指单位时间内完成的计算量(通常以每秒浮点运算次数 FLOP/s 或每秒定点运算次数 OP/s 衡量)。高性能意味着处理速度快。

3.1.5. 内存访问瓶颈 (Memory Access Bottleneck)

内存访问瓶颈是指处理器或加速器的计算速度受限于从存储器(特别是片外存储器如 DRAM)读取或写入数据的速度。由于数据在不同存储层级(寄存器、缓存、片上 SRAM、片外 DRAM)之间的移动会消耗大量的时间和能量,因此减少内存访问是提高系统能效和性能的关键。

  • DRAM (Dynamic Random-Access Memory): 动态随机存取存储器,通常作为主内存,容量大但访问速度相对较慢,且访问能耗高。
  • SRAM (Static Random-Access Memory): 静态随机存取存储器,速度快但成本高、容量小,通常用于缓存或片上缓冲区。

3.1.6. 16 位定点算术 (16-bit Fixed-point Arithmetic)

定点算术 (Fixed-point Arithmetic) 是一种使用固定数量的比特来表示整数和小数部分的数值表示方法。16 位定点数意味着使用 16 个比特来表示一个数字。与浮点算术 (Floating-point Arithmetic) 相比,定点算术的硬件实现更简单、更快、功耗更低,但表示范围和精度有限。在神经网络领域,研究表明 16 位定点算术通常可以带来可接受的精度损失,同时显著降低硬件成本和能耗。

3.1.7. 神经网络层类型

  • 卷积层 (Convolutional Layer): 使用可学习的卷积核 (kernel) 对输入特征图进行滑动操作,提取局部特征。 Oa,bmo=f(miAmo(βmi,mo+i=Kx1j=Ky1ωi,jmi,mo×IaSx+i,bSy+jmi)) \mathbf { O } _ { a , b } ^ { m o } = f \left( \sum _ { m i \in A _ { m o } } \left( \beta ^ { m i , m o } + \sum _ { i = \bullet } ^ { K _ { x } - 1 } \sum _ { j = \bullet } ^ { K _ { y } - 1 } \omega _ { i , j } ^ { m i , m o } \times \mathbf { I } _ { a S _ { x } + i , b S _ { y } + j } ^ { m i } \right) \right)
    • Oa,bmo\mathbf { O } _ { a , b } ^ { m o }:输出特征图 mo 在位置 (a, b) 的神经元值。
    • f()f ( \cdot ):非线性激活函数 (non-linear activation function)。
    • A _ { m o }:连接到输出特征图 mo 的输入特征图集合。
    • βmi,mo\beta ^ { m i , m o }:输入特征图 mi 和输出特征图 mo 之间的偏置值 (bias value)。
    • Kx,KyK_x, K_y:卷积核 (kernel) 的尺寸。
    • ωi,jmi,mo\omega _ { i , j } ^ { m i , m o }:连接输入特征图 mi 和输出特征图 mo 的卷积核在位置 (i, j) 的权重。
    • IaSx+i,bSy+jmi\mathbf { I } _ { a S _ { x } + i , b S _ { y } + j } ^ { m i }:输入特征图 mi 在位置 (aSx+i,bSy+j)(a S_x + i, b S_y + j) 的神经元值。
    • Sx,SyS_x, S_y:卷积窗口 (convolutional window) 在 xxyy 方向上的步长 (stride)。
  • 池化层 (Pooling Layer): 通过对输入特征图的局部区域执行下采样操作(如最大值或平均值),减少特征图的尺寸和参数数量。 Oa,bmo=maxi<Kx,j<Ky(Ia+i,b+jmi) \overset { \cdot } { \operatorname { O } } _ { a , b } ^ { m o } = \operatorname* { m a x } _ { \substack { \bullet \leq i < K x , \bullet \leq j < K y } } ^ { \bullet } \left( \operatorname { I } _ { a + i , b + j } ^ { m i } \right)
    • Oa,bmo\overset { \cdot } { \operatorname { O } } _ { a , b } ^ { m o }:输出特征图 mo 在位置 (a, b) 的神经元值。
    • max\operatorname* { m a x }:最大值操作(对于最大池化)。对于平均池化,此操作会被平均值操作取代。
    • Kx,KyK_x, K_y:池化窗口 (pooling window) 的尺寸。
    • Ia+i,b+jmi\operatorname { I } _ { a + i , b + j } ^ { m i }:输入特征图 mi 在位置 (a+i,b+j)(a+i, b+j) 的神经元值。
    • mo=mimo = mi:输入特征图和输出特征图之间是一对一映射。
  • 归一化层 (Normalization Layer): 通过规范化神经元的激活值来提高模型的泛化能力和训练稳定性。常见的有局部响应归一化 (Local Response Normalization, LRN) 和局部对比归一化 (Local Contrast Normalization, LCN)。
    • LRN 层: Oa,bmi=Ia,bmi/(k+α×j=max(σ,miM/2)min(Mi1,mi+M/2)(Ia,bj)2)β { \bf O } _ { a , b } ^ { m i } = { \bf I } _ { a , b } ^ { m i } / \left( k + \alpha \times \sum _ { j = \operatorname* { m a x } \left( { \bf \sigma } \bullet , m i - M / 2 \right) } ^ { \operatorname* { m i n } \left( M i - 1 , m i + M / 2 \right) } ( { \bf I } _ { a , b } ^ { j } ) ^ { 2 } \right) ^ { \beta }
      • Oa,bmi{ \bf O } _ { a , b } ^ { m i }:输出特征图 mi 在位置 (a, b) 的归一化神经元值。
      • Ia,bmi{ \bf I } _ { a , b } ^ { m i }:输入特征图 mi 在位置 (a, b) 的神经元值。
      • k,α,βk, \alpha, \beta:常数参数。
      • M i:输入特征图的总数量。
      • MM:连接到一个输出特征图的最大输入特征图数量。
      • j=max(,miM/2)min(Mi1,mi+M/2)(Ia,bj)2\sum_{j=\max(\bullet, mi-M/2)}^{\min(Mi-1, mi+M/2)} (\mathbf{I}_{a,b}^j)^2:对相邻特征图同一位置的神经元激活值进行平方和。
    • LCN 层: Oa,bmˉi=νa,bmi/max(mean(δa,b),δa,b) \mathrm { O } _ { a , b } ^ { \bar { m } i } = \nu _ { a , b } ^ { m i } / \operatorname* { m a x } \left( \mathrm { m e a n } ( \delta _ { a , b } ) , \delta _ { a , b } \right) 其中 δa,b\delta _ { a , b } 计算如下: δa,b=mi,a,b(νa+p,b+±mi)2 \delta _ { a , b } = \sqrt { \sum _ { m i , a , b } ( \nu _ { a + p , b + \pm } ^ { m i } ) ^ { 2 } } νa,bmi\nu _ { a , b } ^ { m i } (减法归一化,subtractive normalization) 计算如下: νa,bmi=Ia,bmij,a,bωa,b×Ia+p,b+qj \nu _ { a , b } ^ { m i } = \mathrm { I } _ { a , b } ^ { m i } - \sum _ { j , a , b } \omega _ { a , b } \times \mathrm { I } _ { a + p , b + \pmb { q } } ^ { j }
      • Oa,bmˉi\mathrm { O } _ { a , b } ^ { \bar { m } i }:输出特征图 mˉi\bar{m}i 在位置 (a, b) 的归一化神经元值。
      • νa,bmi\nu _ { a , b } ^ { m i }:经过减法归一化后的输入神经元值。
      • mean(δa,b)\mathrm { mean } ( \delta _ { a , b } )δa,b\delta_{a,b} 的平均值。
      • δa,b\delta _ { a , b }:局部能量的平方根。
      • ωa,b\omega _ { a , b }:归一化高斯加权窗口 (normalized Gaussian weighting window),满足 a,bωa,b=1\sum _ { a , b } \omega _ { a , b } = 1
      • Ia,bmi\mathbf { I } _ { a , b } ^ { m i }:输入特征图 mi 在位置 (a, b) 的神经元值。
  • 分类层 (Classifier Layer): 通常是全连接层,将前一层提取的特征映射到最终的类别输出。 Ono=f(βno+niωni,no×Ini) { \bf O } ^ { n o } = f \left( \beta ^ { n o } + \sum _ { n i } \omega ^ { n i , n o } \times { \bf I } ^ { n i } \right)
    • Ono{ \bf O } ^ { n o }:输出神经元 no 的值。
    • f()f ( \cdot ):激活函数。
    • βno\beta ^ { n o }:输出神经元 no 的偏置值。
    • ωni,no\omega ^ { n i , n o }:输入神经元 ni 和输出神经元 no 之间的突触权重 (synapse)。
    • Ini{ \bf I } ^ { n i }:输入神经元 ni 的值。

3.1.8. 激活函数 (Activation Function)

激活函数 (Activation Function) 是神经网络中的非线性函数,用于将神经元的输入转换为输出。常见的激活函数包括 tanh 和 sigmoid。它们引入了非线性,使得神经网络能够学习和表示更复杂的模式。

3.2. 前人工作

3.2.1. DianNao 系列加速器 [3]

DianNao 是 ShiDianNao 作者团队之前的工作,也是一个重要的对比基线。DianNao 是一个小型、高吞吐量的机器学习加速器,旨在支持更广泛的神经网络类型,包括 CNN 和 DNN。它通过设计专用的片上 SRAM 缓冲区来减少内存访问,并在片上实现了大量计算单元。

  • 特点: 试图兼顾通用性,支持 CNN 和 DNN。
  • 局限性: 为了支持通用性,DianNao 在处理 CNN 时,将二维特征图视为一维向量,未能充分利用 CNN 中二维数据的局部性。这导致在执行 CNN 时仍需要频繁的内存访问,尤其是在 PE 之间的数据复用方面效率不高,因此能效低于专门优化的 ShiDianNao。

3.2.2. 通用 CPU/GPU 加速神经网络

  • CPU (Central Processing Unit): 通用处理器,灵活性高,但由于其冯·诺依曼架构 (von Neumann architecture) 和指令级并行 (Instruction-Level Parallelism, ILP) 限制,在处理大规模并行计算的神经网络时能效较低。
  • GPU (Graphics Processing Unit): 图形处理器,具有大量并行处理核心,擅长执行并行计算任务,因此被广泛用于神经网络训练和推理。然而,GPU 仍然是通用处理器,其内存访问模式、控制逻辑以及数据类型可能并非为神经网络计算完全优化,尤其是在处理小规模计算核时,其高吞吐量的线程模型可能无法得到充分利用,导致能效和性能受限。

3.2.3. 其他专用神经网络加速器

  • FPGA (Field-Programmable Gate Array) 和 ASIC (Application-Specific Integrated Circuit) 实现: 许多研究探索了在 FPGA 或 ASIC 上实现神经网络加速器。
    • NeuFlow [16]: 提出了一个运行时可重配置的数据流处理器 (dataflow processor) 用于视觉应用,但这类架构在支持不同 CNN 设置时可能缺乏灵活性。
    • Chakradhar et al. [2]: 设计了一个可动态配置的协处理器 (coprocessor) 用于 CNN。
    • Systolic 架构: 一些研究采用脉动阵列 (systolic array) 架构来处理 CNN,它通过数据流和局部通信来提高效率。然而,脉动阵列通常对 CNN 参数有严格限制(如卷积窗口大小、步长),并且可能需要高内存带宽。
    • SIMD-like 架构: 如 Esmaeilzadeh et al. [12] 提出的神经流处理核心 (Neural Network Stream Processing Core, NnSP),它包含 PE 阵列,但早期版本主要是为多层感知机 (Multi-Layer Perceptrons, MLP) 设计的。
    • Peemen et al. [45]: 使用 FPGA 加速 CNN,但需要主机处理器 (host processor) 控制,限制了整体能效。
    • Gokhale et al. [18]: 设计了一个用于移动设备的协处理器,支持 CNN 和 DNN,但未将主内存访问作为首要考虑。

3.3. 技术演进

神经网络加速器的技术演进大致经历了以下阶段:

  1. 通用处理器时代: 早期神经网络主要在 CPU 上运行,效率极低。
  2. GPU 加速时代: 随着 GPU 算力的提升,其并行计算能力被发现非常适合神经网络,成为主流加速平台。
  3. 专用加速器萌芽: 针对神经网络的特定计算模式(如矩阵乘法、卷积),开始出现 ASIC 和 FPGA 解决方案,但早期设计可能通用性不足或效率有限。
  4. DianNao 系列及类似工作: 开始关注片上存储和数据重用,试图在通用性和能效之间取得平衡。DianNao 系列是这一阶段的代表,它引入了专用的片上缓冲区以减少 DRAM 访问。
  5. ShiDianNao 的出现: 在 DianNao 的基础上,ShiDianNao 进一步深化了对特定应用(视觉识别)的优化。通过:
    • 更彻底地消除 DRAM 访问。
    • 深度利用 2D 数据局部性。
    • 将加速器部署在数据源(图像传感器)旁边。 这代表了加速器设计向着更极端垂直整合和应用特定优化的方向发展,以实现极致的能效。

3.4. 差异化分析

ShiDianNao 的方法与上述相关工作中的主要方法相比,核心区别和创新点如下:

  1. 内存访问策略的根本性差异:
    • ShiDianNao: 核心是完全消除 DRAM 访问。它通过将整个 CNN 模型和输入/输出数据都保持在片上,并在物理上靠近传感器集成来实现这一目标。
    • DianNao 及其他: 旨在减少 DRAM 访问,通常通过大容量片上缓存或缓冲区实现,但并未完全消除片外内存访问的需求,输入/输出数据仍可能通过 DMA (Direct Memory Access) 从主内存传输。
  2. 对 CNN 2D 数据局部性的利用程度:
    • ShiDianNao: 采用 2D 处理单元 (PE) 阵列和 PE 间数据传播机制,专门为 CNN 的 2D 特征图 (feature map) 优化数据流动和重用,实现极致的片上数据局部性利用。
    • DianNao: 为了通用性,将 2D 特征图视为 1D 向量处理,未能充分利用 2D 局部性,导致在 CNN 上表现不如 ShiDianNao 高效。
  3. 集成位置和应用场景:
    • ShiDianNao: 设计用于紧密集成在图像传感器旁边,专注于嵌入式、移动端和实时视觉识别应用,处理传感器直接产生的数据流。
    • 其他加速器: 通常作为独立的协处理器存在,与主处理器或内存通信,应用场景更广但能效可能受限于数据传输。
  4. 灵活性与效率的平衡:
    • ShiDianNao: 通过分层有限状态机 (HFSM) 和缓冲控制器,在支持多种 CNN 配置的同时,保持了针对 CNN 优化的硬件效率。

    • 早期脉动阵列: 往往对 CNN 参数有严格限制,灵活性不足。

    • 通用 GPU/CPU: 灵活性高但效率低。

      简而言之,ShiDianNao 的创新在于结合了 CNN 的内在特性(权重共享、2D 局部性)与系统级设计(靠近传感器集成、全片上内存),从根本上解决了嵌入式视觉系统中内存访问的能效瓶颈,实现了在性能、功耗和面积上的显著突破。

4. 方法论

4.1. 方法原理

ShiDianNao 的核心设计理念是将视觉处理前移到图像传感器旁,并最大化片上数据复用,以彻底消除片外内存访问,从而实现极致的能效和性能。其方法原理基于以下观察:

  1. CNN 的权重共享特性: 卷积神经网络 (CNN) 的一个关键特点是权重在多个神经元之间共享,这使得 CNN 的模型尺寸(尤其是权重)远小于传统的深度神经网络 (DNN)。这一特性允许将整个 CNN 模型(所有权重)完全存储在片上静态随机存取存储器 (SRAM) 中。

  2. 数据移动是能量消耗的主要来源: 在处理器架构中,数据从片外动态随机存取存储器 (DRAM) 移动到片上处理单元的能量开销远大于实际的计算开销。通过将模型权重和输入/输出数据都保持在片上,可以显著降低能耗。

  3. 嵌入式视觉系统的数据流特性: 在许多嵌入式视觉应用中,图像直接来源于 CMOS 或 CCD 传感器。如果能将加速器直接放置在传感器旁边,传感器可以直接将数据流传输给加速器,而加速器只需将少量的高级识别结果(如图像类别)传回给主处理器或 DRAM,从而消除原始图像数据在片外内存之间的传输,进一步节省能耗。

  4. CNN 的 2D 数据局部性: CNN 在处理图像时,其卷积核、池化窗口等操作都具有显著的 2D 局部性。高效利用这种局部性,例如通过处理单元 (PE) 之间的直接数据传播,可以减少对片上缓冲区的带宽需求,进一步提高能效。

    基于这些原理,ShiDianNao 设计了一个专门针对 CNN 优化的架构,包括 2D 处理单元阵列、分层片上内存、高效的缓冲控制器和紧凑的指令集,以在硬件层面实现这些优化。

4.2. 核心方法详解 (逐层深入)

ShiDianNao 的架构如原文 Figure 4 所示,主要包括两个缓冲区用于输入和输出神经元 (NBinNBout),一个缓冲区用于突触 (SB),一个神经功能单元 (NFU) 和一个算术逻辑单元 (ALU) 用于计算输出神经元,以及一个指令缓冲区 (IB) 和解码器 (decoder)。

下图(原文 Figure 4)展示了 ShiDianNao 的加速器架构:

Figure 4: Accelerator architecture. 该图像是示意图,展示了ShiDianNao加速器的架构,包含输入图像、缓冲控制器、解码器、NFU和ALU等组件。通过合理的数据访问模式,该加速器实现了显著的能效提升。

4.2.1. 计算单元

ShiDianNao 包含两个功能单元:NFU 用于基本的神经元操作(乘法、加法和比较),ALU 用于执行激活函数计算。所有运算均采用 16 位定点算术 (16-bit fixed-point arithmetic),因为其精度损失可忽略不计,同时能显著降低硬件成本。

4.2.1.1. 神经功能单元 (Neural Functional Unit, NFU)

NFU 是 ShiDianNao 的核心计算模块,专为处理 2D 特征图而优化。它是一个由 Px×PyP_x \times P_y 个处理单元 (Processing Element, PE) 组成的 2D 网格。

下图(原文 Figure 5)展示了 NFU 的架构:

Figure 5: NFU architecure. 该图像是一个示意图,展示了NFU(神经功能单元)的架构与输入输出的连接方式。图中包括了输入列和行、核以及输出的控制信号,说明了如何在神经网络加速器中处理数据。

  • PE 映射策略: 每个输出神经元被映射到一个单独的 PE,每个 PE 通过时间共享来处理连接到同一输出神经元的多个输入神经元(即突触)。这种方式避免了复杂的 PE 间数据共享逻辑,并支持变化的核尺寸。

  • NFU 数据流: NFU 可以同时从 NBin/NBout 读取突触和输入神经元,并将其分发到不同的 PE。计算完成后,NFU 收集各 PE 的结果并发送到 NBout/NBinALU

  • PE 内部结构: 每个 PE (如 PEi,j\mathrm { PE } _ { i , j } ) 在每个周期可以执行一个乘法和一个加法(用于卷积层、分类层或归一化层),或仅一个加法(用于平均池化层),或一个比较(用于最大池化层)。

    下图(原文 Figure 6)展示了 PE 的架构:

    Figure 6: PE architecture. 该图像是PE架构的示意图,展示了处理元素(PE)内部的工作机制,包括乘法器、加法器和寄存器等组件,数据通过FIFO缓冲区进行输入输出。该结构设计旨在提高卷积神经网络的计算效率。

每个 PE 有三个输入: 1. 控制信号。 2. 从 SB 读取突触(如卷积层的核值)。 3. 从 NBin/NBout、右侧邻居 PEi,j+1\mathrm { PE } _ { i , j+1 } 或下方邻居 PEi+1,j\mathrm { PE } _ { i+1 , j } 读取神经元,具体取决于控制信号。 每个 PE 有两个输出: 1. 将计算结果写入 NBout/NBin。 2. 将局部存储的神经元传播到邻居 PE,以实现数据复用。

  • PE 间数据传播 (Inter-PE Data Propagation): 为了高效复用数据,每个 PE 内部包含两个先进先出 (FIFO) 队列:FIFO-HFIFO-V
    • FIFO-H:缓存来自 NBin/NBout 或右侧邻居 PE 的数据,并将其传播到左侧邻居 PE。
    • FIFO-V:缓存来自 NBin/NBout 或上方邻居 PE 的数据,并将其传播到下方邻居 PE。 这种机制能够显著降低 NFU 与片上缓冲区之间的内部带宽需求。例如,对于一个 32×3232 \times 32 输入特征图和 5×55 \times 5 卷积核的 LeNet-5 卷积层,当 NFU 具有 25 个 PE 时,其内部带宽需求高达 52GB/s52 \mathrm{GB/s}。通过 PE 间数据传播,内部带宽需求可以大幅降低(参见原文 Figure 7)。

下图(原文 Figure 7)展示了从存储结构到 NFU 的内部带宽需求:

Figure 7: Internal bandwidth from storage structures (input neurons and synapses) to NFU. 该图像是一个图表,展示了不同处理单元(PE)数量下,神经元输入和核(突触权重)的内存带宽(GB/s)。横轴表示处理单元数量,纵轴表示内存带宽。图中有两个数据标记,分别表示有无处理单元间数据传播的情况。

4.2.1.2. 算术逻辑单元 (Arithmetic Logic Unit, ALU)

ALU 作为 NFU 的补充,处理 NFU 不支持的计算原语。它也采用 16 位定点算术,实现了除法(用于平均池化和归一化层)以及非线性激活函数(如 tanh() 和 sigmoid())的计算。激活函数通过分段线性插值 (piecewise linear interpolation) 来近似计算,即 f(x)=aix+bif(x) = a_i x + b_i,其中 x[xi,xi+1]x \in [x_i, x_{i+1}]。段系数 aia_ibib_i 预先存储在寄存器中,通过乘法器和加法器高效计算。

4.2.2. 存储架构 (Storage)

ShiDianNao 使用片上 SRAM (on-chip SRAM) 同时存储 CNN 的所有数据(如突触、神经元)和指令。其设计目标是消除所有片外内存访问。

  • SRAM 容量: 论文设计了一个 288 KB 的片上 SRAM,足以存储原文 Table 1 中列出的所有 10 个实用 CNN 的数据和指令。
  • 缓冲区划分: SRAM 被划分为独立的缓冲区,以适应不同数据类型(如神经元、突触)的访问模式,并使用合适的读宽度来最小化时间与能量消耗。
    • NBin (Input Neuron Buffer):存储输入神经元。
    • NBout (Output Neuron Buffer):存储输出神经元。
      • NBinNBout 在层间计算时交换功能。它们都包含 2×Py2 \times P_y 个银行 (banks),以支持 SRAM 到 PE 的数据移动和 PE 间数据传播。每个银行的宽度为 Px×2P_x \times 2 字节(即 PxP_x 个 16 位神经元)。它们必须足够大以存储一整个层的所有神经元。
    • SB (Synapse Buffer):存储 CNN 的所有突触。包含 PyP_y 个银行。
    • IB (Instruction Buffer):存储指令。

4.2.3. 控制架构 (Control)

4.2.3.1. 缓冲控制器 (Buffer Controllers)

缓冲控制器负责支持 NFU 中高效的数据复用和计算。以 NB Controller 为例(NBinNBout 均使用),它支持六种读模式和一种写模式。

下图(原文 Figure 9)展示了 NB 控制器的架构:

Figure 9: NB controller architecture. 该图像是NB控制器的示意图,展示了多个存储单元(Bank #0, Bank #1等)与列缓冲区之间的连接关系。该控制器通过多路复用器阵列(MUX array)处理输入和输出,从而实现高效的数据访问。

下图(原文 Figure 10)展示了 NB 控制器的六种读模式:

Figure 10: Read modes of NB controller.

读模式 (Read Modes):

  • (a) 读取多个银行(#0 到 #Py1\#P_y-1)。

  • (b) 读取多个银行(#Py\#P_y#2Py1\#2P_y-1)。

  • (c) 读取一个银行。

  • (d) 读取单个神经元。

  • (e) 以给定步长 (step size) 读取神经元。

  • (f) 从银行 #0 到 #Py1\#P_y-1#Py\#P_y#2Py1\#2P_y-1 每个银行读取一个神经元。

    这些读模式根据不同的 CNN 层类型(卷积层、池化层、归一化层、分类层)选择,以高效地提供数据。例如,卷积层主要使用模式 (a) 或 (b) 读取 Px×PyP_x \times P_y 个神经元,模式 (e) 处理步长大于 1 的情况,模式 (c) 读取 PxP_x 个神经元,模式 (f) 读取 PyP_y 个神经元。

写模式 (Write Mode): 当 PE 完成一个输出神经元的计算后,结果会暂时存储在 NB Controller 的寄存器阵列中。当收集到所有 Px×PyP_x \times P_y 个 PE 的结果后,NB Controller 会一次性将它们写入 NBout。写入的 NB 银行选择取决于输出神经元在输出特征图中的位置,确保数据组织符合原文 Figure 11 所示。

下图(原文 Figure 11)展示了 NB 的数据组织方式:

该图像是示意图,展示了卷积神经网络中银行结构与特征图的关系。图中显示了多个银行的连接方式,以及如何通过特定路径访问特征图,涉及输入和输出的维度。此外,特征图尺寸及访问模式的重要性也得到了体现。 该图像是示意图,展示了卷积神经网络中银行结构与特征图的关系。图中显示了多个银行的连接方式,以及如何通过特定路径访问特征图,涉及输入和输出的维度。此外,特征图尺寸及访问模式的重要性也得到了体现。

4.2.3.2. 控制指令 (Control Instructions)

为了灵活支持不同配置的 CNN,并保持紧凑的指令存储,ShiDianNao 采用两级分层有限状态机 (Hierarchical Finite State Machine, HFSM) 来描述加速器的执行流程。

下图(原文 Figure 12)展示了分层有限状态机:

Figure 11: Data organization of NB. 该图像是一个示意图,展示了一个控制有限状态机的层次结构,其中包括第一层状态和第二层状态的各个节点及其关系。在 Conv. 状态下,显示初始化和不同处理模式之间的转移状态。

  • 两级结构:
    • 第一级状态: 描述加速器处理的抽象任务(如不同层类型、ALU 任务)。
    • 第二级状态: 描述每个第一级状态内对应的低级执行事件(如卷积层的执行阶段)。
  • 指令表示: 每个 HFSM 状态及其相关参数(如特征图尺寸)用一个 61 位的指令表示。这个指令可以解码为多个加速器周期的详细控制信号。
  • 优点: 这种方案利用了 CNN 算法的特点,实现了紧凑且无损的冗余控制信号表示,将一个典型的 50K 周期 CNN 的指令存储需求从 600 KB 降低到 1 KB,且解码器面积仅占 0.03 mm²。

4.2.4. CNN 映射 (CNN Mapping)

4.2.4.1. 卷积层 (Convolutional Layer)

当执行卷积层时,加速器会连续计算一个输出特征图,直到当前特征图计算完成才会切换到下一个。在计算每个输出特征图时,每个 PE 会连续处理一个输出神经元,直到当前神经元计算完成才会切换。

下图(原文 Figure 13)展示了卷积层到 NFU 的算法硬件映射示例:

Figure 13: Algorithm-hardware mapping between a convolutional layer (convolutional window: \(3 \\times 3\) ; step size: \(1 \\times 1 )\) and an NFU implementation (with \(2 \\times 2\) PEs).

示例说明 (以 2×22 \times 2 PE 阵列,3×33 \times 3 卷积核,1×11 \times 1 步长为例):

  • 周期 #0: 所有四个 PE 同时从 NBin 读取各自核窗口的第一个输入神经元(使用读模式 (a)),并从 SB 读取相同的核值 k0,0k_{0,0}。每个 PE 执行乘法并存储结果,同时将输入神经元存入 FIFO-HFIFO-V

  • 周期 #1: PE0,0\mathrm { PE } _ { 0,0 }PE0,1\mathrm { PE } _ { 0,1 } 分别从 PE1,0\mathrm { PE } _ { 1,0 }PE1,1\mathrm { PE } _ { 1,1 }FIFO-H 读取所需数据(水平方向的 PE 间数据传播)。PE1,0\mathrm { PE } _ { 1,0 }PE1,1\mathrm { PE } _ { 1,1 }NBin 读取数据(使用读模式 (f)),并存入 FIFO-H。所有 PE 共享从 SB 读取的核值 k1,0k_{1,0}

  • 周期 #2: 类似周期 #1,PE0,0\mathrm { PE } _ { 0,0 }PE0,1\mathrm { PE } _ { 0,1 } 再次从 PE1,0\mathrm { PE } _ { 1,0 }PE1,1\mathrm { PE } _ { 1,1 }FIFO-H 读取数据。PE1,0\mathrm { PE } _ { 1,0 }PE1,1\mathrm { PE } _ { 1,1 }NBin 读取数据(使用读模式 (f))。所有 PE 共享从 SB 读取的核值 k2,0k_{2,0}。至此,每个 PE 已处理完其卷积窗口的第一行。

  • 周期 #3: PE0,0\mathrm { PE } _ { 0,0 }PE1,0\mathrm { PE } _ { 1,0 } 分别从 PE0,1\mathrm { PE } _ { 0,1 }PE1,1\mathrm { PE } _ { 1,1 }FIFO-V 读取数据(垂直方向的 PE 间数据传播)。PE0,1\mathrm { PE } _ { 0,1 }PE1,1\mathrm { PE } _ { 1,1 }NBin 读取数据(使用读模式 (c))。所有 PE 共享从 SB 读取的核值 k0,1k_{0,1}。每个 PE 再次将接收到的输入神经元存入 FIFO-HFIFO-V

    通过 PE 间数据传播,该示例中 NBin 的读取次数减少了 44.4%。在实际应用中,如 LeNet-5 的典型卷积层 C1(32×3232 \times 32 核,1×11 \times 1 步长),在 64 个 PE 的加速器上,PE 间数据传播可使 NBin 的内部带宽需求减少 73.88%。

4.2.4.2. 池化层 (Pooling Layer)

池化层通过最大值或平均值操作对输入特征图进行下采样。与卷积层类似,每个池化层输出神经元也是通过一个窗口(池化窗口)内的输入神经元计算的。执行时,加速器同样连续计算一个输出特征图,每个 PE 连续处理一个输出神经元。

下图(原文 Figure 14)展示了池化层到 NFU 的算法硬件映射示例:

Figure 14: Algorithm-hardware mapping between a pooling layer (pooling window: \(2 \\times 2\) ; step size: \(2 \\times 2 ^ { \\cdot }\) ) and an NFU implementation (with \(2 \\times 2\) PEs).

示例说明 (以 2×22 \times 2 PE 阵列,2×22 \times 2 池化窗口,2×22 \times 2 步长为例):

  • 在典型池化层中,相邻输出神经元的池化窗口是相邻且不重叠的,即窗口滑动步长等于窗口大小。
  • 在每个周期,每个 PE 从 NBin 读取一个输入神经元(使用读模式 (e))。
  • 由于 PE 之间没有数据重用(窗口不重叠),PE 之间不进行数据传播。
  • 对于窗口重叠的稀有情况(步长小于窗口大小),则可以采用类似于卷积层的数据处理方式,只是没有突触权重。

4.2.4.3. 分类层 (Classifier Layer)

分类层通常是全连接的,不同输入-输出神经元对之间没有突触权重共享,因此它们通常在 SB 中占用最大空间。

  • 每个 PE 负责一个输出神经元。
  • 每个周期,加速器读取 Px×PyP_x \times P_y 个不同的突触权重和一个共享的输入神经元,分发给 Px×PyP_x \times P_y 个 PE。
  • 每个 PE 将突触权重与输入神经元相乘,并累加到局部寄存器中的部分和。
  • 当一个输出神经元对应的点积 (dot product) 计算完成后,结果会发送到 ALU 进行激活函数计算。

4.2.4.4. 归一化层 (Normalization Layers)

归一化层可以分解为多个子层和基本计算原语,以便在 ShiDianNao 上执行。

  • LRN 层分解:

    下图(原文 Figure 15)展示了 LRN 层的分解过程:

    Figure 15: Decomposition of an LRN layer. 该图像是一个示意图,展示了LRN层的分解过程。图中包含多个输入特征图,通过逐层进行元素级平方、矩阵加法、分类器、指数运算和除法等操作,最终生成输出特征图。底部还包含相关的操作符和数据公式,体现了计算过程中的具体细节。

LRN 层被分解为:一个分类器子层、一个元素级平方 (element-wise square) 操作、一个矩阵加法 (matrix addition)、指数函数 (exponential functions) 和除法 (divisions)。

  • LCN 层分解:

    下图(原文 Figure 16)展示了 LCN 层的分解过程:

    Figure 16: Decomposition of an LCN layer. 该图像是示意图,展示了一个LCN(局部对比归一化)层的分解过程。图中左侧显示了输入特征图的处理步骤,包括卷积、矩阵加法和元素平方运算。右侧则展示了经过分类池化后的输出特征图及其与输入特征图之间的关系,涉及平均值和最大值的计算。这一流程强调了特征图在各个处理步骤之间的转换和运算方式。

LCN 层被分解为:两个卷积子层、一个池化子层、一个分类器子层、两个矩阵加法、一个元素级平方操作和除法。

其中,卷积、池化和分类子层按照前述规则处理。指数函数和除法由 ALU 负责。元素级平方和矩阵加法由 NFU 处理,每个 PE 在每个周期处理一个矩阵元素,结果写入 NBout

5. 实验设置

5.1. 数据集

实验使用了从代表性视觉识别应用中提取的 10 个卷积神经网络 (CNN) 作为基准 (benchmarks)。

以下是原文 Table 1 提供的 CNN 列表及其存储需求:

CNNLargest Layer Size (KB)Synapses Size (KB)Total Storage (KB)Accuracy (%)
CNP [46]15.1928.1756.3897.00
MPCNN [43]30.6342.7788.8996.77
Face Recogn. [33]21.334.5030.0596.20
LeNet-5 [35]9.19118.30136.1199.05
Simple conv. [53]2.4424.1730.1299.60
CFF [17]7.001.7218.49
NEO [44]4.503.6316.0396.92
ConvNN [9]45.004.3587.5396.73
Gabor [30]2.000.825.3687.50
Face align. [11]15.6329.2756.39

以下是原文 Table 2 提供的基准(CC 代表卷积层,SS 代表池化层,FF 代表分类层)的详细信息:

LayerKernel Size #@sizeLayer Size #@sizeLayerKernel Size #@sizeLayer Size #@size
0Input Ci S2 C3 S4 C5 F66@7x7 6@2x2 61@7x7 16@2x2 305@6x6 160@1x11@42x42 6@36.x36 6@18x18 16@12x12 16@6x6 80@1x1 21120Input C1 S2 C3 S4 C520@5x5 20@2x2 400@5x5 20@2x2 400@3x31@32x32 20@28x28 20@14x14 20@10x10 20@5x5 20@3x3
LayerKernel Size #@sizeLayer Size #@sizeF6 F7 Layer6000@1x1 1800@1x1 Kernel Size #@size300@1x1 6@11 Layer Size #@size
20Input Ci S2 C3 S4 F520@3x3 20@2x2 125@3x3 25@2x2 1000@1x11@23x28 20@21x26 20@11x13 25@9x11 25@5x6 40@1x120Input Ci S2 C3 S4 F5 F66@5x5 6@2x2 60@5x5 16@2x2 1920@5x5 10080@1x11@32x32 6@28x28 6@14x14 16@10x10 16@5x5 120@1x1 84@1x1
LayerKernel Size #@sizeLayer Size #@sizeF7 Layer840@1x1 Kernel Size #@size10@1x1 Layer Size #@size
20Input Ci C2 F3 F45@5x5 250@5x5 5000@1x1 1000@1x11@29x29 5@13x13 50@5x5 100@1x1 10@11CE )Input C1 S2 C3 S4 F54@5x5 4@2x2 20@3x3 14@2x2 14@6x71@32x36 4@28x32 4@14x16 14@12x14 14@6x7 14@1x1
LayerKernel Size #@sizeLayer Size #@sizeF6 Layer14@1x1 Kernel Size #@size1@11 Layer Size #@size
0Input Ci S2 C34@5x5 6@3x3 14@5x51@24x24 1@24x24 4@12x12 4@12x12Input C1 S2 C312@5x5 12@2x2 60@3x33@64x36 12@60x32 12@30x16 14@28x14
S4 F560@3x3 160@6x7 Kernel Size16@6x6 10@1x120S4 F5 F614@2x2 14@14x7 14@1x1 Kernel Size14@14x7 141x1 1@1x1 Layer Size
Layer Input Ci#@size#@size 1@20x20Layer Input C1#@size 4@7x7#@size 1@46x56 4@40x50
20S2 C3 S4 F5 F64@5x5 4@2x2 20@3x3 14@2x2 14@1x1 14@1x14@16x16 4@8x8 14@6x6 14@3x3 14@1x1 1@1x120S2 C3 S4 F5 F64@2x2 6@5x5 3@2x2 180@8x10 240@1x14@20x25 3@16x21 3@8x10 60@1x1 4@1x1
  • 数据集特点: 这些 CNN 主要用于视觉识别任务,如图像识别、人脸识别等。
  • 规模: 在所有基准中,输入神经元最大占用 45 KB,突触最大占用 118 KB。ShiDianNao 的 288 KB 片上 SRAM 容量足以同时存储这些 CNN 的所有数据和指令。
  • 选择原因: 选择这些基准是为了评估 ShiDianNao 在具有代表性的、实际视觉识别应用中的性能和能效。它们涵盖了不同复杂度的 CNN 模型,并能够验证 ShiDianNao 在处理各类层(卷积、池化、分类)时的效率。

5.2. 评估指标

论文使用了以下指标来评估 ShiDianNao 的性能、能效和硬件成本:

5.2.1. 加速比 (Speedup)

  1. 概念定义: 加速比衡量的是一个系统相对于另一个基线系统在完成相同任务时,所需时间的减少倍数。它反映了新系统在性能上的提升。
  2. 数学公式: Speedup=TimeBaselineTimeShiDianNao \text{Speedup} = \frac{\text{Time}_{\text{Baseline}}}{\text{Time}_{\text{ShiDianNao}}}
  3. 符号解释:
    • TimeBaseline\text{Time}_{\text{Baseline}}:基线系统完成任务所需的时间。
    • TimeShiDianNao\text{Time}_{\text{ShiDianNao}}:ShiDianNao 完成相同任务所需的时间。

5.2.2. 能效 (Energy Efficiency)

  1. 概念定义: 能效衡量的是在完成相同任务时,一个系统相对于另一个基线系统所节省的能量倍数。高能效意味着在消耗更少能量的情况下完成更多工作。
  2. 数学公式: Energy Efficiency=EnergyBaselineEnergyShiDianNao \text{Energy Efficiency} = \frac{\text{Energy}_{\text{Baseline}}}{\text{Energy}_{\text{ShiDianNao}}}
  3. 符号解释:
    • EnergyBaseline\text{Energy}_{\text{Baseline}}:基线系统完成任务所需的总能量。
    • EnergyShiDianNao\text{Energy}_{\text{ShiDianNao}}:ShiDianNao 完成相同任务所需的总能量。

5.2.3. 功耗 (Power Consumption)

  1. 概念定义: 功耗是指设备在单位时间内消耗的能量,通常以毫瓦 (mW) 或瓦特 (W) 衡量。它反映了设备运行时的即时能量需求。
  2. 数学公式: Power=EnergyTime \text{Power} = \frac{\text{Energy}}{\text{Time}}
  3. 符号解释:
    • Power\text{Power}:设备的功耗。
    • Energy\text{Energy}:在特定时间段内消耗的总能量。
    • Time\text{Time}:消耗这些能量的时间段。

5.2.4. 面积 (Area)

  1. 概念定义: 面积是指芯片在硅片上物理占用的空间大小,通常以平方毫米 (mm²) 衡量。对于嵌入式设备,小面积是实现紧凑集成和降低制造成本的关键。

5.2.5. 峰值性能 (Peak Performance)

  1. 概念定义: 峰值性能指加速器在理想条件下每秒能够执行的最大定点运算次数 (GOP/s)。它反映了加速器的理论最大计算能力。
  2. 数学公式: Peak Performance (GOP/s)=Clock Frequency (GHz)×Operations per Cycle (GOP/cycle) \text{Peak Performance (GOP/s)} = \text{Clock Frequency (GHz)} \times \text{Operations per Cycle (GOP/cycle)}
  3. 符号解释:
    • Clock Frequency\text{Clock Frequency}:加速器的工作时钟频率。
    • Operations per Cycle\text{Operations per Cycle}:每个时钟周期能够完成的运算次数(例如,一个 PE 执行一次乘加算作两次操作)。

5.3. 对比基线

论文将 ShiDianNao 的性能和能效与以下三个基线模型进行比较:

  1. CPU (Central Processing Unit):

    • 型号: Intel Xeon E7-8830
    • 频率: 2.13 GHz
    • 内存: 1 TB
    • 特点: 256 位 SIMD (Single Instruction, Multiple Data) 指令集。
    • 软件环境: 使用 GCC 4.4.7 编译器,优化选项 O3lmmarch=native-O3 -lm -march=native,启用 MMX, SSE, SSE2, SSE4.1, SSE4.2 等 SIMD 指令。
    • 代表性: 代表了高性能通用处理器在处理神经网络时的能力。
  2. GPU (Graphics Processing Unit):

    • 型号: NVIDIA K20M
    • 内存: 5 GB GDDR5
    • 峰值浮点性能: 3.52 TFlops (在 28nm 工艺下)
    • 软件环境: 使用 Caffe 库(被认为是 GPU 上最快的 CNN 库)。
    • 代表性: 代表了高性能、高度并行化通用计算平台在神经网络加速方面的最先进水平。
  3. Accelerator (DianNao):

    • 背景: ShiDianNao 作者团队的先前工作 [3]。
    • 定制化: 为了进行公平比较和适应嵌入式场景,DianNao 被重新实现并调整了规模:
      • NFU 配置: 8×88 \times 8 DianNao-NFU (8 个硬件神经元,每个周期处理 8 个输入神经元和 8 个突触)。原始 DianNao 是 16×1616 \times 16 NFU。
      • 内存模型: 62.5 GB/s 带宽(原始 DianNao 是 250 GB/s,被认为在视觉传感器中不切实际)。
      • 片上缓冲区: 1 KB NBin/NBout 和 16 KB SB (原始 DianNao 容量的两倍)。
    • 验证: 作者验证了重新实现的 DianNao 与原始设计基本一致,例如面积比例(重新实现版 1.38 mm² 对比原始版 3.02 mm²)。
    • 代表性: 代表了针对广泛神经网络应用设计的专用加速器,是与 ShiDianNao 最直接相关的竞争者。

6. 实验结果与分析

6.1. 核心结果分析

6.1.1. 布局特性 (Layout Characteristics)

原文 Table 3 和 Table 4 详细列出了 ShiDianNao 和 DianNao 的参数设置以及 ShiDianNao 的硬件特性。

以下是原文 Table 3 提供的 ShiDianNao 和 DianNao 的参数设置:

ShiDianNaoDianNao
Data width16-bit16-bit
# multipliers6464
NBin SRAM size64 KB1 KB
NBout SRAM size64 KB1 KB
SB SRAM size128 KB16KB
Inst. SRAM size32KB8 KB
  • 数据位宽: 均为 16 位,确保了公平的精度比较基础。

  • 乘法器数量: 均为 64 个,表明计算核心的并行度在这一层面是相同的(DianNao 重新实现为 8×88 \times 8 NFU)。

  • SRAM 容量: ShiDianNao 在片上 SRAM 容量方面显著大于 DianNao。例如,NBinNBout 均为 64 KB(DianNao 为 1 KB),SB 为 128 KB(DianNao 为 16 KB),Inst. SRAM 为 32 KB(DianNao 为 8 KB)。这使得 ShiDianNao 能够将整个 CNN 模型和输入/输出数据完全存储在片上。

    以下是原文 Table 4 提供的 ShiDianNao 在 1GHz 频率下的硬件特性:

    AcceleratorArea (mm2)Power (mW)Energy (nJ)
    Total4.86 (100%)320.10 (100%)6048.70 (100%)
    NFU0.66 (13.58%)268.82 (83.98%)5281.09 (87.29%)
    NBin1.12 (23.05%)35.53 (11.10%)475.01 (7.85%)
    NBout1.12 (23.05%)6.60 (2.06%)86.61 (1.43%)
    SB1.65 (33.95%)6.77 (2.11%)94.08 (1.56%)
    IB0.31 (6.38%)2.38 (0.74%)35.84 (0.59%)
  • 总面积: 4.86 mm²,在一个 65 nm 工艺下,这被认为是“适度的占位面积 (modest footprint)”。虽然比 DianNao 的 1.38 mm² 大 3.52 倍,但 SRAM 容量却是 DianNao 的 11.1 倍。

  • 总功耗: 320.10 mW @ 1 GHz。

  • 总能量消耗: 6048.70 nJ。

  • 组件分析:

    • NFU: 面积占比 13.58%,但功耗和能量占比高达 83.98% 和 87.29%。这表明 NFU 是主要的计算核心,也是主要的能耗来源。

    • SRAM 缓冲区 (NBin, NBout, SB, IB): 虽然总面积占比相对较高(特别是 SB 占 33.95%),但它们在总能量消耗中仅占约 11.43%。这与 DianNao 的主要能耗在 DRAM 的情况形成鲜明对比,突出了片上 SRAM 的能效优势。

      下图(原文 Figure 17)展示了 ShiDianNao 的布局:

      Figure 17: Layout of ShiDianNao (65 nm). 该图像是 ShiDianNao 的布局示意图(65 nm),显示了主要组件和信号通路,包括输入数量 (NBin)、输出数量 (NBout)、数据通路 (SB) 和神经运算单元 (NFU)。

布局图直观展示了 NFUNBinNBoutSBIB 等主要组件的物理排布,印证了其紧凑的设计。

6.1.2. 性能 (Performance)

原文 Figure 18 展示了 ShiDianNao、DianNao 和 GPU 相对于 CPU 的加速比。

下图(原文 Figure 18)展示了 GPU、DianNao 和 ShiDianNao 相对于 CPU 的加速比:

Figure 18: Speedup of GPU, DianNao, and ShiDianNao over the CPU. 该图像是图表,展示了不同处理器(CPU、GPU、DianNao 和 ShiDianNao)在多种应用上的加速比。图中X轴列出不同应用名称,Y轴表示相对于CPU的加速比,ShiDianNao在大多数应用中表现出显著的加速效果。

  • ShiDianNao vs. CPU: 平均加速 46.38 倍。这表明专用加速器在处理神经网络任务时,相对于通用 CPU 具有压倒性优势。
  • ShiDianNao vs. GPU: 平均加速 28.94 倍。这令人惊讶地高,因为 GPU 通常被认为是神经网络加速的强大平台。论文解释道,这是因为 GPU 无法充分利用其庞大的计算能力,因为视觉识别任务中的小计算核 (small computational kernels) 与其 2496 个硬件线程 (hardware threads) 映射效果不佳。
  • ShiDianNao vs. DianNao: 平均加速 1.87 倍(在 10 个基准中的 9 个)。
    • 优势原因:
      1. 消除片外内存访问: ShiDianNao 通过更大的片上 SRAM 容量,完全消除了执行过程中的片外内存访问,而 DianNao 仍有此限制。
      2. 利用 2D 局部性: ShiDianNao 凭借其 2D PE 阵列和 PE 间数据复用机制,高效利用了 2D 特征图的局部性,而 DianNao 则将 2D 数据视为 1D 向量处理,效率较低。
    • 劣势分析: 在基准 Simple Conv. 上,ShiDianNao 表现略差于 DianNao。原因在于 Simple Conv. 的某些层(如 C2 层)输出特征图非常小(5×55 \times 5),小于 ShiDianNao 的 8×88 \times 8 PE 阵列,导致部分 PE 处于空闲状态,降低了效率。论文提到,为了避免增加复杂的控制逻辑和对编程模型的负面影响,选择了不对这种小特征图情况进行特殊优化。
  • 实时处理能力: 论文评估了 ShiDianNao 处理 640×480640 \times 480 视频帧的实时能力。对于最苛刻的基准 ConvNN,处理 64×3664 \times 36 像素区域需要 0.047 ms。考虑到一个帧包含 1073 个这样的区域(重叠 16 像素),处理一个帧需要略多于 50 ms,即每秒 20 帧。这符合商业传感器的处理速度,并且只需存储少量重叠区域的数据(几十行像素),能够适应 256 KB 的商用图像处理器缓存。

6.1.3. 能量 (Energy)

原文 Figure 19 展示了 GPU、DianNao 和 ShiDianNao 的能量消耗,包括主内存访问。

下图(原文 Figure 19)展示了 GPU、DianNao 和 ShiDianNao 的能量消耗:

Figure 19: Energy cost of GPU, DianNao, and ShiDianNao 该图像是图表,展示了GPU、DianNao、DianNao-FreeMem和ShiDianNao在不同任务下的能量消耗的对数值。各个模型在不同任务上表现出的能量消耗变化明显,ShiDianNao的能量效率显著优于其他模型,特别是在一些特定任务上。

  • ShiDianNao vs. GPU: 平均节能 4688.13 倍。这是巨大的优势,表明 ShiDianNao 在能效方面远超通用 GPU。
  • ShiDianNao vs. DianNao: 平均节能 63.48 倍。即使 DianNao 在设计时已关注能效,ShiDianNao 通过更彻底的优化实现了显著的进步。
  • 与理想 DianNao (DianNao-FreeMem) 比较: 论文还引入了一个假设性基线 DianNao-FreeMem,即假设 DianNao 的主内存访问不产生能量消耗(一个非常理想的场景)。即使在这种情况下,ShiDianNao 仍然比 DianNao-FreeMem 节能 1.66 倍。这进一步证明了 ShiDianNao 不仅仅是靠消除 DRAM 访问来提升能效,其片上数据重用和 2D 局部性优化也起到了关键作用。
  • 集成在嵌入式视觉传感器中: 当 ShiDianNao 直接与传感器集成,帧数据直接进入 NBin 时,其能效优势更加显著:比 DianNao 节能 87.39 倍,比 DianNao-FreeMem 节能 2.37 倍。这突出其在设计目标应用场景下的强大优势。
  • 能耗分解: 结合 Table 4,ShiDianNao 的四个 SRAM 缓冲区仅占总能量的 11.43%,而逻辑部分 (NFU 和其他控制器) 消耗了 87.29%。这与 DianNao 中超过 95% 的能量消耗来自 DRAM 的情况形成鲜明对比,表明 ShiDianNao 成功地将能耗瓶颈从内存访问转移到了核心计算。

6.2. 数据呈现 (表格)

以下是原文 Table 1 的结果:

CNNLargest Layer Size (KB)Synapses Size (KB)Total Storage (KB)Accuracy (%)
CNP [46]15.1928.1756.3897.00
MPCNN [43]30.6342.7788.8996.77
Face Recogn. [33]21.334.5030.0596.20
LeNet-5 [35]9.19118.30136.1199.05
Simple conv. [53]2.4424.1730.1299.60
CFF [17]7.001.7218.49
NEO [44]4.503.6316.0396.92
ConvNN [9]45.004.3587.5396.73
Gabor [30]2.000.825.3687.50
Face align. [11]15.6329.2756.39

以下是原文 Table 2 的结果:

LayerKernel Size #@sizeLayer Size #@sizeLayerKernel Size #@sizeLayer Size #@size
0Input Ci S2 C3 S4 C5 F66@7x7 6@2x2 61@7x7 16@2x2 305@6x6 160@1x11@42x42 6@36.x36 6@18x18 16@12x12 16@6x6 80@1x1 21120Input C1 S2 C3 S4 C520@5x5 20@2x2 400@5x5 20@2x2 400@3x31@32x32 20@28x28 20@14x14 20@10x10 20@5x5 20@3x3
LayerKernel Size #@sizeLayer Size #@sizeF6 F7 Layer6000@1x1 1800@1x1 Kernel Size #@size300@1x1 6@11 Layer Size #@size
20Input Ci S2 C3 S4 F520@3x3 20@2x2 125@3x3 25@2x2 1000@1x11@23x28 20@21x26 20@11x13 25@9x11 25@5x6 40@1x120Input Ci S2 C3 S4 F5 F66@5x5 6@2x2 60@5x5 16@2x2 1920@5x5 10080@1x11@32x32 6@28x28 6@14x14 16@10x10 16@5x5 120@1x1 84@1x1
LayerKernel Size #@sizeLayer Size #@sizeF7 Layer840@1x1 Kernel Size #@size10@1x1 Layer Size #@size
20Input Ci C2 F3 F45@5x5 250@5x5 5000@1x1 1000@1x11@29x29 5@13x13 50@5x5 100@1x1 10@11CE )Input C1 S2 C3 S4 F54@5x5 4@2x2 20@3x3 14@2x2 14@6x71@32x36 4@28x32 4@14x16 14@12x14 14@6x7 14@1x1
LayerKernel Size #@sizeLayer Size #@sizeF6 Layer14@1x1 Kernel Size #@size1@11 Layer Size #@size
0Input Ci S2 C34@5x5 6@3x3 14@5x51@24x24 1@24x24 4@12x12 4@12x12Input C1 S2 C312@5x5 12@2x2 60@3x33@64x36 12@60x32 12@30x16 14@28x14
S4 F560@3x3 160@6x7 Kernel Size16@6x6 10@1x120S4 F5 F614@2x2 14@14x7 14@1x1 Kernel Size14@14x7 141x1 1@1x1 Layer Size
Layer Input Ci#@size#@size 1@20x20Layer Input C1#@size 4@7x7#@size 1@46x56 4@40x50
20S2 C3 S4 F5 F64@5x5 4@2x2 20@3x3 14@2x2 14@1x1 14@1x14@16x16 4@8x8 14@6x6 14@3x3 14@1x1 1@1x120S2 C3 S4 F5 F64@2x2 6@5x5 3@2x2 180@8x10 240@1x14@20x25 3@16x21 3@8x10 60@1x1 4@1x1

以下是原文 Table 3 的结果:

ShiDianNaoDianNao
Data width16-bit16-bit
# multipliers6464
NBin SRAM size64 KB1 KB
NBout SRAM size64 KB1 KB
SB SRAM size128 KB16KB
Inst. SRAM size32KB8 KB

以下是原文 Table 4 的结果:

AcceleratorArea (mm2)Power (mW)Energy (nJ)
Total4.86 (100%)320.10 (100%)6048.70 (100%)
NFU0.66 (13.58%)268.82 (83.98%)5281.09 (87.29%)
NBin1.12 (23.05%)35.53 (11.10%)475.01 (7.85%)
NBout1.12 (23.05%)6.60 (2.06%)86.61 (1.43%)
SB1.65 (33.95%)6.77 (2.11%)94.08 (1.56%)
IB0.31 (6.38%)2.38 (0.74%)35.84 (0.59%)

6.3. 消融实验/参数分析

论文中没有明确的“消融实验 (ablation study)”环节来逐一分析各个组件的贡献。然而,通过与 DianNao 的详细比较,可以看作是对 ShiDianNao 关键设计理念有效性的间接验证。

  1. 片上 SRAM 容量的扩展: ShiDianNao 相较于 DianNao 大幅增加了 NBinNBoutSBIB 的片上 SRAM 容量(如 SB 从 16 KB 增加到 128 KB),使得能够完全存储整个 CNN 模型和输入/输出数据。这直接导致了 DRAM 访问的消除,并在能量效率上带来了巨大的提升(ShiDianNao 比 DianNao 节能 63.48 倍)。这证明了片上存储所有模型和数据是实现高能效的关键。

  2. 2D PE 阵列和 PE 间数据传播机制: ShiDianNao 引入了 2D PE 阵列和 PE 间数据传播机制来专门利用 CNN 的 2D 数据局部性。论文在方法论部分详细描述了其如何减少内部带宽需求(例如,卷积层 C1 的带宽需求减少 73.88%)。在性能对比中,ShiDianNao 比 DianNao 平均快 1.87 倍,即使在“DianNao-FreeMem”这种理想无 DRAM 访问的场景下,ShiDianNao 仍节能 1.66 倍。这表明,除了消除 DRAM 访问,NFU 内部对 2D 数据局部性的精细优化也是其性能和能效优势的重要来源。

  3. HFSM 指令编码: 通过 HFSM 机制,实现了紧凑的指令存储,将指令 SRAM 需求从 600 KB 降低到 1 KB(针对 50K 周期 CNN),并且解码器面积小。这保证了在不牺牲灵活性和性能的前提下,保持了极小的指令存储开销和面积。

    这些结果共同验证了 ShiDianNao 提出的核心设计原则——彻底消除片外内存访问、最大化片上数据复用,并针对特定应用(CNN 的 2D 局部性)进行深度定制——在性能和能效方面都取得了显著的成功。

7. 总结与思考

7.1. 结论总结

本文设计并实现了一个名为 ShiDianNao 的高能效、高性能、小尺寸的视觉识别加速器。该加速器通过将计算单元紧密集成到图像传感器旁,并利用卷积神经网络 (CNN) 的权重共享特性将整个模型和输入/输出数据完全存储在片上 SRAM 中,从而彻底消除了片外 DRAM 访问。此外,ShiDianNao 采用了 2D 处理单元 (PE) 阵列和 PE 间数据传播机制,深度利用了 CNN 的 2D 数据局部性,进一步最小化了片上数据移动。

实验结果表明,在 10 个代表性基准测试中,ShiDianNao 相较于主流 CPU、GPU 和作者团队先前的神经网络加速器 DianNao,分别实现了约 50 倍、30 倍和 1.87 倍的平均速度提升。在能效方面,ShiDianNao 分别比 GPU 和 DianNao 节能约 4700 倍和 60 倍。该设计在 65nm 工艺下实现了 4.86 mm² 的紧凑面积和 320.10 mW 的低功耗。这些特性使得 ShiDianNao 特别适用于移动终端和可穿戴设备中的视觉识别应用,能够显著降低服务器负载,提升服务质量 (QoS)。

7.2. 局限性与未来工作

7.2.1. 论文作者指出的局限性

论文中明确指出了一项局限性:

  • PE 空闲问题: 当应用中的输出特征图尺寸非常小,导致输出神经元数量少于实现的 PE 数量(例如,ShiDianNao 有 8×8=648 \times 8 = 64 个 PE,但某个层只产生 5×55 \times 5 的特征图)时,部分 PE 将处于空闲状态,从而降低了加速器的效率。虽然作者考虑过通过增加复杂的控制逻辑让不同 PE 同时处理不同的特征图来缓解此问题,但最终认为这会带来编程模型 (programming model) 的负面影响,因此选择放弃。这表明设计者在灵活性、硬件复杂度和效率之间做出了权衡。

7.2.2. 论文作者提出的未来工作

论文主要指出 ShiDianNao 的应用前景而非具体技术上的未来研究方向,强调其价值在于:

  • 将视觉处理前移到传感器端,这“将大大降低服务器的工作负载,极大地提升新兴视觉应用的 QoS,并最终促成视觉处理的普及成功 (ubiquitous success)”。

7.2.3. 个人对局限性和未来工作的补充思考

  • 模型泛化能力: ShiDianNao 针对 CNN 进行了深度优化。然而,随着深度学习领域的发展,出现了更多不同架构的神经网络,如循环神经网络 (Recurrent Neural Networks, RNN)、注意力机制 (Attention Mechanisms) 模型、Transformer 等。ShiDianNao 的高度定制化使其在处理这些非 CNN 架构时可能效率低下或完全不适用。未来的工作可能需要探索如何在保持高能效的同时,增加对更多通用模型架构的支持。
  • 精度权衡: 论文使用了 16 位定点算术。虽然指出其精度损失可忽略不计,但对于某些对精度要求极高或对量化敏感的复杂 CNN 模型,这种固定位宽的定点化可能仍存在挑战。未来的研究可以探索更灵活的量化方案,例如混合精度 (mixed-precision) 或自适应位宽 (adaptive bit-width) 算术。
  • 制程节点进步: 论文是在 65 nm 工艺下实现的。随着半导体技术向更小制程节点发展(例如 7nm, 5nm),虽然基本原理不变,但功耗和面积的绝对值会进一步降低,可能需要重新评估设计,以充分利用新制程带来的优势。
  • 更复杂的片上内存管理: 尽管 ShiDianNao 通过更大的 SRAM 解决了 DRAM 访问问题,但片上 SRAM 的管理策略仍然重要。对于超大型 CNN 模型(如果未来的 CNN 再次超出片上 SRAM 容量),如何高效地进行片上存储调度和分层管理将是新的挑战。
  • 异构集成与系统级优化: 将加速器直接集成到传感器旁是 ShiDianNao 的一大亮点。未来可以进一步研究如何在整个片上系统 (System-on-Chip, SoC) 层面进行异构集成和协同优化,包括与图像信号处理器 (Image Signal Processor, ISP)、微控制器单元 (Microcontroller Unit, MCU) 等其他组件的接口和交互,以实现更完整的端到端视觉处理解决方案。
  • 能耗分解的细化: 论文指出 NFU 成为主要的能耗来源。未来的工作可以进一步细化对 NFU 内部(如乘法器、加法器、PE 间通信链路等)的能耗分析,以识别新的优化点,从而在计算核心层面实现更高的能效。

7.3. 个人启发与批判

7.3.1. 个人启发

  1. 极致优化的力量: ShiDianNao 证明了当研究者能够深入理解特定应用的计算模式(如 CNN 的权重共享和 2D 局部性),并将其与系统级设计(片上集成、消除 DRAM)相结合时,可以实现通用解决方案(如 GPU)难以企及的能效和性能。这种“垂直整合 (vertical integration)”的设计哲学在专用加速器领域具有强大的指导意义。
  2. 内存访问的决定性影响: 论文再次强调了数据移动,尤其是片外内存访问,是现代计算系统中能耗和性能的主要瓶颈。这启发我们在设计任何计算系统时,都应将数据局部性 (data locality) 和内存访问优化放在首要位置。
  3. 嵌入式 AI 的前景: ShiDianNao 的设计理念完美契合了边缘计算 (Edge Computing) 和嵌入式人工智能 (Embedded AI) 的需求。将智能前移到传感器端,不仅能够降低云端负载和网络延迟,还能提高隐私保护,对于智能家居、自动驾驶、物联网等领域具有深远影响。
  4. 软硬件协同设计: 通过分层有限状态机 (HFSM) 实现灵活的控制指令,并在硬件层面支持多种 CNN 配置,展示了软硬件协同设计的重要性。只有当硬件设计能有效映射算法特性并由高效的软件/控制机制驱动时,才能发挥最大潜力。

7.3.2. 批判

  1. 通用性与专用性的平衡: ShiDianNao 的极致性能和能效来源于其对 CNN 视觉识别任务的高度专业化。这使得它在处理其他类型的神经网络(如 RNN、Transformer)或非视觉任务时,可能无法发挥同等优势。对于需要支持多种 AI 工作负载的通用边缘设备,可能需要结合多种专用加速器或设计更具可配置性的架构。
  2. 基准模型的时效性: 论文发表于 2015 年,当时所使用的 CNN 基准(如 LeNet-5)相对较小。自那时以来,CNN 模型变得越来越大、越来越深,例如 ResNet、Inception、ViT (Vision Transformer) 等。这些模型可能拥有更多的层、更大的参数量和更复杂的连接模式。ShiDianNao 的 288 KB 片上 SRAM 虽然对当时的基准足够,但对于现代大型 CNN 可能捉襟见肘,或者需要更复杂的片上数据分块和调度策略。
  3. “PE 空闲问题”的处理: 论文选择不解决小特征图导致的 PE 空闲问题,以简化设计。虽然这是工程上的合理权衡,但在某些实际应用中,如果小特征图层的比例较高,这种决策可能导致整体效率显著下降。未来的设计可以探索更灵活的 PE 映射策略,例如动态任务调度或多租户 (multi-tenant) PE 分配,以在不大幅增加复杂度的前提下提高 PE 利用率。
  4. 与其他传感器类型的兼容性: 虽然针对 CMOS/CCD 传感器进行了优化,但对于其他类型的数据源(如雷达、激光雷达 Lidar、热成像等),其数据结构和访问模式可能与图像有所不同。ShiDianNao 的设计是否能同样高效地支持这些异构传感器数据,还需要进一步研究。

相似论文推荐

基于向量语义检索推荐的相关论文。

暂时没有找到相似论文。