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 指令集的指令粒度最小.