为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 面向向量处理器的二维矩阵卷积的设计与实现

面向向量处理器的二维矩阵卷积的设计与实现

2019-07-24 16页 doc 56KB 30阅读

用户头像

is_219945

暂无简介

举报
面向向量处理器的二维矩阵卷积的设计与实现面向向量处理器的二维矩阵卷积的设计与实现 张军阳,郭阳 (国防科技大学 计算机学院,湖南 长沙 410073) 摘要:为了加速卷积神经网络模型的计算速度,便于大规模神经网络模型在嵌入式微处理器中的实现,本文以FT-matrix2000向量处理器体系结构为研究背景,通过对多核向量处理器体系结构的分析和卷积神经网络算法的深入研究,提出一种将规模较小的卷积核数据置于标量存储体,尺寸较大的卷积矩阵置于向量存储体的数据布局方案;针对矩阵卷积中数据难以复用的问题,提出一种根据卷积核移动步长的不同动态可配置的混洗模式,通过对所取卷积矩阵元...
面向向量处理器的二维矩阵卷积的设计与实现
面向向量处理器的二维矩阵卷积的设计与实现 张军阳,郭阳 (国防科技大学 计算机学院,湖南 长沙 410073) 摘要:为了加速卷积神经网络模型的计算速度,便于大规模神经网络模型在嵌入式微处理器中的实现,本文以FT-matrix2000向量处理器体系结构为研究背景,通过对多核向量处理器体系结构的和卷积神经网络算法的深入研究,提出一种将规模较小的卷积核数据置于标量存储体,尺寸较大的卷积矩阵置于向量存储体的数据布局;针对矩阵卷积中数据难以复用的问题,提出一种根据卷积核移动步长的不同动态可配置的混洗模式,通过对所取卷积矩阵元素进行不同的移位操作,进而大幅提高卷积矩阵数据的复用率;针对二维矩阵卷积由于存在数据相关性进而难以多核并行的问题,提出一种将卷积矩阵多核共享,卷积核矩阵多核独享的多核并行方案;设计了卷积核尺寸不变、卷积矩阵规模变化和卷积矩阵尺寸不变、卷积核规模变化的两种计算方式,并在主流CPU、gtx1080TI、TI6678、FT-matrix2000平台进行了性能对比与分析。最终实验结果表明,相比多核CPU最高可加速238倍,相比TI6678可加速21倍、相比高性能gtx1080TI可加速663805倍。 关键字:卷积神经网络;向量处理器;多核实现;矩阵卷积 中国分类号:                    文献标志码:              文章编号: Design and implementation of two-dimensional matrix convolution based on vector processor ZHANG Junyang,  GUO Yang (College of Computer, National University of Defense Technology, Changsha 410073, China) Abstract:  In order to accelerate the computational speed of convolutional neural network model and facilitate the implementation of large-scale neural network model in embedded microprocessor, this paper takes the FT-matrix2000 vector processor architecture as the research background, through the analysis of the multi-core vector processor architecture and convolutional neural network algorithm, a data layout scheme is proposed in which a smaller convolution kernel data is placed in a scalar memory bank and a larger convolution matrix is placed in a vector bank. Aiming at the problem that the data in the matrix convolution is hard to reuse, a dynamic shuffling pattern with different dynamic configurable parameters based on the moving steps of the convolution kernel is proposed, by carrying out different shift operations on the convolution matrix elements, the multiplexing rate of convolution matrix data is greatly improved. Aiming at the problem that two-dimensional matrix convolution is difficult to multi core parallelism due to the existence of data correlation, a multi-core parallel scheme with convolution matrix sharing and convolution kernel matrix multi core exclusive is proposed. Two computing methods of convolution kernel size unchanged, convolution matrix size change and convolution matrix size unchanged and convolution kernel size change are designed, performance comparison and analysis are carried out in mainstream CPU, gtx1080TI, TI6678 and FT-matrix2000. The final experimental results show that compared to multi-core CPU can be accelerated up to 238 X, compared to TI6678 can be accelerated 21 X, compared to high-performance gtx1080TI can accelerate 663805 X. Keywords: convolution neural network; vector processor; multi-core implementation; matrix convolution 近年来,深度学习[1]受到了越来越多的关注,尤其是在图像识别[2]、语音识别[3]、机器翻译[4]自然语言处理等领域基于深度学习的目标识别技术都取得了重大突破,进而引发了机器学习和计算机视觉等领域的新一轮研究热潮。深度学习包括一系列神经网络模型,如卷积神经网络(Convolutional Neural Network,CNN)[5-6]、深度置信网络(Deep Belief Network,DBN)[7-9]、自动编码机[10]、循环神经网络(Recurrent Neural Network,RNN)[11]等常用模型。尤其是基于CNN的模型在图像识别领域取得了重大突破,当前几乎所有的图像识别类任务中识别率最好的模型都是基于CNN。一般来说CNN模型有若干卷积层和池化层交替出现,最后由若干全连接层和分类层组成。其中卷积层的计算量占整个模型的85%以上[12],因此,当前的许多研究大多是针对CNN的加速器,如图形处理单元(Graphic Processing Unit,GPU)[13-14]、现场可编程逻辑门阵列(Field Programmable Gated Array,FPGA)[15-16]、专用集成电路(Application Specific Integrated Circuit,ASIC)[17-19]、向量数字信号处理器(Digital Signal Processor,DSP)等。 向量处理器体系结构就是其中的一种新颖体系结构[20]。一般包括标量处理单元和向量处理单元,标量计算单元负责标量任务的计算和流控;向量计算单元主要负责大规模的向量计算,它包括若干向量处理单元,每个处理单元上包含丰富的运算部件,具有强大的计算能力,可以大幅提高系统的计算性能,与此同时也对软件开发提出了新的挑战,如何针对向量处理器多处理单元、多功能部件的体系结构特点,充分开发各个层次的并行性,将各类应用高效地向量化是当前面临的主要困难[21]。 本文针对卷积神经网络模型中二维矩阵卷积难以并行的难题,结合向量处理器的体系结构 特点,设计了一种通过混洗操作来提高算法的并行性和提高数据复用率的方法,针对多输出卷积结果矩阵的计算,提出一种加速矩阵卷积计算的多核实现方案,并从体系结构、多级存储和计算模式等方面进行了算法优化和性能分析。 图1FT-matrix2000处理器体系结构 Fig.1 Architecture of FT-matrix2000 1向量处理器FT-matrix2000的体系结构 FT-matrix2000是由国防科技大学微电子所自主研发的一款面向高密度计算的高性能浮点多核向量处理器,单芯片集成12颗向量处理器内核,主频1GHz,双精度峰值性能达到1152GFLOPS。其单核结构如图1所示,每个单核是独立的超长指令字(Very Long Instruction Word,VLIW)体系结构,包括向量处理部件(Vector Processing Unit,VPU)和标量处理部件(Scalar Processing Unit,SPU),SPU负责标量计算和流控,VPU负责向量计算,包括16个向量处理单元(Vector Processing Element,VPE),每个VPE包含一个局部寄存器文件和3个浮点乘累加单元(Floating point Multiply Accumulator,FMAC)、2个Load/Store和1个BP共6个并行功能部件。所有VPE的同一编号的局部寄存器在逻辑上又组成一个1024位的向量寄存器。SPU和VPU之间通过共享寄存器交换数据,支持广播指令将标量寄存器数据广播到向量寄存器。向量处理器核支持11发射且长度可变的VLIW指令,包括5条标量指令和6条向量指令,指令派发单元对执行包进行识别并派发到相应的功能单元去执行。FT-matrix2000提供96KB的标量存储器(Scalar Memory,SM)和768KB的阵列存储器(Array Memory,AM)用于向量访问;多核采用共享DDR的存储结构,DDR与L1D间支持多核共享的全局缓存(Global Cache,GC),方便实现核间数据交换和共享。 2矩阵卷积算法介绍与分析 2.1卷积神经网络的基本结构 一个具有代表性的卷积神经网络结构如图2所示,该模型主要用于早期的手写数字的识别任务中,而当前的神经网络模型与该模型大同小异,主要包括卷积层、下采样层、全连接层以及相应的正则化层,只是在模型的深度和广度以及连接方式上进行了改动。由于卷积神经网络模型中的卷积层的计算时间约占整个模型计算量的85%以上,因此,本文主要研究加速卷积神经网络模型中卷积层的计算。 图2典型卷积神经网络结构 Fig.2 Typical structure of CNN 2.2二维矩阵卷积 二维矩阵卷积常用于图像处理中,卷积神经网络中的卷积操作可以抽象成一组卷积核与一个输入特征图的卷积运算,每一个尺寸为kx×ky的卷积核在一个输入特征图上与一个kx×ky的卷积窗口进行对应点积操作并累加求和后得出输出特征图中的一个元素,卷积核在输入特征图上从上到下、从左到右进行如上操作,最终会得出一个二维的输出特征图,设水平移动步长为Sx,垂直移动步长为Sy,那么输出特征图上位置为(a,b)元素的计算如式(1): (1) 其中 是输入特征图#mi和输出特征图#mo之间的卷积核, 是输入特征图与输出特征图之间对应的偏置值, 表示输入特征图与对应输出特征图连接的集合, 表示非线性激活函数,如tanh、sigmoid或ReLU等。 2.3二维矩阵卷积的常用计算方法 图3二维矩阵卷积计算的两种方式 Fig.3 Two methods of two-dimensional matrix convolution for calculating 图3(a)为传统的矩阵卷积计算方式,输入为3个3×3的输入特征图,输入卷积核为2个3通道的2×2卷积核,通过卷积计算可以得出2个2×2的输出特征图,我们可以发现如果采用传统矩阵卷积计算方式,由于都是二维的矩阵卷积计算,尤其是当卷积核规模较小的时候,算法的并行性难以得到保证。因此,北京邮电大学ZHANG Qiang-Qiang等人[22]使用了一种新的计算方法,即将卷积矩阵和卷积核矩阵展开成矩阵块的方式进而通过普通矩阵相乘的方式进行卷积计算,如图3(b)所示。其计算步骤如下: 根据卷积核规模和移动步长,将对应的卷积矩阵相应的卷积块展开成列向量的形式,所有展开的列向量组成一个新的矩阵;将单个卷积核矩阵按行展开成一个行向量,所有展开的卷积核组成一个新的卷积核矩阵;将新的卷积矩阵和新的卷积核矩阵做普通矩阵与矩阵乘法,进而可以通过调用普通的BLAS(Basic Linear Algebra Subprograms,BLAS)[23]函数库中的GEMM(General Matrix Multiplication,GEMM)完成二维矩阵卷积的计算。通过图3(b)所示的方法将小的难以并行的卷积计算模块组合成大规模矩阵的形式,进而利用矩阵乘法的高并行性来提高矩阵卷积的计算效率。 由于本文研究的矩阵卷积操作主要应用于卷积神经网络模型中,且卷积计算的结果通常要作为下一级运算的输入值,因此,神经网络模型中卷积层的计算结果有特定的二维结构,而图3(b)中采用的计算方式,虽然通过组合成大规模矩阵的形式增加了矩阵卷积计算的并行性,但是同时也破坏了卷积计算结果的二维结构,从而使得该计算结果不能直接作为下一级的输入值,可能需要对该卷积结果进行数据重排序才能作为下一级操作的输入值。同时,由于是对卷积矩阵进行了有重复展开,因此展开后的矩阵规模大大增加了,如3×3的卷积矩阵在2×2的卷积核规模下的展开为4×4,数据量增加了77.8%,而当卷积矩阵为5×5时,展开的卷积矩阵变成了16×5,数据量增加到了220%,而片上存储对计算来说尤为重要,因此该方法使得数据存储量的增加是该方法的一大缺陷。 3 二维矩阵卷积的向量化设计与实现 通过对第2节传统卷积计算方法的分析,我们提出一种新的二维矩阵卷积的向量化实现方法,该算法实现的如下: 1)根据多核向量处理器的核数m,输入特征图的数量n,尺寸为n1×n2,输入卷积核的数量k,尺寸为k1×k2,向量处理器单核向量存储体的容量v1和标量存储体的容量v2,合理划分多核处理器中每个核的计算负载; 2)将输入特征图元素按行连续存储于向量存储体AM中,卷积核矩阵按行连续存储于标量存储体SM中; 3)根据单核向量处理单元的个数加载p个输入特征图元素,标量加载卷积核第1个元素,并广播至向量寄存器中; 4)将步骤3)中通过广播得到的向量寄存器与向量加载的p的输入特征图元素进行乘加操作,并将计算结果累加至累加寄存器ACC中; 5)根据卷积核在输入特征图中的移动步长,配置相应的混洗模式,并将步骤3)中所加载的p个输入特征图元素使用该混洗模式进行移位操作,同时标量顺序加载第二个卷积核元素,并广播至向量寄存器中,将该寄存器与移位后的寄存器中的元素进行乘法操作,并将乘法结果累加至步骤4)中的累加寄存器ACC中; 6)根据卷积核的行数k1和列数k2重复上述过程,直到完成输出特征图第1行元素的计算; 7)根据输入特征图的行数n1和列数n2,向量加载输入特征图的下一行元素,重复上述步骤,进而完成整个卷积结果矩阵的计算。 卷积神经网络模型中的卷积核规模一般都比较小,通常为1×1、3×3、5×5、7×7、11×11等,根据我们的算法需要,卷积核数据需要标量取,因此将卷积核数据置于SM,输入特征图矩阵置于AM。其向量化实现过程如下: 3.1单核程序向量化方法 1)我们以双精度浮点为例,单个数据为8字节,为了叙述方面我们设输入特征图为N×N的方阵,则N×N×8=768×1024,所以向量存储体AM中单次可以存放的最大输入特征图尺寸为222×222,对于嵌入式处理器编程来说,当输入特征图的尺寸大于222×222时,我们就需要从外存DDR中通过DMA来加载数据。 图4 FT-matrix2000矩阵卷积的算法映射(B:6×6;步长:1×1;kernel:2×2) Fig.4 Algorithm mapping of FT-matrix2000 (B:6×6;stride:1×1;kernel:2×2) 我们以一个例子来说明在不展开卷积矩阵的情况下如何同时计算输出卷积矩阵多个元素的向量化实现方法,考虑一个1×6 的PEs(PE1,PE2,PE3,PE4,PE5,PE6),输入特征图矩阵I为6×6,卷积核矩阵为2×2,步长为1,为了叙述简洁,我们只描述输出结果矩阵第1行元素的计算(如图4所示,其他行计算过程类似)。 #1:6个PEs加载输入矩阵B的第1行元素(b1,1,b1,2,b1,3,b1,4,b1,5,b1,6),标量加载卷积核矩阵的第1行第1个元素(k1,1),将k1,1广播至向量寄存器中,即向量寄存器中的元素为k1,1,k1,1,k1,1,k1,1,k1,1,k1,1,通过向量处理器的乘加指令VFMULAD,每一个PE完成对应元素与k1,1的乘法,并将乘法结果累加至对应的累加寄存器ACC中; #2:根据卷积核的移动步长配置相应的混洗模式(如图5所示),本实例中由于移动步长为1,因此配置的混洗模式为对应的向量寄存器中的元素向左移动1位,最左边的元素移出寄存器,最右边的元素补0,移位后当前PEs所对应的元素为b1,2,b1,3,b1,4,b1,5,b1,6,0,同时加载卷积核的第1行第2个素k1,2并广播至向量寄存器中,即为k1,2,k1,2,k1,2,k1,2,k1,2,通过向量乘加指令,每一个PE完成对应元素与k1,2的乘法,并将乘法结果累加至#1中的累加寄存器ACC中; #3:6个PEs加载输入矩阵B的第2行元素(b2,1,b2,2,b2,3,b2,4,b2,5,b2,6),标量加载卷积核矩阵第2行第1个元素(k2,1)并广播至向量寄存器中,通过向量乘加指令,所有PE完成对应元素与卷积核元素k2,1的乘法操作,并将乘法结果累加至#2中的累加寄存器中; #4:同#2中的混洗模式,将#3中取到的元素进行移位,完成移位后当前PEs所对应的元素为b2,2,b2,3,b2,4,b2,5,b2,6,0,同时标量加载卷积核矩阵第2行第2个元素并广播至向量寄存器中,即为k2,2,k2,2,k2,2,k2,2,k2,2,k2,2,使用向量乘加指令,所有PE完成对应元素与k2,2的乘法操作,并将结果累加至#3中的累加寄存器中ACC。完成以上步骤,则#4中累加寄存器中的值即为卷积结果矩阵第1行元素。 图5步长为1的混洗操作 Fig.5 Shuffle mode of stride 1 通过对本文提出的矩阵卷积的向量化实现方法分析,可以看出本方法有以下优势,不需要通过将输入特征图和卷积核进行重组成大规模的矩阵来提高并行性,减轻了矩阵展开所带来了存储压力,提高了所取数据的利用率,在向量化代码的优化过程中,我们可以通过软件流水的方式提高算法的并行性,完全流水的情况下,每拍可以同时计算出输出特征图的一行元素,同时也避免了文献[15]中所采用的PEs阵列间数据的频繁移动操作。 图6双Buffer机制示意 Fig.6 Double buffer mechanism 2)当输入特征图尺寸超过向量存储体的容量时,此时,向量存储体不能一次加载整个输入特征图。由于在高性能计算中,需要平滑各级存储之间的数据搬移,保证内核计算所需要的数据供给,进而取得高效的处理器效率。由于FT-matrix2拥有多级存储结构,如寄存器文件、L1D、Array Memory、Global Cache和DDR,且L1D可以配置为全Cache和全SRAM两种模式,因此,当输入特征图数量超过向量存储体的容量时,我们采用SRAM的方式,将L1D配置为全SRAM的形式,采用双缓冲的乒乓方式平滑多级存储结构的数据传输,使得内核的计算与DMA数据搬移完全重叠,让内核始终处于峰值运行状态,进而取得最佳计算效率(双缓冲机制如图6所示)。 值得注意的是由于卷积计算有数据的重叠,因此在卷积矩阵分块传输时,根据卷积核的尺寸,第2次传输的卷积矩阵需要有部分数据与第一次传输的数据重叠,假设卷积核尺寸为m×m,若第1次传输1到n行,则第2次需重叠传输第1次传输的后m-1行元素,由于卷积核一般较小,因此重叠传输数据的比重并不大。 3.2矩阵卷积的多核程序设计分析 算法的并行不仅有单核内部的向量化实现,也包括多核的核间并行,由于FT-matrix2000是一款多核处理器,因此,研究矩阵卷积的多核并行也是一个重要内容,尤其是对于大规模的矩阵卷积来说。由于核间并行需要考虑计算负载的多核划分、算法的相关性、核间的通信开销等,因此多核程序的设计更加复杂。由于当前卷积神经网络模型中卷积层的计算规模从1×1到512×512都存在,且一般都是卷积核尺寸较小的矩阵卷积操作,因此,在矩阵卷积的多核实现中一般不会将单个输入特征图分配给多个核来计算,而是由每个核负责独立的卷积计算,即通过将输入特征图多核共享,卷积核矩阵多个核独有的方式来进行矩阵卷积的多核实现。 图7 FT-matrix2000矩阵卷积多核实现方案 Fig.7 Multicore implementation of matrix convolution on FT-matrix2000 此外,由于在矩阵卷积的计算过程中,因卷积核的尺寸以及卷积核在输入特征图上的滑动步长不同,单个卷积的计算过程存在一定的数据相关性,因此,考虑到多核同步的通信开销,单输入特征图的卷积计算不易进行多核并行。因此本文主要针对单核实现单个卷积矩阵的向量化设计,当有多个独立的卷积计算时再由多核来并行进行加速。 多输出矩阵卷积的多核实现如图7所示,将DDR中的输入特征图广播至n个计算核心,同时n个核加载不同的卷积核至n个核的标量存储体SM中,则多核程序实现中每个核的计算过程同单核程序一样。 4 性能测试与分析 本实验的对比平台有AMD A10-6700 APU,4核4线程,DDR3 16G内存,主频3.7GHz,GPU平台为NVIDIA GeForce GTX1080TI,11GB显存,核心频率1.5GHz,使用NVIDIA专门为卷积计算高度优化的cudnn[24]函数库,并基于Torch[25]神经网络编程框架进行矩阵卷积的性能统计和优化,FT-matrix2000平台单核核内向量存储空间768KB,标量存储空间96KB,核外DDR最大支持128GB,主频1GHz;使用TI的高性能多核数字信号处理器TMS320C6678,8核,1.25GHz主频,每个核拥有32KB的L1P和32KB的L1D,并基于CCS5.5软件编程平台完成所有程序代码的测试与性能统计,飞腾平台使用类CCS的FT-matrix2000软件编程平台并完成FT-matrix2000向量程序代码的编写与性能统计,核心代码程序采用基于手工汇编的方式进行软件流水和循环展开优化。 通过2.2节中的分析可知二维矩阵卷积是典型的计算密集型和访存密集型操作,而当前的卷积神经网络模型中矩阵卷积的计算又占据着整个模型计算量的85%以上,因此本实验选取两种计算模式进行分析。第1种,卷积矩阵不变,卷积核矩阵规模相应增加;第2种,卷积核矩阵不变,卷积矩阵规模相应增加。(图中所有类似16×5都表示16×16,5×5的方阵,且都为64位双精度浮点)。 图8基于卷积核规模变化的FT-matrix2000与CPU/6678的加速比 Fig.8 Speedup of FT-matrix2000 and CPU/6678 based on kernel scale change 图8统计了随着卷积核尺寸变化,FT-matrix2000对于CPU和TI6678的加速比,可以看出FT-matrix2000向量处理器相对于主流多核CPU取得了24~44倍不等的加速比,相对于TI6678取得了14~17倍不等的加速比。图9为卷积核规模不变,随着输入矩阵规模变化的FT-matrix2000基于CPU和TI6678的加速比,在此计算模式下相对主流CPU取得了14~238倍不等的加速比,相对TI6678取得了13~21倍不等的加速比。 图9基于卷积矩阵变化的FT-matrix2000与CPU/6678的加速比 Fig.9 Speedup of FT-matrix2000 and CPU/6678 based on matrix scale change 图8和图9分别为两种卷积计算模式下,FT-matrix2000向量处理器相对于主流CPU和TI6678取得的性能优势,由于我们的算法主要是用于卷积神经网中卷积层的计算,因此,采取的数据计算规模不大,从图中可以看出当矩阵卷积计算的规模较小时可以取得较大的加速比,而当矩阵规模增加时加速比有所下降,并基本保持稳定。可见,此两种计算模式,对程序的实现性能有一定的影响。 图10基于卷积核规模变化的FT-matrix2000相对GPU的加速比 Fig.10 Speedup of FT-matrix2000 and GPU based on kernel scale change 图11基于输入特征图规模变化的FT-matrix2000相对GPU的加速比 Fig.11 Speedup of FT-matrix2000 and GPU based on matrix scale change
/
本文档为【面向向量处理器的二维矩阵卷积的设计与实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索