CN109886407A - 数据处理方法、装置、电子设备及计算机可读存储介质 - Google Patents
数据处理方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN109886407A CN109886407A CN201910146115.4A CN201910146115A CN109886407A CN 109886407 A CN109886407 A CN 109886407A CN 201910146115 A CN201910146115 A CN 201910146115A CN 109886407 A CN109886407 A CN 109886407A
- Authority
- CN
- China
- Prior art keywords
- task
- thread block
- multiplication
- data
- kernel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Complex Calculations (AREA)
Abstract
本公开提供了一种数据处理方法、装置、电子设备及计算机可读存储介质。所述方法包括:获取基于神经网络的至少一个输入图像得到的待处理数据;确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系;基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果;利用所述多个线程块执行所述内核融合结果。
Description
技术领域
本发明涉及计算机领域,尤其涉及数据处理方法、装置、电子设备及计算机可读存储介质。
背景技术
神经网络被广泛应用于模式识别、图像处理、函数逼近和优化计算等领域,由于其较高的运算速率,受到学术界和工业界越来越广泛的关注。
当前神经网络中的深度学习任务是使用GPU进行加速运算的,深度学习任务需要使用到的卷积计算需要进行大量的矩阵乘法运算。然而为了适应越来越来高的用户需求,神经网络的规模也变得越来越庞大,目前大型的卷积神经网络已经包含了上百层的网络层结构,因此,卷积神经网络需要做更大量的卷积运算,大量的卷积运算降低了神经网络的运算速度,影响神经网络在实际应用场合的使用。
发明内容
本发明提供了数据处理方法、装置、电子设备及计算机可读存储介质,能够使得GPU进行卷积运算时拥有更快的运算速度。
第一方面,提供了一种数据处理方法,所述方法包括:
获取基于神经网络的至少一个输入图像得到的待处理数据;确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系;基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果;利用所述多个线程块执行所述内核融合结果。
在一可能的实现方式中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:确定将所述多个待处理任务中的第一任务和依赖于所述第一任务的第二任务分别映射到第一线程块和第二线程块,其中,所述第一线程块对应的执行顺序早于所述第二线程块并且所述第一线程块与所述第二线程块之间的间隔高于第一阈值。
在一可能的实现方式中,所述第一阈值对应的时间间隔大于或等于执行所述第一任务所需的时间。
在一可能的实现方式中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。
在一可能的实现方式中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:确定将所述多个待处理任务中的n2个乘法任务与n1个输入变换任务映射至多个连续的线程块中,其中,n1:n2满足所述多个待处理任务中包含的输入变换任务数量SI与所述多个待处理任务中包含的乘法任务数量SG的比值;或者,确定将所述多个待处理任务中的n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n2:n3满足所述SG与所述多个待处理任务中包含的输出变换任务数量SO的比值;或者,确定将所述多个待处理任务中的n1个输入变换任务、n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n1:n2:n3满足SI:SG:SO。
在一可能的实现方式中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块。
在一可能的实现方式中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:确定将所述多个待处理任务中包含的NF个卷积核变换任务映射到所述多个线程块中的前NF个连续线程块;确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块。
在一可能的实现方式中,所述确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块,包括:确定将所述多个待处理任务中包含的DIG个输入变换任务映射到所述后续N个线程块中的前DIG个连续线程块;确定将所述多个待处理任务中包含的n1个输入变换任务和m1个乘法任务映射到所述前DIG个连续线程块的后续DGO个连续线程块,其中,所述n1:m1满足SI:SG;确定将所述多个待处理任务中包含的还未分配的n2个输入变换任务、m2个乘法任务和p1个输出变换任务映射到所述后续DGO个连续线程块的后续线程块,其中,n2:m2:p1满足SI:SG:SO;确定将所述多个待处理任务中包含的还未分配的m3个乘法任务和p2个输出变换任务映射到剩余的连续线程块。
在一可能的实现方式中,所述n1个输入变换任务存在数据重用关系,所述m1个乘法任务存在数据重用关系。
在一可能的实现方式中,所述利用所述多个线程块执行所述内核融合结果之前,所述方法还包括:确定使用相同的内存区域存储所述多个待处理任务中对应于所述待处理数据的不同输入向量的多个不同类型的任务;为所述多个不同类型的任务之间建立任务依赖关系。
在一可能的实现方式中,所述利用所述多个线程块执行所述内核融合结果,包括:基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,其中,所述第三任务依赖于所述第四任务。
在一可能的实现方式中,所述基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,包括:基于所述至少一个第四任务中每个第四任务当前的执行状态,确定所述第三任务的当前未完成依赖任务的数量;响应于所述第三任务的当前未完成依赖任务数量更新为0,调用线程块执行所述第三任务。
在一可能的实现方式中,所述待处理数据格式是数量高度宽度通道NHWC格式,所述方法还包括:执行所述输入变换任务的线程块,其中,不同通道的待处理数据对应所述线程块中的不同线程。
第二方面,提供了一种数据处理装置,包括:
获取单元,所述获取单元用于获取基于神经网络的至少一个输入图像得到的待处理数据;
确定单元,所述确定单元用于确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系;
处理单元,所述处理单元用于基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果;
执行单元,所述执行单元用于利用所述多个线程块执行所述内核融合结果。
在一可能的实现方式中,所述确定单元用于:确定将所述多个待处理任务中的第一任务和依赖于所述第一任务的第二任务分别映射到第一线程块和第二线程块,其中,所述第一线程块对应的执行顺序早于所述第二线程块并且所述第一线程块与所述第二线程块之间的间隔高于第一阈值。
在一可能的实现方式中,所述第一阈值对应的时间间隔大于或等于执行所述第一任务所需的时间。
在一可能的实现方式中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。
在一可能的实现方式中,所述确定单元用于:确定将所述多个待处理任务中的n2个乘法任务与n1个输入变换任务映射至多个连续的线程块中,其中,n1:n2满足所述多个待处理任务中包含的输入变换任务数量SI与所述多个待处理任务中包含的乘法任务数量SG的比值;或者,确定将所述多个待处理任务中的n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n2:n3满足所述SG与所述多个待处理任务中包含的输出变换任务数量SO的比值;或者,确定将所述多个待处理任务中的n1个输入变换任务、n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n1:n2:n3满足SI:SG:SO。
在一可能的实现方式中,所述确定单元用于:确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块。
在一可能的实现方式中,所述确定单元用于:确定将所述多个待处理任务中包含的NF个卷积核变换任务映射到所述多个线程块中的前NF个连续线程块;确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块。
在一可能的实现方式中,所述确定将确定单元用于:确定将所述多个待处理任务中包含的DIG个输入变换任务映射到所述后续N个线程块中的前DIG个连续线程块;确定将所述多个待处理任务中包含的n1个输入变换任务和m1个乘法任务映射到所述前DIG个连续线程块的后续DGO个连续线程块,其中,所述n1:m1满足SI:SG;确定将所述多个待处理任务中包含的还未分配的n2个输入变换任务、m2个乘法任务和p1个输出变换任务映射到所述后续DGO个连续线程块的后续线程块,其中,n2:m2:p1满足SI:SG:SO;确定将所述多个待处理任务中包含的还未分配的m3个乘法任务和p2个输出变换任务映射到剩余的连续线程块。
在一可能的实现方式中,所述n1个输入变换任务存在数据重用关系,所述m1个乘法任务存在数据重用关系。
在一可能的实现方式中,所述装置还包括建立单元,所述建立单元用于在所述利用所述多个线程块执行所述内核融合结果之前,确定使用相同的内存区域存储所述多个待处理任务中对应于所述待处理数据的不同输入向量的多个不同类型的任务;为所述多个不同类型的任务之间建立任务依赖关系。
在一可能的实现方式中,所述执行单元还用于:基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,其中,所述第三任务依赖于所述第四任务。
在一可能的实现方式中,所述执行单元用于:基于所述至少一个第四任务中每个第四任务当前的执行状态,确定所述第三任务的当前未完成依赖任务的数量;响应于所述第三任务的当前未完成依赖任务数量更新为0,调用线程块执行所述第三任务。
在一可能的实现方式中,所述待处理数据格式是数量高度宽度通道NHWC格式,所述执行单元中执行所述输入变换任务的线程块,其中,不同通道的待处理数据对应所述线程块中的不同线程。
第三方面,提供了一种电子设备,包括:处理器和用于存储计算机可读指令的存储器;其中,所述处理器用于调用所述存储器存储的计算机可读指令,以执行上述第一方面所述的方法或其任意可能的实现方式。
第四方面,提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面所述的方法或其任意可能的实现方式。
基于本公开提供的数据处理方法、装置、电子设备及计算机可读存储介质,通过获取基于神经网络的至少一个输入图像得到的待处理数据,确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果,从而利用所述多个线程块执行所述内核融合结果。由于加速卷积操作中的多个个计算节点所对应的函数融合成为一个内核函数,使得GPU在进行加速卷积操作时,整个加速卷积操作只需要通过一次内核函数调用即可完成,大大减少了GPU内核启动带来的开销,极大地提高数据传输效率,从而使得GPU进行卷积运算时拥有更快的运算速度。
附图说明
图1是本公开实施例提供的Winograd加速卷积算法的流程示意图;
图2a是本公开实施例提供的Winograd卷积过程中输入变换任务的流程示意图;
图2b是本公开实施例提供的Winograd卷积过程中乘法任务的流程示意图;
图3是本公开提供的一种数据处理方法的流程示意图;
图4是本公开提供的一个3×3的彩色RBG图像分别以NCHW格式和NHWC格式进行数据存储的示意图;
图5是本公开提供的一种数据处理方法中第一阈值的大小对线程块执行任务的影响对比示意图;
图6a是本公开提供的一种数据处理方法中的重用乘法任务组的示意图;
图6b是本公开提供的一种多个待处理任务与多个连续线程块映射关系的示意图;
图7是本公开提供的一种数据处理方法中确认待处理任务与线程块之间映射关系的步骤流程图;
图8是本公开提供的一种内核融合前后的GPU执行模型示意图;
图9是本公开提供的一种数据处理方法中内存回收策略示意图;
图10是本公开提供的一种数据处理方法中线程块执行所述内核融合结果的流程示意图;
图11是本公开提供的一种数据处理装置的结构示意图;
图12是本公开提供的一种电子设备的结构示意图。
具体实施方式
本公开的实施例中使用的术语仅用于对本发明的具体实施例进行解释,而非旨对本发明作出具体限定。
首先对本公开的实施例涉及的加速卷积操作进行详细的描述。其中,加速卷积操作基于维诺格拉德(Winograd)卷积算法或快速傅里叶变换(Fast FourierTransformation,FFT)算法,或者基于其他类型的算法,本公开实施例对此不做限定。
下面以Winograd算法为例对加速卷积操作进行简要介绍。Winograd算法是针对卷积运算的加速算法。由于乘法和加法在硬件实现的时间复杂度不同,乘法运算所需的时间通常远大于加法所需的时间,因此Winograd算法的核心思想是通过使用廉价运算代替昂贵运算,从而达到加速卷积运算的目的。为方便理解,下面以举例的方式对Winograd算法进行举例说明。
输入Input=[z0 z1 z2 z3]T (I)
输出output=[y0 y1]T (2)
卷积核Filter=[x0 x1 x2]T (3)
将一个2×3的矩阵和一个3×1的矩阵进行卷积运算,
使用常规卷积算法如下: (4)
基于Winograd的加速卷积算法如下:
其中,m1=(z0-z2)x0,m4=(z1-z3)x2,
也就是说,对于一个2×3的矩阵和一个3×1的矩阵来说,使用传统的卷积运算需要6次乘法,而Winograd算法只需要4次乘法,将上述公式(5)扩展到一般矩阵表示如下:
O=AT[(GI)⊙(BTF)] (7)
其中,符号⊙表示逐元素矩阵相乘(Element-Wise Matrix Multiplication,EWMM),I是输入数据,F是卷积核数据,O是输出数据,A、B、G是常数矩阵。仍以上述的二维卷积F(2,3)为例,公式(7)可以表示为:
O=AT[(GIGT)⊙(BTFB)]A (8)
基于此,Winograd加速卷积算法的流程如图1所示,主要分为四个步骤:输入变换(Input Transformation)、卷积核变换(filter transformation)、矩阵乘法和输出变换(Output transformation)。相应地,在使用GPU进行基于Winograd的加速卷积操作时,也会对应四种任务:输入变换任务、卷积核变换任务、矩阵乘法任务和输出变换任务,其中,
输入变换:对输入窗口被转换成大小为(m+r-1)×(m+r-1),其中,相邻窗口之间存在(r-1)行重叠元素。Winograd和FFT采用不同的转换函数。
滤波器变换或卷积核转换:过滤器也被转换为与转换后的输入窗口相同的大小,即(m+r-1)(m+r-1)。
EWMM:在Winograd算法和FFT算法中,对转换后的输入窗口进行逐元素相乘并相加,其中,在Winograd算法中,矩阵中的元素是实数,而在FFT中是复数。在一些GPU实现中,逐元素乘法被批量地装入GEMMs中以获得更好的并行性。
逆变换或输出变换:对进行了逐元素相乘之后的结果进行逆变换,以生成m×m大小的卷积结果窗口,其中,Winograd和FFT在此处也使用不同的算法。输出张量中没有重叠窗口。
下面对分布式GPU架构在进行Winograd卷积过程中,需要多个线程块执行的多个待处理任务进行简要介绍。图2a是Winograd卷积过程中的输入变换任务流程示意图,图2a以一个输入向量为例对输入变换任务的过程进行了详细说明。图2a所示的输入向量拥有c个通道,也就是图2a所示的c个重叠的大矩形块,每个通道包括t个窗口(tile),也就是图2a中每个大矩形块包含的多个重叠的正方形。窗口是执行Winograd卷积操作的最小单位,由于神经网络中的卷积层进行的卷积运算采用滑动卷积运算,窗口1与窗口2中的矩阵会存在重复的元素,因此图2a所示的多个窗口存在重叠部分。假设卷积的输出结果为m×m的矩阵,卷积核为r×r的矩阵,那么每一个窗口中的数据是n×n的矩阵,其中,n=m+r-1,由于一个输入向量拥有c个通道,每个通道包括t个窗口,因此,一个输入向量共有c×t个n×n的矩阵,具体地,第一个通道的窗口1中的矩阵可以表示为:
其中,代表第一个通道、第n排、第n列的元素。第一个通道的窗口2中的矩阵可以表示为:
同理,第二个通道的窗口1中的矩阵可以表示为:
每个窗口的输入变换任务即为对该窗口中的矩阵进行GIGT这一操作,也就是将每个窗口中的矩阵I与常数矩阵G和GT进行矩阵乘法的运算,从而获得每个窗口进行输入变换后的矩阵。例如,第一个通道的窗口1中的矩阵在进行输入变换任务后得到矩阵可以表示为:
同理可以获得其他窗口进行Winograd输入变换后的矩阵,应理解,由于一个输入向量共有c×t个n×n的矩阵,因此经过GIGT这一操作后仍可以获得c×t个n×n的矩阵。接下来,对所有窗口进行输入变换后得到的c×t个n×n矩阵进行重组,得到n×n个c×t的矩阵,作为下一步乘法任务中的输入矩阵。由图2a可知,重组后的第1个c×t的矩阵D是由每个窗口进行输入变换任务后得到矩阵的第1行第1列的元素组成的新的矩阵,其中,
第2个c×t的矩阵是由每个窗口矩阵的第1行第2列的元素组成的新的矩阵以此类推,从而通过输入变换后获得的c×t个n×n的矩阵,转换为乘法任务所需的n×n个c×t的矩阵。可以理解的是,由于卷积核变换任务是使用F0=BTFB进行的,与输入变换任务类似,因此也可以使用相同的方法获得乘法任务所需的n×n个k×t的矩阵,其中,k是卷积核的通道数量,此处不再展开赘述。
图2b以一个输入向量为例对乘法任务的过程进行了详细说明,其中,乘号左边的矩阵为输入数据经过输入变换并重组后的矩阵,矩阵大小为c×t,乘号右边的矩阵为卷积核数据经过卷积核变换并重组后的矩阵,矩阵大小为k×t,乘法任务即为将输入变换后获得的c×t矩阵,与卷积核变换后获得的k×t矩阵进行矩阵相乘,这样的乘法任务有n×n个。应理解,由图1可知,输出变换任务与输入变换任务的任务内容十分类似,即对乘法结果C进行ATCA的操作,因此不再展开赘述。其中,关于图2b中未示出或描述的内容,可以参见前述图2a中的相关阐述,这里不再赘述。
下面对本公开适用的另一种加速卷积操作FFT进行简要说明。FFT是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。其核心思想是将卷积等效于使用傅里叶变换将输入数据与卷积核都转换到复频域,做一个点乘运算,再用逆变换变回到实域。因此,GPU在进行FFT加速卷积操作时与Winograd算法的任务种类相同,只是FFT算法中的输入变换任务和输出变换任务与Winograd算法的输入变换任务使用的公式不同,乘法任务与Winograd算法相同,因此不再展开赘述。
综上可知,GPU在进行加速卷积操作时,每部分待处理数据都会生成一组输入变换任务、一组卷积核变换任务、一组乘法任务以及一组输出变换任务。因此,对于未融合的内核函数来说,GPU会依次启动输入变换函数、卷积核变换函数、乘法函数以及输出变换函数,从而依次执行该部分输入数据的输入变换任务、卷积核变换任务、乘法任务以及输出变换任务。由于每一次内核启动都会大量消耗平台开销,函数频繁的调用也成为当前影响许多深度学习框架性能的一个重要因素,其带来的性能开销主要体现在:函数的启动开销、调度开销以及函数之间的数据传输开销,造成GPU进行加速卷积操作的实际运算速度无法达到理想状态。
为了解决上述问题,本公开提出一种数据处理方法,在快速卷积操作中进行内核融合,将原本分离调用的多个GPU核函数进行重组,使得它们在一个GPU内核中进行。本公开实施例提供的内核融合框架包括静态任务映射和运行时任务调度。静态任务映射(TaskMapping)的核心思想是在内核启动之前将原始内核的一个特定的线程块(TB)分配到融合内核的TB。为了区分原始内核和融合内核的TBs,将来自原始内核的每个TB看作一个任务,即在任务映射中,将原始内核中的每一个任务分配给融合内核的线程块(TB)。在加速卷积操作中,有四种类型任务类型:输入转换、卷积核转换、GEMM和输出(逆)转换。融合框架将所有这些任务合并在一起,形成一个异构内核。原始内核函数在融合内核中作为设备实现函数。每个TB可以根据其任务类型切换到不同的设备函数。
图3是本公开提供的数据处理方法的流程示意图。由图3可知,所述方法包括以下步骤:
S101:获取基于神经网络的至少一个输入图像得到的待处理数据。
所述待处理数据可以包括神经网络中任意一个卷积层的输入数据,例如,待处理数据是输入图像,相应地,该加速卷积操作可以是神经网络的第一层的处理流程的至少一部分。再例如,待处理数据是通过神经网络对输入图像进行处理得到的特征数据,相应地,该加速卷积操作可以是神经网络的一个中间层或最后一层的处理流程的至少一部分,本公开实施例对此不做限定。
在一些实施例中,所述待处理数据可以包括多个如图2a所示的输入向量。并且,由于卷积神经网络中的每一个卷积层都会进行输入数据与卷积核滑动卷积的操作,所述待处理数据还包括卷积核数据。其中,所述待处理数据中输入数据的格式可以是数量高度宽度通道(Number,Height,Width,Channel,NHWC)格式或数量通道高度宽度(Number,Channel,Height,Width,NCHW)格式或其他格式,其中,N表示所述待处理数据对应的图像数量,H表示垂直方向的像素数量,W表示水平方向的像素数量,C指通道数量,例如灰色图像C=1,彩色RBG图像C=3。下面以图4为例对NCHW格式和NHWC格式的待处理数据进行对比说明,图4显示了一个3×3的彩色RBG图像分别以NCHW格式和NHWC格式进行数据存储的示意图。由图4可知,对于NCHW格式来说,通道相同的数据在存储器中相邻存储,对于NHWC格式来说,通道不同的数据在存储器中相邻存储。应理解,图4仅用于举例说明,并不能构成具体限定。
在一些实施例中,所述待处理数据格式是数量高度宽度通道NHWC格式,所述方法还包括:执行所述输入变换任务的线程块,其中,不同通道(channel)的待处理数据对应所述线程块中的不同线程。也就是说,每个线程块包含多个线程,执行输入变换任务的线程块在读取所述待处理数据时,每个线程读取同一窗口(tile)对应的不同通道的数据。以图2a所示的待处理数据为例,每个线程块中的线程读取窗口1对应的3个通道的数据,其中,一个线程对应一个窗口。由图4可知,NHWC格式的待处理数据中的每一排数据恰好都是同一窗口对应的不同通道的数据。
在一些实施例中,将一组tile按channel维度展开,将每个channel分配给一个线程,相邻channel的数据位于相同的线程块中。按这个方法在每个线程中读取一个tile的数据。接下来,在每个GPU线程中对这个tile的数据进行输入变换(相当于进行和常数矩阵的矩阵乘法)。将生成的数据写入矩阵的相应位置,形成变换后的矩阵组。Tile中的每一个元素,会分别对应变换后的一个矩阵。所以,矩阵组的个数等于tile中元素的个数。矩阵的宽为c,高为t。c是输入矩阵的channel数目,t是一组变换中的tile数量。
因此,使用NHWC格式的待处理数据,再使用不同通道的待处理数据对应所述线程块中的不同线程的方法进行待处理数据的读取,恰好可以使得所有线程都在顺序读取内存中相邻的数据,不会出现线程块内部的控制流差异,从而达到100%的内存读取效率。
S102:确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系。
在一些实施例中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。其中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。由于乘法任务需要使用输入变换任务的任务结果和卷积核变换任务的任务结果进行矩阵乘法的操作,输出变换任务需要使用乘法任务的计算结果,因此将图2a所示的一个输入向量进行加速卷积操作对应的多个待处理任务定义为一个任务组,该任务组包括一个输入变换任务组、一个卷积核变换任务组、一个乘法任务组以及一个输出变换任务组,其中,乘法任务组依赖于输入变换任务组,乘法任务组依赖于卷积核变换任务组,输出变换任务组依赖于乘法任务组。可以理解的是,由于多个待处理任务是由对应数量的多个线程块执行的,GPU的运算模型并不能确保执行任务的顺序满足所述多个待处理任务之间依赖关系,因此通过确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,可以确保所述多个待处理任务中的执行顺序的正确性。
在一些实施例中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:确定将所述多个待处理任务中的第一任务和依赖于所述第一任务的第二任务分别映射到第一线程块和第二线程块,其中,所述第一线程块对应的执行顺序早于所述第二线程块并且所述第一线程块与所述第二线程块之间的间隔高于第一阈值。换句话说,第一任务是第二任务的依赖任务,那么第一任务的优先级高于第二任务,假如线程块按线程块ID(BlockIDx)从小到大的顺序进行调度,那么在进行多个待处理任务与多个线程块之间的映射关系的确定时,第一任务映射的线程块ID必须小于第二任务对应的线程块ID,从而确保了所述多个待处理任务中的执行顺序的正确性。应理解,线程块ID还可以按从大到小或者其他预设顺序进行调度,此处不作具体限定。
在一些实施例中,所述第一阈值对应的时间间隔大于或等于执行所述第一任务所需的时间。可以理解的是,由于执行每个待处理任务都需要一定的时间,如果执行第一任务的第一线程块还未执行完毕,第二任务的第二线程块已开始启动,那么第二线程块需要等待第一线程块执行完毕后才能执行第二任务,在等待过程中将会占用系统内存,影响其他任务的执行。假设第一任务为输入变换任务,第二任务为乘法任务,执行第一线程块与第二线程块之间的间隔,为DIG,那么DIG的大小对线程块执行任务的影响可以如图5所示,其中,I1为第一任务,也就是输入变换任务,G1为第二任务,也就是乘法任务,Tst(G1)为乘法任务开始的时间,Ted(I1)为输入变换任务结束的时间,Twait(G1)为执行乘法任务的第二线程块需要等待的时间,图5左边图像表示如果DIG太小,未大于第一阈值,或者说小于执行所述第一任务所需的时间,当I1未执行完毕,执行G1的第二线程块已开始启动,那么第二线程块需要等待Twait(G1),即I1执行完毕后才能执行G1,在等待过程中将会占用系统内存,影响其他任务的执行;图5右边的图像表示如果DIG大于了第一阈值,或者说大于执行所述第一任务所需的时间时,由于Tst(G1)处于Ted(I1)之后,第二线程块一启动就可以马上执行任务G1,不需要等待Twait(G1),从而避免了第二线程块等待第一线程块执行第一任务这一情况的发生,极大地提高了任务的处理效率。应理解,图5仅用于举例说明,第一阈值还可以恰好等于第一线程块与第二线程块之间的间隔,并不能构成具体限定。
在一些实施例中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:确定将所述多个待处理任务中的n2个乘法任务与n1个输入变换任务映射至多个连续的线程块中,其中,n1:n2满足所述多个待处理任务中包含的输入变换任务数量SI与所述多个待处理任务中包含的乘法任务数量SG的比值;或者,确定将所述多个待处理任务中的n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n2:n3满足所述SG与所述多个待处理任务中包含的输出变换任务数量SO的比值;或者,确定将所述多个待处理任务中的n1个输入变换任务、n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n1:n2:n3满足SI:SG:SO。应理解,对于GPU来说,乘法任务是计算密集型任务,而输入变换任务、卷积核变换任务以及输出变换任务是访存密集型任务,如果将计算密集型任务和访存密集型任务并行执行,可以达到GPU资源利用率平衡的目的,从而提高GPU整体的计算性能。但是多个待处理任务中计算密集型任务数量和访存密集型任务数量是不同的,如果随机的分配同时执行计算密集型任务数量和访存密集型任务的数量,最后可能会出现剩余大量访存密集型任务或者计算密集型任务单独执行的情况。因此在一组连续的线程块所映射的待处理任务中,输入变换任务、乘法任务以及输出变换任务的任务数量之比应满足SI:SG:SO,从而最大化地达到GPU资源利用率的平衡。
在一些实施例中,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块。由上文叙述的加速卷积操作的基本原理以及GPU处理加速卷积操作时产生的多个待处理任务的特点可知,所述多个待处理任务中有些任务是存在数据重用关系的,其中,存在数据重用关系的任务主要可以分为三种:输入变换任务的重用,乘法任务的重用,生产者消费者的重用。其中,输入变换任务的重用指的是输入重叠数据的重用,例如图2a所示的窗口1与窗口2的重叠部分,输入变换任务产生数据重用的原因已在上文对输入变换任务的介绍中进行过解释,因此不再展开阐述;乘法任务的重用指的是使用相同卷积核的乘法任务;生产者消费者重用指的是上一阶段生成的数据在下一阶段被使用,例如输入变换任务的执行结果被乘法任务使用,乘法任务的执行结果被输出变换任务使用。可以理解的是,存在数据重用关系的任务执行的时间间隔小于第二阈值时,可以将数据放置于缓存中,从而提高数据读取效率,减少数据传输的开销。但是缓存容量是有限的,如果第二阈值过大,缓存中存储的数据可能会达到容量上限,导致个别任务无法将重用数据存储在缓存中。因此,优选地,可以将所述多个待处理任务中存在数据重用关系的多个任务映射至多个连续的线程块,从而最大化地提高数据读取效率,减少数据传输的开销。
在一些实施例中,输入变换任务全部都存在输入重叠数据的重用,生产者消费者的重用只有在缓存容量比较大时,才有可能会实现,因此,确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块时,可以以存在数据重用关系的乘法任务为主进行的映射关系的确认。而对于存在数据重用关系的乘法任务来讲,根据上文描述的乘法任务基本原理可知,图2a所示的一个输入向量进行加速卷积操作时,虽然是使用同一个卷积核进行的加速卷积操作,但是由于卷积核变换和输入变换后的矩阵进行了拆分,由之前的c×t个n×n的矩阵重组为n×n个c×t的矩阵,因此,图2a所示的一个输入向量生成的一个乘法任务组中的每个乘法任务中使用的变换后的卷积核是不同的,但是如果其他输入向量使用相同的卷积核进行卷积操作时,不同乘法任务组中的乘法任务,使用的卷积核是可能相同的,换句话说,不同乘法任务组中的乘法任务存在数据重用关系。因此将M组使用同一个卷积核的乘法任务组进行重组,可以获得SG个重用乘法任务组,每个重用乘法任务组中的任务数量为M个,每个重用乘法任务组中的乘法任务使用同一个变换后的卷积核。例如,图6a是本公开提供的一种重用乘法任务组的示意图,其中,每一横排的任务代表对应同一个输入向量的乘法任务组,每一纵列的任务代表对应同一个变换后的卷积核的重用乘法任务组。其中,每个乘法任务组包含SG个乘法任务,比如乘法任务1-1、乘法任务1-2以及乘法任务1-SG属于一个乘法任务组,乘法任务M-1、乘法任务M-2以及乘法任务M-SG属于一个乘法任务组。每个重用乘法任务组包含M个任务,比如乘法任务1-1、乘法任务M-1属于一个重用乘法任务组,乘法任务1-2、乘法任务M-2属于一个重用乘法任务组。
在一些实施例中,前文描述的以存在数据重用关系的乘法任务为主进行的映射关系的确认可以是,以重用乘法任务组为基准进行待处理任务与线程块之间映射关系的确认。例如,图6b是本公开提供的一种多个待处理任务与多个连续线程块映射关系的示意图,其中,乘法任务的数量为M个,且属于同一个重用乘法任务组,也就是说,图6b中的M个乘法任务使用相同的转换后的卷积核,在进行待处理任务与线程块映射关系的确认时,可以将M个乘法任务,MSI/SG个输入变换任务以及MSO/SG个输出变换任务与连续的线程块一一对应,使得输入变换任务、乘法任务以及输出变换任务的任务数量之比满足SI:SG:SO,从而达到了GPU资源利用率平衡的目的。并且输入变换任务、乘法任务之间均存在数据重用,进一步满足了将重用数据放置于缓存中,从而提高数据读取效率,减少数据传输的开销的目的。
在一些实施例中,综合可知,确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系可以是按图7所示的步骤流程图进行确认的,图7是本公开提出的一种数据处理方法中确认待处理任务与线程块之间映射关系的步骤流程图,由图7可知,在确认所述待处理任务与线程块之间的映射关系时,主要需考虑以下三点:
首先,不能存在死锁,也就是确保执行顺序的正确性。
在一些实施例中,线程块是按照线程块ID(blockIdx)从小到大的顺序调度的,因此要保证当前任务所依赖的任务的blockIdx必须小于当前任务。
在一些实施例中,父任务和子任务之间须有一定的时间间隔,由于每个任务执行都需要时间,所以要保证一定的时间间隔,才能保证子任务等待父任务完成的时间尽可能小。例如,每个任务在执行时,其依赖任务已经执行完毕,但本公开实施例不限于此。
其次,要确保GPU资源利用率的平衡,由于矩阵乘法任务是计算密集型任务,而输入/输出变换任务是访存密集型任务。我们在进行任务映射时,将计算密集型和访存密集型任务分配在同一时间并行执行,可以达到优化GPU资源分配的目的。在一些实施例中,在一组连续的线程块(TB)中,输入变换:矩阵乘法:输出变换的任务比例满足其在原始核函数中的线程块数量之比例,例如满足SI:SG:SO;
第三,考虑了到内核融合过程中的数据重用,优化任务分配以减少数据重用的距离,以满足数据可以更多的在缓存中进行重用。
在一些实施例中,要确保存在数据重用关系的任务执行的时间间隔小于第二阈值,从而可以将重用的数据放置于缓存中,提高数据读取效率,减少数据传输的开销。
在同时考虑这三点的情况下,生成多个待处理任务与多个线程块之间的映射关系,其中,一个任务对应一个线程块,从而同时达到保证任务执行顺序的正确性、满足GPU资源利用率平衡以及将数据放置于缓存中以及提高数据读取效率的多个目的,提高整体的GPU卷积加速操作的计算性能。
在一些实施例中,基于图7所示的本公开提供的数据处理方法中映射关系确认时的三个主要思想,下面对所述映射关系确认的步骤流程进行进一步地说明。所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:确定将所述多个待处理任务中包含的NF个卷积核变换任务映射到所述多个线程块中的前NF个连续线程块;确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块。可以理解的是,由于卷积核变换任务使用的公式可以表示为F0=GFGT,G作为卷积核F的变换矩阵是固定的常数矩阵,并且每个乘法任务都依赖于卷积核变换任务,因此在进行待处理任务与映射关系的确认时,可以首先分配卷积核变换任务,再对输入变换任务、乘法任务和输出变换任务进行分配。
在一些实施例中,所述确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块,包括:确定将所述多个待处理任务中包含的DIG个输入变换任务映射到所述后续N个线程块中的前DIG个连续线程块;确定将所述多个待处理任务中包含的n1个输入变换任务和m1个乘法任务映射到所述前DIG个连续线程块的后续DGO个连续线程块,其中,所述n1:m1满足SI:SG;确定将所述多个待处理任务中包含的还未分配的n2个输入变换任务、m2个乘法任务和p1个输出变换任务映射到所述后续DGO个连续线程块的后续线程块,其中,n2:m2:p1满足SI:SG:SO;确定将所述多个待处理任务中包含的还未分配的m3个乘法任务和p2个输出变换任务映射到剩余的连续线程块。应理解,由于对应同一输入向量的乘法任务依赖于输入变换任务,输出变换任务又依赖于乘法任务,因此在分配待处理任务与前NF个连续线程块的后续N个线程块的映射关系时,可以首先分配DIG个输入变换任务对应连续的线程块,同时为了保证资源利用率的平衡,也就是计算密集型任务能够与仿存密集型任务同时执行,可以紧接着再分配DGO个输入变换任务和乘法任务对应连续的线程块,并且输入变换任务和乘法任务的数量之比为SI:SG,其中,DIG可以是执行输入变换任务以及乘法任务的线程块之间的距离,DGO可以是执行输出变换任务以及乘法任务的线程块之间的距离,这里,线程块之间的距离可以指的是线程块编号的差值。最后,由于输入变换任务以及乘法任务均已执行了一部分,因此最后可以将未分配的待处理任务,按照SI:SG:SO的比例进行映射关系的确认。应理解,由于输入变换任务分配的最早,因此可能会出现输入变换任务最先分配完毕的情况,如果输入变换任务与线程块的映射关系已经确认完毕,可以将剩下的输出变换任务以及乘法任务在确保任务依赖关系的前提下进行分配,直至所有映射关系确认完毕。
在一些实施例中,所述n1个输入变换任务存在数据重用关系,所述m1个乘法任务存在数据重用关系。也就是说,在上文描述的将多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块的过程中,输入变换任务以及乘法任务均为存在数据重用关系的乘法任务,具体地,可以按照图6b进行映射关系的确认,从而同时达到保证任务的依赖顺序、满足GPU资源利用率平衡以及将数据放置于缓存中以及提高数据读取效率的多个目的。
下面对本公开提供的数据处理方法中,任务映射的流程进行举例说明,其中,任务映射可以分为五个部分,第一部分是参数设定,用伪代码表述可以是:
1:Input NF,SI,SG,SO,DIG,DGO,M
2:Output Task Mapping Array
3:procedure TASK MAPPING
第二部分内容为将NF个卷积核变换任务分配到前NF个连续线程块,将卷积核变换放在序列的开始,因为每一个矩阵乘法均依赖卷积核的变换,用伪代码表述可以是:
4:First NF TBs←Filter_trans_tasks.
第三部分首先分配由于任务依赖关系无法和其他任务同时进行的任务,将DIG个输入变换任务分配到DIG个连续的线程块,用伪代码表述可以是:
5:Next DIG TBs←IN_trans_tasks
再将DGO个连续的线程块分配给DGO个输入变换任务和乘法任务,其中,M个重用乘法任务将与MSI/SG个输入变换任务分配到连续的线程块中,重复分配DGO/M(SI+SG)次,其中,M/(SI+SG)向上取整数,用伪代码表述可以是:
6:for i←1,DGO/M(SI+SG)do
7:for j←1,SG do
8:M SI/SG TBs←IN_trans_tasks
9:M TBs←GEMM tasks with j-th filter matrix
10:end for
11:end for
第四部分则将剩下的任务以图6b所示的映射关系进行分配,即,M个重用乘法任务将与MSI/SG个输入变换任务、MSOSG个输出变换任务分配到连续的线程块中,重复多次,直至输入变换任务的映射关系全部确认完毕,用伪代码表述可以是:
12:while IN_trans task remains do
13:for j←1,SG do
14:MSI/SG TBs←IN_trans_tasks
15:M TBs←GEMM tasks with j-th filter matrix
16:MSO/SG TBs←OUT_trans_tasks
17:end for
18:end while
第五部分,将剩下的乘法任务以及输出变换任务全部分配到最后的线程块,用伪代码表述可以是:
19:Last TBs←remaining GEMM and OUT_trans tasks
20:end procedure
应理解,使用本公开提供的数据处理方法中映射关系确认的算法进行映射关系的确定,能够同时达到保证任务的依赖顺序、满足GPU资源利用率平衡以及将数据放置于缓存中以及提高数据读取效率的多个目的。并且,上述算法流程中涉及的伪代码仅用于举例说明,并不能构成具体限定。内核融合的性能很大程度上依赖于任务到线程块的分配。在本公开实施例中,通过以上任务映射优化机制,从而使得融合内核的总执行时间最小化。
S103:基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果。
在一些实施例中,当前较为常见的深度学习框架(如CNTK、TensorFlow和Caffe2等)都会将一个深度学习的模型抽象成为一个由一些基本运算符(Operator)组成的有向无环的数据流图(DAG),然后再由下层计算引擎按照某一种拓扑序来依次调度并执行这些Operator节点对应的内核函数,从而完成一个模型的执行。这些粒度较小的内核(Kernel)函数在提供了灵活性的同时,其频繁的调用也成为当前影响许多深度学习框架性能的一个重要因素,其带来的性能开销主要体现在:数据流图的调度开销,GPU内核函数的启动开销,以及内核函数之间的数据传输开销。因此,对所述多个待处理任务进行内核融合处理,得到内核融合结果后,卷积加速操作的原数据流图中的节点所对应的四个函数(输入变换函数、卷积核变换函数、乘法函数和输出变换函数)融合成一个内核函数,使得整个数据流图只需要通过一次内核函数调用即可完成,从而减小平台调度和内核启动带来的开销。例如,图8显示了一种内核融合前后的GPU执行模型示意图,假设卷积核变换已在线下预处理阶段提前完成,由图8可知,在进行内核融合之前,GPU需要依次调度kernel_1、kernel_2以及kernel_3从而完成三个阶段的任务,在进行内核融合后,GPU只需调度一次kernel,根据任务和线程块之间的映射关系依次启动线程块,即可完成全部任务,极大地提高数据传输效率,降低GPU内核启动带来的额外开销,从而提升整体计算性能。
S104:利用所述多个线程块执行所述内核融合结果。
在一些实施例中,所述利用所述多个线程块执行所述内核融合结果之前,所述方法还包括:确定使用相同的内存区域存储所述多个待处理任务中对应于所述待处理数据的不同输入向量的多个不同类型的任务;为所述多个不同类型的任务之间建立任务依赖关系。也就是说,如果两个任务没有时间上的冲突,那么这两个任务可以使用相同的GPU内存进行任务的执行,从而实现GPU内存的重复利用,进一步减少整个卷积加速操作的内存占用。这里,两个没有时间是冲突的任务指的是对应不同输入向量的多个不同类型的任务,图9显示了本公开实施例提供的内存回收机制。其中,如果两个任务没有时间上的冲突,那么这两个任务的数据可以使用相同的GPU内存,从而实现GPU内存的重复利用,减少了整个函数的内存占用。其中,为了保证任务没有冲突,保证使用相同内存区域的任务不会同时进行,我们增加一些新的依赖关系。例如,如图9所示,假设任务组A和任务组B使用相同的内存区域,那么,B的输入变换阶段必须在A的GEMM阶段之后才能开始进行。A的输入变换和B的GEMM阶段的依赖相似。利用这一内存回收策略,我们可以达到减少70%的GPU内存占用的效果,从而大大提高了GPU处理性能。
在一些实施例中,所述利用所述多个线程块执行所述内核融合结果,包括:基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,其中,所述第三任务依赖于所述第四任务。这里,第三任务和第四任务之间的依赖关系,不但包括对应同一输入向量的多个待处理任务之间的依赖关系,还包括为了达到内存回收目的而在多个对应不同输入向量的多个不同类型的任务之间建立的依赖关系。可以理解的是,在线程块根据映射关系执行对应的任务时,如果映射关系出现了问题,还可以通过确认第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,换句话说,每个任务的依赖任务是否完成,来进步一确保所述多个待处理任务中的执行顺序的正确性。
在一些实施例中,所述基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,包括:基于所述至少一个第四任务中每个第四任务当前的执行状态,确定所述第三任务的当前未完成依赖任务的数量;响应于所述第三任务的当前未完成依赖任务数量更新为0,调用线程块执行所述第三任务。例如,图10是本公开提供的一种线程块执行所述内核融合结果的流程示意图,其中,调度系统为每个任务维护一个计数器,用于记录当前任务的未完成依赖任务的数量,线程块执行所述内核融合结果的流程可以分为4步,首先,线程块根据映射关系获取自己需要执行的当前任务;其次,根据计数器确定当前任务的未完成依赖任务个数是否为0,在计数器个数为0的情况下,进行第三步,如果不为0,将会阻止该线程块继续执行当前任务;第三,线程块执行任务;最后,线程块更新依赖当前任务的其他任务的计数器。从而进一步地确保了所述多个待处理任务中的执行顺序的正确性。
在任务映射步骤中,任务被预先分配给TBs,因此TBs能够访问映射数组来获取其任务。在运行时,根据任务类型,不同的TBs执行不同的设备函数。此外,为每个具有依赖关系的TB维护一个依赖计数器,该计数器记录其未完成的父TBs的数量。基于父TBs的状态,TB更新它的依赖计数器,直到更新为0,意味着依赖项清除。这样就保留了原始的任务执行顺序。
本公开实施例应用的运行时调度系统简单而有效,并且具有多种优势。首先,它所带来的调度开销非常小。它只需要一个额外的内存事务(读取任务映射数组)和两个原子操作(检查和更新依赖项)。其次,可以灵活地调整不同的任务映射解决方案。如果多个任务分配到相邻的TBs,则它们可以并行运行,反之亦然。最后,静态任务映射不会影响GPU流多处理器(streaming multiprocessor,SM)之间的负载平衡,因为一旦任何SM上有空闲空间,TBs将通过GPU的内部TB调度程序调度到GPU。
上述方法中,通过获取基于神经网络的至少一个输入图像得到的待处理数据,确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果,从而利用所述多个线程块执行所述内核融合结果。由于加速卷积操作中的多个个计算节点所对应的函数融合成为一个内核函数,使得GPU在进行加速卷积操作时,整个加速卷积操作只需要通过一次内核函数调用即可完成,大大减少了GPU内核启动带来的开销,极大地提高数据传输效率,从而使得GPU进行卷积运算时拥有更快的运算速度。
图11是本公开提供的数据处理装置的结构示意图。由图11可知,所述数据处理装置1100包括获取单元1110、确定单元1120处理单元1130、执行单元1140以及建立单元1150。
所述获取单元1110用于获取基于神经网络的至少一个输入图像得到的待处理数据。
所述待处理数据可以包括神经网络中任意一个卷积层的输入数据,例如,待处理数据是输入图像,相应地,该加速卷积操作可以是神经网络的第一层的处理流程的至少一部分。再例如,待处理数据是通过神经网络对输入图像进行处理得到的特征数据,相应地,该加速卷积操作可以是神经网络的一个中间层或最后一层的处理流程的至少一部分,本公开实施例对此不做限定。
在一些实施例中,所述待处理数据可以包括多个如图2a所示的输入向量。并且,由于卷积神经网络中的每一个卷积层都会进行输入数据与卷积核滑动卷积的操作,所述待处理数据还包括卷积核数据。其中,所述待处理数据中输入数据的格式可以是数量高度宽度通道(Number,Height,Width,Channel,NHWC)格式或数量通道高度宽度(Number,Channel,Height,Width,NCHW)格式或其他格式,其中,N表示所述待处理数据对应的图像数量,H表示垂直方向的像素数量,W表示水平方向的像素数量,C指通道数量,例如灰色图像C=1,彩色RBG图像C=3。
在一些实施例中,所述待处理数据格式是数量高度宽度通道NHWC格式,所述执行单元1140中执行所述输入变换任务的线程块,其中,不同通道的待处理数据对应所述线程块中的不同线程。也就是说,每个线程块包含多个线程,执行输入变换任务的线程块在读取所述待处理数据时,每个线程读取同一窗口对应的不同通道的数据。以图2a所示的待处理数据为例,每个线程块中的线程读取窗口1对应的3个通道的数据,其中,一个线程对应一个窗口。由图4可知,NHWC格式的待处理数据中的每一排数据恰好都是同一窗口对应的不同通道的数据。
在一些实施例中,将一组tile按channel维度展开,将每个channel分配给一个线程,相邻channel的数据位于相同的线程块中。按这个方法在每个线程中读取一个tile的数据。接下来,在每个GPU线程中对这个tile的数据进行输入变换(相当于进行和常数矩阵的矩阵乘法)。将生成的数据写入矩阵的相应位置,形成变换后的矩阵组。Tile中的每一个元素,会分别对应变换后的一个矩阵。所以,矩阵组的个数等于tile中元素的个数。矩阵的宽为c,高为t。c是输入矩阵的channel数目,t是一组变换中的tile数量。
因此,使用NHWC格式的待处理数据,再使用不同通道的待处理数据对应所述线程块中的不同线程的方法进行待处理数据的读取,恰好可以使得所有线程都在顺序读取内存中相邻的数据,不会出现线程块内部的控制流差异,从而达到100%的内存读取效率。
所述确定单元1120用于确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系。
在一些实施例中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。其中,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。由于乘法任务需要使用输入变换任务的任务结果和卷积核变换任务的任务结果进行矩阵乘法的操作,输出变换任务需要使用乘法任务的计算结果,因此将图2a所示的一个输入向量进行加速卷积操作对应的多个待处理任务定义为一个任务组,该任务组包括一个输入变换任务组、一个卷积核变换任务组、一个乘法任务组以及一个输出变换任务组,其中,乘法任务组依赖于输入变换任务组,乘法任务组依赖于卷积核变换任务组,输出变换任务组依赖于乘法任务组。可以理解的是,由于多个待处理任务是由对应数量的多个线程块执行的,GPU的运算模型并不能确保执行任务的顺序满足所述多个待处理任务之间依赖关系,因此通过确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,可以确保所述多个待处理任务中的执行顺序的正确性。
在一些实施例中,所述确定单元1120用于:确定将所述多个待处理任务中的第一任务和依赖于所述第一任务的第二任务分别映射到第一线程块和第二线程块,其中,所述第一线程块对应的执行顺序早于所述第二线程块并且所述第一线程块与所述第二线程块之间的间隔高于第一阈值。换句话说,第一任务是第二任务的依赖任务,那么第一任务的优先级高于第二任务,假如线程块按线程块ID(BlockIDx)从小到大的顺序进行调度,那么在进行多个待处理任务与多个线程块之间的映射关系的确定时,第一任务映射的线程块ID必须小于第二任务对应的线程块ID,从而确保了所述多个待处理任务中的执行顺序的正确性。应理解,线程块ID还可以按从大到小或者其他预设顺序进行调度,此处不作具体限定。
在一些实施例中,所述第一阈值对应的时间间隔大于或等于执行所述第一任务所需的时间。可以理解的是,由于执行每个待处理任务都需要一定的时间,如果执行第一任务的第一线程块还未执行完毕,第二任务的第二线程块已开始启动,那么第二线程块需要等待第一线程块执行完毕后才能执行第二任务,在等待过程中将会占用系统内存,影响其他任务的执行。假设第一任务为输入变换任务,第二任务为乘法任务,执行第一线程块与第二线程块之间的间隔,为DIG,那么DIG的大小对线程块执行任务的影响可以如图5所示,其中,I1为第一任务,也就是输入变换任务,G1为第二任务,也就是乘法任务,Tst(G1)为乘法任务开始的时间,Ted(I1)为输入变换任务结束的时间,Twait(G1)为执行乘法任务的第二线程块需要等待的时间,图5左边图像表示如果DIG太小,未大于第一阈值,或者说小于执行所述第一任务所需的时间,当I1未执行完毕,执行G1的第二线程块已开始启动,那么第二线程块需要等待Twait(G1),即I1执行完毕后才能执行G1,在等待过程中将会占用系统内存,影响其他任务的执行;图5右边的图像表示如果DIG大于了第一阈值,或者说大于执行所述第一任务所需的时间时,由于Tst(G1)处于Ted(I1)之后,第二线程块一启动就可以马上执行任务G1,不需要等待Twait(G1),从而避免了第二线程块等待第一线程块执行第一任务这一情况的发生,极大地提高了任务的处理效率。应理解,图5仅用于举例说明,第一阈值还可以恰好等于第一线程块与第二线程块之间的间隔,并不能构成具体限定。
在一些实施例中,所述确定单元1120用于:确定将所述多个待处理任务中的n2个乘法任务与n1个输入变换任务映射至多个连续的线程块中,其中,n1:n2满足所述多个待处理任务中包含的输入变换任务数量SI与所述多个待处理任务中包含的乘法任务数量SG的比值;或者,确定将所述多个待处理任务中的n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n2:n3满足所述SG与所述多个待处理任务中包含的输出变换任务数量SO的比值;或者,确定将所述多个待处理任务中的n1个输入变换任务、n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n1:n2:n3满足SI:SG:SO。应理解,对于GPU来说,乘法任务是计算密集型任务,而输入变换任务、卷积核变换任务以及输出变换任务是访存密集型任务,如果将计算密集型任务和访存密集型任务并行执行,可以达到GPU资源利用率平衡的目的,从而提高GPU整体的计算性能。但是多个待处理任务中计算密集型任务数量和访存密集型任务数量是不同的,如果随机的分配同时执行计算密集型任务数量和访存密集型任务的数量,最后可能会出现剩余大量访存密集型任务或者计算密集型任务单独执行的情况。因此在一组连续的线程块所映射的待处理任务中,输入变换任务、乘法任务以及输出变换任务的任务数量之比应满足SI:SG:SO,从而最大化地达到GPU资源利用率的平衡。
在一些实施例中,所述确定单元1120用于:确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块。由上文叙述的加速卷积操作的基本原理以及GPU处理加速卷积操作时产生的多个待处理任务的特点可知,所述多个待处理任务中有些任务是存在数据重用关系的,其中,存在数据重用关系的任务主要可以分为三种:输入变换任务的重用,乘法任务的重用,生产者消费者的重用。其中,输入变换任务的重用指的是输入重叠数据的重用,例如图2a所示的窗口1与窗口2的重叠部分,输入变换任务产生数据重用的原因已在上文对输入变换任务的介绍中进行过解释,因此不再展开阐述;乘法任务的重用指的是使用相同卷积核的乘法任务;生产者消费者重用指的是上一阶段生成的数据在下一阶段被使用,例如输入变换任务的执行结果被乘法任务使用,乘法任务的执行结果被输出变换任务使用。可以理解的是,存在数据重用关系的任务执行的时间间隔小于第二阈值时,可以将数据放置于缓存中,从而提高数据读取效率,减少数据传输的开销。但是缓存容量是有限的,如果第二阈值过大,缓存中存储的数据可能会达到容量上限,导致个别任务无法将重用数据存储在缓存中。因此,优选地,可以将所述多个待处理任务中存在数据重用关系的多个任务映射至多个连续的线程块,从而最大化地提高数据读取效率,减少数据传输的开销。
在一些实施例中,输入变换任务全部都存在输入重叠数据的重用,生产者消费者的重用只有在缓存容量比较大时,才有可能会实现,因此,所述确定单元1120在确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块时,可以以存在数据重用关系的乘法任务为主进行的映射关系的确认。而对于存在重用关系的乘法任务来讲,根据上文描述的乘法任务基本原理可知,图2a所示的一个输入向量进行加速卷积操作时,虽然是使用同一个卷积核进行的加速卷积操作,但是由于卷积核变换和输入变换后的矩阵进行了拆分,由之前的c×t个n×n的矩阵重组为n×n个c×t的矩阵,因此,图2a所示的一个输入向量生成的一个乘法任务组中的每个乘法任务中使用的变换后的卷积核是不同的,但是如果其他输入向量使用相同的卷积核进行卷积操作时,不同乘法任务组中的乘法任务,使用的卷积核是可能相同的,换句话说,不同乘法任务组中的乘法任务存在数据重用关系。因此将M组使用同一个卷积核的乘法任务组进行重组,可以获得SG个重用乘法任务组,每个重用乘法任务组中的任务数量为M个,每个重用乘法任务组中的乘法任务使用同一个变换后的卷积核。
在一些实施例中,前文描述的确定单元1120以存在数据重用关系的乘法任务为主进行的映射关系的确认可以是,以重用乘法任务组为基准进行待处理任务与线程块之间映射关系的确认。例如,图6b是本公开提供的一种多个待处理任务与多个连续线程块映射关系的示意图,其中,乘法任务的数量为M个,且属于同一个重用乘法任务组,也就是说,图6b中的M个乘法任务使用相同的转换后的卷积核,在进行待处理任务与线程块映射关系的确认时,可以将M个乘法任务,MSI/SG个输入变换任务以及MSO/SG个输出变换任务与连续的线程块一一对应,使得输入变换任务、乘法任务以及输出变换任务的任务数量之比满足SI:SG:SO,从而达到了GPU资源利用率平衡的目的。并且输入变换任务、乘法任务之间均存在数据重用,进一步满足了将重用数据放置于缓存中,从而提高数据读取效率,减少数据传输的开销的目的。
在一些实施例中,综合可知,确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系可以是按图7所示的步骤流程图进行确认的,图7是本公开提出的一种数据处理方法中确认待处理任务与线程块之间映射关系的步骤流程图,由图7可知,在确认所述待处理任务与线程块之间的映射关系时,主要需考虑以下三点:
首先,不能存在死锁,也就是确保执行顺序的正确性。
在一些实施例中,线程块是按照线程块ID(blockIdx)从小到大的顺序调度的,因此要保证当前任务所依赖的任务的blockIdx必须小于当前任务。
在一些实施例中,父任务和子任务之间须有一定的时间间隔,由于每个任务执行都需要时间,所以要保证一定的时间间隔,才能保证子任务等待父任务完成的时间尽可能小。例如,每个任务在执行时,其依赖任务已经执行完毕,但本公开实施例不限于此。
其次,要确保GPU资源利用率的平衡,由于矩阵乘法任务是计算密集型任务,而输入/输出变换任务是访存密集型任务。我们在进行任务映射时,将计算密集型和访存密集型任务分配在同一时间并行执行,可以达到优化GPU资源分配的目的。在一些实施例中,在一组连续的线程块(TB)中,输入变换:矩阵乘法:输出变换的任务比例满足其在原始核函数中的线程块数量之比例,例如满足SI:SG:SO;
第三,考虑了到内核融合过程中的数据重用,优化任务分配以减少数据重用的距离,以满足数据可以更多的在缓存中进行重用。
在一些实施例中,要确保存在数据重用关系的任务执行的时间间隔小于第二阈值,从而可以将重用的数据放置于缓存中,提高数据读取效率,减少数据传输的开销。
在同时考虑这三点的情况下,生成多个待处理任务与多个线程块之间的映射关系,其中,一个任务对应一个线程块,从而同时达到保证任务执行顺序的正确性、满足GPU资源利用率平衡以及将数据放置于缓存中以及提高数据读取效率的多个目的,提高整体的GPU卷积加速操作的计算性能。
在一些实施例中,基于图7所示的本公开提供的数据处理方法中映射关系确认时的三个主要思想,下面对所述映射关系确认的步骤流程进行进一步地说明。所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:确定将所述多个待处理任务中包含的NF个卷积核变换任务映射到所述多个线程块中的前NF个连续线程块;确定将所述多个待处理任务中包含的多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块。可以理解的是,由于卷积核变换任务使用的公式可以表示为F0=GFGT,G作为卷积核F的变换矩阵是固定的常数矩阵,并且每个乘法任务都依赖于卷积核变换任务,因此在进行待处理任务与映射关系的确认时,可以首先分配卷积核变换任务,再对输入变换任务、乘法任务和输出变换任务进行分配。
在一些实施例中,所述确定单元用于:确定将所述多个待处理任务中包含的DIG个输入变换任务映射到所述后续N个线程块中的前DIG个连续线程块;确定将所述多个待处理任务中包含的n1个输入变换任务和m1个乘法任务映射到所述前DIG个连续线程块的后续DGO个连续线程块,其中,所述n1:m1满足SI:SG;确定将所述多个待处理任务中包含的还未分配的n2个输入变换任务、m2个乘法任务和p1个输出变换任务映射到所述后续DGO个连续线程块的后续线程块,其中,n2:m2:p1满足SI:SG:SO;;确定将所述多个待处理任务中包含的还未分配的m3个乘法任务和p2个输出变换任务映射到剩余的连续线程块。应理解,由于对应同一输入向量的乘法任务依赖于输入变换任务,输出变换任务又依赖于乘法任务,因此在分配待处理任务与前NF个连续线程块的后续N个线程块的映射关系时,可以首先分配DIG个输入变换任务对应连续的线程块,同时为了保证资源利用率的平衡,也就是计算密集型任务能够与仿存密集型任务同时执行,可以紧接着再分配DGO个输入变换任务和乘法任务对应连续的线程块,并且输入变换任务和乘法任务的数量之比为SI:SG,其中,DIG可以是执行输入变换任务以及乘法任务的线程块之间的距离,DGO可以是执行输出变换任务以及乘法任务的线程块之间的距离,这里,线程块之间的距离可以指的是线程块编号的差值。最后,由于输入变换任务以及乘法任务均已执行了一部分,因此最后可以将未分配的待处理任务,按照SI:SG:SO的比例进行映射关系的确认。应理解,由于输入变换任务分配的最早,因此可能会出现输入变换任务最先分配完毕的情况,如果输入变换任务与线程块的映射关系已经确认完毕,可以将剩下的输出变换任务以及乘法任务在确保任务依赖关系的前提下进行分配,直至所有映射关系确认完毕。
在一些实施例中,所述n1个输入变换任务存在数据重用关系,所述m1个乘法任务存在数据重用关系。也就是说,在上文描述的将多个输入变换任务、多个乘法任务和多个输出变换任务映射到所述前NF个连续线程块的后续N个线程块的过程中,输入变换任务以及乘法任务均为存在数据重用关系的乘法任务,具体地,可以按照图6b进行映射关系的确认,从而同时达到保证任务的依赖顺序、满足GPU资源利用率平衡以及将数据放置于缓存中以及提高数据读取效率的多个目的。
所述处理单元1130用于基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果。
在一些实施例中,当前较为常见的深度学习框架(如CNTK、TensorFlow和Caffe2等)都会将一个深度学习的模型抽象成为一个由一些基本运算符(Operator)组成的有向无环的数据流图(DAG),然后再由下层计算引擎按照某一种拓扑序来依次调度并执行这些Operator节点对应的内核函数,从而完成一个模型的执行。这些粒度较小的内核(kernel)函数在提供了灵活性的同时,其频繁的调用也成为当前影响许多深度学习框架性能的一个重要因素,其带来的性能开销主要体现在:数据流图的调度开销,GPU内核函数的启动开销,以及内核函数之间的数据传输开销。因此,对所述多个待处理任务进行内核融合处理,得到内核融合结果后,卷积加速操作的原数据流图中的节点所对应的四个函数(输入变换函数、卷积核变换函数、乘法函数和输出变换函数)融合成一个内核函数,使得整个数据流图只需要通过一次内核函数调用即可完成,从而减小平台调度和内核启动带来的开销。
所述执行单元1140用于利用所述多个线程块执行所述内核融合结果。
在一些实施例中,所述装置还包括建立单元1150,所述建立单元1150用于在所述利用所述多个线程块执行所述内核融合结果之前,确定使用相同的内存区域存储所述多个待处理任务中对应于所述待处理数据的不同输入向量的多个不同类型的任务;为所述多个不同类型的任务之间建立任务依赖关系。也就是说,如果两个任务没有时间上的冲突,那么这两个任务可以使用相同的GPU内存进行任务的执行,从而实现GPU内存的重复利用,进一步减少整个卷积加速操作的内存占用。这里,两个没有时间是冲突的任务指的是对应不同输入向量的多个不同类型的任务,图9显示了本公开实施例提供的内存回收机制。其中,如果两个任务没有时间上的冲突,那么这两个任务的数据可以使用相同的GPU内存,从而实现GPU内存的重复利用,减少了整个函数的内存占用。其中,为了保证任务没有冲突,保证使用相同内存区域的任务不会同时进行,我们增加一些新的依赖关系。例如,如图9所示,假设任务组A和任务组B使用相同的内存区域,那么,B的输入变换阶段必须在A的GEMM阶段之后才能开始进行。A的输入变换和B的GEMM阶段的依赖相似。利用这一内存回收策略,我们可以达到减少70%的GPU内存占用的效果,从而大大提高了GPU处理性能。
在一些实施例中,所述执行单元还用于:基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,其中,所述第三任务依赖于所述第四任务。这里,第三任务和第四任务之间的依赖关系,不但包括对应同一输入向量的多个待处理任务之间的依赖关系,还包括为了达到内存回收目的而在多个对应不同输入向量的多个不同类型的任务之间建立的依赖关系。可以理解的是,在线程块根据映射关系执行对应的任务时,如果映射关系出现了问题,还可以通过确认第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,换句话说,每个任务的依赖任务是否完成,来进步一确保所述多个待处理任务中的执行顺序的正确性。
在一些实施例中,所述执行单元用于:基于所述至少一个第四任务中每个第四任务当前的执行状态,确定所述第三任务的当前未完成依赖任务的数量;响应于所述第三任务的当前未完成依赖任务数量更新为0,调用线程块执行所述第三任务。例如,图10是本公开提供的一种线程块执行所述内核融合结果的流程示意图,其中,调度系统为每个任务维护一个计数器,用于记录当前任务的未完成依赖任务的数量,线程块执行所述内核融合结果的流程可以分为4步,首先,线程块根据映射关系获取自己需要执行的当前任务;其次,根据计数器确定当前任务的未完成依赖任务个数是否为0,在计数器个数为0的情况下,进行第三步,如果不为0,将会阻止该线程块继续执行当前任务;第三,线程块执行任务;最后,线程块更新依赖当前任务的其他任务的计数器。从而进一步地确保了所述多个待处理任务中的执行顺序的正确性。
在任务映射步骤中,任务被预先分配给TBs,因此TBs能够访问映射数组来获取其任务。在运行时,根据任务类型,不同的TBs执行不同的设备函数。此外,为每个具有依赖关系的TB维护一个依赖计数器,该计数器记录其未完成的父TBs的数量。基于父TBs的状态,TB更新它的依赖计数器,直到更新为0,意味着依赖项清除。这样就保留了原始的任务执行顺序。
本公开实施例应用的运行时调度系统简单而有效,并且具有多种优势。首先,它所带来的调度开销非常小。它只需要一个额外的内存事务(读取任务映射数组)和两个原子操作(检查和更新依赖项)。其次,可以灵活地调整不同的任务映射解决方案。如果多个任务分配到相邻的TBs,则它们可以并行运行,反之亦然。最后,静态任务映射不会影响GPU流多处理器(streaming multiprocessor,SM)之间的负载平衡,因为一旦任何SM上有空闲空间,TBs将通过GPU的内部TB调度程序调度到GPU。
上述装置中,通过获取基于神经网络的至少一个输入图像得到的待处理数据,确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果,从而利用所述多个线程块执行所述内核融合结果。由于加速卷积操作中的多个个计算节点所对应的函数融合成为一个内核函数,使得GPU在进行加速卷积操作时,整个加速卷积操作只需要通过一次内核函数调用即可完成,大大减少了GPU内核启动带来的开销,极大地提高数据传输效率,从而使得GPU进行卷积运算时拥有更快的运算速度。
图12是本公开实施例提供的一种电子设备结构示意框图。如图12所示,本实施例中的电子设备1200可以包括:一个或多个处理器1201;一个或多个输入设备1202,一个或多个输出设备1203和存储器1204。上述处理器1201、输入设备1202、输出设备1203和存储器1204通过总线1205连接。存储器1202用于存储计算机程序,所述计算机程序包括程序指令,处理器1201用于执行存储器1202存储的程序指令。
在本公开实施例中,所称处理器1201可以是中央处理单元(Central ProcessingUnit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输入设备1202可以包括触控板、指纹采传感器(用于采集用户的指纹信息和指纹的方向信息)、麦克风等,输出设备1203可以包括显示器(LCD等)、扬声器等。
存储器1204可以包括易失性存储器,例如随机存取存储器(Random AccessMmemory,RAM);存储器也可以包括非易失性存储器,例如只读存储器(Read-Only Memory,ROM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-StateDrive,SSD),存储器还可以包括上述种类的存储器的组合。存储器1204可以采用集中式存储,也可以采用分布式存储,此处不作具体限定。可以理解的是,存储器1204用于存储计算机程序,例如:计算机程序指令等。在本公开实施例中,存储器1204可以向处理器1201提供指令和数据。
具体实现中,本公开实施例中所描述的处理器1201、输入设备1202、输出设备1203、存储器1204、总线1205可执行本公开提供的数据处理方法的任一实施例中所描述的实现方式,并且,本公开提供的数据处理方法还可以在云服务集群中实现,所述云服务集群包括至少一个电子设备1200,在此不再赘述。
在本公开的另一实施例中提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时实现本公开提供的数据处理方法的任一实施例中所描述的实现方式,在此不再赘述。
所述计算机可读存储介质可以是前述任一实施例所述的终端的内部存储单元,例如终端的硬盘或内存。所述计算机可读存储介质也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述计算机可读存储介质还可以既包括所述终端的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本公开所提供的几个实施例中,应该理解到,所揭露的电子设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的电子设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本公开实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
获取基于神经网络的至少一个输入图像得到的待处理数据;
确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系;
基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果;
利用所述多个线程块执行所述内核融合结果。
2.根据权利要求1所述的方法,其特征在于,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:
确定将所述多个待处理任务中的第一任务和依赖于所述第一任务的第二任务分别映射到第一线程块和第二线程块,其中,所述第一线程块对应的执行顺序早于所述第二线程块并且所述第一线程块与所述第二线程块之间的间隔高于第一阈值。
3.根据权利要求1或2所述的方法,其特征在于,所述多个待处理任务包括卷积核变换任务、输入变换任务、乘法任务及输出变换任务。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系,包括:
确定将所述多个待处理任务中的n2个乘法任务与n1个输入变换任务映射至多个连续的线程块中,其中,n1:n2满足所述多个待处理任务中包含的输入变换任务数量SI与所述多个待处理任务中包含的乘法任务数量SG的比值;或者,
确定将所述多个待处理任务中的n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n2:n3满足所述SG与所述多个待处理任务中包含的输出变换任务数量SO的比值;或者,
确定将所述多个待处理任务中的n1个输入变换任务、n2个乘法任务和n3个输出变换任务映射至多个连续的线程块中,其中,n1:n2:n3满足SI:SG:SO。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系包括:
确定将所述多个待处理任务中存在数据重用关系的多个任务映射至间隔小于第二阈值的多个线程块。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述利用所述多个线程块执行所述内核融合结果之前,所述方法还包括:
确定使用相同的内存区域存储所述多个待处理任务中对应于所述待处理数据的不同输入向量的多个不同类型的任务;
为所述多个不同类型的任务之间建立任务依赖关系。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述利用所述多个线程块执行所述内核融合结果,包括:
基于所述多个待处理任务中的第三任务对至少一个第四任务的依赖关系以及至少一个所述第四任务的执行状态,调度所述第三任务,其中,所述第三任务依赖于所述第四任务。
8.一种数据处理装置,其特征在于,包括:
获取单元,所述获取单元用于获取基于神经网络的至少一个输入图像得到的待处理数据;
确定单元,所述确定单元用于确定对所述待处理数据的加速卷积操作对应的多个待处理任务与多个线程块之间的映射关系;
处理单元,所述处理单元用于基于所述映射关系,对所述多个待处理任务进行内核融合处理,得到内核融合结果;
执行单元,所述执行单元用于利用所述多个线程块执行所述内核融合结果。
9.一种电子设备,其特征在于,包括处理器和存储器,其中,所述存储器用于存储计算机程序指令,所述处理器被配置用于调用所述计算机程序指令,执行权利要求1至7任一权利要求所述的方法。
10.一种计算机可读存储介质,用于存储计算机可读取的指令,其特征在于,所述指令被执行时执行权利要求1至7一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910146115.4A CN109886407B (zh) | 2019-02-27 | 2019-02-27 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910146115.4A CN109886407B (zh) | 2019-02-27 | 2019-02-27 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109886407A true CN109886407A (zh) | 2019-06-14 |
CN109886407B CN109886407B (zh) | 2021-10-22 |
Family
ID=66929668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910146115.4A Active CN109886407B (zh) | 2019-02-27 | 2019-02-27 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109886407B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110866590A (zh) * | 2019-10-22 | 2020-03-06 | Oppo广东移动通信有限公司 | 数据处理方法及装置、电子设备、存储介质 |
CN111736904A (zh) * | 2020-08-03 | 2020-10-02 | 北京灵汐科技有限公司 | 多任务并行处理方法、装置、计算机设备及存储介质 |
CN112711478A (zh) * | 2019-10-24 | 2021-04-27 | 珠海零边界集成电路有限公司 | 基于神经网络的任务处理方法、装置、服务器和存储介质 |
CN113806033A (zh) * | 2020-12-23 | 2021-12-17 | 京东科技控股股份有限公司 | 用于任务系统的任务执行方法、装置、服务器和介质 |
CN113905273A (zh) * | 2021-09-29 | 2022-01-07 | 上海阵量智能科技有限公司 | 任务执行方法和设备 |
WO2022057054A1 (zh) * | 2020-09-18 | 2022-03-24 | 深圳先进技术研究院 | 一种卷积运算优化方法、系统、终端以及存储介质 |
CN114880082A (zh) * | 2022-03-21 | 2022-08-09 | 西安电子科技大学 | 基于采样状态的多线程束warp动态调度系统及方法 |
WO2022174395A1 (zh) * | 2021-02-19 | 2022-08-25 | 华为技术有限公司 | 图形处理器、图像处理方法和电子设备 |
CN115878330A (zh) * | 2023-02-08 | 2023-03-31 | 腾云创威信息科技(威海)有限公司 | 线程的运行控制方法及其系统 |
CN116483536A (zh) * | 2023-04-24 | 2023-07-25 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
CN114880082B (zh) * | 2022-03-21 | 2024-06-04 | 西安电子科技大学 | 基于采样状态的多线程束warp动态调度系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488662A (zh) * | 2013-04-01 | 2014-01-01 | 哈尔滨工业大学深圳研究生院 | 基于图形处理单元的自组织映射神经网络聚类方法及系统 |
CN105550749A (zh) * | 2015-12-09 | 2016-05-04 | 四川长虹电器股份有限公司 | 一种新型网络拓扑结构的卷积神经网络的构造方法 |
CN105869117A (zh) * | 2016-03-28 | 2016-08-17 | 上海交通大学 | 一种针对深度学习超分辨率技术的gpu加速方法 |
CN107229969A (zh) * | 2017-06-21 | 2017-10-03 | 郑州云海信息技术有限公司 | 一种基于fpga的卷积神经网络实现方法及装置 |
US20180088998A1 (en) * | 2016-09-23 | 2018-03-29 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
-
2019
- 2019-02-27 CN CN201910146115.4A patent/CN109886407B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103488662A (zh) * | 2013-04-01 | 2014-01-01 | 哈尔滨工业大学深圳研究生院 | 基于图形处理单元的自组织映射神经网络聚类方法及系统 |
CN105550749A (zh) * | 2015-12-09 | 2016-05-04 | 四川长虹电器股份有限公司 | 一种新型网络拓扑结构的卷积神经网络的构造方法 |
CN105869117A (zh) * | 2016-03-28 | 2016-08-17 | 上海交通大学 | 一种针对深度学习超分辨率技术的gpu加速方法 |
US20180088998A1 (en) * | 2016-09-23 | 2018-03-29 | Samsung Electronics Co., Ltd. | Multi-thread processor and controlling method thereof |
CN107229969A (zh) * | 2017-06-21 | 2017-10-03 | 郑州云海信息技术有限公司 | 一种基于fpga的卷积神经网络实现方法及装置 |
Non-Patent Citations (2)
Title |
---|
晋雅茹: ""基于GPU的深度学习算法并行化研究"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
薛继龙: ""内核融合:GPU深度学习的加速神器"", 《MICROSOFT:HTTPS://WWW.MSRA.CN/ZH-CN/NEWS/FEATURES/KERNEL-FUSION-20170925》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110866590A (zh) * | 2019-10-22 | 2020-03-06 | Oppo广东移动通信有限公司 | 数据处理方法及装置、电子设备、存储介质 |
CN112711478A (zh) * | 2019-10-24 | 2021-04-27 | 珠海零边界集成电路有限公司 | 基于神经网络的任务处理方法、装置、服务器和存储介质 |
CN112711478B (zh) * | 2019-10-24 | 2024-05-28 | 珠海零边界集成电路有限公司 | 基于神经网络的任务处理方法、装置、服务器和存储介质 |
CN111736904A (zh) * | 2020-08-03 | 2020-10-02 | 北京灵汐科技有限公司 | 多任务并行处理方法、装置、计算机设备及存储介质 |
WO2022027902A1 (zh) * | 2020-08-03 | 2022-02-10 | 北京灵汐科技有限公司 | 多任务并行处理方法、装置、计算机设备及存储介质 |
US11392426B2 (en) | 2020-08-03 | 2022-07-19 | Lynxi Technologies Co., Ltd. | Multitask parallel processing method and apparatus, computer device and storage medium |
WO2022057054A1 (zh) * | 2020-09-18 | 2022-03-24 | 深圳先进技术研究院 | 一种卷积运算优化方法、系统、终端以及存储介质 |
CN113806033A (zh) * | 2020-12-23 | 2021-12-17 | 京东科技控股股份有限公司 | 用于任务系统的任务执行方法、装置、服务器和介质 |
CN113806033B (zh) * | 2020-12-23 | 2024-05-17 | 京东科技控股股份有限公司 | 用于任务系统的任务执行方法、装置、服务器和介质 |
WO2022174395A1 (zh) * | 2021-02-19 | 2022-08-25 | 华为技术有限公司 | 图形处理器、图像处理方法和电子设备 |
CN113905273B (zh) * | 2021-09-29 | 2024-05-17 | 上海阵量智能科技有限公司 | 任务执行方法和设备 |
CN113905273A (zh) * | 2021-09-29 | 2022-01-07 | 上海阵量智能科技有限公司 | 任务执行方法和设备 |
CN114880082A (zh) * | 2022-03-21 | 2022-08-09 | 西安电子科技大学 | 基于采样状态的多线程束warp动态调度系统及方法 |
CN114880082B (zh) * | 2022-03-21 | 2024-06-04 | 西安电子科技大学 | 基于采样状态的多线程束warp动态调度系统及方法 |
CN115878330A (zh) * | 2023-02-08 | 2023-03-31 | 腾云创威信息科技(威海)有限公司 | 线程的运行控制方法及其系统 |
CN116483536B (zh) * | 2023-04-24 | 2024-05-10 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
CN116483536A (zh) * | 2023-04-24 | 2023-07-25 | 上海芷锐电子科技有限公司 | 数据调度方法、计算芯片及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109886407B (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109886407A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN108062246B (zh) | 用于深度学习框架的资源调度方法和装置 | |
CN108304250A (zh) | 用于确定运行机器学习任务的节点的方法和装置 | |
CN109426885A (zh) | 订单分配方法和装置 | |
CN108737325A (zh) | 一种多租户数据隔离方法、装置及系统 | |
CN109034396A (zh) | 用于处理分布式集群中的深度学习作业的方法和装置 | |
Bukata et al. | Solving the resource constrained project scheduling problem using the parallel tabu search designed for the CUDA platform | |
CN110377406A (zh) | 一种任务调度方法、装置、存储介质和服务器节点 | |
Vercellis | Multi-plant production planning in capacitated self-configuring two-stage serial systems | |
CN106933669A (zh) | 用于数据处理的装置和方法 | |
CN109947565A (zh) | 用于分配计算任务的方法和装置 | |
CN112084037A (zh) | 神经网络的内存分配方法及装置 | |
CN109471725A (zh) | 资源分配方法、装置和服务器 | |
CN109521943A (zh) | 云数据库实例的分配方法及相关产品 | |
CN106886864A (zh) | 一种业务构建方法、装置及电子设备 | |
CN111159859B (zh) | 一种云容器集群的部署方法及系统 | |
CN109213584A (zh) | 任务执行方法、装置、电子设备及计算机可读存储介质 | |
JPH03116237A (ja) | 知識処理方法 | |
CN115829451A (zh) | 物流路径规划方法、装置、计算机设备和存储介质 | |
CN110958192B (zh) | 一种基于虚拟交换机的虚拟数据中心资源分配系统及方法 | |
CN112884367A (zh) | 考虑多技能员工约束的高端装备研发过程多项目协同调度方法及系统 | |
CN109416828A (zh) | 将帧缓冲映射到逻辑显示器的装置及方法 | |
CN111191180A (zh) | 发票领域的微服务系统的构建方法、装置及存储介质 | |
Wang et al. | A sharing-oriented service selection and scheduling approach for the optimization of resource utilization | |
CN107678856A (zh) | 一种处理业务实体中增量信息的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |