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

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

         2.3.2    池化层代码示例
             RV-CNN 实现的池化层代码如图 8 所示,左侧仍以 Caffe 框架中编写池化层代码作功能示意,其表示对输入
         特征图(14×14×512),使用 2×2、步幅为 2 的池化窗口进行最大值采样.图右侧则是使用专用指令完成相同功能
         的示意代码,其中仍假设硬件片上资源充足且数据排列顺序合适.
             由于池化层不包含权重数据且不在深度方向上累积,在输入图片大小合适的情况下,其 RV-CNN 实现的代
         码比卷积层代码要简洁.在向相应寄存器中加载完参数后,利用 MLOAD 指令将待处理数据从片外 0×10000($6)
         处加载至片上目的地址$1 处.输入数据加载完毕后,使用 MXPOOL 指令进行降采样并将结果存储在片上临时
         地址$5 处,采样结束后,则由 MSTORE 将结果传输至片外地址 0×40000($7)处,该过程中输出并不会在片上累加.
         代码中的循环计数器是为了在输入数据深度方向上遍历,一次载入、池化、载出完成一次分片数据的采样,之
         后更新载入、载出地址以及计数器值.




















                              Fig.8    Pooling layer code example implemented by RV-CNN
                                      图 8   RV-CNN 实现的池化层代码示例
         3    RV-CNN 和专用指令集对比

             目前,在面向神经网络领域的专用指令集中,Cambricon 指令集被认为是最具代表性的指令集之一,而基于
         RISC-V 架构的向量指令集扩展(RV-V)也被认为是加速神经网络计算的指令集.因此,本节将围绕指令集的适用
         范围、粗细粒度以及映射机制等方面,将 RV-CNN 与以上两种典型指令集进行定性分析和对比.
             适用范围.RV-V 指令集的建立旨在利用应用中的数据级并行,其可广泛应用于科学计算、数据信号处理以
         及机器学习等领域.Cambricon 指令集则是面向神经网络领域,如 CNN、循环神经网络(RNN)以及长短期记忆网
         络(LSTM)等 10 余种网络模型而设计的指令集.相比之下,RV-CNN 指令集着重针对神经网络领域中的 CNN 而
         设计,其中涉及的运算类型较少.因此,前两者针对的领域更广泛,设计的难度也更大,这在指令集包含的指令类
         型和数目上也有所体现.RV-V 指令集已经包含了超过 60 条指令(草稿版本 0.8),Cambricon 指令集中包含了 47
         条指令,而 RV-CNN 指令集仅包含了 10 条指令.
             粗细粒度.RV-V 和 RV-CNN 指令集中分别包含了向量和矩阵指令,而 Cambricon 指令集中则包含了标量、
         向量以及矩阵 3 类不同的指令.Cambricon 之所以包含标量指令是因为其在概念上是一个完备的神经网络指令
         集,但其中用于加速计算的仍是向量和矩阵指令.因此,在指令粒度层面上,RV-CNN 指令集是三者中指令粒度最
         大的,Cambricon 指令集其次,由于 RV-V 指令集中均是向量指令,相比之下粒度最小.这也与指令集的适用范围
         相关,由于在设计 RV-V 指令集时针对的应用领域最为广泛,因此需要从多种计算操作中提取共性部分.考虑到
         硬件规模及能耗限制,这一过程往往需要结合算法特性,将不同的计算过程不断地向下拆分以寻求计算共性,提
         高指令集的表达能力,因此相较于前两者 RV-V 指令集的指令粒度最小.
   99   100   101   102   103   104   105   106   107   108   109