一种基于SIMD的卷积运算的并行优化方法技术

技术编号:31724375 阅读:17 留言:0更新日期:2022-01-05 15:48
本发明专利技术针对SIMD单指令多数据特性,提出提供一种基于SIMD的卷积运算的并行优化方法。在减少运算指令和内存读取的基础上,对feature从宽度方向进行分块,分块的宽度BN由可用的SIMD寄存器数决定,这是为了保证一次内层卷积运算数据都在寄存中,通过feature的合理分块,能够在每个块计算中复用kernel和feature,内存访问次数为原来访问次数的1/BN。具体地,本发明专利技术所述方法按块计算输出,对特征向量从宽度方向进行分块,每块的宽度由并行运算所使用的寄存器数决定,根据SIMD指令通过循环优化,在每个块中复用卷积核和部分特征向量,以保证一次内层卷积运算时所有共享数据均在寄存器中,不产生额外访存操作。不产生额外访存操作。不产生额外访存操作。

【技术实现步骤摘要】
一种基于SIMD的卷积运算的并行优化方法


[0001]本专利技术涉及卷积运算优化领域,特别涉及一种基于SIMD的卷积运算的并行优化方法。

技术介绍

[0002]近年来人工智能快速发展,卷积神经网络(CNN)作为计算机视觉方面的核心网络之一,在图像相关网络模型中广泛应用。目前的CNN模型中,全连接层往往在最后一层才会使用,也就是说,CNN的主体是卷积层,而卷积的计算复杂,在网络运行时大部分时间都耗费在计算卷积,随着网络模型的发展在不断增加网络的深度,优化卷积计算就显得尤为重要。而在端级设备上高效执行卷积运算,更是非常的迫切需求,关系到神经网络在端级设备的可用性。
[0003]卷积运算计算量大,为了提高运算效率,目前有很多卷积运算的优化方式。包括:
[0004]1.im2col+GEMM:caffe等很多框架中都使用了这种计算方式,将问题转化为矩阵乘法后可以方便的使用很多矩阵运算库。由于其使用im2col会造成额外的临时内存消耗。尤其在终端设备内存资源较小的情况下,这种优化效率得不偿失。
[0005]2.FFT变换:时域卷积等于频域相乘,将问题转化为简单的乘法问题,但其实现只针对stride=1(步长)的情况,不能通用而且需要大量的额外内存。
[0006]3.其次,随着CPU发展,越来越多的芯片支持SIMD指令。也有一些基于SIMD指令的卷积并行优化。但是大多数优化都只对特征数据channel方向进行并行化处理,这样每个卷积运算,都会有重复的卷积核访存操作,并且当stride小于kernel尺寸时,每次卷积运算都有重复的特征数据存取操作。众所周知,访存操作较于CPU指令是非常慢的,过多不必要的访存操作将大大拉低卷积运算的执行效率。
[0007]此外,本领域常见的技术术语包括:
[0008]feature:特征向量,输入数据。
[0009]kernel:卷积核。
[0010]SIMD:单指令多数据指令,用于并行化处理数据。

技术实现思路

