数据处理方法和装置、电子设备、存储介质与流程

文档序号:17925154发布日期:2019-06-15 00:21阅读:187来源:国知局
数据处理方法和装置、电子设备、存储介质与流程

本公开涉及深度学习技术,尤其是一种数据处理方法和装置、电子设备、存储介质。



背景技术:

深度学习网络在音频和图像处理等领域有着广泛的应用。卷积运算是深度学习中最核心的算子之一,它可以有效提取特征信息,在深度学习网络中至关重要。实现卷积算子主要有两类算法,第一类是基于矩阵乘法的普通算法,第二类是基于快速算法,能够提高卷积运算的速率,然而,基于快速算法的卷积运算的速率仍有待进一步提升。



技术实现要素:

本公开实施例提供的一种数据处理技术。

根据本公开实施例的一个方面,提供的一种数据处理方法,包括:

基于待处理数据的大小和卷积核的大小,确定所述待处理数据对应的转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,其中,所述待处理数据包括n个图像,每个所述图像包括c个通道,所述n和c中的至少一项为大于1的整数;

基于所述转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,对所述待处理数据进行转换处理,得到所述转换结果矩阵;

对所述转换结果矩阵和所述卷积核进行矩阵乘法操作,获得所述待处理数据的卷积结果。

可选地,在本公开上述任一方法实施例中,所述第一数据块包括所述图像在一个通道中的一行数据。

可选地,在本公开上述任一方法实施例中,所述第二数据块为大小为r×p的数据块,其中,r为所述卷积核的列数,p为利用所述卷积核对所述待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,在本公开上述任一方法实施例中,所述第一数据块对应的所述至少一个第二数据块的个数依赖于所述第一数据块在所述第一数据块所属通道中对应的行数。

可选地,在本公开上述任一方法实施例中,若所述第一数据块对应的行数l小于所述卷积核的列数r,所述第一数据块对应的第二数据块的数量为l;

若所述第一数据块对应的行数l大于或等于r且小于或等于q,所述第一数据块对应的第二数据块的数量为r;

若所述第一数据块对应的行数l大于q,所述第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,在本公开上述任一方法实施例中,所述至少一个第二数据块为多个第二数据块,所述第一数据块对应的所述多个第二数据块包括至少一个数据块组,其中,每个所述数据块组包括所述多个第二数据块中两个相邻的第二数据块,其中,所述数据块组中一个第二数据块的右邻居数据块为所述数据块组中另一个第二数据块的下邻居。

可选地,在本公开上述任一方法实施例中,所述基于所述转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,对所述待处理数据进行转换处理,得到所述转换结果矩阵,包括:

基于所述转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,为所述待处理数据中的每个所述第一数据块分配线程块;

利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块,并将读取的所述第一数据块写入所述转换结果矩阵中对所述第一数据块具有重用关系的至少一个第二数据块。

可选地,在本公开上述任一方法实施例中,所述基于所述转换结果矩阵中多个第二数据块对所述待处理数据中的第一数据块的数据重用关系,为所述待处理数据中的每个所述第一数据块分配线程块,包括:

基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块;

将所述多个线程块中每个线程块分配给所述每个线程块对应的第一数据块。

可选地,在本公开上述任一方法实施例中,所述基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块,包括:

基于所述多个线程块中第一线程块的编号、所述待处理数据中每个图像包含的通道数量c、和每个所述通道需要的线程块数量,确定所述第一线程块在所述待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,在本公开上述任一方法实施例中,还包括:

利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中;

所述将读取的所述第一数据块写入转换结果矩阵中对所述第一数据块具有重用关系的至少一个第二数据块,包括:

读取所述共享内存中存储的所述第一数据块的至少一部分,并将读取的数据写入所述转换结果矩阵中的第二数据块。

可选地,在本公开上述任一方法实施例中,每个所述线程块包括t个线程;

在利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中之前,还包括:

基于所述共享内存的大小w与所述线程个数t,确定所述t个线程中每个线程读取的所述第一数据块的数据。

可选地,在本公开上述任一方法实施例中,所述利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块,并将读取的所述第一数据块写入所述转换结果矩阵中对所述第一数据块具有重用关系的至少一个第二数据块,包括:

通过为所述第一数据块分配的线程块对所述第一数据块进行滑动读取,并将每次读取到的数据写入所述第一数据块对应的每个所述第二数据块中的一行。

根据本公开实施例的另一个方面,提供的一种数据处理方法,包括:

读取待处理数据中多个第一数据块中的每个第一数据块,其中,所述待处理数据包括n个图像,每个所述图像包括c个通道,所述n和c中的至少一项为大于1的整数;

将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,得到所述转换结果矩阵,其中,所述至少一个第二数据块重用所述第一数据块;

对所述转换结果矩阵和卷积核进行矩阵乘法操作,获得所述待处理数据的卷积结果。

可选地,在本公开上述任一方法实施例中,所述第一数据块包括所述图像在一个通道中的一行数据。

可选地,在本公开上述任一方法实施例中,所述第二数据块为大小为r×p的数据块,其中,r为所述卷积核的列数,p为利用所述卷积核对所述待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,在本公开上述任一方法实施例中,所述第一数据块对应的所述至少一个第二数据块的个数依赖于所述第一数据块在所述第一数据块所属通道中对应的行数。

可选地,在本公开上述任一方法实施例中,若所述第一数据块对应的行数l小于所述卷积核的列数r,所述第一数据块对应的第二数据块的数量为l;

若所述第一数据块对应的行数l大于或等于r且小于或等于q,所述第一数据块对应的第二数据块的数量为r;

若所述第一数据块对应的行数l大于q,所述第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,在本公开上述任一方法实施例中,所述至少一个第二数据块为多个第二数据块,所述第一数据块对应的所述多个第二数据块包括至少一个数据块组,其中,每个所述数据块组包括所述多个第二数据块中两个相邻的第二数据块,其中,所述数据块组中一个第二数据块的右邻居数据块为所述数据块组中另一个第二数据块的下邻居。

可选地,在本公开上述任一方法实施例中,所述将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,得到所述转换结果矩阵之前,还包括:

基于待处理数据的大小和所述卷积核的大小,确定所述转换结果矩阵中的所述至少一个第二数据块与所述第一数据块的数据重用关系;

所述将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,包括:

基于所述转换结果矩阵中的所述至少一个第二数据块与所述第一数据块的数据重用关系,将所述第一数据块写入转换结果矩阵中的所述至少一个第二数据块。

可选地,在本公开上述任一方法实施例中,所述读取待处理数据中多个第一数据块中的每个第一数据块,包括:

为所述待处理数据中的每个所述第一数据块分配线程块;

利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块。

可选地,在本公开上述任一方法实施例中,所述为所述待处理数据中的每个所述第一数据块分配线程块,包括:

基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块;

