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

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


             代码映射机制.Cambricon 指令集的代码映射是基于框架的,其为流行的编程框架提供适配的机器学习高
         性能库与软件运行时支持,向上为框架提供丰富的算子和计算图方法以构造整个网络,向下通过调用内置驱动
         产生指令以控制硬件.RV-CNN 指令集的代码映射过程以基于框架的模型描述文件开始,不同于 Cambricon 对框
         架进行修改,RV-CNN 仅对框架下的模型描述文件进行分析,从而提取模型结构及权重信息,进而配合融合策略
         建立模型中算子和指令间的映射关系,之后根据复用策略进行指令编排,最终经汇编形成可执行文件.RV-V 指
         令集目前处于正在进行的状态,还未提供可使用的编译器来完成对代码的自动矢量化过程,仍需要用户手写汇
         编指令.但其中涉及到大量细粒度的向量指令,这给编程过程中寄存器分配以及指令编排增加了难度.
         4    RV-CNN 的硬件实现

             本节首先介绍了包含 RV-CNN 指令扩展的开源处理器核的整体结构,并详细介绍了指令的执行流程.随后
         讲述了与 RV-CNN 指令相对应的矩阵单元的组成及其子单元的功能,其中详细展示了矩阵乘法单元的结构,最
         后介绍了有关矩阵单元的优化细节.
         4.1    整体架构
             包含了 RV-CNN 扩展的 RISC-V 处理器核的主要功能部件以及简化的流水线结构如图 9 所示.可见,其包含
         了基本的 5 个流水线阶段:取指、译码、执行、访存和写回.其中,矩阵计算单元处于流水线的执行阶段,用于完
         成矩阵指令的执行.在取指、译码阶段之后,基础指令集中的指令将进入 ALU,然后进入下一个阶段.当译码阶段
         解析出当前指令是矩阵指令后,译码器从寄存器中获得相应信息并保存,待下一个周期送入矩阵单元.矩阵单元
         根据接受的指令信息并检测相应功能部件的状态以确定是否执行.由于片上便签寄存器的地址空间用户可见,
         矩阵单元可以通过矩阵数据传输指令和内存进行交互,因此,矩阵指令进入矩阵单元后不会经过访存和写回两
         个阶段,而其余指令不通过矩阵单元,其访存仍通过高速缓存(cache).这样可以避免不必要的数据依赖性检测和
         硬件自动的数据换入换出.此外,由于矩阵单元包含了大量的计算单元,其内部有自己的流水线结构,译码器根
         据矩阵单元能否接受矩阵指令信息来决定是否停止流水线.鉴于矩阵指令连续、大量的数据访问,我们在便签
         存储器外集成了 DMA 控制器,以便满足矩阵单元的数据访问需求.需要注意的是,矩阵单元完成计算和逻辑类
         指令所涉及的数据需要已经存在于片上,这需要程序的严格控制.






















                        Fig.9    A simplified block diagram of processor core with RV-CNN extension
                                   图 9   包含 RV-CNN 扩展的处理器核简化框图
         4.2    矩阵单元
             矩阵单元的整体结构如图 10 所示,其内部主要包含了输入输出单元、矩阵乘法单元、激活单元、池化单
   100   101   102   103   104   105   106   107   108   109   110