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 所示,其内部主要包含了输入输出单元、矩阵乘法单元、激活单元、池化单