[0011]为了解决上述现有技术中存在的问题,本专利技术的目的在于:本专利技术针对SIMD单指令多数据特性,提出一种卷积的并行运算优化方法。在减少运算指令和内存读取的基础上,对feature从宽度方向进行分块,分块的宽度BN由可用的SIMD寄存器数决定,这是为了保证一次内层卷积运算数据都在寄存中,通过feature的合理分块,能够在每个块计算中复用kernel和feature,内存访问次数为原来访问次数的1/BN。
[0012]具体地,本专利技术提供一种基于SIMD的卷积运算的并行优化方法,所述方法按块计算输出,对特征向量从宽度方向进行分块,每块的宽度由并行运算所使用的寄存器数决定,根据SIMD指令通过循环优化,在每个块中复用卷积核和部分特征向量,以保证一次内层卷
积运算时所有共享数据均在寄存器中,不产生额外访存操作。
[0013]所述方法进一步包括以下步骤:
[0014]S1,初始化oh=0,ow=0,oc=0;
[0015]S2,判断是否输出高度oh<output_height,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行oh+=1再重新判断oh<output_height直至不满足条件结束循环;
[0016]S3,判断是否输出宽度ow<output_width/BN*BN,其中BN为分块的宽度,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行ow+=BN再重新判断ow<output_width/BN*BN直至不满足条件结束循环;
[0017]S4,判断是否输出通道数oc<output_depth,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行oc+=1再重新判断oc<output_depth直至不满足条件结束循环;
[0018]S5,初始化Sumi=0,其中i=0
……
N,kh=0,kw=0,ic=0;
[0019]S6,判断是否卷积核高度kh<kernel_height,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行kh+=1再重新判断kh<kernel_height直至不满足条件结束循环;
[0020]S7,判断是否卷积核宽度kw<kernel_width,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行kw+=1再重新判断kw<kernel_width直至不满足条件结束循环;
[0021]S8,判断是否输入通道数ic<input_channel,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行ic+=1再重新判断ic<input_channel直至不满足条件结束循环;
[0022]S9,执行以下运算
[0023]K=kernel[oc][kh][kw][ic];
[0024]Sum0+=feature[oh+kh][ow+kw+0][ic]×
K
[0025]Sum1+=feature[oh+kh][ow+kw+1][ic]×
K
[0026]……
[0027]SumN+=feature[oh+kh][ow+kw+BN][ic]×
K
[0028]S10,对应步骤S9中的循环依次执行以下运算
[0029]Output[oh][ow][oc]=sum0
[0030]……
[0031]Output[oh][ow+BN][oc]=sumN。
[0032]综上,应用本申请的优势在于:本专利技术是在普通的卷积SIMD并行优化的方法上,提出一种通过横向分块数据,以达到在块内卷积运算中kernel和feature数据的复用,去除重复数据访存的一种并行优化方法。性能提升率根据每个分块的宽度BN决定,而BN的确定需要考虑并行运算可用的寄存器数,以保证并行卷积运算时所有固定数据均在寄存器中,而不会产生多余的内存交换。本专利技术基于SIMD并行指令,提出一种卷积运算的并行优化方法,充分复用可复用数据和可用的SIMD寄存器,有效减少访存次数,从而大幅度提升卷积执行效率。
附图说明
[0033]此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,并不构成对本专利技术的限定。
[0034]图1是本专利技术的方法的流程示意框图。
[0035]图2是现有技术中的卷积计算的伪代码化的示意图。
[0036]图3是本专利技术方法的伪代码化的示意图。
具体实施方式
[0037]本专利技术涉及的一种基于SIMD的卷积运算的并行优化方法,按块计算输出,对特征向量从宽度方向进行分块,每块的宽度由并行运算所使用的寄存器数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于SIMD的卷积运算的并行优化方法,其特征在于,所述方法按块计算输出,对特征向量从宽度方向进行分块,每块的宽度BN由并行运算所使用的寄存器数决定,根据SIMD指令通过循环优化,在每个块中复用卷积核和部分特征向量,以保证一次内层卷积运算时所有共享数据均在寄存器中,不产生额外访存操作。2.根据权利要求1所述的一种基于SIMD的卷积运算的并行优化方法,其特征在于,所述方法进一步包括以下步骤:S1,初始化oh=0,ow=0,oc=0;S2,判断是否输出高度oh<output_height,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行oh+=1再重新判断oh<output_height直至不满足条件结束循环;S3,判断是否输出宽度ow<output_width/BN*BN,其中BN为分块的宽度,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行ow+=BN再重新判断ow<output_width/BN*BN直至不满足条件结束循环;S4,判断是否输出通道数oc<output_depth,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行oc+=1再重新判断oc<output_depth直至不满足条件结束循环;S5,初始化Sumi=0,其中i=0
……
N,kh=0,kw=0,ic=0;S6,判断是否卷积核高度kh<kernel_height,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行kh+=1再重新判断kh<kernel_height直至不满足条件结束循环;S7,判断是否卷积核宽度kw<kernel_width,如果满足条件,则执行下面的循环体,否则结束循环;执行完下面的循环体后执行kw+=1再重新判断kw<kernel_width直至不满足条件结束循环;S8,判断是否输入通道...

【专利技术属性】
技术研发人员:刘倩邱东升
申请(专利权)人:北京君正集成电路股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1