Page 99 - 《软件学报》2020年第10期
P. 99

娄文启  等:一种神经网络指令集扩展与代码映射机制                                                        3075


         Key words:    CNN; domain-specific instruction; RISC-V; code maping; FPGA

             作为现代人工智能的重要分支,人工神经网络(artificial neural  network,简称 ANN)近年来得到迅速发展.深
         度学习作为其在大数据时代背景下的延续和进化,通过增加网络模型的深度,有效增强了传统 ANN 算法的数据
                                                                                        [1]
         特征提取能力.其中,卷积神经网络(CNN)作为深度学习中广泛采用的算法,被人们实现在如人脸识别 、目标检
           [2]
                                    [4]
                      [3]
         测 、语音识别 、自然语言理解 等应用中,并取得了令人瞩目的成果.得益于其在各类应用场景中的出色表
         现,CNN 已成为研究人员关注的重点,并广泛部署在数据中心以及边缘嵌入式设备中.
             然而,CNN 出色的识别精度背后是不断加深、复杂的网络结构和巨大的计算、访存量.近年来,CNN 模型的
         参数量达到了百万级别,计算量达到千兆级别                [5−7] .CNN 密集的计算和访存也给通用处理器带来了巨大的压力.
                                               [5]
         因此,近年来涌现了许多基于 FPGA           [8−10] 、GPU 和 ASIC [11,12] 的加速器,并达到了优于 CPU 的性能和能效.
         在这 3 类平台中,相比于动辄消耗数十瓦甚至数百瓦的 GPU 平台,FPGA 和 ASIC 通常具有更低的功耗.尽管
         GPU 在 CNN 模型的训练阶段具有独特的优势,但离线训练以进行在线预测的模式使得模型推理过程更加关键.
         而在推理过程中,FPGA、ASIC 的低功耗特性使其具有更广泛的应用领域,如电量受限的嵌入式平台.因此本文
         主要关注基于这两类平台的 CNN 加速器的相关工作.但经观察发现,先前的工作中此类加速器通常仅加速特定
         的网络结构或特定类型的层,模式相对固定,灵活性较低.
             为了解决这一问题,陈云霁团队提出了 DianNao             [11] ,一款针对不同机器学习应用的高吞吐量 ASIC 芯片,并
         设计了超长指令字(very long instruction word,简称 VLIW)风格的指令,其支持 CNN 和多层感知机模型(multi-
         layer perceptrons,简称 MLPs).相继提出的 DaDianNao [13] 则是在 DianNao 基础上的 SIMD 实现,不同之处在于用
         于计算的权值矩阵固化到本地的 eDRAM 上,减少了读取内存的次数.但两者中 VLIW 风格指令对计算过程的
         抽象较差,若不了解底层硬件,则难以使用.随后,该团队通过对 ANN 中的计算进行抽象,设计了专用指令集
         Cambricon [14] ,其包含了标量、向量和矩阵等指令,支持多种神经网络且具有比传统 ISA 更高的代码密度和性能.
         然而,该指令集并不专用于 CNN,为了通用性牺牲了部分 CNN 特定的数据复用和指令中的并行计算.针对 CNN
         应用,Luca 等人  [15,16] 提出了 PULP,一种可扩展的多核计算平台,并在其中增加了硬件卷积引擎以加速卷积操作.
         该平台中的单个核心均基于 RISC-V 开源架构,并扩展了点积和 packed-SIMD 等指令,可直接使用指令驱动加速
         单元,节省了操作系统层面的开销.但是该团队并未针对网络中的其他层设计相应指令.因此,一个高效、灵活且
         易于实现的 CNN 专用指令集仍是需要的.
             本文通过研究典型的 CNN 模型的计算模式提出了一个小型且易于实现的 CNN 专用指令集,称为 RV-
         CNN [17] ,其包含 10 条矩阵指令,可以灵活地支持多种 CNN 结构的推理过程.随后介绍了由 CNN 模型描述文件
         到专用指令的映射过程.在实现方面,本文将指令集扩展进 RISC-V 架构处理器中,并对指令的实现进行了特定
         的优化.最终,通过典型的案例研究,本文从代码密度、性能和能效方面对该指令集及其实现进行了对比评估.
             本文第 1 节介绍专用指令集的设计偏好.第 2 节详细阐述专用指令的格式、功能以及代码的映射过程,并
         展示部分代码样例.第 3 节将指令集与典型专用指令集作定性比较.第 4 节介绍基于 RISC-V 核的指令集硬件实
         现.第 5 节展示实验步骤与实验结果.第 6 节总结并介绍下一步工作.

         1    设计偏好

             本节主要展示了为设计一个高效且易于实现的 CNN 专用指令集时的一些偏好,基于这些偏好,我们才能设
         计出具体的指令.
             RISC-V 扩展.以往 CNN 硬件加速器通常以外设的方式工作,主机端通过驱动对加速器进行读写.考虑到大
         量数据在用户空间与内核空间的拷贝,这一过程中操作系统层面的时间以及资源开销显然是不可避免的.然
         而,RISC-V 架构的出现给加速器的工作模式带来了更多选择.该指令集架构由基础指令集和其他可选指令集组
         成,具有开源性和指令可定制性,为用户提供了定制处理器微架构的可能                          [18] 与设计专用指令的空间.因此,基于
         RISC-V 架构设计专用指令控制加速单元的执行也更简洁、更高效.基于以上两点分析,我们最终选择 RISC-V
   94   95   96   97   98   99   100   101   102   103   104