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

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

         卷积层或全连接层之后的特点,使得设计相应的粗粒度指令将两者融合执行是非常适合的.而且激励层不改变
         输入张量的尺寸且激活函数逐元素进行激活操作,其需要的参数较少.因此,我们设计了 MMMA 指令,使矩阵相
         乘得到卷积层或全连接层的部分最终结果后可经过激活操作后输出,其指令格式与各字段含义均和 MMM 指
         令一致,由功能字段指定该指令.不过,我们仍然保留了激活指令,以完成对输入的数据进行激活操作,其指令格
         式如图 4 所示,其指令中的 31~27 位用来决定激活函数的选择,如 ReLU()/sigmoid()/Tanh().




                                 Fig.4    Matrix activation (MACT) instruction format
                                           图 4   矩阵激活指令格式

             池化层通过降采样将输入数据的每个窗口子采样到单个池输出以减小输入图片的尺寸.实际上,卷积神经
         网络中相较于卷积层和全连接层,其余层包含了很少的计算且被数据访问时间限制.在某些 CNN 模型中,对池
         化层和相邻层采用融合技术同样是有效的.但是,不同于激活层在 CNN 中的位置相对固定且按元素操作,池化
         层仍具有一定的灵活度,如 3 个卷积层堆叠后池化.于是,这里我们仍将池化层当作单独的层来处理.用于进行最
         大值池化的 MXPOOL 的指令格式如图 5 所示.其中,Reg0、Reg1、Reg2 分别表示输出数据的目标地址、输入
         数据的源地址和输入数据的长度.借鉴设计 MMM 指令的思想,观察到池化窗口通常为 2×2、3×3、5×5 等小尺
         寸而且通常采用分片技术处理输入数据,所以使用单个字节分别表示一次分片可处理的输入矩阵的高(H)、宽
         (W)、池化窗口大小(K)和步长(S)是足够的.这些必要信息进而被打包为 32 位值,由 Reg3 指定.




                                Fig.5    Matrix maximum (MXPOOL) instruction format
                                           图 5   矩阵池化指令格式
         2.2    代码映射机制

             RV-CNN 指令生成流程如图 6 所示.其中,CNN 模型描述文件可以是深度学习工程师熟悉的 Caffe、
         TensorFlow 或 Pytorch 等流行框架下的描述文件.由模型分析器对该描述文件进行解析以生成用于模型构建的
         参数信息和重排后的权重信息.在此基础上,应根据网络参数信息构建数据流图并提取算子,然后在不同的融合
         策略下将提取出的算子映射至指令池(RV-CNN 指令集)中的不同指令.由于我们设计的指令均为粗粒度指令,这
         里应提取粒度适合的算子才能映射至目标指令集.在专用指令提取后,应根据硬件的参数信息,如片上便签存储
         器的大小和硬件计算资源规模来决定分片大小.同时根据复用策略,如输入复用或权值复用等对指令进行编排
         以生成最终的代码.其中,应使用 RV32 基础指令集将参数信息加载至寄存器并完成循环控制.










                                   Fig.6    RV-CNN instructions generation process
                                         图 6   RV-CNN 指令生成流程
   97   98   99   100   101   102   103   104   105   106   107