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

3076                                  Journal of Software  软件学报 Vol.31, No.10, October 2020

         作为目标 ISA,并在保持基本内核和每个标准扩展不变的前提下使用 CNN 专用指令对其进行扩展.最终专用指
         令可以配合 RV32 具有的标量和逻辑控制指令完成 CNN 的推理过程.
             数据级并行.设计 CNN 专用指令集涉及很多因素,但其中涉及性能瓶颈部分才是应该关注的重点.考虑到
         CNN 逐层堆叠的拓扑结构和不同层权重数据的独立性,设计矩阵指令以利用其操作中的数据级并行性而非挖
         掘其指令级并行性是更有效的.研究表明,在 Intel Xeon 处理器核中用于计算的消耗仅占整个核能量消耗的
         37% [19] ,其余的能量消耗为体系结构成本,并不是计算必须的.因此,在设计专用指令时,增加指令的粒度,将指令
         取指、译码和控制的开销平摊到多个元素的计算上,可以有效提升执行效率.此外,当处理涉及大量数据的计算
         时,与传统的标量指令相比,矩阵指令可以显式地指定数据块之间的独立性,减少数据依赖检测逻辑的大小.并
         且,矩阵指令还具有较高的代码密度,因此我们这里主要关注数据级并行.
             便签存储器(scratchpad memory).向量寄存器组通常出现在向量体系结构中,其中,每个向量寄存器都包含
         了一个长度固定的向量,并且允许处理器一次操作向量中的所有元素.便签存储器是在片上用于存储临时计算
         数据的高速内部存储器,其具有直接寻址访问、代价低以及可变长度数据访问的特性.由于实现便签存储器的
         代价较低,因此通常部署较大尺寸的便签存储器并集成直接内存访问(DMA)控制器,以便进行快速的数据传输.
         此外,考虑到密集、连续、可变长度的数据访问经常发生在 CNN 中,我们这里选择使用便签存储器来替代传统
         的向量寄存器组.
         2    专用指令设计与映射

             本节中,我们首先展示了专用指令集的构成,然后详细介绍了在第 1 节中提出的设计偏好下专用指令的功
         能和格式.在此基础上,我们介绍了从基于深度学习框架的 CNN 模型描述文件到专用指令的映射过程,并列举
         了由专用指令实现的卷积层和池化层的代码.
         2.1    专用指令扩展

             RV-CNN 指令集的构成见表 1,其包含了数据传输指令、逻辑指令和计算指令.配合部分基础的 RV-32I 指
         令集(这里不再描述),该指令集可以完成典型的 CNN 类计算.RV-CNN 指令集架构仍然和 RISC-V 架构保持一
         致,属于 load-store 架构,仅通过专用的指令进行数据传输.并且,该指令集仍使用 RV-32 中的 32 个 32 位通用寄
         存器,用于存储标量值以及便签存储器的寄存器间接寻址.另外,我们设置了一个向量长度寄存器(vector-length
         register,简称 VLR)来指定运行时实际处理的向量长度.下面对指令进行详细介绍.

                                        Table 1    An overview of RV-CNN
                                          表 1   RV-CNN 指令集综述
                                     指令类型                示例
                                   数据传输指令            MLOAD/MSTORE
                                    计算类指令         MMM/MMA/MMS/MMSA
                                    逻辑类指令      MXPOOL/MNPOOL/APOOL/MACT

         2.1.1    数据传输指令
             为了灵活地支持矩阵运算,数据传输指令可以完成片外主存储器和片上便签存储器之间可变大小的数据
         块传输.图 1 展示了矩阵加载指令(MLOAD)的格式.





                                   Fig.1    Matrix load (MLOAD) instruction format
                                           图 1   矩阵加载指令格式
             图 1 中,Reg0 指定片上目标地址.Reg1、Reg2 和 Reg3 分别指定矩阵的源地址、矩阵的大小和相邻元素的
         跨度.具体而言,该指令完成数据从主存向便签存储器的传输,其中,指令的步幅字段可以指定相邻元素的跨度,
   95   96   97   98   99   100   101   102   103   104   105