多核数字信号处理卷积算法并行优化
2024-04-08许金伟王庆林李娅琳姜晶菲李荣春李东升
许金伟,王庆林,李娅琳,姜晶菲,高 蕾,李荣春*,李东升
(1. 国防科技大学 计算机学院, 湖南 长沙 410073; 2. 国防科技大学 并行与分布计算全国重点实验室, 湖南 长沙 410073)
卷积神经网络已经成为人工智能领域应用最广泛的模型之一,不仅在图像分类[1]、目标识别[2]、视频分析[3]等计算机视觉领域的应用中取得了显著效果,还在自然语言处理[4]、语音识别[5]等其他领域同样取得了突破性进展。随着精确感知和高精度识别任务需求的不断增长,大量智能应用在深度学习算法中均使用层数更深的结构,这需要高算力专用硬件的支持,因此卷积神经网络的加速技术一直是研究的热点[6-7]。典型的卷积神经网络主要由卷积层、全连接层、非线性激活函数层、池化层等构成,其中卷积层和全连接层集中了卷积神经网络的主要计算负载。因此研究卷积神经网络的加速技术变成了卷积层加速优化的难点和关键点。
目前常用的卷积优化方法主要有直接卷积[8]、通用矩阵乘法(general matrix multiplication, GEMM)[9-10]和快速算法[11-12]三种实现方式。通用矩阵乘法实现卷积是将卷积操作转换成矩阵操作,再优化矩阵乘法,从而达到优化卷积计算的目的。整个过程中需要增加img2col[10]操作,同时由于输入数据转换成矩阵时会膨胀,从而存储压力也会增加。快速算法是将卷积操作通过winograd[11]和快速傅里叶变换(fast Fourier transform, FFT)[12]等变换方式转换成其他快速实现方法的操作,其降低了计算复杂度,并在此基础上开发了并行性以加速卷积的计算。但快速算法也存在计算精度损失和卷积核规模限制等问题。
直接卷积是通过循环展开的方式开发卷积计算的并行性,优化过程中不会增加存储压力,也不会降低计算精度。最近,已经提出了一些直接卷积方法[13-15]来直接实现卷积层。Georganas等[14]通过动态编译方法在x86架构上引入了直接卷积实现,并达到了接近理论极限的性能。Zhang等[13]提出了一种直接卷积实现,在各种CPU架构上显示出比基于GEMM的卷积算法更好的性能。Wang等[15]在ARMv8多核CPU上提出了一种新的并行逐层直接卷积实现,该实现针对具有批次、通道、高度、宽度(batch, channel, height, width, BCHW)数据布局的逐层卷积。与基于GEMM的卷积相比,直接卷积不会产生额外的内存空间开销,在实现中,矢量化和线程级并行化分别用于矢量单元和多核并行性能的有效地利用,寄存器和缓存块用于提高片上多级存储器中的数据重用。这些实现在Phytium FT-1500A和FT-2000处理器上进行了测试,在性能和可扩展性方面,优于Caffe conv和Mxnet conv实现。
FT-M7032是国防科技大学面向E级计算自主研发的一款通用多核数字信号处理(digital signal processing, DSP)芯片[16],由32个DSP核和16个ARMv8 CPU核构成。该芯片的DSP核支持FP32和FP16操作,工作主频为1.6 GHz时,FP16峰值浮点性能可达19.7 TFLOPS,而半精度浮点足以支持人工智能领域中大多数应用的推理计算精度,由此可见,FT-M7032芯片在人工智能领域存在着巨大的应用潜力。在FT-M7032中,采用基于超长指令字的顺序执行架构,并采用软件控制的存储作为片上缓存,提供丰富的直接存储访问(direct memory access, DMA)模式,DMA模式实现各级存储空间的快速访问。现有的面向GPU、CPU等通用处理平台和张量处理单元(tensor processing unit, TPU)等专用处理平台的卷积优化算法在FT-M7032上无法直接运行或者执行效率很低。因此,面向多核向量处理器体系结构进行针对性算法优化有助于发挥FT-M7032芯片的计算性能。因此,本文基于FT-M7032芯片,聚焦直接卷积实现方式,通过不同维度的并行度开发,实现卷积计算在向量处理器上的高效执行。
面向FT-M7032芯片处理卷积神经网络的应用需求,本文结合FT-M7032芯片的体系结构设计,针对目前卷积神经网络中的卷积计算,仔细分析了不同卷积核大小的卷积计算的执行特点和并行粒度,从而针对1×1卷积提出了按行计算的优化方法,针对卷积核大于1的卷积提出了逐元素计算的向量化优化方法,同时针对深层卷积神经网络中,不同层输入数据和权值矩阵规模的变化,提出了不同的多核并行处理方案,从而提升输入数据和权值矩阵的复用度,降低带宽压力。之后,又采用DMA 乒乓缓冲机制,实现数据搬移和计算的遮掩。为了验证本文所提方案的有效性,将所提方法在ResNet50卷积神经网络[17]上进行验证。
1 背景知识
1.1 卷积定义
卷积涉及3个张量:输入特征图(I)、滤波器(F)和输出特征图(O)。在C代码样式中,这些具有BCHW布局的张量可以表示为I[B][Ci][Hi][Wi],F[Co][Ci][Hf][Wf]和O[B][Co][Ho][Wo]。卷积的定义如下:
(1)
式中,0≤b1.2 FT-M7032异构处理器
FT-M7032异构处理器由1个16核ARMv8 CPU和4个通用数字信号处理器(general purpose digital signal processor, GPDSP)集群组成,如图1所示。多核CPU是Phytium FT-2000plus处理器的简化版本,主要负责线程管理和通信。多核CPU的单精度浮点峰值性能为281.6 GFLOPS。每个GPDSP集群包括8个DSP核,它们共享6 MB片上全局共享内存(global shared memory, GSM)。每个集群中的所有8个DSP核和GSM都可以通过片上纵横网络进行通信,通信带宽达到了300 Gbit/s。软件开发人员需要维护它们之间的数据一致性。多核CPU和4个GPDSP集群共享相同的主内存空间,多核CPU可以访问整个主空间,但每个GPDSP集群只能使用42.6 Gbit/s的硬件带宽访问自己的相应部分。由于CPU内核之间的缓存一致性如FT-2000plus所提供的那样,CPU的缓存数据必须在每个GPDSP集群上运行的函数启动之前写入主内存,并在其完成后退出。
图1 FT-M7032的整体架构Fig.1 Architecture of FT-M7032
每个GPDSP簇中的每个DSP核基于超长指令字架构(very long instruction word, VLIW),包括指令调度单元(instruction fetch unit, IFU)、标量处理单元(scalar processing units, SPU)、向量处理单元(vector processing units, VPU)和DMA引擎,如图2所示。IFU被设计为每个周期最多启动11条指令,其中包含5条标量指令和6条矢量指令。SPU用于指令流控制和标量计算,主要由标量处理元件(scalar processing element, SPE)和64 KB标量内存(scalar memory, SM)组成,它们匹配5条标量指令。VPU为每个DSP核提供主要计算性能,包括768 KB阵列存储器(array memory, AM)和以单指令多数据流(single instruction multiple data,SIMD)方式工作的16个矢量处理元件(vector processing element, VPE)。每个VPE有64个64位寄存器和3个浮点乘累加(float multiply accumulate, FMAC)单元,1个FMAC单元每周期可以处理2个FP32或者4个FP16的乘加计算。其中,FP32数据类型的SIMD宽度为32,FP16数据类型的SIMD宽度为16,当工作在1.8 GHz时,每个DSP核可以提供的单精度浮点峰值性能为345.6 GFLOPS,半精度浮点峰值性能为691.2 GFLOPS。AM可以通过两个加载存储向量单元,在每个周期向寄存器传送多达512 B数据。在SPU和VPU之间,可以通过广播指令和共享寄存器传输数据。DMA引擎用于在不同级别的存储器(即主存储器、GSM和SM/AM)间传输数据。AM 每个周期可以向向量寄存器提供 512 B数据,即 AM与向量寄存器之间的带宽为921.6 GB/s。
图2 FT-M7032中的DSP单核微架构Fig.2 Macro-architecture of each DSP core in FT-M7032
2 面向FT-M7032的卷积计算多核并行优化
在进行卷积计算时,为了降低带宽压力,提升计算效率,需要尽可能地将可复用的权值或者特征图放置在GSM或者AM中。为此,将根据深度卷积神经网络中特征图和权值矩阵数据规模随着层数而产生的变化,来规划多核间的并行方式。一般深度卷积神经网络中,在模型的前层,特征图规模大、通道数小,因而输入输出特征图所占用的存储空间大,权值占用的空间相应较少;后层则是特征图规模小、通道数多,因而输入输出特征图所占存储空间的比例会减少,权值矩阵随着通道数的增加而急剧变大,所占存储空间的比例会相应增加。因此,本文根据卷积层的存储分布特点在多核间分别采用层内多核并行和任务多核并行两种不同的优化方法。另外,由于FT-M7032芯片中不同簇之间并不共享GSM,本文所提的多核并行方案仅是在单簇内部,不同簇之间均采用任务级并行方案。
2.1 特征图数据布局
为了后续行文方便,先介绍在面向FT-M7032芯片时所采用的数据布局。卷积的输入特征图的数据布局格式为NCHW,其中N为batchsize,C为输入通道数,H和W为特征图的高和宽,由于在FT-M7032的向量处理器中,单FMAC一次处理的位宽是64位,所以向量寄存器中单个寄存器的位宽也是64位,本文在数据布局时同时处理来自4幅图的数据,将4幅图对应的每个元素拼接成一个64位数据。所以输入特征图的数据布局方式为N4CHW4,其中4(非下标)表示最内部是来自4幅图的4个元素,N4表示N除以4。
2.2 卷积层内多核并行优化
卷积层内多核并行开发的难点在于如何将任务有效地分配到不同的处理核上,且在并行开发过程中,降低对带宽的需求,增加多核之间对于输入数据和权值的复用度。考虑到这一点,在设计时提出了特征图级并行和窗口级并行两种不同的实现方案。
卷积层内多核并行优化是指将卷积按照特征图区域或者输出通道进行划分,其中按照特征图区域划分是针对卷积核大于1的卷积层,将输入特征图划分成M等份,分给M个核同时处理,即多核间采用窗口级并行;输出通道划分是针对卷积核为1的卷积层,按照输出通道划分成M等份,分给不同核处理,即多核间采用特征图级并行。其中,M是单簇中DSP的核数,在FT-M7032中M最大为8。
2.2.1 特征图级多核并行
在卷积核为1×1(Conv1×1)时,输入特征图可以看作列为Hi×Wi×4、行为Ci的矩阵,记作输入数据:[Ci][Hi×Wi×4],其中Ci表示输入通道,Hi和Wi表示输入特征图的高和宽。权值数据可看作列为Ci、行为Co的矩阵,记作权值数据:[Co][Ci],其中Co表示输出通道。输出特征图可看作列为Ho×Wo×4、行为Co的矩阵,记作输出数据:[Co][Ho×Wo×4],其中Ho和Wo表示输出特征图的高和宽。因此可以将1×1的卷积操作看成一个矩阵乘操作。
Conv1×1多核并行优化方案是在权值数据的输出通道Co上作切分,本文将Co切分为M等份,令m=「Co/M⎤,将数据依次按核分配后传输到对应核的SM上,而各核中所有输入数据都需要参与计算,故本文将通过DMA通道传输完整的输入数据到每个核的AM上,各核计算后将得到m个对应输出通道的输出结果,图3为Core0的具体实现,实际运行中各核是同步进行的。
图3 特征图级多核并行优化Fig.3 Feature map level multi-core parallel optimization
核内外的数据传输均需通过DMA通道,因为GSM到核内的带宽要远高于双倍数据速率(double data rate, DDR)同步动态随机存储器到核内的带宽,因此,可以将大部分输入输出数据暂存在GSM空间中,GSM空间不足时,再存入DDR中,此举能最大限度减少输入输出的带宽压力。计算中,各核所需要的权值数据将以点对点的方式传输到对应的SM中;输入数据在GSM/DDR中连续存储,每次将其中的一个计算分块从GSM/DDR中以广播的方式传输到核内的AM上,各核用标量加载指令读取SM上的权值数据分块,再通过标量的广播指令传输到向量存储器中(这种方法能够显著降低对DDR的数据带宽需求),同时用向量加载指令读取AM上的输入数据分块,再对两者进行计算,所有核都计算结束后,将输出数据用向量存储指令存回AM,再按分块逻辑存储至GSM/DDR中。依次加载并计算下一个分块,直到完成所有计算和数据存储。
2.2.2 窗口级多核并行
在卷积核大于1×1时,采用窗口级多核并行优化设计,将输入特征图按区域划分为M份,分配到各个核上,每个核上都需要访问完整的权值数据,所以需要将权值数据存放在AM中实现向量化,将各个核分配好的输入数据存放在SM中,按照元素计算的方式进行向量化卷积。
同样地,核内外的数据传输需要通过DMA通道。首先将输入数据按多核机制分配,将其按基础分块大小从GSM/DDR中以点对点的方式传输到对应核的SM上,然后从DDR中将权值数据按分块大小广播到各核的AM中,分别用标量指令和向量指令将数据加载到标量和向量寄存器中,按逐元素计算的方法完成卷积,等到所有核的卷积计算完成,再将数据依次存储到AM中和DDR/GSM中,再依次加载并计算下一个分块,直到结束。
2.3 任务级多核并行方案
任务级多核并行优化设计中,核与核之间是独立运行的,每个核将独立处理4幅图,因此该方案下,单簇能同时处理4×M幅图的计算,因此需要等待前面的卷积层处理4×M幅图后才会启动该层的处理。
任务级多核并行优化设计中,因为单次处理的数据量过大,无法暂存在GSM中,所有的输入输出均需要传输回DDR存储。同样地,本文将不同的图片数据从DDR以点对点的方式搬移至多核,而各核之间的权值数据是共享的,所以将权值数据从DDR以广播的方式传输至各核,同样是按照分块大小依次传输与计算。
2.4 两级DMA双缓冲机制
为减少数据搬移开销提高卷积计算效率,本文提出基于两级DMA双缓冲的数据搬移优化策略,分别在SM和AM中为输入数据或权值数据设计两个缓冲区,Conv1×1计算中,在SM中为权值数据建立两个缓冲区,在AM中为输入数据建立两个缓冲区;卷积核大于1×1的卷积计算中,在SM中为输入数据建立两个缓冲区,在AM中为权值数据建立两个缓冲区。该机制将核心计算和数据搬移同步进行,两者的执行时间重叠,能覆盖耗时较短的那部分操作时长,提高计算性能,具体两级DMA双缓冲机制如图4所示。
图4 两级DMA双缓冲机制Fig.4 Two level DMA double buffer mechanism
将核心计算需要的第一组数据A1先搬移至SM/AM的缓冲区buffer1中,同时开启A1核心计算与下一组数据块A2到buffer2的搬移,等到A1的核心计算和A2的数据搬移都结束后,再开始进入下一轮A2的核心计算和A3的数据搬移,如此计算和数据通信同时进行,直至DDR/GSM的数据遍历结束。
3 面向单核DSP元素级并行优化
FT-M7032芯片中DSP核上的存储空间是有限的,SM的存储空间是64 KB,AM的存储空间是768 KB。面对不同规格的卷积,需要对输入数据和权值数据进行分块处理。
由于DSP内部的VPU包含16个VPE,每个VPE包含3个FMAC,本文开发元素级并行就是将卷积计算中每个特征图元素的48个输出通道放到48个FMAC上并行执行,从而有效利用DSP内部的计算资源,提升卷积计算在每个DSP的执行性能。
令输入数据的子块为Ib,权值数据子块为Wb,输出数据的子块为Ob。
3.1 Conv1×1分块设计与核内计算
3.1.1 Conv1×1分块设计
Conv1×1计算中,权值将存放在SM中,输入和输出存放在AM中,由于程序设计了DMA和计算的乒乓缓冲机制,故SM和AM空间将划两个缓冲区分别存储子块。令输入的Hi×Wi×4维度的分块大小为Nb,结合处理器结构特点,分块遵循以下原则:分块大小不得超出片上存储空间,Nb为192的倍数,尽可能在单维度切分且尽可能减少数据的切割次数。
令子块Wb为m×K,Ib为K×Nb,分块思路如下:①结合处理器结构特点,考虑到处理器指令的延迟槽循环和流水线排布,Wb的m取6~12较为合适;②确立好m,判断当K=Ci时权值的子块是否满足SM的存储空间要求,若否,则将Ci按二分法继续切分直至满足SM存储空间要求;③输入数据分块中首先将Nb设为192,结合Wb的取值K判断K×192是否符合AM存储空间要求,若是,则继续以192为倍数扩大Nb,直到取到范围内的最大值,若否,则在K上按二分法继续切割,直到满足存储要求为止。
3.1.2 Conv1×1核内计算
结合上述分块设计可以得到子块Ib和Wb,按行实现的Conv1×1如图5所示,具体算法见算法1。
图5 按行实现的Conv1×1示意Fig.5 Schematic diagram of row-wise Conv1×1
算法1 按行实现的Conv1×1算法
3.2 Conv3×3分块设计与核内计算
3.2.1 Conv3×3分块设计
Conv3×3计算中,输入数据将存放在SM中,权值和输出数据存放在AM中,由于输入和权值的数据量较大,无法全部存入核内,也需对各数据进行分块。
Wb分块设计:考虑到处理器核内有16个VPE,每个VPE有3个FMAC,则处理器单周期可处理48个64位数据。Conv3×3的分块设计思路如下:①向量化并行设计需要数据间具备计算的非相关性,Ci通道需要做循环累加,不具备该条件,而特征图尺寸变化跨度大也不适合向量化,故只能在Co维做向量化设计;②向量的数据加载是连续的,故应将Co维的数据在格式上连续存储,按大小48划分,并将其提取到格式里面;③结合ResNet50网络结构特征和AM存储空间的大小,将Ci维按大小64划分。故权值子块为Wb:[3][3][64][48][4](舍入部分用零填充)。
Ib分块设计:面对不同规格的输入数据,需要结合SM空间大小、DMA双缓冲机制和Conv3×3卷积的计算原理综合考虑。已知Ib的Ci维分块为64,而逐元素Conv3×3计算每次需要加载3行输入数据,则padding=1的情况下,可计算出特征图Wi维度分块的最大值Wib,即输入数据子块为Ib:[64][3][Wib][4] 。
3.2.2 Conv3×3核内计算
逐元素Conv3×3计算中,将Ib和Wb加载到核内空间后,读取同一Ci通道的Ib和Wb数据,将Ib感受野区域的3×3数据与Wb的卷积核数据对应相乘,遍历Ci维将累加计算结果,再将3×3的9个像素点数据相加,即得到单元素卷积结果,如图6所示,具体步骤见算法2。
图6 逐元素Conv3×3示意Fig.6 Schematic diagram of element-wise Conv3×3
算法2 逐元素Conv3×3算法
单元素计算完成后,需要按序依次对输入子块Ib中的其他元素做卷积,根据上述设计已知子块为Wb3×3×64×48×4和Ib64×3×Wib×4,得到的输出子块为Ob48×Wib×4,算法实现见算法3。
算法3 Conv3×3子块卷积算法
4 性能评估
本节将全面评估与分析本文所提出的面向FT-M7032异构处理器的卷积并行优化方法的性能。
4.1 实验设置
本节主要涉及所提卷积并行优化方案与CPU上卷积实现之间的性能对比,CPU卷积实现是指基于PyTorch[18]框架实现的在Intel(R) Xeon(R) CPU E5-2640 v3上的卷积计算。
在本节中涉及四个指标来评判卷积的性能,第一个是完成卷积计算的时间T,第二个是卷积计算所达到的计算性能Pconv,第三个是卷积计算在单个GPDSP簇上的计算效率Econv(计算效率是指实际执行时所达到的计算性能与峰值计算性能之间的比率),第四个是卷积计算的扩展效率Sconv(扩展效率是指n核并行时所达到的计算性能与单核计算性能的n倍之间的比率)。四个指标之间的相互关系可表示为:
(2)
(3)
(4)
其中,Peakgpdsp表示单个GPDSP簇的FP16峰值计算性能,Pn表示n个DSP核时所能达到的计算性能。
4.2 在不同数据规模下单核性能及计算效率评 估分析
为了评估本文所提出的核内计算和分块设计的有效性,本节选取典型的卷积层来评估其在单核上的计算性能和计算效率。
在实验时,首先评估了Conv1×1的单核性能,从ResNet50的stage2、stage3、stage4和stage5中分别选取了其第二个block的第一层卷积,其特征图大小分别为56、28、14、7,输入通道分别为256、512、1 024、2 048,输出通道分别为64、128、256、512。图7展示了其各层的执行时间和计算效率。其中Tconv1和Econv1分别代表Conv1×1的执行时间和计算效率,Tconv3和Econv3分别代表Conv3×3的执行时间和计算效率,后续图表中的Sconv1和Sconv3分别表示Conv1×1和Conv3×3的扩展效率。由图7可以看出,由于这四层的总计算量是一样的,在本文提出的分块设计和核内计算优化的情况下,前三层的执行时间基本一致,计算效率也保持在60%以上,可见本文所提的方法是有效的。而第四层的计算效率之所以偏低,是因为其特征图规模变得过小,在进行分块时需要添加冗余以保证程序的正确性。
图7 不同规模卷积时DSP单核性能和计算效率Fig.7 Performance and calculation efficiency of DSP single core for different scale convolution
其次评估了Conv3×3的单核性能和执行效率,从ResNet50的stage2、stage3、stage4和stage5中分别选取了其第二个block的第二层卷积,其特征图大小分别是56、28、14、7,输入通道为64、128、256、512。图7展示了其各层的执行时间和计算效率,可以看出,后三层的执行时间相当,计算效率分别为50.01%、51.37%和45.07%,这是因为这四层的计算量是相同的,同时也说明本文的方法对于不同规模的卷积都是适应的。第一层的计算效率之所以会略微偏低,是因为输出通道相比于分块方法中所提出的基本块输出通道分割基数48偏小,需要填充较多冗余。
4.3 在不同核数时计算效率及扩展效率评估分析
在深度学习应用中,由于特征图像和权值数据过大,无法在片上进行存储,当计算峰值和带宽不匹配时,即当带宽不足时,会影响其计算性能和计算效率。为此,特别设计不同的数据访存方式和多核方案,为了验证带宽受限情况下本文方法的有效性,本节选取了不同核数进行了计算效率评估和扩展效率评估,结果如图8所示。
图8 不同核数时卷积计算效率和扩展效率Fig.8 Convolution calculation efficiency and scalability efficiency with different cores
首先,选取和上节相同的典型卷积层进行Conv1×1的多核测试,分别测试1、2、4、8核的计算效率以及扩展效率。实验结果表明: 随着核数的增加,本文的计算效率在降低,以第一个卷积为例,其1核、2核、4核和8核的计算效率分别为64.95%、57.18%、46.78%和31.41%,其2核、4核和8核的扩展效率为88.04%、72.02%和48.36%。可见,2核时带宽影响较小,其扩展效率较高,随着核数变多,计算峰值提升,而带宽压力变大,其扩展效率就逐步降低,但8核时仍能保持31.41%的计算效率。
其次,采用同样的实验方法对Conv3×3进行了测评。实验结果表明: 随着核数的增加,本文的计算效率逐步降低,以第二个卷积为例,其1核、2核、4核和8核的计算效率分别为50.01%、44.27%、38.21%和26.93%,扩展效率分别为100%、88.52%、76.42%和53.86%。Conv3×3的评估结果同样表明: 随着核数提升,由于带宽的影响,计算效率会降低,但8核的计算峰值仍能保持26.93%的计算效率。
4.4 在不同卷积规模下不同平台性能对比分析
为了对比不同平台上的性能,选择E5-2640 CPU作为对比平台。在实验时,为了保持结果的可靠性,本文设置batchsize为32,在FT-M7032上,N4则为8,即单簇执行32幅图的性能。图9展示了在不同卷积规模下E5-2640 CPU和FT-M7032平台上的执行时间,其中执行时间是指32幅的总计执行时间。从图中可以看出,在FT-M7032上的卷积实现时间能够达到E5-2640的1.52~8.22倍,这个结果验证了本文方法的有效性。
图9 不同平台上不同卷积规模性能对比Fig.9 Performance comparison of different convolution scales on different platforms
4.5 在典型网络上的相关工作对比
4.5.1 典型网络在不同平台上的性能对比
在本小节,将采用典型网络ResNet50模型进行测评。在ResNet50中,核为7×7的卷积(Conv7×7)采用与Conv3×3相类似的方式实现,全连接层采用与Conv1×1相类似的方式实现,池化层同样根据类似的设计理念进行了优化实现,卷积计算后紧跟批量归一化(batch normalization, BN)和ReLu操作,包括Conv1×1、Conv3×3和Conv7×7。为了提高网络的效率,将BN、ReLu和卷积计算融合在一起,卷积计算之后的输出数据不立即存回AM空间,在寄存器中继续做BN和ReLu计算,ReLu计算之后将数据传输到AM和核外。该处理能减少输入输出数据的通信次数和时间,提高计算性能。面向典型卷积神经网络与通用平台性能对比结果见表1,基于FT-M7032所实现的ResNet50模型在batchsize为32的情况下,相比于E5-2640 CPU有5.39倍的加速比,其中E5-2640 CPU上的执行时间是基于PyTorch架构测试获得的。
表1 面向典型卷积神经网络与通用平台性能对比
4.5.2 扩展效率对比
为了进一步展现本文工作的有效性,本文方法与文献[15]的方法进行了扩展效率的比较,见表2,文献[15]仅选用ResNet50中的Conv1×1作为测试对象,因此比较时本文同样选取Conv1×1作为对比对象。从表2数据可知,本文方法的扩展效率略有优势。关于计算性能,文献[15]中,面向Conv1×1,其性能相比于同平台的Caffe架构获得1.16~3.79倍的性能加速,其文中无绝对时间。而本文所测完整ResNet50相比于E5-2650有5.39倍的加速比。因此,由于平台的差异性,无法进行绝对的对比。
表2 面向典型卷积神经网络与相关工作扩展效率对比Tab.2 Scalability efficiency comparison with related work for typical convolutional neural network
5 结论
本文针对FT-M7032异构多核DSP体系结构和卷积计算的特点,分析并行机理,针对不同的卷积规模设置了不同的多核并行优化方案和核内优化方法,针对Conv1×1提出了特征图级多核并行方案,针对核大于1×1的卷积提出了窗口级多核并行优化设计,同时提出了逐元素向量化计算的核内并行优化实现。实验结果表明: 并行优化方法单核计算效率最高能达到64.95%,在带宽受限的情况下,多核并行扩展效率可达到48.36%~88.52%,在典型网络ResNet50上的执行性能与E5-2640 CPU相比,获得了5.39倍加速。该项研究工作对于推动国产自主DSP芯片在智能领域的应用具有重要意义。
致谢
感谢FT-M7032设计团队对于本文工作的大力支持。