Page 101 - 《软件学报》2020年第10期
P. 101
娄文启 等:一种神经网络指令集扩展与代码映射机制 3077
从而避免了内存中“昂贵的”矩阵转置操作.相对应地,矩阵存储指令(MSTORE)完成便签存储器向主存储器方
向的数据传输,其指令格式与 MLOAD 相似,不过经常会忽略步幅字段以避免不连续的片外访存.
2.1.2 矩阵计算指令
CNN 主要由卷积层、激励层、池化层和全连接层组成,其中大部分计算都集中在卷积层 [20] .在卷积层的计
算中,卷积核在输入特征图上连续移动,并在重合区域执行点积以生成下一层的输入数据.在此过程中,同一卷
积核在特征图的不同区域之间的计算是独立的,不同卷积核在特征图的相同区域的计算也是独立的.为了充分
利用卷积计算中的并行性,我们采用 Im2col(image to column)算法将 2-D 卷积运算转换为矩阵乘法运算(算法示
意如图 2 所示).
Fig.2 Matrix multiplication version of convolution
图 2 卷积运算的矩阵乘法版本
将 2-D 卷积映射到矩阵乘法操作后,可以很自然地使用 MMM(matrix-multiply-matrix)指令执行该操作.其
指令格式如图 3 所示,其中,Reg0 指定矩阵输出的便签存储器中的目的地址;16~12 位是指令的功能字段,指示矩
阵乘运算.Reg1 和 Reg2 分别指定矩阵 1 和矩阵 2 的在便签存储器中的源地址.Reg3 中的 4 个字节分别代表矩
阵的高(H)、宽(W)、卷积核大小(K)、卷积步长(S).考虑到实际执行中分片技术的使用,这里使用单个字节存储
相应的信息是足够的.因此,卷积操作执行时的参数信息被打包成 32’b{H,W,K,S},并由 Reg3 指定.同时,由于数
据分片载入,其产生的中间结果往往需要累加.这里不设置特定的矩阵加法指令而是设计了 MMS 指令.该指令
在完成矩阵乘法计算后,将部分结果写入目标地址时与该地址原有的值累加后再存储,使得在完成累加的同时
减少数据的重新载入.该指令的格式和各字段含义均与 MMM 指令一致,由功能字段指定该指令,故不再展示.
此外,为了更大程度地利用数据局部性并减少对同一地址的并发读/写请求,我们选择采用专用的 MMM 指令执
行矩阵乘法,而不是将其分解为更细粒度的指令(例如,矩阵向量乘和矢量点积).
Fig.3 Matrix multiply matirx (MMM) instruction format
图 3 矩阵乘矩阵指令格式
全连接层通常在整个卷积神经网络的尾部以对之前各层学得的特征进行映射达到分类效果.全连接层的
计算可以用矩阵向量乘法表示,而 MMM 指令在不同的参数下同样可以表示全连接层的计算,因此卷积层和全
连接层可以复用相同的计算单元.
2.1.3 矩阵逻辑指令
融合(fusion) [21] 作为目前 DNN 加速器设计中常用的技术,通过将部分层加以融合,从而以一次数据的加载、
存储替代单独层的数据输入输出操作来最小化带宽限制.融合操作的优势以及目前 CNN 中激活层通常紧接在