将所述多个线程块中每个线程块分配给所述每个线程块对应的第一数据块。

可选地,在本公开上述任一方法实施例中,所述基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块,包括:

基于所述多个线程块中第一线程块的编号、所述待处理数据中每个图像包含的通道数量c、和每个所述通道需要的线程块数量,确定所述第一线程块在所述待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,在本公开上述任一方法实施例中,还包括:

利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中;

所述将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,包括:

读取所述共享内存中存储的所述第一数据块的至少一部分,并将读取的数据写入所述转换结果矩阵中的第二数据块。

可选地,在本公开上述任一方法实施例中,每个所述线程块包括t个线程;

在利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中之前,还包括:

基于所述共享内存的大小w与所述线程个数t,确定所述t个线程中每个线程读取的所述第一数据块的数据。

可选地,在本公开上述任一方法实施例中,所述将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,包括:

将每次对所述第一数据块进行滑动读取到的数据写入所述第一数据块对应的每个所述第二数据块中的一行。

根据本公开实施例的又一个方面,提供的一种数据处理装置,包括:

数据重用关系确定单元,用于基于待处理数据的大小和卷积核的大小,确定所述待处理数据对应的转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,其中,所述待处理数据包括n个图像,每个所述图像包括c个通道,所述n和c中的至少一项为大于1的整数;

数据转换单元,用于基于所述转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,对所述待处理数据进行转换处理,得到所述转换结果矩阵;

结果计算单元,用于对所述转换结果矩阵和所述卷积核进行矩阵乘法操作,获得所述待处理数据的卷积结果。

可选地,在本公开上述任一装置实施例中,所述第一数据块包括所述图像在一个通道中的一行数据。

可选地,在本公开上述任一装置实施例中,所述第二数据块为大小为r×p的数据块,其中,r为所述卷积核的列数,p为利用所述卷积核对所述待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,在本公开上述任一装置实施例中,所述第一数据块对应的所述至少一个第二数据块的个数依赖于所述第一数据块在所述第一数据块所属通道中对应的行数。

可选地,在本公开上述任一装置实施例中,若所述第一数据块对应的行数l小于所述卷积核的列数r,所述第一数据块对应的第二数据块的数量为l;

若所述第一数据块对应的行数l大于或等于r且小于或等于q,所述第一数据块对应的第二数据块的数量为r;

若所述第一数据块对应的行数l大于q,所述第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,在本公开上述任一装置实施例中,所述至少一个第二数据块为多个第二数据块,所述第一数据块对应的所述多个第二数据块包括至少一个数据块组,其中,每个所述数据块组包括所述多个第二数据块中两个相邻的第二数据块,其中,所述数据块组中一个第二数据块的右邻居数据块为所述数据块组中另一个第二数据块的下邻居。

可选地,在本公开上述任一装置实施例中,所述数据转换单元,用于基于所述转换结果矩阵中至少一个第二数据块对所述待处理数据中的第一数据块的数据重用关系,为所述待处理数据中的每个所述第一数据块分配线程块;利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块,并将读取的所述第一数据块写入所述转换结果矩阵中对所述第一数据块具有重用关系的至少一个第二数据块。

可选地,在本公开上述任一装置实施例中,所述数据转换单元在基于所述转换结果矩阵中多个第二数据块对所述待处理数据中的第一数据块的数据重用关系,为所述待处理数据中的每个所述第一数据块分配线程块时,用于基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块;将所述多个线程块中每个线程块分配给所述每个线程块对应的第一数据块。

可选地,在本公开上述任一装置实施例中,所述数据转换单元在基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块时,用于基于所述多个线程块中第一线程块的编号、所述待处理数据中每个图像包含的通道数量c、和每个所述通道需要的线程块数量,确定所述第一线程块在所述待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,在本公开上述任一装置实施例中,所述装置还包括:

数据读取单元,用于利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中;

所述数据转换单元,用于读取所述共享内存中存储的所述第一数据块的至少一部分,并将读取的数据写入所述转换结果矩阵中的第二数据块。

可选地,在本公开上述任一装置实施例中,每个所述线程块包括t个线程;

所述数据读取单元,还用于基于所述共享内存的大小w与所述线程个数t,确定所述t个线程中每个线程读取的所述第一数据块的数据。

可选地,在本公开上述任一装置实施例中,所述数据转换单元在利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块,并将读取的所述第一数据块写入所述转换结果矩阵中对所述第一数据块具有重用关系的至少一个第二数据块时,具体用于通过为所述第一数据块分配的线程块对所述第一数据块进行滑动读取,并将每次读取到的数据写入所述第一数据块对应的每个所述第二数据块中的一行。

根据本公开实施例的还一个方面,提供的一种数据处理装置,包括:

数据读取单元,用于读取待处理数据中多个第一数据块中的每个第一数据块,其中,所述待处理数据包括n个图像,每个所述图像包括c个通道,所述n和c中的至少一项为大于1的整数;

数据转换单元,用于将所述第一数据块写入转换结果矩阵中与所述第一数据块对应的至少一个第二数据块,得到所述转换结果矩阵,其中,所述至少一个第二数据块重用所述第一数据块;

结果计算单元,用于对所述转换结果矩阵和卷积核进行矩阵乘法操作,获得所述待处理数据的卷积结果。

可选地,在本公开上述任一装置实施例中,所述第一数据块包括所述图像在一个通道中的一行数据。

可选地,在本公开上述任一装置实施例中,所述第二数据块为大小为r×p的数据块,其中,r为所述卷积核的列数,p为利用所述卷积核对所述待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,在本公开上述任一装置实施例中,所述第一数据块对应的所述至少一个第二数据块的个数依赖于所述第一数据块在所述第一数据块所属通道中对应的行数。

可选地,在本公开上述任一装置实施例中,若所述第一数据块对应的行数l小于所述卷积核的列数r,所述第一数据块对应的第二数据块的数量为l;

若所述第一数据块对应的行数l大于或等于r且小于或等于q,所述第一数据块对应的第二数据块的数量为r;

若所述第一数据块对应的行数l大于q,所述第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,在本公开上述任一装置实施例中,所述至少一个第二数据块为多个第二数据块,所述第一数据块对应的所述多个第二数据块包括至少一个数据块组,其中,每个所述数据块组包括所述多个第二数据块中两个相邻的第二数据块,其中,所述数据块组中一个第二数据块的右邻居数据块为所述数据块组中另一个第二数据块的下邻居。

可选地,在本公开上述任一装置实施例中,所述装置,还包括:

数据重用关系确定单元,用于基于待处理数据的大小和所述卷积核的大小,确定所述转换结果矩阵中的所述至少一个第二数据块与所述第一数据块的数据重用关系;

所述数据转换单元,用于基于所述转换结果矩阵中的所述至少一个第二数据块与所述第一数据块的数据重用关系,将所述第一数据块写入转换结果矩阵中的所述至少一个第二数据块。

可选地,在本公开上述任一装置实施例中,所述数据读取单元,用于为所述待处理数据中的每个所述第一数据块分配线程块;利用为所述第一数据块分配的线程块从所述待处理数据中读取所述第一数据块。

可选地,在本公开上述任一装置实施例中,所述数据读取单元在为所述待处理数据中的每个所述第一数据块分配线程块时,用于基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块;将所述多个线程块中每个线程块分配给所述每个线程块对应的第一数据块。

可选地,在本公开上述任一装置实施例中,所述数据读取单元在基于多个线程块中每个线程块的编号,确定所述每个线程块在所述待处理数据中对应的第一数据块时,用于基于所述多个线程块中第一线程块的编号、所述待处理数据中每个图像包含的通道数量c、和每个所述通道需要的线程块数量,确定所述第一线程块在所述待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,在本公开上述任一装置实施例中,所述数据读取单元,还用于利用为所述第一数据块分配的线程块,将读取的所述第一数据块存储到共享内存中;

所述数据转换单元,用于读取所述共享内存中存储的所述第一数据块的至少一部分,并将读取的数据写入所述转换结果矩阵中的第二数据块。

可选地,在本公开上述任一装置实施例中,每个所述线程块包括t个线程;

所述数据读取单元,还用于基于所述共享内存的大小w与所述线程个数t,确定所述t个线程中每个线程读取的所述第一数据块的数据。

可选地,在本公开上述任一装置实施例中,所述数据转换单元,用于将每次对所述第一数据块进行滑动读取到的数据写入所述第一数据块对应的每个所述第二数据块中的一行。

根据本公开实施例的又一个方面,提供的一种电子设备,包括处理器,所述处理器包括如上任意一项所述的数据处理装置。

根据本公开实施例的还一个方面,提供的一种电子设备,其特征在于,包括:存储器,用于存储可执行指令;

以及处理器,用于与所述存储器通信以执行所述可执行指令从而完成如上任意一项所述数据处理方法的操作。

根据本公开实施例的再一个方面,提供的一种计算机可读存储介质,用于存储计算机可读取的指令,所述指令被执行时执行如上任意一项所述数据处理方法的操作。

根据本公开实施例的还一个方面,提供的一种计算机程序产品,包括计算机可读代码,其特征在于,当所述计算机可读代码在设备上运行时,所述设备中的处理器执行用于实现如上任意一项所述数据处理方法的指令。

根据本公开实施例的再一个方面,提供的另一种计算机程序产品,用于存储计算机可读指令,所述指令被执行时使得计算机执行上述任一可能的实现方式中所述数据处理方法的操作。

在一个可选实施方式中,所述计算机程序产品具体为计算机存储介质,在另一个可选实施方式中,所述计算机程序产品具体为软件产品,例如sdk等。

根据本公开实施例还提供了另一种数据处理方法和装置、电子设备、计算机存储介质、计算机程序产品,其中,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

基于本公开上述实施例提供的一种数据处理方法和装置、电子设备、存储介质,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵,由于存在数据重用关系,加快了获得转换结果矩阵的速度,降低了将卷积计算转换为矩阵乘法的难度;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。

附图说明

构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:

图1为卷积运算示意图。

图2为基于矩阵乘法的卷积计算示意图。

图3为本公开实施例提供的数据处理方法的一个流程示意图。

图4为本公开实施例基于待处理数据获得结果矩阵的示例图。

图5为本公开实施例提供的数据处理方法的一个数据重用结构示意图。

图6为本公开实施例提供的数据处理方法的另一结构示意图。

图7为图像处理器结构示意图。

图8为本公开实施例提供的数据处理方法中线程块读取第一数据块中数据的示意图。

图9为本公开实施例提供的数据处理装置的结构示意图。

图10为本公开实施例提供的数据处理方法的又一个流程示意图。

图11为本公开实施例提供的数据处理装置的结构示意图。

图12为适于用来实现本公开实施例的终端设备或服务器的电子设备的结构示意图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

下面,首先对本公开实施例涉及到的卷积运算做简单介绍,以便于更好地理解本公开实施例的技术方案。

给定一个输入特征张量(inputfeature),通常为一个c×h×w的张量,其中c为通道数目,h×w为特征矩阵的高和宽;以及一系列卷积核,这一系列卷积核通常表示为一个k×c×r×s的张量,其中k为卷积核数目,c为每个卷积核的通道数目与输入特征张量通道数目一致,r×s为卷积核的高和宽。

卷积定义如图1所示,图1为卷积运算示意图。该例子中输入特征张量为3×5×5,卷积核为1×3×3×3,卷积操作由两个步骤组成。第一步,将卷积核的每个通道与特征张量的每个通道的左上角相对,如图1中所示。然后分别将对应区域的特征张量和卷积核分别展开形成两个向量(输入特征向量核卷积核向量);第二步,进行向量乘法操作,结果为输出特征中的一个元素。然后滑动卷积核,重复上述两部操作。在该例子中,在横向和纵向分别可以滑动三个位置,因此可以产生一个3×3的输出特征矩阵。当卷积核的数目为k时,对每个卷积核使用相同的方式都会得到一个3×3的输出特征矩阵。因此,最终产生的输出特征张量为k×3×3。

实现卷积算子主要有两类算法,第一类是基于矩阵乘法,第二类是基于快速算法。第一类算法是一种普适算法,适合于所有类型的卷积;第二类算法只能针对特定场景,比如卷积核大小为3×3,同时卷积核滑动的步长为1等。

图2为基于矩阵乘法的卷积计算示意图。如图2所示,卷积核可以看作一个k行c×r×s列的矩阵,k×c×r×s的四维张量与k行c×r×s列的矩阵只是对数据的理解逻辑不同,物理上存储方式不变,因此不需要进行张量到矩阵的转换。在该例子中,卷积核作为a矩阵,大小为64×27。对于输入特征张量,每一个滑动窗口对应的数据可以展开成为bk×n中的一列,输入特征张量可以转化为一个c×r×s行p×q列的矩阵,其中p和q分别为卷积核可以沿着横向和纵向滑动的次数。在该例子中,滑动窗口可以沿着横向和纵向滑动222×222=49284次,输入特征张量需要转化为b矩阵,大小为27×49284。从输入特征张量到输入特征矩阵的转换过程称为im2col操作。

本公开发明人在研亢基于快速算法的卷积运算的过程中,创造性地发现了快速算法中的数据重用模式,并基于发现的数据重用模式提出了新的快速卷积运算,从而能够提高卷积运算的性能。

应理解,本公开实施例主要应用于im2col快速卷积运算,但也可以应用于其他类似的快速卷积运算,本公开实施例对此不做限定。此外,本公开实施例可以应用于gpu等处理系统。

图3为本公开实施例提供的数据处理方法的一个流程示意图。

步骤310,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系。

其中,待处理数据包括n个图像,每个图像包括c个通道,n和c中的至少一项为大于1的整数。

发明人在实现本公开的过程中,发现在将输入数据(如,图像或特征等)张量转换为输入数据矩阵的过程中,获得的转换结果矩阵中存在第二数据块与待处理数据中第一数据块的对应关系,并且,每个第一数据块对应至少一个第二数据块,基于这种数据重用的关系,在数据转换的过程中,可以通过数据重用关系对第一数据块的数据进行写入到转换结果矩阵中,提高了转换效率。

步骤320,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵。

通过数据重用关系对待处理数据进行转换处理,可选地,可将每个第一数据块中的数据写入到对应该第一数据块的至少一个第二数据块中,将转换结果矩阵的获得由原来的每个位置的数据单独计算输入,替代为本公开实施例通过数据块之间的对应,提高了数据录入速度,减少了计算量,实现待处理数据的快速转换。

步骤330,对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

本公开针对基于矩阵乘法的卷积算法。在卷积的定义中,对于输出特征张量中的元素的计算是向量乘法。因此,可以通过数据重排布将输入特征张量转化为相应的矩阵,进而将卷积运算转化为矩阵乘法c=a×b,其中am×k,bk×n和cm×n为矩阵。

基于本公开上述实施例提供的一种数据处理方法,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵,由于存在数据重用关系,加快了获得转换结果矩阵的速度,降低了将卷积计算转换为矩阵乘法的难度;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

在一个或多个可选的实施例中,第一数据块包括图像在一个通道中的一行数据。

在本公开实施例中,每个第一数据块对应一个图像在一个通道中的一行,一个图像在一个通道中包括对应行数个数的第一数据块,例如,图像大小为h×m×c,其中c为通道数,m为高度,h为宽度,将每1×h个数据作为一行,那么第一数据块包括h个数据,在一个通道中图像包括m个第一数据块,该图像包括m*c个第一数据块。本公开实施例中将图像在一个通道中的一行对应第一数据块是通过发明人经过研亢发现,图像在一个通道中的一行数据与转换结果矩阵中的对应关系确定的。

在一个或多个可选的实施例中,第二数据块为大小为r×p的数据块,其中,r为卷积核的列数,p为利用卷积核对待处理数据进行卷积操作时在每个通道中横向滑动的次数。

图4为本公开实施例基于待处理数据获得结果矩阵的示例图。如图4所示,图中所示待处理数据包括两个图像,每个图像包括两个通道,图像在每个通道中的大小为6(行数)×6(列数),本实施例中的卷积核大小为3(行数)×3(列数)。发明人经过研亢发现待处理数据与转换结果矩阵之间存在以下规律:第一,输入的图像在一个通道(channel)中的数据会对应于转化后的转换结果矩阵中的一个s(卷积核行数)*r(卷积核列数)×p(横向移动次数)*q(纵向移动次数)大小的数据块。一个图像包括c个通道,每一个通道对应的大小为s*r×p*q的数据块沿着垂直方向排列,这样就形成一个c*s*r×p*q的矩阵。当待处理数据包括的图像的数量为n的时,相当于沿着水平方向进行拓展,这样就形成一个大小为c*s*r×p*q*n的转换结果矩阵。

第二,本申请发明人经过研亢发现图像在一个通道内的一行数据(h个像素)会对应到转化后的矩阵中的一个p×r=4×3(横向移动次数×卷积核行数)大小的数据块。因此,输入特征张量中的每一行只需要读一次就可以完成一个p×r大小的数据块,避免了重复读显存。

除了上述两点,本申请发明人在研亢过程中还发现图像在一个通道中对应的s*r×p*q数据块中,每个第一数据块对应至少一个第二数据块,可选地,第一数据块对应的至少一个第二数据块的个数依赖于第一数据块在第一数据块所属通道中对应的行数。

可选地,若第一数据块对应的行数l小于卷积核的列数r,第一数据块对应的第二数据块的数量为l;

若第一数据块对应的行数l大于或等于r且小于或等于q,第一数据块对应的第二数据块的数量为r;

若第一数据块对应的行数l大于q,第一数据块对应的第二数据块的数量为q+s-1-l。

在本公开实施例中,确定每个第一数据块对应的第二数据块的数量,而对应不同行数的第一数据块对应的第二数据块的个数不同,具体地,可基于以下公式(1)确定第一数据块对应的多个第二数据块的数量:

l=((b%((q+s-1)*c))%(q+s-1))公式(1)

其中,l表示当前第一数据块对应的行数,r表示卷积核的列数,当l<r时,第一数据块对应的多个第二数据块的数量(task)=l;当r<=l<=q时,task=r;当l>q时,task=(q+s-1-l)。由于数据重用关系,可以对于待处理数据中图像在每个通道中的每一行数据,只需要读一次,就可以完成多个p×r大小的第二数据块,进一步避免了重复读显存。

当一个第一数据块对应的至少一个第二数据块为多个第二数据块时,可选地,第一数据块对应的多个第二数据块包括至少一个数据块组,其中,每个数据块组包括多个第二数据块中两个相邻的第二数据块,并且,数据块组中一个第二数据块的右邻居数据块为数据块组中另一个第二数据块的下邻居。

图5为本公开实施例提供的数据处理方法的一个数据重用结构示意图。如图5所示,在一个示例中,本公开实施例中沿着相同对角线的r×p第二数据块对应一个第一数据块,此时对应同一第一数据块的两个相邻第二数据块中一个第二数据块的右邻居是另一第二数据块的下邻居。以这种方式,每个第一数据块对应沿着对角线的一系列r×p大小的第二数据块。待处理数据中图像在每一个输入通道中被处理的行数(第一数据块的数量)为q+s-1。

图6为本公开实施例提供的数据处理方法的另一结构示意图。如图6所示,

步骤610,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系。

其中,待处理数据包括n个图像,每个图像包括c个通道,n和c中的至少一项为大于1的整数。

可选地,本公开实施例中步骤610的具体操作可参照上述实施中步骤310,在此不再赘述。

步骤620,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,为待处理数据中的每个第一数据块分配线程块。

可选地,本公开实施例提供的数据处理可以基于处理设备实现,例如,以图像处理器(gpu)为例,gpu上执行的任务实际上是一个称为计算网格(grid)的计算任务实例。一个计算网格包含成百上千的线程块,每个线程块又包含成百上千的线程。为了提高待处理数据的处理速度,需要提高线程块和线程的利用率,即,采用合适数量的线程块对待处理数据进行矩阵转换,可选地,本公开实施例为每个第一数据块分配一个线程块,因此,对于待处理数据中一个图像在一个通道中需要的线程块数量为q+s-1,对应该图像在一个通道中被处理的行数,处理待处理数据需要的线程块数量为(q+s-1)*c*n。

步骤630,利用为第一数据块分配的线程块从待处理数据中读取第一数据块,并将读取的第一数据块写入转换结果矩阵中对第一数据块具有重用关系的至少一个第二数据块。

在处理设备中,通过为每个第一数据块分配的线程块分别将第一数据块从待处理数据中读取出来,并将读取到的数据按照第二数据块与第一数据块的对应关系写入到该第一数据块对应的所有第二数据块中,通过读取和写入,实现了高效地数据索引,快速地将待处理数据转换为转换结果矩阵。

步骤640,对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

本公开实施例通过分配线程块提高了对待处理数据的处理速度,同时提高了处理设备中线程的利用率,减少了空闲线程的数量。

可选地,步骤620包括:

基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块;

将多个线程块中每个线程块分配给每个线程块对应的第一数据块。

在为每个第一数据块分配线程块时,可选地,根据线程块的编号,计算出分配给该线程块的任务,对应于待处理数据中的哪一个第一数据块。可选地,基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块,可以包括:基于多个线程块中第一线程块的编号、待处理数据中每个图像包含的通道数量c、和每个通道需要的线程块数量,确定第一线程块在待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。其中,每个通道需要的线程块数量可表示为(q+s-1)个。具体地,假如线程块编号为b,那么对应到的待处理数据中的图像为第b/((q+s-1)*c)个,b/((q+s-1)*c)表示b除以((q+s-1)*c)的商,该商表示该图像对应的编号,例如,线程块编号b取值为15,待处理数据包括2个2通道的图像,每个通道包括6行需处理数据,q取值为4,s取值为3,此时,计算b/((q+s-1)*c)=1,将待处理数据中第一个图像的编号为0,因此,在该例子中,编号为15的线程块对应的图像的编号为1,由于图像编号从0开始,即该线程块对应待处理数据中的第二个图像;确定了是哪一个图像之后通过计算(b%((q+s-1)*c))/(q+s-1)确定是该图像中哪一通道,其中,%表示取模操作,(b%((q+s-1)*c))/(q+s-1)表示b除以((q+s-1)*c))得到的余数再除以(q+s-1)的商,该商表示该图像对应的通道编号,例如,线程块编号b取值为15,待处理数据包括2个2通道的图像,每个通道包括6行需处理数据,q取值为4,s取值为3,此时,计算(b%((q+s-1)*c))=3,再计算3/6=0,即该线程块对应该图像的通道编号为0,由于通道编号从0开始,即对应第一通道;线程块对应的图像在一个通道中的行的编号为((b%((q+s-1)*c))%(q+s-1)),例如,线程块编号b取值为15,待处理数据包括2个2通道的图像,每个通道包括6行需处理数据,q取值为4,s取值为3,此时,计算((b%((q+s-1)*c))=3,3%(q+s-1))=3,即表示该线程块对应图像在编号为0的通道中对应编号为3的行,由于行编号从0开始,因此,该线程块对应第4行。

在一个或多个可选的实施例中,本公开实施例提供的数据处理方法,还包括:

利用为第一数据块分配的线程块,将读取的第一数据块存储到共享内存中;

将读取的第一数据块写入转换结果矩阵中对第一数据块具有重用关系的至少一个第二数据块,包括:

读取共享内存中存储的第一数据块的至少一部分,并将读取的数据写入转换结果矩阵中的第二数据块。

当采用处理设备实现数据处理时,由于处理设备的特性,为了减少时间延迟,加快卷积处理的速度,本公开实施例通过为每个第一数据块分配的线程块将待处理数据存入至少一个共享内存中,在计算过程中线程块直接从共享内存中读取数据,提高了处理效率。

图7为图像处理器结构示意图。如图7所示,gpu由多个流多处理器和一个显存组成。每一个流多处理器内部包含一些向量计算单元以及一块共享内存,计算单元读取共享内存的延迟远小于显存。因此,为了提高计算效率,共享内存的应用至关重要。一个线程块可以申请一部分共享内存,这部分共享内存可以被一个线程块中的所有线程可见。所以,把一个线程块的任务当作一个基本任务单元。由于流多处理器上面的共享内存大小有限,因此每个线程块申请的共享内存越大,一个流多处理器可以同时执行的线程块数目越少,一般来讲性能越不好,本公开实施例通过为每个第一数据块分别分配一个线程块,增加了可以同时执行的线程块的数量,提高了处理设备的性能。

可选地,每个线程块包括t个线程;

在利用为第一数据块分配的线程块从待处理数据中读取第一数据块之前,还包括:

基于共享内存的大小w与线程个数t,确定t个线程中每个线程读取的第一数据块的数据。

当共享内存的大小为w,通过线程块中的t个线程将图像中一个通道中的一行数据读取到共享内存中时,每一个线程负责读取w/t个像素。例外地,对于w/t不能整除的情况w%t=tmp,其中tmp表示余数,此时,即余数tmp不为0,那么,设置前tmp个线程读取w/t+1个像素,此时w/t表示w除以t的商,剩余的(t-tmp)个线程中的每个线程读取w/t个像素。

在一个或多个可选的实施例中,步骤630包括:

通过为第一数据块分配的线程块对第一数据块进行滑动读取,并将每次读取到的数据写入第一数据块对应的每个第二数据块中的一行。

可选地,针对每个共享内存,对共享内存中的存储的向量形式的特征数据按长度为p、步长为1进行读取,将每次读取到的数据写入第二数据块中的一行,将所有共享内存中存储的特征数据读入结果矩阵中,获得待处理特征集的卷积计算结果。图8为本公开实施例提供的数据处理方法中线程块读取第一数据块中数据的示意图。如图8所示,每一个第一数据块中数据与其对应的一个第二数据块中的数据存在对应关系,通过滑动读取将第一数据块中的数据写入到该第二数据块中,实现待处理数据的转换,每个第一数据块对应一个线程块,每个线程块包括t个线程,因此,每个线程负责(p*r)/t个数据的写入。

本公开实施例通过在gpu上并列执行多个线程块,以提高卷积计算的速度,在gpu上设计并行算法的设计需要考虑三个方面:第一,如何将完整任务拆分成独立的子任务(本公开实施例中对应如何确定第一数据块);第二,如何将子任务分配到gpu线程块中(本公开实施例中确定线程块的数量);第三,子任务的具体实现细节设计(本公开实施例中通过每个线程块将第一数据块中的数据存入共享内存,再从共享内存中读取并写入该第一数据块对应的所有第二数据块中)。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

图9为本公开实施例提供的数据处理装置的结构示意图。该实施例的装置可用于实现本公开上述各方法实施例。如图9所示,该实施例的装置包括:

数据重用关系确定单元91,用于基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系。

