关键词:
神经网络
指令集架构
专用处理器
摘要:
近年来,随着人工智能领域神经网络算法的快速发展及成熟普及,越来越多的应用场景需要神经网络算法进行处理。目前主流的神经网络算法一般采用称为张量的高维度数组进行运算,此类运算具有多维度、数据量大、计算量大的特点。现阶段的通用处理器在张量计算性能方面受限且在功耗开销方面表现过高,因此在一些移动端应用场景下无法达到神经网络运行的高效能要求。鉴于此,设计一款针对神经网络应用的张量处理器成为了解决上述问题的途径之一,并逐渐成为目前处理器设计领域的热点。设计该类处理器的主要挑战在于如何使神经网络的先进算法与处理器设计及集成电路实现进行充分融合并发挥出最佳的效能。针对以上挑战,本文首先对神经网络算法进行了充分的分析,并尝试从软硬件协同设计、张量指令集定义以及处理器高效实现这三个方面出发,设计了一款高性能低功耗的张量处理器,该处理器兼容多种神经网络计算,并具有可扩展的计算架构。处理器在性能、功耗及面积等关键指标方面体现了一定的优势。根据这三个方面的工作,本文的主要研究内容和创新点如下:(1)张量处理器软硬件协同设计:神经网络模型具有多种效率优化方案,但并非全部适合在硬件上高效部署,甚至可能造成处理器的利用率急骤下降。为解决此问题,提高神经网络模型在张量处理器上的执行效率,本文提出了张量处理器的软硬件协同设计方法,并在实现的设计方案验证系统中论证了可行性。主要包括:①软件方面进行硬件友好的神经网络模型效率优化方法测试,本文通过对神经网络模型优化算法的研究,提出了神经网络动态特征图剪枝算法并优化了量化算法,分别降低了数据载入需求和量化算法的精度损失,并验证了定点运算可以满足神经网络的精度需求;②设计协同优化算法,配合并指导硬件设计,将高位宽的浮点模型转换为低位宽的全定点模型,在相同的存储器带宽下,提升了约4倍的数据吞吐率,相较于浮点模型仅损失0.22%的模型精度。③硬件设计方面,通过在验证系统中对大量神经网络模型的分析和处理器数据流行为级模拟,对张量指令集和张量处理器的输入输出移位、累加结果输出位宽等设计参数进行了探索及优化,进一步提高了处理器的整体效率和性能。(2)基于统一指令集的张量指令集:为了对神经网络算法中高维度张量和相关访存和计算行为进行完整的描述,本文基于统一指令集提出了张量指令集扩展:①张量指令集基于精简指令集风格设计,该指令集在低32位兼容统一指令集的基础上,在高32位设计了特定的位域来实现张量的载入、计算、写回等操作,并设计了不同的操作码、功能码、张量寄存器编号等重要指令行为定义。②张量指令集采用了对称的张量寄存器,以传统处理器中的通用寄器和向量寄存器作为张量指令的寄存器操作数,基于现有的可变长向量指令集,提出了维度寄存器以及维度可动态指定的张量指令。(3)基于张量指令集的处理器实现:本文对创新点(2)所提出的张量指令集进行了高效的微架构设计,实现了计算单元,寄存器等资源的张量化设计,形成一个完整的张量处理器。为了达到高效处理神经网络中张量计算的目标,本文提出了张量处理器中关键部件微架构优化方法。该方法包括:①计算单元方面,利用神经网络中的数据复用模式,提出了一种基于行列数据广播的原位乘累加脉动阵列,高效实现了各种张量的乘累加及其衍生类型的计算;②数据通路方面,为了提高数据载入的效率,设计了张量数据多级缓存流水线,实现了配合脉动阵列的数据行列广播。针对张量的载入及写回指令,结合张量数据的存储特点设计了具体功能单元,保证张量处理器可以高效利用存储带宽,进一步提高处理器整体性能;③指令并行方面,为了提升处理器整体指令的并行执行效率,提出了一种乱序执行机制和张量寄存器重命名方法,该方法在简化软件编程的基础之上,让更多的无依赖张量指令并行执行。在测试中利用该方法增加4个物理张量寄存器的情况下,提升了处理器35%的计算效率。本文基于周期级精确模拟器实现并验证了所提出的张量指令集及处理器设计方案,在相关EDA工具的辅助下对RTL级电路进行了实现及验证。在本文最后的实验部分对该张量处理器的硬件性能、效率、功耗和面积等指标进行了充分的评估与分析,并与相关工作进行了横向比较。最终结果显示,该张量处理器在1.1伏特的电压下以1 GHz的频率运行,使用4096个计算单元可进行每秒8.192万亿次运算(8.192 Tera Ops/s)。在TSMC 28nm工艺库的评估下,其面积约为12.8平方毫米,峰值功耗约为3.8瓦特,能量效率为2.16 GOPS/mW,处于当前的领先水平,相同能耗水平下,其峰值性能达到其他相关工作的4至36倍。