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