其中,待处理数据包括n个图像,每个图像包括c个通道,n和c中的至少一项为大于1的整数。

数据转换单元92,用于基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵。

结果计算单元93,用于对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

基于本公开上述实施例提供的一种数据处理装置,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵,由于存在数据重用关系,加快了获得转换结果矩阵的速度,降低了将卷积计算转换为矩阵乘法的难度;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

可选地,第一数据块包括图像在一个通道中的一行数据。

可选地,第二数据块为大小为r×p的数据块,其中,r为卷积核的列数,p为利用卷积核对待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,第一数据块对应的至少一个第二数据块的个数依赖于第一数据块在所述第一数据块所属通道中对应的行数。

可选地,若第一数据块对应的行数l小于卷积核的列数r,第一数据块对应的第二数据块的数量为l;

若第一数据块对应的行数l大于或等于r且小于或等于q,第一数据块对应的第二数据块的数量为r;

若第一数据块对应的行数l大于q,第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,至少一个第二数据块为多个第二数据块,第一数据块对应的多个第二数据块包括至少一个数据块组,其中,每个数据块组包括多个第二数据块中两个相邻的第二数据块,其中,数据块组中一个第二数据块的右邻居数据块为数据块组中另一个第二数据块的下邻居。

在一个或多个可选的实施例中,数据转换单元92,用于基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,为待处理数据中的每个第一数据块分配线程块;利用为第一数据块分配的线程块从待处理数据中读取第一数据块,并将读取的第一数据块写入转换结果矩阵中对第一数据块具有重用关系的至少一个第二数据块。

可选地,数据转换单元92在基于转换结果矩阵中多个第二数据块对待处理数据中的第一数据块的数据重用关系,为待处理数据中的每个第一数据块分配线程块时,用于基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块;将多个线程块中每个线程块分配给每个线程块对应的第一数据块。

可选地,数据转换单元92在基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块时,用于基于多个线程块中第一线程块的编号、待处理数据中每个图像包含的通道数量c、和每个通道需要的线程块数量,确定第一线程块在待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,本公开实施例提供的装置还包括:

数据读取单元,用于利用为第一数据块分配的线程块,将读取的第一数据块存储到共享内存中;

数据转换单元92,用于读取共享内存中存储的第一数据块的至少一部分,并将读取的数据写入转换结果矩阵中的第二数据块。

可选地,每个线程块包括t个线程;

数据读取单元,还用于基于共享内存的大小w与线程个数t,确定t个线程中每个线程读取的第一数据块的数据。

可选地,数据转换单元在利用为第一数据块分配的线程块从待处理数据中读取第一数据块,并将读取的第一数据块写入转换结果矩阵中对第一数据块具有重用关系的至少一个第二数据块时,具体用于通过为第一数据块分配的线程块对第一数据块进行滑动读取,并将每次读取到的数据写入第一数据块对应的每个第二数据块中的一行。

图10为本公开实施例提供的数据处理方法的又一个流程示意图。

步骤1010,读取待处理数据中多个第一数据块中的每个第一数据块。

其中,待处理数据包括n个图像,每个图像包括c个通道,n和c中的至少一项为大于等于1的整数。

在本公开实施例中,将待处理数据分解为多个第一数据块,可选地,将图像在一个通道中的任意一部分作为一个第一数据块,例如,将图像在一个通道中的一行作为一个第一数据块,或者,将图像在一个通道中的多行或一行中的部分作为一个第一数据块,本公开实施例不限制具体第一数据块的大小。

步骤1020,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵。

其中,至少一个第二数据块重用第一数据块。

本公开实施例中,每个第一数据块对应至少一个第二数据块,通过这种一对多的对应关系,简化了转换结果矩阵的获得过程,例如,可以将每个第一数据块中的数据写入到与其对应的至少一个第二数据块的每个第二数据块中,提高了转换效率。

步骤1030,对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

本公开针对基于矩阵乘法的卷积算法。在卷积的定义中,对于输出特征张量中的元素的计算是向量乘法。因此,可以通过数据重排布将输入特征张量转化为相应的矩阵,进而将卷积运算转化为矩阵乘法c=a×b,其中am×k,bk×n和cm×n为矩阵。

基于本公开上述实施例提供的一种数据处理方法,读取待处理数据中多个第一数据块中的每个第一数据块,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵,由于存在第一数据块与第二数据块的对应关系,加快了获得转换结果矩阵的速度,降低了将卷积计算转换为矩阵乘法的难度;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

在一个或多个可选的实施例中,第一数据块包括图像在一个通道中的一行数据。

在本公开实施例中,每个第一数据块对应一个图像在一个通道中的一行,一个图像在一个通道中包括对应行数个数的第一数据块,例如,图像大小为h×m×c,其中c为通道数,m为高度,h为宽度,将每1×h个数据作为一行,那么第一数据块包括h个数据,在一个通道中图像包括m个第一数据块,该图像包括m*c个第一数据块。本公开实施例中将图像在一个通道中的一行对应第一数据块是通过发明人经过研亢发现,图像在一个通道中的一行数据与转换结果矩阵中的对应关系确定的。

在一个或多个可选的实施例中,第二数据块为大小为r×p的数据块,其中,r为卷积核的列数,p为利用卷积核对待处理数据进行卷积操作时在每个通道中横向滑动的次数。

发明人经过研亢发现待处理数据与转换结果矩阵之间存在以下规律:第一,输入的图像在一个通道(channel)中的数据会对应于转化后的转换结果矩阵中的一个s(卷积核行数)*r(卷积核列数)×p(横向移动次数)*q(纵向移动次数)大小的数据块。一个图像包括c个通道,每一个通道对应的大小为s*r×p*q的数据块沿着垂直方向排列,这样就形成一个c*s*r×p*q的矩阵。当待处理数据包括的图像的数量为n的时,相当于沿着水平方向进行拓展,这样就形成一个大小为c*s*r×p*q*n的转换结果矩阵。

第二,发明人经过研亢发现图像在一个通道内的一行数据(h个像素)会对应到转化后的矩阵中的一个p×r=4×3(横向移动次数×卷积核行数)大小的数据块。因此,输入特征张量中的每一行只需要读一次就可以完成一个p×r大小的数据块,避免了重复读显存。

除了上述两点,发明人在研亢过程中还发现图像在一个通道中对应的s*r×p*q数据块中,每个第一数据块对应至少一个第二数据块,可选地,第一数据块对应的至少一个第二数据块的个数依赖于第一数据块在第一数据块所属通道中对应的行数。

可选地,若第一数据块对应的行数l小于卷积核的列数r,第一数据块对应的第二数据块的数量为l;

若第一数据块对应的行数l大于或等于r且小于或等于q,第一数据块对应的第二数据块的数量为r;

