使用SIMD指令进行高效的直接卷积制造技术

技术编号:24335020 阅读:86 留言:0更新日期:2020-05-29 21:54
包括一个或多个提供向量指令的处理器的计算机可以对源数据集实现直接卷积。源数据集可以是一维或多维的。对于向量指令的给定向量宽度w,使用向量指令并行计算输出数据集的w个连续数据元素。对于多维数据集,对于来自源数据集的一组向量的单个加载,计算输出数据集的多个向量。公开了新的向量指令,以改善卷积的性能,并使一个或多个处理器中的算术逻辑单元得到充分利用。

Efficient direct convolution using SIMD instructions

【技术实现步骤摘要】
【国外来华专利技术】使用SIMD指令进行高效的直接卷积
本公开一般而言涉及数字信号处理、机器学习和神经网络,并且更特别地涉及用于使用卷积运算对信号进行滤波的系统和方法。
技术介绍
在数字信号处理中,卷积是数据集中输入值及其紧邻值的加权和,产生输出数据集的输出值。这些数据集可以是一维或多维的,其中对应的数据组织确定作为输入值的紧邻邻居的值。卷积的加权值是在卷积内核中指定的,其中内核处理与输入和输出数据集相同数量的维度。卷积运算在大量各种信号处理应用中是有用的,并且是深度神经网络许多方面的运算不可或缺的一部分。卷积可以在机器学习应用中广泛使用。在这种上下文中,通常使用许多小的卷积内核将卷积应用于单个数据集。因此,卷积通常是机器学习应用的计算密集部分,因此以高效的手段执行卷积运算具有越来越大的价值。提高卷积效率的一种流行方法是降低卷积,将卷积运算转换成等效的计算过程,该过程可以通过优化的密集线性代数来解决。这允许使用优化的通用矩阵乘法(GEMM)例程,这些例程善于利用数据的固有重用、最小化片外带宽需求以及细分可以跨许多核心分布的计算。这种方法也有显著的缺点,降低卷积会增加额外的处理器开销,并显著增加数据大小。数据大小的增加使高速缓存变得困难,并增加了片外带宽的使用量,从而导致解决方案倾向于使用昂贵的高性能存储器来代替高速缓存和常规的存储器技术。第二种方法是在频域中执行卷积。这要求将输入数据集和卷积内核分别转换到频域,将两个转换后的数据集一起相乘,并将逆频率变换应用于乘积。这种方法具有降低卷积的类似优点和缺点,乘法运算可以再次由GEMM例程实现,但是增加了计算开销,并且对于小的内核大小,存储器占用量可能急剧增加。在使用许多小内核的机器学习应用中,由于需要将许多小内核转换到频域,因此频域中的卷积不受欢迎。第三种方法,通常称为“直接卷积”,将卷积滤波器直接应用于时域或空间域中的数据。这种方法避免了前述方法的额外计算开销和存储器增长,但处理器利用率低得多、并行性和重用率降低,或者硬件仅专用于解决卷积问题。典型地,此类硬件没有利用常规硬件的现有资源,并且对于给定的深度神经网络进行编程和优化并非易事。
技术实现思路
描述了用于使用提供向量指令的中央处理单元(CPU)来提供高效的直接卷积运算的方法和系统。高效的直接卷积运算在机器学习和深度神经网络应用中是有用的,在这些应用中,卷积运算可能需要大量的存储器带宽和计算资源。这些卷积应用的特征通常是使用较小的卷积内核大小,否则直接卷积方法将受到存储器带宽的限制。通过使用本文公开的方法在主CPU上实现直接卷积,系统可以避免对专用硬件加速器或通用GPU(GPGPU)解决方案的需求,从而在这些应用中实现更好的性能伸缩,同时在通常用于机器学习应用的较小内核大小中充分利用计算资源以及高速缓存和存储器带宽。为了增加硬件中的数据级并行度,处理器可以包括向量指令,其在诸如单指令多数据(SIMD)微体系架构中为每个执行的指令提供并行执行通道。这种类型的微体系架构可以为某些应用提供比单通道或通用微体系架构更高的吞吐量。虽然通用微体系架构对寄存器中包含的数据的单个通道进行操作,但是SIMD微体系架构对包含在由多个独立数据通道组成的向量中的数据进行操作。在一些实施例中,加载多个SIMD源向量,一个源向量与要计算的目的地向量对齐,一个或多个源向量包括相对于目的地向量的左半部分数据,并且一个或多个源向量包括相对于目的地向量的右半部分数据。这些源向量中的每一个都与各自的卷积系数向量相乘,然后加到累加器向量中。一旦所有源向量已被处理,累加器向量就被写入到目的地向量。在一些实施例中,要执行的卷积可以是多维卷积。在这些实施例中,可以使用相同的加载源向量来同时计算多个累加器向量。可以将各种源向量乘以与卷积内核的其它维度对应的其它卷积系数向量,并且直到已经处理给定目的地向量的所有源向量之后,才可以写入这多个累加器向量。在一些实施例中,可以提供SIMD指令以从对齐的SIMD向量对中提取未对齐的SIMD向量。在这些实施例中,可以从公共数据源加载对齐的源向量以及多个移位的源向量。在一些实施例中,可以提供SIMD指令以执行SIMD标量乘加运算,其中数据向量的每个通道被乘以标量,并且与基向量的相应通道相加。在一些实施例中,可以通过使用预交织的源数据计算部分解析输出数据集来同时对多个输入数据集执行卷积运算。在这些实施例中,可以提供SIMD指令以对计算出的数据向量执行去交织操作以提取部分解析输出数据向量。所公开的各种实施例将直接卷积的计算从传统上受存储器带宽限制的运算转换成在仅需要主CPU的充分利用高速缓存和存储器子系统的计算资源和带宽的运算,并且这些实施例特别适合于直接卷积计算。应当注意的是,它们可以更一般地应用于各种计算任务,例如,应用于一般的并行遍历技术。附图说明图1是计算机系统的一个实施例的框图。图2A是图示具有三元素卷积内核的数据元素的一维卷积的框图。图2B是图示具有3x3元素卷积内核的数据元素的二维卷积的框图。图3是图示根据至少一些实施例的支持与三元素卷积内核一起使用的源向量的对齐加载的向左和向右移位的数据流的框图。图4图示了根据至少一些实施例的使用对齐的、向左移位和向右移位的源向量以及各自的内核向量来计算三元素一维卷积的输出向量。图5是图示用于计算数据集的一系列输出向量的方法的一个实施例的流程图,该数据集包括输入数据集的三元素一维卷积。图6A图示了根据至少一些实施例的提取(Extract)向量指令,该提取向量指令生成包括两个源向量的级联的子集的数据向量。图6B图示了根据至少一些实施例使用图6A的提取向量指令,以使用一组对齐的、顺序的源输入向量来加载用于卷积运算的一组源向量。图7是图示用于计算包括输入数据集的三元素一维卷积的数据集的一系列输出向量并使用图6A的提取向量指令的方法的一个实施例的流程图。图8图示了标量乘加向量指令,该指令得出标量值、按该标量值对向量的每个数据通道进行缩放以产生经缩放的向量,并将经缩放的向量与基向量相加以生成输出向量。图9是图示用于计算包括输入数据集的三元素一维卷积的数据集的一系列输出向量并使用图8的标量乘加向量指令的方法的一个实施例的流程图。图10图示了根据至少一些实施例的使用对齐的、向左移位和向右移位的源向量以及各自的内核向量对3x3元素的二维卷积的多个输出向量进行部分计算。图11是图示用于计算包括输入数据集的3x3元素的二维卷积的数据集的输出向量的列并且使用图8的标量乘加向量指令和图6A的提取向量指令的方法的一个实施例的流程图。图12A图示了混洗(Shuffle)向量指令的一个实施例,该指令生成包括多个交织源向量的级联的混洗数据通道的数据向量,该多个交织源向量包括步幅(stride)因子和起始源通道。图12B图示了混洗向量指令的一个实施例,该混洗向量指令从包括步幅因子、起始源通道和起始输出通道的交织源向量生成包括去本文档来自技高网
...