若第一数据块对应的行数l大于0,第一数据块对应的第二数据块的数量为0+s-1-l。

在本公开实施例中,确定每个第一数据块对应的第二数据块的数量,而对应不同行数的第一数据块对应的第二数据块的个数不同,具体地,可基于上述公式(1)确定第一数据块对应的多个第二数据块的数量。由于数据重用关系,可以对于待处理数据中图像在每个通道中的每一行数据,只需要读一次,就可以完成多个p×r大小的第二数据块,进一步避免了重复读显存。

当一个第一数据块对应的至少一个第二数据块为多个第二数据块时,可选地,第一数据块对应的多个第二数据块包括至少一个数据块组,其中,每个数据块组包括多个第二数据块中两个相邻的第二数据块,并且,数据块组中一个第二数据块的右邻居数据块为数据块组中另一个第二数据块的下邻居。

如图5所示,在一个示例中,本公开实施例中沿着相同对角线的r×p第二数据块对应一个第一数据块,此时对应同一第一数据块的两个相邻第二数据块中一个第二数据块的右邻居是另一第二数据块的下邻居。以这种方式,每个第一数据块对应沿着对角线的一系列r×p大小的第二数据块。待处理数据中图像在每一个输入通道中被处理的行数为q+s-1。

在一个或多个可选的实施例中,本公开实施例提供的数据处理方法还包括:

基于待处理数据的大小和卷积核的大小,确定转换结果矩阵中的至少一个第二数据块与第一数据块的数据重用关系;

将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,包括:

基于转换结果矩阵中的至少一个第二数据块与第一数据块的数据重用关系,将第一数据块写入转换结果矩阵中的至少一个第二数据块。

发明人在实现本公开的过程中,发现在将待处理数据(如,图像或特征等)转换为转换结果矩阵的过程中,获得的转换结果矩阵中存在第二数据块与待处理数据中第一数据块的对应关系,并且,每个第一数据块对应至少一个第二数据块,基于这种数据重用的关系,在数据转换的过程中,可以通过数据重用关系对第一数据块的数据进行写入到转换结果矩阵中,提高了转换效率。

可选地,步骤1010包括:

为待处理数据中的每个第一数据块分配线程块;

利用为第一数据块分配的线程块从待处理数据中读取第一数据块。

本公开实施例中,第一数据块与第二数据块的对应关系基于获得的数据重用关系确定,并且,通过线程块对第一数据块进行读取,可选地,本公开实施例提供的数据处理可以基于处理设备实现,例如,以图像处理器(gpu)为例,gpu上执行的任务实际上是一个称为计算网格(grid)的计算任务实例。一个计算网格包含成百上千的线程块,每个线程块又包含成百上千的线程。为了提高待处理数据的处理速度,需要提高线程块和线程的利用率,即,采用合适数量的线程块对待处理数据进行矩阵转换,可选地,本公开实施例为每个第一数据块分配一个线程块,因此,对于待处理数据中一个图像在一个通道中需要的线程块数量为q+s-1,对应该图像在一个通道中被处理的行数,处理待处理数据需要的线程块数量为(q+s-1)*c*n。

可选地,为待处理数据中的每个第一数据块分配线程块,包括:

基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块;

将多个线程块中每个线程块分配给每个线程块对应的第一数据块。

在为每个第一数据块分配线程块时,可选地,根据线程块的编号,计算出分配给该线程块的任务,对应于待处理数据中的哪一个第一数据块。可选地,基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块,可以包括:基于多个线程块中第一线程块的编号、待处理数据中每个图像包含的通道数量c、和每个通道需要的线程块数量,确定第一线程块在待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。其中,每个通道需要的线程块数量可表示为(q+s-1)个。具体地,假如线程块编号为b,那么对应到的待处理数据中的图像为第b/((q+s-1)*c)个,b/((q+s-1)*c)表示b除以((q+s-1)*c)的商,该商表示该图像对应的编号;确定了是哪一个图像之后通过计算(b%((q+s-1)*c))/(0+s-1)确定是该图像中哪一通道,其中,%表示取模操作,(b%((q+s-1)*c))/(q+s-1)表示b除以(q+s-1)*c))得到的余数再除以(q+s-1)的商,该商表示该图像对应的通道编号;线程块对应的图像在一个通道中的行的编号为((b%((q+s-1)*c))%(q+s-1))。

可选地,还包括:

利用为第一数据块分配的线程块,将读取的第一数据块存储到共享内存中。

将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,包括:

读取共享内存中存储的第一数据块的至少一部分,并将读取的数据写入转换结果矩阵中的第二数据块。

当采用处理设备实现数据处理时,由于处理设备的特性,为了减少时间延迟,加快卷积处理的速度,本公开实施例通过为每个第一数据块分配的线程块将待处理数据存入至少一个共享内存中,在计算过程中线程块直接从共享内存中读取数据,提高了处理效率。

可选地,每个线程块包括t个线程;

在利用为第一数据块分配的线程块,将读取的第一数据块存储到共享内存中之前,还包括:

基于共享内存的大小w与线程个数t,确定t个线程中每个线程读取的第一数据块的数据。

当共享内存的大小为w,通过线程块中的t个线程将图像中一个通道中的一行数据读取到共享内存中时,每一个线程负责读取w/t个像素。例外地,对于w/t不能整除的情况w%t=tmp,其中tmp表示余数,此时,即余数tmp不为0,那么,设置前tmp个线程读取w/t+1个像素,此时w/t表示w除以t的商,剩余的(t-tmp)个线程中的每个线程读取w/t个像素。

可选地,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,包括:

将每次对第一数据块进行滑动读取到的数据写入第一数据块对应的每个第二数据块中的一行。

可选地,针对每个共享内存,对共享内存中的存储的向量形式的特征数据按长度为p、步长为1进行读取,将每次读取到的数据写入第二数据块中的一行,将所有共享内存中存储的特征数据读入结果矩阵中,获得待处理特征集的卷积计算结果。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

图11为本公开实施例提供的数据处理装置的结构示意图。该实施例的装置可用于实现本公开上述各方法实施例。如图11所示,该实施例的装置包括:

数据读取单元1101,用于读取待处理数据中多个第一数据块中的每个第一数据块。

其中,待处理数据包括n个图像,每个图像包括c个通道,n和c中的至少一项为大于1的整数。

数据转换单元1102,用于将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵。

其中,至少一个第二数据块重用第一数据块。

结果计算单元1103,用于对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

基于本公开上述实施例提供的一种数据处理装置,读取待处理数据中的第一数据块,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵,由于存在第一数据块与第二数据块的对应关系,加快了获得转换结果矩阵的速度,降低了将卷积计算转换为矩阵乘法的难度;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

可选地,第一数据块包括图像在一个通道中的一行数据。

可选地,第二数据块为大小为r×p的数据块,其中,r为卷积核的列数,p为利用卷积核对待处理数据进行卷积操作时在每个通道中横向滑动的次数。

可选地,第一数据块对应的至少一个第二数据块的个数依赖于第一数据块在第一数据块所属通道中对应的行数。

可选地,若第一数据块对应的行数l小于卷积核的列数r,第一数据块对应的第二数据块的数量为l;

若第一数据块对应的行数l大于或等于r且小于或等于q,第一数据块对应的第二数据块的数量为r;

若第一数据块对应的行数l大于q,第一数据块对应的第二数据块的数量为q+s-1-l。

可选地,至少一个第二数据块为多个第二数据块,第一数据块对应的多个第二数据块包括至少一个数据块组,其中,每个数据块组包括多个第二数据块中两个相邻的第二数据块,其中,数据块组中一个第二数据块的右邻居数据块为数据块组中另一个第二数据块的下邻居。

可选地,本公开实施例提供的数据处理装置,还包括:

数据重用关系确定单元,用于基于待处理数据的大小和卷积核的大小,确定转换结果矩阵中的至少一个第二数据块与第一数据块的数据重用关系;

数据转换单元1102,用于基于转换结果矩阵中的至少一个第二数据块与第一数据块的数据重用关系,将第一数据块写入转换结果矩阵中的至少一个第二数据块。

可选地,数据读取单元1101,用于为待处理数据中的每个第一数据块分配线程块;利用为第一数据块分配的线程块从待处理数据中读取第一数据块。

可选地,数据读取单元1101在为待处理数据中的每个第一数据块分配线程块时,用于基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块;将多个线程块中每个线程块分配给每个线程块对应的第一数据块。

可选地,数据读取单元1101在基于多个线程块中每个线程块的编号,确定每个线程块在待处理数据中对应的第一数据块时,用于基于多个线程块中第一线程块的编号、待处理数据中每个图像包含的通道数量c、和每个通道需要的线程块数量,确定第一线程块在待处理数据中对应的图像、图像中的通道以及通道中的第一数据块所对应的行。

可选地,数据读取单元1101,还用于利用为第一数据块分配的线程块,将读取的第一数据块存储到共享内存中;

数据转换单元1102,用于读取共享内存中存储的第一数据块的至少一部分,并将读取的数据写入转换结果矩阵中的第二数据块。

可选地,每个线程块包括t个线程;

数据读取单元1101,还用于基于共享内存的大小w与线程个数t,确定t个线程中每个线程读取的第一数据块的数据。

可选地,数据转换单元1102,用于将每次对第一数据块进行滑动读取到的数据写入第一数据块对应的每个第二数据块中的一行。

根据本公开实施例的另一个方面,提供的一种电子设备,包括处理器,该处理器包括如上任意一实施例的数据处理装置。

根据本公开实施例的另一个方面,提供的一种电子设备,包括:存储器,用于存储可执行指令;

以及处理器,用于与存储器通信以执行可执行指令从而完成如上任意一实施例提供的数据处理方法的操作。

根据本公开实施例的另一个方面,提供的一种计算机可读存储介质,用于存储计算机可读取的指令,指令被执行时执行如上任意一实施例提供的数据处理方法的操作。

根据本公开实施例的另一个方面,提供的一种计算机程序产品,包括计算机可读代码,当计算机可读代码在设备上运行时,设备中的处理器执行用于实现如上任意一实施例提供的数据处理方法的指令。

根据本公开实施例的再一个方面,提供的另一种计算机程序产品,用于存储计算机可读指令,指令被执行时使得计算机执行上述任一实施例提供的数据处理方法的操作。

该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选例子中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选例子中,计算机程序产品具体体现为软件产品,例如软件开发包(softwaredevelopmentkit,sdk)等等。

根据本公开实施例还提供了数据处理方法和装置、电子设备、计算机存储介质、计算机程序产品,其中,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

应理解,本公开实施例中的“第一”、“第二”等术语仅仅是为了区分,而不应理解成对本公开实施例的限定。

还应理解,在本公开中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。

还应理解,对于本公开中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。

还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。

本公开实施例还提供了一种电子设备,例如可以是移动终端、个人计算机(pc)、平板电脑、服务器等。下面参考图12,其示出了适于用来实现本公开实施例的终端设备或服务器的电子设备1200的结构示意图:如图12所示,电子设备1200包括一个或多个处理器、通信部等,所述一个或多个处理器例如:一个或多个中央处理单元(cpu)1201,和/或一个或多个图像处理器(gpu)1213等,处理器可以根据存储在只读存储器(rom)1202中的可执行指令或者从存储部分1208加载到随机访问存储器(ram)1203中的可执行指令而执行各种适当的动作和处理。通信部1212可包括但不限于网卡,所述网卡可包括但不限于ib(infiniband)网卡。

处理器可与只读存储器1202和/或随机访问存储器1203中通信以执行可执行指令,通过总线1204与通信部1212相连、并经通信部1212与其他目标设备通信,从而完成本公开实施例提供的任一项方法对应的操作,例如,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。或者,读取待处理数据中多个第一数据块中的每个第一数据块,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。

此外,在ram1203中,还可存储有装置操作所需的各种程序和数据。cpu1201、rom1202以及ram1203通过总线1204彼此相连。在有ram1203的情况下,rom1202为可选模块。ram1203存储可执行指令,或在运行时向rom1202中写入可执行指令,可执行指令使中央处理单元1201执行上述通信方法对应的操作。输入/输出(i/o)接口1205也连接至总线1204。通信部1212可以集成设置,也可以设置为具有多个子模块(例如多个ib网卡),并在总线链接上。

以下部件连接至i/o接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至i/o接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。

需要说明的,如图12所示的架构仅为一种可选实现方式,在具体实践过程中,可根据实际需要对上述图12的部件数量和类型进行选择、删减、增加或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方式,例如gpu1213和cpu1201可分离设置或者可将gpu1213集成在cpu1201上,通信部可分离设置,也可集成设置在cpu1201或gpu1213上,等等。这些可替换的实施方式均落入本公开公开的保护范围。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,计算机程序包含用于执行流程图所示的方法的程序代码,程序代码可包括对应执行本公开实施例提供的方法步骤对应的指令,例如,基于待处理数据的大小和卷积核的大小,确定待处理数据对应的转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,基于转换结果矩阵中至少一个第二数据块对待处理数据中的第一数据块的数据重用关系,对待处理数据进行转换处理,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。或者,读取待处理数据中多个第一数据块中的每个第一数据块,将第一数据块写入转换结果矩阵中与第一数据块对应的至少一个第二数据块,得到转换结果矩阵;对转换结果矩阵和卷积核进行矩阵乘法操作,获得待处理数据的卷积结果。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(cpu)1201执行时,执行本公开的方法中限定的上述功能的操作。

可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。

本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1