【技术保护点】
1.一种系统,包括:/n处理器,被配置为对向量执行卷积,其中,为了对所述向量执行卷积,所述处理器被配置为执行多个向量指令,其中所述多个向量指令中的每个向量指令被配置为对多个具有多个数据位的数据通道执行运算,并且其中所述多个向量指令被配置为:/n加载多个源向量,其中,为了加载所述多个源向量,所述多个向量指令被配置为加载中心向量、从所述向量的第一数据通道之前的一个或多个数据通道开始的多个数据通道的左向量、以及从所述向量的第一数据通道之后的一个或多个数据通道开始的多个数据通道的右向量;以及/n生成一个或多个输出向量,其中,为了生成所述一个或多个输出向量,所述多个向量指令被配置为将通过用于所述卷积的相应加权值缩放的所述多个源向量中的每个源向量与所述一个或多个输出向量相加。/n

【技术特征摘要】
【国外来华专利技术】20170908 US 62/556,274;20180330 US 15/941,9751.一种系统,包括:
处理器,被配置为对向量执行卷积,其中,为了对所述向量执行卷积,所述处理器被配置为执行多个向量指令,其中所述多个向量指令中的每个向量指令被配置为对多个具有多个数据位的数据通道执行运算,并且其中所述多个向量指令被配置为:
加载多个源向量,其中,为了加载所述多个源向量,所述多个向量指令被配置为加载中心向量、从所述向量的第一数据通道之前的一个或多个数据通道开始的多个数据通道的左向量、以及从所述向量的第一数据通道之后的一个或多个数据通道开始的多个数据通道的右向量;以及
生成一个或多个输出向量,其中,为了生成所述一个或多个输出向量,所述多个向量指令被配置为将通过用于所述卷积的相应加权值缩放的所述多个源向量中的每个源向量与所述一个或多个输出向量相加。


2.如权利要求1所述的系统,其中,为了加载左向量和右向量,所述多个向量指令被配置为:
加载所述向量之前紧邻的先前向量;
加载所述向量之后紧邻的后续向量;
执行向量提取指令,以使用所述先前向量和所述向量生成左向量;以及
执行其他向量提取指令,以使用所述向量和所述后续向量生成右向量。


3.如权利要求2所述的系统,其中,所述向量提取指令被配置为:
将第一向量寄存器与第二向量寄存器级联以产生中间结果;
将所述中间结果左移多个通道;以及
生成包含所述中间结果的上部的输出向量。


4.如权利要求1所述的系统:
其中,所述多个向量指令还被配置为加载用于所述卷积的多个加权值的一个或多个加权向量;以及
其中,为了将通过用于所述卷积的相应加权值缩放的所述多个源向量中的每个源向量与所述一个或多个输出向量中的特定输出向量相加,所述多个向量指令包括针对所述多个源向量中的每个源向量的向量缩放指令,每个源向量的向量缩放指令被配置为:
从所述一个或多个加权向量中的指定的加权向量的指定通道加载用于所述卷积的相应加权值;
将所述多个源向量中的一个源向量的多个数据通道中的每个通道乘以所述相应加权值以生成经缩放的向量;
将经缩放的向量与所述一个或多个输出向量中的所述特定输出向量相加。


5.如权利要求1所述的系统,其中,对所述向量的所述卷积实现步幅值,其中,在针对要包括的每个数据通道的卷积中要省略的数据通道的值基于所述步幅值,并且其中,为了加载所述多个源向量,所述多个向量指令被配置为:
加载所述向量之前紧邻的先前向量;
加载所述向量之后紧邻的后续向量;
执行向量提取指令,以使用所述先前向量、所述向量和所述后续向量生成第一中间向量和第二中间向量;和
执行向量混洗指令,以使用所述第一中间向量和所述第二中间向量加载左向量;
执行向量混洗指令,以使用所述向量和所述后续向量加载中心向量和右向量。


6.如权利要求1所述的系统,其中,所述卷积是多维卷积,并且其中,所述一个或多个输出向量包括多个输出向量。


7.如权利要求1所述的系统,其中,所述处理器被配置为执行所述卷积作为卷积神经网络的一部分。


8.一种方法,包括:
由包括实现向量指令的处理器的计算机对向量执行卷积,包括:
加载多个源向量,包括中心向量、包括从所述向量的第一数据通道之前的一个或多个数据通道开始的数据通道的左向量、以及包括从所述向量的第一数据通道之后的一个或多个数据通道开始的数据通道的右向量;以及
生成包括所述多个源向量的加权和的一个或多个输出向量,其中,生成所述一个或多个输出向量包括:将通过用于所述卷积的相应加权值缩放的所述多个源向量中的每个源向量与所述一个或多个输出向量相加;以及
其中向量指令是对一个或多个数据寄存器操作的指令,所述一个或多个数据寄存器包括多个数据通道,每个数据通道包括多个数据位。


9.如权利要求8所述的方法,其中,左向量和右向量的加载包括:
加载所述向量之前紧邻的先前向量;
加载所述向量之后紧邻的后续向量;
执行向量提取指令,以使用所述先前向量和所述向量生成左向量;以及
执行所...

【专利技术属性】
技术研发人员:J·R·戴蒙德A·P·帕特尔
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:美国;US

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

1