CN113032007A - 一种数据处理方法及装置 - Google Patents

一种数据处理方法及装置 Download PDF

Info

Publication number
CN113032007A
CN113032007A CN201911351502.8A CN201911351502A CN113032007A CN 113032007 A CN113032007 A CN 113032007A CN 201911351502 A CN201911351502 A CN 201911351502A CN 113032007 A CN113032007 A CN 113032007A
Authority
CN
China
Prior art keywords
matrix
data
input
dimensional
sub
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.)
Pending
Application number
CN201911351502.8A
Other languages
English (en)
Inventor
李谋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201911351502.8A priority Critical patent/CN113032007A/zh
Publication of CN113032007A publication Critical patent/CN113032007A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Image Analysis (AREA)

Abstract

本申请实施例提供了一种数据处理方法及装置。在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;若存在,在目标通道中添加数据,以使目标通道中的数据的数量为预设数量的整数倍;从内存中读取输入矩阵并写入GPU的寄存器中;从内存中读取卷积核并写入GPU的寄存器中;在寄存器中对输入矩阵与卷积核进行计算,得到输出矩阵。通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高整体的运算效率。

Description

一种数据处理方法及装置
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据处理方法及装置。
背景技术
随着技术的飞速发展,神经网络模型得到了广泛使用,很多公司的线上系统都基于会使用神经网络模型处理图片。
为了提高处理效率,在需要使用神经网络模型对图片处理时,可以在GPU(Graphics Processing Unit,图形处理器)中使用神经网络模型对图片处理,例如,可以先将图片的矩阵存储在GPU的内存中,以及,将神经网络模型的卷积层的卷积核存储在GPU的内存中,之后再从内存中读取输入矩阵,并将输入矩阵写入GPU的寄存器中,以及,从内存中读取神经网络模型中的卷积层的卷积核,并将卷积核写入GPU的寄存器中,然后就可以在GPU的寄存器中基于卷积核对输入矩阵进行运算。
然而,在从GPU的内存中读取图片的矩阵时,一次从GPU的内存中只能读取一个通道对应的二维矩阵中的数据,且,通常情况下,一次从GPU的内存中只能读取一个通道对应的二维矩阵中的一个数据,如此,对于一个通道而言,该通道对应的二维矩阵中包括几个数据,就需要从GPU的内存中读取几次数据,如果从GPU的内存中读取数据的次数较多,则从GPU的内存中读取数据的过程会耗费较多时长,导致整体的运算效率较低。
发明内容
为解决上述技术问题,本申请示出了一种数据处理方法及装置。
第一方面,本申请示出了一种数据处理方法,所述方法包括:
在输入矩阵中查找是否存在目标通道,所述目标通道中包括的数据的数量不为预设数量的整数倍;
在所述输入矩阵存在所述目标通道的情况下,在所述目标通道中添加至少一个数据,以使所述目标通道中的数据的数量为所述预设数量的整数倍;
从图形处理器GPU的内存中读取所述输入矩阵,将所述输入矩阵写入所述GPU的寄存器中;
从所述内存中读取卷积核,将所述卷积核写入所述寄存器中;
在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵。
在一个可选的实现方式中,所述从GPU的内存中读取所述输入矩阵之前,还包括:
如果所述输入矩阵中包括浮点型数据,则将所述输入矩阵中的浮点型数据转换为整型数据。
在一个可选的实现方式中,所述从GPU的内存中读取所述输入矩阵之前,还包括:
如果所述输入矩阵包括的通道的数量不为预设数量的整数倍,在所述输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;
在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵。
在一个可选的实现方式中,所述在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵,包括:
将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;
将得到的多个高位整型数据组合为一个二维矩阵。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵,包括:
将所述输入矩阵转换为第一二维矩阵;
将所述卷积核的转换为第二二维矩阵;
计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵。
在一个可选的实现方式中,所述计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵,包括:
根据所述第一二维矩阵的大小和所述第二二维矩阵的大小确定需要计算出的输出矩阵的大小
根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
在所述寄存器中为每一个子矩阵分别分配一个线程块;
控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵;
将得到的多个子矩阵组合为输出矩阵。
在一个可选的实现方式中,所述根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵,包括:
在输出矩阵的大小与拆分策略之间的对应关系中,查找需要计算出的输出矩阵的大小相对应的拆分策略,所述拆分策略至少包括需要拆分得到的子矩阵的大小;
基于所述拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
在一个可选的实现方式中,每一个线程块中包括多个线程束;
所述控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵,包括:
对于每一个子矩阵,将所述子矩阵拆分为多个部分矩阵;
控制所述子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;
将计算得到的多个部分矩阵组合为所述子矩阵。
在一个可选的实现方式中,所述计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵,包括:
将所述第一二维矩阵按照行拆分为多个第一子矩阵;
将所述第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;
对于每一个第一子矩阵,计算所述第一子矩阵与对应的第二子矩阵之间的乘积;
将得到的每一个乘积相加,得到所述输出矩阵。
在一个可选的实现方式中,所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵之后,还包括:
经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数;
在所述寄存器中基于所述处理函数对所述输出矩阵进行处理,得到处理结果。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵,包括:
对于需要计算出的输出矩阵中的任意每一个元素,在所述输入矩阵中查找用于计算所述元素的数据,根据查找到的数据以及所述卷积核计算所述元素;
将计算出的输出矩阵中的各个元素组合为输出矩阵。
第二方面,本申请示出了一种数据处理方法,所述方法包括:
在对图片进行光学字符识别OCR识别时,将所述图片的输入矩阵输入处理器的内存中;
所述输入矩阵的通道中添加至少一个数据,以使所述通道中的数据的数量为所述预设数量的整数倍;
从所述内存中读取所述输入矩阵,将所述输入矩阵写入所述处理器的寄存器中;
在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到所述图片的识别结果。
在一个可选的实现方式中,所述方法还包括:
确定所述处理器是否适用于OCR识别场景;
在所述处理器适用于OCR识别场景的情况下,再执行所述将所述图片的输入矩阵输入处理器的内存中的步骤。
在一个可选的实现方式中,所述处理器为多个;
所述将所述图片的输入矩阵输入处理器的内存中,包括:
在多个处理器中选择适用于OCR识别场景的处理器;
将所述图片的输入矩阵输入选择的处理器的内存中。
在一个可选的实现方式中,所述在多个处理器中选择适用于OCR识别场景的处理器,包括:
在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与所述在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识;
在多个处理器中选择所述处理器标识所对应的处理器。
在一个可选的实现方式中,所述处理器包括图形处理器GPU或者中央处理器CPU。
第三方面,本申请示出了一种数据处理装置,所述装置包括:
查找模块,用于在输入矩阵中查找是否存在目标通道,所述目标通道中包括的数据的数量不为预设数量的整数倍;
第一添加模块,用于在所述输入矩阵存在所述目标通道的情况下,在所述目标通道中添加至少一个数据,以使所述目标通道中的数据的数量为所述预设数量的整数倍;
第一读取模块,用于从图形处理器GPU的内存中读取所述输入矩阵,第一写入模块,用于将所述输入矩阵写入所述GPU的寄存器中;
第二读取模块,用于从所述内存中读取卷积核,第二写入模块,用于将所述卷积核写入所述寄存器中;
第一运算模块,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵。
在一个可选的实现方式中,所述装置还包括:
转换模块,用于如果所述输入矩阵中包括浮点型数据,则将所述输入矩阵中的浮点型数据转换为整型数据。
在一个可选的实现方式中,所述装置还包括:
第二添加模块,用于如果所述输入矩阵包括的通道的数量不为预设数量的整数倍,在所述输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;
合并模块,用于在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵。
在一个可选的实现方式中,所述合并模块包括:
第一组合单元,用于将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;
第二组合单元,用于将得到的多个高位整型数据组合为一个二维矩阵。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
第一转换单元,用于将所述输入矩阵转换为第一二维矩阵;
第二转换单元,用于将所述卷积核的转换为第二二维矩阵;
第一计算单元,用于计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵。
在一个可选的实现方式中,所述第一计算单元包括:
确定子单元,用于根据所述第一二维矩阵的大小和所述第二二维矩阵的大小确定需要计算出的输出矩阵的大小
划分子单元,用于根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
分配子单元,用于在所述寄存器中为每一个子矩阵分别分配一个线程块;
第一计算子单元,用于控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵;
组合子单元,用于将得到的多个子矩阵组合为输出矩阵。
在一个可选的实现方式中,所述划分子单元具体用于:在输出矩阵的大小与拆分策略之间的对应关系中,查找需要计算出的输出矩阵的大小相对应的拆分策略,所述拆分策略至少包括需要拆分得到的子矩阵的大小;基于所述拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
在一个可选的实现方式中,每一个线程块中包括多个线程束;
所述第一计算子单元具体用于:对于每一个子矩阵,将所述子矩阵拆分为多个部分矩阵;控制所述子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;将计算得到的多个部分矩阵组合为所述子矩阵。
在一个可选的实现方式中,所述第一计算单元包括:
第一拆分子单元,用于将所述第一二维矩阵按照行拆分为多个第一子矩阵;
第二拆分子单元,用于将所述第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;
第二计算子单元,用于对于每一个第一子矩阵,计算所述第一子矩阵与对应的第二子矩阵之间的乘积;
相加子单元,用于将得到的每一个乘积相加,得到所述输出矩阵。
在一个可选的实现方式中,所述装置还包括:
调取模块,用于经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数;
处理模块,用于在所述寄存器中基于所述处理函数对所述输出矩阵进行处理,得到处理结果。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
查找单元,用于对于需要计算出的输出矩阵中的任意每一个元素,在所述输入矩阵中查找用于计算所述元素的数据,第二计算单元,用于根据查找到的数据以及所述卷积核计算所述元素;
第三组合单元,用于将计算出的输出矩阵中的各个元素组合为输出矩阵。
第四方面,本申请实施例示出了一种数据处理装置,所述装置包括:
输入模块,用于在对图片进行光学字符识别OCR识别时,将所述图片的输入矩阵输入处理器的内存中;
第三添加模块,用于所述输入矩阵的通道中添加至少一个数据,以使所述通道中的数据的数量为所述预设数量的整数倍;
第三读取模块,用于从所述内存中读取所述输入矩阵,第二写入模块,用于将所述输入矩阵写入所述处理器的寄存器中;
第二运算模块,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到所述图片的识别结果。
在一个可选的实现方式中,所述装置还包括:
确定模块,用于确定所述处理器是否适用于OCR识别场景;
所述输入模块还用于在所述处理器适用于OCR识别场景的情况下,将所述图片的输入矩阵输入处理器的内存中。
在一个可选的实现方式中,所述处理器为多个;
所述输入模块包括:
选择单元,用于在多个处理器中选择适用于OCR识别场景的处理器;
输入单元,用于将所述图片的输入矩阵输入选择的处理器的内存中。
在一个可选的实现方式中,所述选择单元包括:
查找子单元,用于在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与所述在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识;
选择子单元,用于在多个处理器中选择所述处理器标识所对应的处理器。
在一个可选的实现方式中,所述处理器包括图形处理器GPU或者中央处理器CPU。
第五方面,本申请实施例示出了一种电子设备,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如第一方面所述的数据处理方法。
第六方面,本申请实施例示出了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如第一方面所述的数据处理方法。
第七方面,本申请实施例示出了一种电子设备,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如第二方面所述的数据处理方法。
第八方面,本申请实施例示出了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如第二方面所述的数据处理方法。
与现有技术相比,本申请实施例包括以下优点:
在本申请中,可以在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;在输入矩阵存在目标通道的情况下,在目标通道中添加至少一个数据,以使目标通道中的数据的数量为预设数量的整数倍;从内存中读取输入矩阵,并将输入矩阵写入GPU的寄存器中;从内存中读取卷积核,将卷积核写入GPU的寄存器中;在寄存器中对输入矩阵与卷积核进行计算,得到输出矩阵。通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高整体的运算效率。
附图说明
图1是本申请示出的一种数据处理方法的步骤流程图;
图2是本申请示出的一种输入矩阵的示意图;
图3是本申请示出的一种输入矩阵的示意图;
图4是本申请示出的一种输入矩阵的示意图;
图5是本申请示出的一种对输入矩阵进行运算的方法的步骤流程图;
图6是本申请示出的一种输入矩阵的示意图;
图7是本申请示出的一种输入矩阵的示意图;
图8是本申请示出的一种卷积核的示意图;
图9是本申请示出的一种卷积核的示意图;
图10是本申请示出的一种计算矩阵乘积的方法的步骤流程图;
图11是本申请示出的一种计算矩阵乘积的示意图;
图12是本申请示出的一种计算矩阵乘积的示意图;
图13是本申请示出的一种计算矩阵乘积的示意图;
图14是本申请示出的一种对输入矩阵进行运算的方法的步骤流程图;
图15是本申请示出的一种数据处理方法的步骤流程图;
图16是本申请示出的一种数据处理装置的结构框图;
图17是本申请示出的一种数据处理装置的结构框图;
图18是本申请示出的一种数据处理装置的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本发明实施例的一种数据处理方法的步骤流程图,该方法可以应用于设备的GPU中,该方法具体可以包括如下步骤:
在步骤S101中,在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;
在本申请中,输入矩阵包括图片的矩阵或者其他多媒体文件的矩阵等。本申请以输入矩阵为图片的矩阵为例进行举例说明,当不作为对本申请保护范围的限制。
其中,有时候需要使用神经网络模型对图片处理,在需要使用神经网络模型对图片处理时,为了提高处理效率,可以在GPU中使用神经网络模型对图片处理,例如,将图片的矩阵加载至GPU中,并将神经网络模型也加载至GPU中,然后在GPU中基于神经网络模型中的函数对图片的矩阵进行运算,得到输出矩阵,进而根据输出矩阵可以得到处理后的图片。
在一个实施例中,神经网络模型中包括卷积层,卷积层的作用是基于卷积核对输入矩阵进行运算。其中,可以先将输入矩阵写入GPU的内存中,以及,将神经网络模型的卷积层的卷积核写入GPU的内存中,之后再从内存中读取输入矩阵,将输入矩阵写入GPU的寄存器中,以及,从内存中读取神经网络模型中的卷积层的卷积核,并将卷积核写入GPU的寄存器中,然后就可以在GPU的寄存器中基于卷积核对输入矩阵进行运算。
在本申请中,输入矩阵包括多个通道的二维矩阵,也即,输入矩阵可以为三维矩阵,例如,参见图2,假设,输入矩阵包括4个通道,分别为通道0、通道1、通道2以及通道3,通道0对应的二维矩阵为[00 01 02],通道1对应的二维矩阵为[10 11 12],通道2对应的二维矩阵为[20 21 22],通道3对应的二维矩阵为[30 31 32]。
在从GPU的内存中读取输入矩阵时,一次从GPU的内存中只能读取一个通道对应的二维矩阵中的数据,且,通常情况下,一次从GPU的内存中只能读取一个通道对应的二维矩阵中的一个数据,如此,对于一个通道而言,该通道对应的二维矩阵中包括几个数据,就需要从GPU的内存中读取几次数据,如果从GPU的内存中读取数据的次数较多,则从GPU的内存中读取数据的过程会耗费较多时长,导致整体的运算效率较低。
然而,在本申请中,由于是从GPU的内存中读取数据,且GPU是支持以向量化的形式从内存中读取数据的,例如,一次可以从GPU的内存中读取多个数据,例如,一次可以从GPU的内存中读取预设数量的整数倍个数据,本申请中,预设数量包括4或8等,本申请对此不加以限定,本申请以预设数量为4进行举例说明,但不作为对本申请的保护范围的限制。
其中,可以从从GPU的内存中读取4个数据,或者,一次从从GPU的内存中读取4的整数倍倍数个数据。
然而,如果需要从GPU的内存中一次读取4的整数倍个数据,则需要使得每一次从GPU的内存中读取数据时,读取的第一个数据的存储地址为4的整数倍。
由于在从GPU的内存中读取输入矩阵时,一次从内存中可以一个通道一个通道地读取二维矩阵中的数据,因此,需要使得每一个通道分别对应的二维矩阵中的第一个数据的存储地址均为4的整数倍。
然而,在图2所示的输入矩阵中,在GPU的内存中存储输入矩阵时是将输入矩阵中的数据连续存储在内存中,如此,输入矩阵中的连续的数据在GPU中的存储中的存储地址至连续的,如此,在GPU的内存中存储通道0对应的二维矩阵之后,通道0对应的二维矩阵中的第一个数据“00”的存储地址可以为0,第二个数据“01”的存储地址可以为1,以及第三个数据“02”的存储地址可以为2,但是,在GPU的内存中存储通道1对应的二维矩阵之后,通道1对应的二维矩阵中的第一个数据“10”的存储地址可以为3,因此,在从GPU的内存中读取通道1对应的二维矩阵中的数据时,就无法使用向量化的读取方式一次读取通道1对应的二维矩阵中的多个数据,同样地,在读取通道2对应的二维矩阵中的数据以及通道3对应的二维矩阵中的数据也无法一次读取多个数据,只能一次读取一个数据,如果从GPU的内存中读取次数较多,则从GPU的内存中读取数据的过程会耗费较多时长,导致整体的运算效率较低。
因此,为了提高整体的运算效率,可以在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;在输入矩阵存在目标通道的情况下,在目标通道中添加至少一个数据,以使目标通道中包括的数据的数量为预设数量的整数倍;
如此,由于第一个通道对应的二维矩阵中的第一个数据在GPU的内存中的存储地址为0,且每一个通道对应的二维矩阵中包括的数据的数量为预设数量的整数倍,因此,所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在GPU的内存中读取每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,例如,一次可以读取一个通道的对应的二维矩阵中包括的所有数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,进而提高整体的运算效率。
在输入矩阵存在目标通道的情况下,在步骤S102中,在目标通道中添加至少一个数据,以使目标通道中的数据的数量为预设数量的整数倍;
例如,在图2所示的输入矩阵的基础之上,可以将每一个通道对应的矩阵中的数据的数量补齐为预设数量的整数倍。
例如,在通道0对应的二维矩阵[00 01 02]的末尾添加数据03,得到补全后的二维矩阵[00 01 02 03]。
在通道1对应的二维矩阵[10 11 12]的末尾添加数据13,得到补全后的二维矩阵[10 11 12 13]。
在通道2对应的二维矩阵[20 21 22]的末尾添加数据23,得到补全后的二维矩阵[20 21 22 23]。
在通道3对应的二维矩阵[30 31 32]的末尾添加数值33,补全后的二维矩阵得到[30 31 32 33],得到图3所示的补全后的输入矩阵。
如此,通道0对应的补全后的二维矩阵[00 01 02 03]中的第一个数据“00”在GPU的内存中的存储地址为0,在从GPU的内存中读取通道0对应的补全后的二维矩阵中的数据时可以一次读取多个数据,
另外,第二个数据“01”在内存中的存储地址为1,第三个数据“02”在内存中的存储地址为2,第四个数据“03”在内存中的存储地址为3。
如此,通道1对应的补全后的二维矩阵[10 11 12 13]中的第一个数据“10”在GPU的内存中的存储地址为4,在从GPU的内存中读取通道1对应的补全后的二维矩阵中的数据时可以一次读取多个数据,
相应地,在从内存中读取通道2对应的补全后的二维矩阵中的数据时可以一次读取多个数据,以及从内存中读取通道3对应的补全后的二维矩阵中的数据时可以一次读取多个数据。
也即,在读取每一个对应的补全后的二维矩阵中的数据时都可以进行向量化读取,从而可以降低读取次数,进而降低读取数据的过程耗费的时长,进而提高整体的运算效率。
在本申请中,在对一个通道中的二维矩阵中的数据进行补全时,可以在二维矩阵的末尾添加随机数据,或者,根据二维矩阵中的数据计算出需要补全的数据,然后在二维矩阵的末尾添加计算出的数据等,或者,也可以在二维矩阵的末尾数字“0”,以使添加的数据对二维矩阵的运算的整体影响较低,当然,也可以通过其他方式来确定需要在二维矩阵中添加的数据,本申请对具体的确定方法不做限定。
在步骤S103中,从内存中读取输入矩阵,并将输入矩阵写入GPU的寄存器中;
在本申请中,由于在步骤S102中已经将目标通道中的数据的数量补偿为预设数量的整数倍,如此,输入矩阵中的所有通道对应的二维矩阵中包括的数据的数量均为预设数量的整数倍,在从内存中读取每一个通道对应的二维矩阵中的数据时,可以一次读取多个数据,之后可以将读取的数据一次写入寄存器中。
在步骤S104中,从内存中读取卷积核,将卷积核写入GPU的寄存器中;
在本申请中,通常是基于一个基于神经网络模型分别对不同输入数据处理,因此,事先可以将卷积核中的所有通道对应的二维矩阵中包括的数据的数量补全为预设数量的整数倍,如此,在本申请中,在从内存中读取卷积核的每一个通道对应的二维矩阵中的数据时,可以一次读取多个数据,之后可以将读取的数据一次写入寄存器中。
也即,在读取卷积核的每一个通道对应的二维矩阵中的数据时都可以进行向量化读取,从而可以降低读取次数,进而降低读取数据的过程耗费的时长,进而提高整体的运算效率。
在步骤S105中,在寄存器中基于卷积核对输入矩阵进行运算,得到输出矩阵。
本步骤具体可以参见如图5以及10所示的实施例,在此不做详述。
在本申请中,可以在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;在输入矩阵存在目标通道的情况下,在目标通道中添加至少一个数据,以使目标通道中的数据的数量为预设数量的整数倍;从内存中读取输入矩阵,并将输入矩阵写入GPU的寄存器中;从内存中读取卷积核,将卷积核写入GPU的寄存器中;在寄存器中对输入矩阵与卷积核进行计算,得到输出矩阵。通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高整体的运算效率。
其中,GPU对整型数据的处理效率较高,而对浮点型数据的处理效率较低,另外,经发明人研究发现,浮点型数据中往往包含大量的冗余信息,例如,32位的浮点型数据中往往包含大量的冗余信息,而在基于神经网络模型对图片等输入数据的实际处理中,整型数据往往就可以满足实际的运算精度,例如,8位整型数据就可以满足精度需求。
因此,在满足运算精度需求的情况下,为了提高在GPU中处理整型数据时的整体的运算效率,在本申请中,如果输入矩阵中包括浮点型数据,则事先可以将输入矩阵中的浮点型数据转换为整型数据。
如此,在从内存中读取到的输入矩阵中的数据都是整型数据,将整型数据写入GPU的寄存器之后,GPU对整型数据运算可以提高运算效率。
其次,整型数据所占空间往往小于浮点型数据所占空间,例如,一个32位的浮点型数据占4字节大小,而一个8位的整型数据占1字节大小,因此,在将输入矩阵中的数据存储在GPU的内存中之后,可以从GPU的内存中读取更少的数据量,从而可以减少从内存中读取数据所需耗费的时长,进而可以提高运算效率。
另外,由于整型数据所占空间往往小于浮点型数据所占空间,在内存中将浮点型数据转换为整型数据之后,可以节省内存空间。
其中,在从GPU的内存中读取输入矩阵时,一次从内存中可以读取一个通道对应的二维矩阵中的数据,输入矩阵包括几个通道的二维矩阵,则就需要从内存中读取几次数据,如果读取次数较多,则读取数据的过程会耗费较多时长,导致整体的运算效率较低。
在前述实施例中,由于已经将输入矩阵中的浮点型数据转换为整型数据,因此,为了提高整体的运算效率,在前述实施例中的基础之上,在本申请另一实施例中,如果GPU的内存中的输入矩阵包括的通道的数量不为预设数量的整数倍,则在输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;然后在输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个通道对应的二维矩阵。例如,将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;将得到的多个高位整型数据组合为一个二维矩阵。
其中,合并前的预设数量的整数倍个通道对应的二维矩阵中的整型数据的位数较低,例如,为8位整型数据,而合并之后的第一个通道对应的二维矩阵中的整型数据中的位数较高,例如,为32位整型数据。
具体地,每一个通道对应的二维矩阵中的整型数据在各自的二维矩阵中都有各自的位置,将不同的通道对应的二维矩阵中的相同的位置的整型数据按照通道的排序顺序组合成高位整型数据。
例如,在图3所示的矩阵中,每一个通道的矩阵中的数据均为8位整型数据,将4个通道的相同位置的数据组合为一个32位的整型数据,例如,将通道0对应的矩阵中的第一个数据“00”、通道10对应的矩阵中的第一个数据“10”、通道2对应的矩阵中的第一个数据“20”、通道3对应的矩阵中的第一个数据“30”组合为一个32位的整型数据“00102030”,对于通道1、通道2以及通道3分别执行类似操作,得到图4所示的矩阵。
如此,得到一个通道对应的二维矩阵之后,在GPU的内存中读取数据时,可以读取一次即可得到输入矩阵中的所有整型数据。
在保证能够读取到读取到输入矩阵中的全部的数据的情况下,可以提高一次读取的数据量,可以降低读取次数,进而降低读取数据的过程耗费的时长,进而提高整体的运算效率。
在本申请中,在GPU的寄存器中计算两个矩阵之间的乘积时的计算效率较高,然而,在输入矩阵为三维矩阵或者卷积核为三维矩阵的情况下,为了提高在寄存器中基于卷积核对输入矩阵进行运算的效率,可以将基于卷积核对输入矩阵进行运算的过程转换为两个矩阵之间的乘积运算。
其中,输入矩阵包括多个通道对应的二维矩阵,也即,输入矩阵可以看作是一个三维矩阵,卷积核也可以包括多个通道的二维矩阵,也即,卷积核也可以看做为一个三维矩阵。在将两个三维矩阵相乘时,可以先将两个三维矩阵分别转换为二维矩阵,然后将二维矩阵相乘,得到输出矩阵,从而可以将基于卷积核对输入矩阵进行运算的过程转换为两个矩阵之间的乘积运算。进而提高整体的运算效率。
具体地,参见图5,步骤S105包括:
在步骤S201中,将输入矩阵转换为第一二维矩阵;
本申请可以使用im2col(重排图像块为矩阵列)的方式来基于卷积核将所以输入矩阵转换为第一二维矩阵。
例如,可以确定卷积核能够在第一二维矩阵中横向移动的第一移动次数,以及确定卷积核能够在第一二维矩阵中纵向移动的第二移动次数,计算第一移动次数与数值1之和,假设为H,计算第二移动次数与数值1之和,假设为I,则生成H*I大小的窗口。
对于输入矩阵中的任意一个通道对应的二维矩阵,可以将该窗口叠加在该通道对应的二维矩阵上的左上角,在该通道对应的二维矩阵中被该窗口囊括的数据可以按照行优先的方式组成一个行向量,并将其作为一个矩阵。
然后将该窗口按照行优先的方式在该通道对应的二维矩阵上向右移动至少一个步长,一个步长包括一列的宽度,此时该通道对应的二维矩阵中被该窗口囊括的数据可以按照行优先的方式组成又一个行向量,并添加上一步得到的矩阵的下侧,得到一个新的矩阵。
直至该窗口已经被移动至该通道对应的二维矩阵的最右侧,然后可以将该窗口移动至从该通道对应的二维矩阵中的最左侧,并向下移动一个步长,然后按照行优先的方式向右移动至少一个步长,此时该通道对应的二维矩阵中被该窗口囊括的数据可以按照行优先的方式组成又一个行向量,添加上一步得到的矩阵的下侧,得到一个新的矩阵。
直至该窗口已经被移动至该通道对应的二维矩阵中右下侧为止。
然后对其他通道对应的二维矩阵分别继续执行上述流程,然后将每一次得到的向量依次添加至上一步得到的矩阵的下侧,最终得到的矩阵即为第一二维矩阵。
例如,参见图6所示的输入矩阵,其包括两个通道对应的二维矩阵,两个通道分别为通道0和通道1,通道0对应的矩阵为4*4的矩阵,包括数据[1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16],通道1对应的矩阵为4*4的矩阵,包括数据[17 18 19 20 21 22 23 24 2526 27 28 29 30 31 32]。
可以确定卷积核能够在第一二维矩阵中横向移动的第一移动次数为1,以及确定卷积核能够在第一二维矩阵中纵向移动的第二移动次数为2,计算第一移动次数与数值1之和2,计算第二移动次数与数值1之和2,则可以生成一个2*2的窗口,对于通道0对应的二维矩阵,可以将2*2的窗口叠加在通道0对应的二维矩阵上的左上角,在通道0对应的二维矩阵中被2*2的窗口囊括的数据包括1、2、3、5、6、7、9、10以及11,可以按照列优先的方式组成一个列向量[1 2 3 5 6 7 9 10 11]。
然后将2*2的窗口按照行优先的方式向右移动至少一个步长,一个步长为一列的宽度,此时通道0对应的二维矩阵中被2*2的窗口囊括的数据包括2、3、6以及7,可以按照行优先的方式组成又一个行向量[2 3 6 7],添加上一步得到的矩阵的下侧[1 2 5 6],得到一个新的矩阵。
直至2*2的窗口已经被移动至通道0对应的二维矩阵的最右侧,然后可以将2*2的窗口移动至从通道0对应的二维矩阵中的最左侧,并向下移动一个步长,然后按照行优先的方式向右移动至少一个步长,此时通道0对应的二维矩阵中被2*2的窗口囊括的数据包括5、6、9以及10,可以按照行优先的方式组成又一个行向量[5 6 9 10],添加上一步得到的矩阵的下侧,得到一个新的矩阵。
直至将2*2的窗口移动至通道0对应的二维矩阵中的右下侧为止。
然后对通道1对应的二维矩阵继续执行上述流程,然后将每一次得到的向量依次添加至上一步得到的矩阵的下侧,从而得到图7所示的第一二维矩阵。
在步骤S202中,将卷积核的转换为第二二维矩阵;
在本申请中,本申请可以使用im2col(重排图像块为矩阵列)的方式来将卷积核的转换为第二二维矩阵。
具体地转换方式可以参见步骤S201中将输入矩阵转换为第一二维矩阵的方式,在此不做详述。
例如,参见图8,假设神经网络模型中包括两个卷积核,分别kernel0以及kernel1,kernel0包括通道0对应的二维矩阵[0 1 2 3 4 5 6 7 8]以及通道1对应的二维矩阵[9 1011 12 13 14 15 16 17]。
kernel1包括通道0对应的二维矩阵[18 19 20 21 22 23 24 25 26]以及通道1对应的二维矩阵[27 28 29 30 31 32 33 34 35]。
则可以将kernel0包括的两个二维矩阵转换为一行的矩阵[0 1 2 3 4 5 6 78 910 11 12 13 14 15 16 17],将kernel1包括的两个二维矩阵转换为一行的矩阵[18 19 2021 22 23 24 25 26 27 28 29 30 31 32 33 34 35],从而得到图9所示的矩阵。
在步骤S203中,计算第一二维矩阵与第二二维矩阵之间的矩阵乘积,得到输出矩阵。
在图5所示的实施例的基础之上,在计算第一二维矩阵与第二二维矩阵之间的矩阵乘积的过程中,通常是依次串行地进行数据的乘积以及累加等流程,从而得到输出矩阵。然而,串行的运算过程需要耗费较多时长,导致整体的运算效率较低。
因此,为了充分利用GPU的并发特性,以提高整体的运算效率,在本申请另一实施例中,可以将计算第一二维矩阵与第二二维矩阵之间的矩阵乘积的任务划分为多个子任务,然后并行执行各个子任务,在得到各个子任务的执行结果之后,可以根据各个子任务的执行结果确定出输出矩阵,由于在GPU中支持并发执行多个子任务,从而可以提高整体的运算效率。
具体地,参见图10,步骤S203包括:
在步骤S301中,根据第一二维矩阵的大小和第二二维矩阵的大小确定需要计算出的输出矩阵的大小;
例如,在将第一二维矩阵与第二二维矩阵相乘时,假设第一二维矩阵为左矩阵,第二二维矩阵为右矩阵,则通常情况下,第一二维矩阵与第二二维矩阵相乘之后,得到的输出矩阵的行数等于第一二维矩阵的行数,以及输出矩阵的列数等于第二二维矩阵的列数。
例如,假设第一二维矩阵为1行3列的矩阵,第二二维矩阵为2行5列的矩阵,则将第一二维矩阵与第二二维矩阵相乘之后得到的输出矩阵的行数为1且列数为5。
因此,可以将第一二维矩阵的行数作为需要计算出的输出矩阵的行数,将第二二维矩阵的列数作为需要计算出的输出矩阵的列数。
在步骤S302中,根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
对于需要计算出的输出矩阵中的任意一部分相邻的数据组成的一个子矩阵,子矩阵可以为一行多列的矩阵,或者为多行一列的矩阵,或者为多行多列的矩阵等,假设该小矩阵为需要计算出的输出矩阵的第N行第M列的数据,则该子矩阵是根据第一二维矩阵的第N行的数据以及第二二维矩阵中的M列中的数据计算得到的。其中,第N行可以包括多行,第M列可以包括多列。
可见,在需要计算出的输出矩阵中的不同的数据组成的一个子矩阵的过程是相互独立的,因此,可以将需要计算出的输出矩阵划分为多个子矩阵,以使在GPU中可以并行地计算需要计算出的输出矩阵中的每一个子矩阵,然后将计算出的子矩阵组合为输出矩阵。
如果需要计算出的输出矩阵非常大,也即,需要计算出的输出矩阵的行数和列数非常多,则为了提高运算效率,可以将需要计算出的输出矩阵拆分为数量较多的子矩阵,以保证并发度更高。
在需要计算出的输出矩阵不是非常大时,也即,需要计算出的输出矩阵的行数和列数不是非常多,则为了平衡运算效率以及GPU的计算资源,可以将虚拟矩阵拆分为数量较少的子矩阵。
本申请对具体地拆分方法不做限定。
在一个可选的实施例中,在历史过程中的计算两个历史输入矩阵的乘积得到的所有历史输出矩阵中,对于任意一个大小的历史输出矩阵,将该大小的历史输出矩阵分别拆分多次,每一次拆分后得到的子矩阵的数量不同,每一次拆分之后测试计算该大小的历史输出矩阵的计算效率,然后至少根据计算效率最高的拆分的数量生成适用于该大小的历史输出矩阵的拆分策略,然后将该大小与该拆分策略存储在大小与拆分策略之间的对应关系中。对于其他每一个一个大小的历史输出矩阵,同样执行上述操作。
如此,在本申请中,可以在大小与拆分策略之间的对应关系中查找需要计算出的输出矩阵的大小相对应的拆分策略,然后基于该拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
在步骤S303中,在寄存器中为每一个子矩阵分别分配一个线程块;
在步骤S304中,控制每一个线程块分别根据第一二维矩阵与第二二维矩阵计算其对应的子矩阵;
在本申请中,对于任意一个线程块,其对应一个子矩阵,这个子矩阵在需要计算出的输出矩阵中的行数和列数是确定的,如此,可以在第一二维矩阵中确定该行数对应的行,以及在第二二维矩阵中确定该列数对应的列。
其中,第一二维矩阵中的该行中的每一个数据在该行中都具备各自的顺序位置,以及,第二二维矩阵中的该列中的每一个数据在该列中都具备各自的顺序位置。
对于任意一顺序位置,可以将第一二维矩阵中的该行中的该顺序位置的数据与第二二维矩阵中的该列中该顺序位置的数据相乘,得到相乘结果,对于其他每一个顺序位置,同样执行上述操作,如此,得到每一个顺序位置分别对应的相乘结果,然后将每一个顺序位置分别对应的相乘结果相加,得到该线程块对应的子矩阵。
对于其他每一个线程块,同样执行上述操作,如此,得到每一个子矩阵。
例如,参加图11,假设第一二维矩阵为矩阵X,第二二位矩阵为矩阵Y,矩阵X为左矩阵,矩阵Y为右矩阵,矩阵X为m行的矩阵,矩阵Y为n列的矩阵,如此,计算出的矩阵X与矩阵Y的乘积之后得到的矩阵Z为m行n列的矩阵,可以将需要计算出的矩阵Z划分为9份,共9个子矩阵,其中,一个子矩阵为子矩阵C,假设子矩阵C在矩阵Z中的位置为p行q列。则,需要确定出矩阵X中的第p行的数据,以及确定出矩阵Y中的第q列的数据,然后根据矩阵X中的第p行的数据以及矩阵Y中的第q列的数据计算子矩阵C。同样按照上述计算子矩阵C的方式计算矩阵Z中的其他子矩阵。
其中,在一个实施例中,每一个线程块中包括多个线程束;每一个线程束中包括多个线程;如此,在控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵时,对于每一个子矩阵,将该子矩阵拆分为多个部分矩阵;控制该子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;将计算得到的多个部分矩阵组合为该子矩阵。
例如,参见图12,矩阵A为左矩阵,矩阵B为右矩阵,可以将需要计算出的矩阵C划分为4份,共4个部分矩阵,其中,每一个线程块中包括4个线程束;每一个线程束中包括多个线程;每一个部分矩阵通过一个不同的线程束来运算,也即,控制子矩阵对应的线程块中的每一个线程束分别计算每一个部分矩阵,然后将计算得到的4个部分矩阵组合为该子矩阵,从而可以提高计算子矩阵的效率。
在步骤S305中,将得到的多个子矩阵组合为输出矩阵。
在本申请中,通常情况下,在神经网络模型中,在卷积层之后通常后还具有其他层,例如,线性变换层以及激活层等等,这些层用于对前一层的输出数据进行处理,然后将处理结果输出给下一层处理。
例如,卷积层之后还具有线性变换层以及激活层,线性变换层用于对卷积层的输出矩阵进行处理,得到输出结果,并传递给激活层,激活层用于对线性变换层的输出结果进行处理。
其中,在基于卷积层中卷积核对输入矩阵运算得到输出矩阵之后,往往需要先在GPU的内存中缓存输出矩阵,当需要基于其它层处理输出矩阵时,在从内存中读取输出矩阵,然后将输出矩阵重新写入寄存器中,然后再将其他层的处理函数写入寄存器中,之后在寄存器中基于其他层的处理函数对输出矩阵继续处理。
然而,在上述过程中,需要执行在GPU的内存中缓存输出矩阵,又从GPU的内存中读取输出矩阵,以及将输出矩阵重新写入寄存器中的步骤,且在GPU的内存中读取输出矩阵通常需要遍历GPU的内存中的所有地址,因此,执行这些步骤需要耗费较多时长,进而会导致整体的运算效率较低。
也即,在上述过程中,相当于在每一层的处理过程都是独立的,每一层处理完毕之后都将处理结果缓存在GPU的内存中,在进行下一层的处理时,在从GPU的内存中读取上一层的输出结果并重新写入寄存器进行下一层的处理。
因此,为了提高运算效率,可以节省在GPU的内存中缓存输出结果,又从GPU的内存中读取输出结果,以及将输出结果重新写入寄存器中的步骤,例如,在本申请另一实施例中,在得到输出矩阵之后,可以不在GPU的内存中缓存输出矩阵,而可以经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数,然后在寄存器中基于处理函数对输出矩阵进行处理,得到处理结果。
从而可以不再执行在GPU的内存中缓存输出结果,又从GPU的内存中读取输出结果,以及将输出结果重新写入寄存器中的步骤,进而节省了执行在GPU的内存中缓存输出结果,又从GPU的内存中读取输出结果,以及将输出结果重新写入寄存器中的步骤所需耗费的时长,进而可以提高整体的运算效率,
在本申请中,在计算第一二维矩阵与第二二维矩阵之间的乘积时,第一二维矩阵为左矩阵,第二二维矩阵为右矩阵,如果第一二维矩阵的行很少、第二二维矩阵的列很少、第一二维矩阵的列很多且第二二维矩阵的行很多,则在GPU中计算第一二维矩阵与第二二维矩阵之间的乘积时,大量的时间需要耗费在第一二维矩阵的列的维度以及第二二维矩阵的行的维度的数据累加依赖上。
例如,通常需要串行计算在第一二维矩阵的列的维度以及第二二维矩阵的行的维度的乘法,每当新得到一个乘法结果之后,才能将之前得到的累加结果与新得到的乘法结果继续累加,由于计算各个乘法是基于串行计算的,因此导致累计依赖验证,也即,导致整体的运算效率较低。
因此,为了提高运算效率,在本申请另一实施例中,可以将第一二维矩阵按照行拆分为多个第一子矩阵,将第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;对于每一个第一子矩阵,计算第一子矩阵与对应的第二子矩阵之间的乘积,例如,对于任意一个第一子矩阵,确定该第一子矩阵在第一二维矩阵中的位置,然后在第二二维矩阵中确定位于该位置的第二子矩阵,然后计算该第一子矩阵与确定出的第二子矩阵之间的乘积,对于任意一个第一子矩阵,同样执行上述操作;将得到的每一个乘积相加,得到输出矩阵。
通过本申请,可以将第一二维矩阵与第二二维矩阵之间的乘法运算拆分为多个独立的子乘法运算,各个乘法运算可以独立并行执行,从而充分利用了GPU的并发特性,降低累加依赖,从而可以提高整体的运算效率。
例如,参见图13,将左矩阵A按列拆分为n个子矩阵,分别为A0、A1、A2、A3......以及An等,将右矩阵B按行拆分为n个子矩阵,分别为B0、B1、B2、B3......以及Bn等,在左矩阵A中,A0至An中的每一个子矩阵均可以表示1行数据或2行数据等较少行数的数据,而在右矩阵B中,B0至Bn中的每一个子矩阵均可以表示1列数据或2列数据等较少列数的数据,且n远大于A0至An中的任意一个包括的行数,以及n远大于B0至Bn中的任意一个包括的列数。
其中,分配n个线程块blcok,每一个线程块执行一个左矩阵A与右矩阵B中下角标相同的子矩阵相乘的运算,且各个线程块可以并行执行,从而增加计算的并发度,进而可以提高整体的运算效率。
其中,为了支持可以按照图13所示的方式进行运算,以提高整体的运算效率,本申请中,在硬件上,可以在GPU中分配多份内存以及多个寄存器,从而可以分别从不同的内存中读取数据,并写入不同的寄存器中,以使多个寄存器并行执行运算,以提高整体的运算效率。
在本申请另一个实施例中,参见图14,步骤S105包括:
在步骤S401中,对于输出矩阵中的任意每一个元素,在输入矩阵中查找用于计算该元素的数据,根据查找到的数据以及卷积核计算该元素;
在本申请一个实施例中,可以获取卷积核大小的窗口在输入矩阵中能够横向滑动的滑动次数,获取卷积核大小的窗口在输入矩阵中每次横向滑动时第一滑动步数以及卷积核大小的窗口在输入矩阵中每次横向滑动时第二滑动步数;确定在输入矩阵中补全的通道的第一补全数量以及在每一个通道上补全数据的第二补全数量;根据子矩阵在所述输出矩阵中的位置、卷积核的宽度、卷积核的高度、第一滑动次数、第二滑动次数、第一滑动步数、第二滑动步数、第一补全数量以及第二补全数量确定输入矩阵中的用于计算该元素的位置;获取输入矩阵中的所述位置处的数据。
例如,按照如下公式组来确定输入矩阵中的用于计算该元素的位置:
{c_id=y/(k_h*k_w);
k_id=y%(k_h*k_w);
kernel_hid=k_id/k_h;
kernel_wid=k_id%k_w;
output_hid=x/output_w;
output_wid=x%output_w;
intput_hid=-pad_h+stride_h*output_hid;
intput_wid=-pad_w+stride_w*output_wid;
h_id_input_hid+hernel_hid;
w_id_input_wid+hernel_wid}=:
I(n,c_id,h_id,w_id)。
n为数据所在的输入矩阵的编号,c_id数据所在的输入矩阵中的二维矩阵的通道的编号,h_id为数据位于二维矩阵中的行数,w_id为数据位于二维矩阵中的列数。
k_h为卷积核的行数,k_w为卷积核的列数。
y为元素在输出矩阵中的行数,x为元素在输出矩阵中的列数。
output_w为卷积核在输入矩阵中能够横向滑动的滑动次数。
pad_h为在输入矩阵中补全的通道的第一补全数量。
pad_w为在每一个通道上补全数据的第二补全数量。
stride_h为卷积核在输入矩阵中每次横向滑动时第一滑动步数。
stride_w为卷积核在输入矩阵中每次横向滑动时第二滑动步数。
在步骤S402中,将计算出的输出矩阵中的各个元素组合为输出矩阵。
在图5所示的实施例中,需要将输入矩阵转换为第一二维矩阵,转换得到的第一二维矩阵需要存储在GPU的内存中以供之后计算使用,但是,这样会占用GPU中非常多的内存空间,且上述输入矩阵转换为第一二维矩阵需要两次调用CUDA函数,增加了两次访问GPU的内存的次数,且这两次访问GPU的内存时需要遍历GPU的内存中的所有存储地址,这个过程会交费较多时长,导致整体的运算效率较低。
而在本实施例中,不需要将输入矩阵转换为第一二维矩阵,在需要计算输出矩阵中的哪一个元素时,再从输入矩阵中实时查找用于计算该元素的数据,根据查找到的数据以及卷积核计算该元素,从而不需要在内存中存储第一二维矩阵,而不需要两次调用CUDA函数,从而可以节省GPU的内存空间以及提高整体的运算效率。
然而,按照上述方式在输入矩阵中查找用于计算该元素的数据时,通常会使用到大量的除法运算以及取模预算,然而,通常情况下,一个除法运算或取模预算需要使用多个汇编代码以及指令周期,在GPU上进行除法运算以及取模运算的运算效率较低,从而导致整体的运算效率较低。
因此,为了提高整体的运算效率,如果存在除法运算或者取模运算,则可以将除法运算或者取模运算转换为乘法和移位运算。例如,通过除法逆元算法来根据除法运算中的除数确定乘法中的乘数和移位数,然后将被除数乘以乘数,得到一数值,然后将该数值右移该移位数,得到最终的运算结果。
在本申请中,GPU中可以设置多个共享内存,共享内存存储空间较小,但读写速度较快,不同的内存的大小以及读写速度不同,多个内存与寄存器之间逻辑顺序不同,逻辑顺序距离寄存器越近的共享内存的读写速度越快,但存储空间越小,以及,逻辑顺序距离寄存器越远的共享内存的读写速度慢快,但存储空间越大。
通常情况下,站在寄存器的角度上,当需要从内存中读取数据并写入寄存器时,是按照距离寄存器的逻辑顺序由近至远的顺序依次访问各个共享内存,直至访问完毕各个共享内存为止。
然而,当需要读取的数据较小,使得距离寄存器最近的共享内存中就可以存储该数据,也即,从距离寄存器最近的共享内存中就可以得到该数据,但是这样仍旧还需要访问距离寄存器较远的那些共享内存,浪费时间,降低了整体的运算效率。
因此,为了提高整体的运算效率,在从距离寄存器较近的共享内存中就可以得到需要得到的数据的情况下,就不需要访问距离寄存器较近的共享内存。
具体地,在前述实施例中在对矩阵乘法中已经分块运算,因此,可以根据分块后每一块的数据量来确定是否需要关闭部分共享内存。
其中,对于分块后每一块的数据,在多个共享内存中中,按照与距离寄存器的逻辑顺序由近至远的顺序存储该块的数据,在存储完毕之后,关闭剩余距离寄存器的逻辑顺序较远的未存储该块的数据的共享内存,如此,之后在读取该快的数据时,不会去访问距离寄存器的逻辑顺序较远的未存储该块的数据的共享内存,从而可以减少访问内存所需耗费的时长,进而可以整体上提高运算效率。
参照图15,示出了本发明实施例的一种数据处理方法的步骤流程图,该方法具体可以包括如下步骤:
在步骤S501中,在对图片进行光学字符识别OCR识别时,将图片的输入矩阵输入处理器的内存中;
其中,处理器包括GPU或者CPU(中央处理器,Central Processing Unit CPU)。
在步骤S502中,输入矩阵的通道中添加至少一个数据,以使通道中的数据的数量为预设数量的整数倍;
在本申请中,在对通道中的二维矩阵中的数据进行补全时,可以在二维矩阵的末尾添加随机数据,或者,根据二维矩阵中的数据计算出需要补全的数据,然后在二维矩阵的末尾添加计算出的数据等,或者,也可以在二维矩阵的末尾数字“0”,以使添加的数据对二维矩阵的运算的整体影响较低,当然,也可以通过其他方式来确定需要在二维矩阵中添加的数据,本申请对具体的确定方法不做限定。
在步骤S503中,从内存中读取输入矩阵,将输入矩阵写入处理器的寄存器中;
在本申请中,由于在步骤S102中已经将输入矩阵的通道中的数据的数量补偿为预设数量的整数倍,如此,输入矩阵中的通道对应的二维矩阵中包括的数据的数量均为预设数量的整数倍,在从处理器的内存中读取每一个通道对应的二维矩阵中的数据时,可以一次读取多个数据,之后可以将读取的数据一次写入寄存器中。
在步骤S504中,在寄存器中基于卷积核对输入矩阵进行运算,得到图片的识别结果。
通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在从处理器中的内存中读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高对图片进行OCR识别的效率。
在本申请一个实施例中,OCR识别场景时可以在处理器中使用上述方法,但是在该处理器中上述方法可能并不是非常适用于OCR识别场景。例如,假设OCR识别场景时,需要在特定时长内完成识别,但是使用上述方法虽然最终能够得到准确的识别结果,但是上述方式在进行OCR识别的过程所需耗费的时长大于特定时长,会导致业务响应超时。
因此,为了避免业务响应超时,在对图片进行光学字符识别OCR识别时,可以确定该处理器是否适用于OCR识别场景,在该实施例中,当一个处理器适用于OCR识别场景时,在该处理器中使用上述方法进行OCR识别的过程所需耗费的时长小于或等于特定时长,当一个处理器不适用于OCR识别场景时,在该处理器中使用上述方法进行OCR识别的过程所需耗费的时长大于特定时长。如此,在该处理器适用于OCR识别场景的情况下,再将图片的输入矩阵输入处理器的内存中,也即,再在该处理器中使用上述方法进行OCR识别,这样就不会导致业务响应超时。
如此,在该处理器不适用于OCR识别场景的情况下,就可以不将图片的输入矩阵输入处理器的内存中,也即,不在该处理器中使用上述方法进行OCR识别,而可以选用其他方式进行OCR识别,从而避免在该处理器中使用上述方法进行OCR识别导致业务响应超时。
在本申请另一个实施例中,可用的处理器为多个;当需要进行OCR识别时,可以在多个处理器中选择一个处理器,并在选择的处理器中使用上述方法进行OCR识别。
例如,在将图片的输入矩阵输入处理器的内存中时,可以在多个处理器中选择适用于OCR识别场景的处理器;然后将图片的输入矩阵输入选择的处理器的内存中。
其中,在适用于OCR识别场景的处理器中使用上述方法进行OCR识别所需耗费的时长较少,也即,进行OCR识别的效率较高。在不适用于OCR识别场景的处理器中使用上述方法进行OCR识别所需耗费的时长较多,也即,进行OCR识别的效率较低。
对于多个处理器中的任意一个处理器,事先可以确定哪些场景适用于该处理器;然后将确定出的场景与该处理器的处理器标识组成对应表项,并存储在场景与适用于场景的处理器的处理器标识之间的对应关系中。对于多个处理器中的其他每一个处理器,同样执行上述操作。
如此,在多个处理器中选择适用于OCR识别场景的处理器时,可以在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识,然后在多个处理器中选择该处理器标识所对应的处理器。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本申请所必须的。
图16是根据一示例性实施例示出的一种数据处理装置的框图,如图16所示,该装置包括:
查找模块11,用于在输入矩阵中查找是否存在目标通道,所述目标通道中包括的数据的数量不为预设数量的整数倍;
第一添加模块12,用于在所述输入矩阵存在所述目标通道的情况下,在所述目标通道中添加至少一个数据,以使所述目标通道中的数据的数量为所述预设数量的整数倍;
第一读取模块13,用于从图形处理器GPU的内存中读取所述输入矩阵,第一写入模块14,用于将所述输入矩阵写入所述GPU的寄存器中;
第二读取模块15,用于从所述内存中读取卷积核,第二写入模块16,用于将所述卷积核写入所述寄存器中;
第一运算模块17,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵。
在一个可选的实现方式中,所述装置还包括:
转换模块,用于如果所述输入矩阵中包括浮点型数据,则将所述输入矩阵中的浮点型数据转换为整型数据。
在一个可选的实现方式中,所述装置还包括:
第二添加模块,用于如果所述输入矩阵包括的通道的数量不为预设数量的整数倍,在所述输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;
合并模块,用于在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵。
在一个可选的实现方式中,所述合并模块包括:
第一组合单元,用于将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;
第二组合单元,用于将得到的多个高位整型数据组合为一个二维矩阵。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
第一转换单元,用于将所述输入矩阵转换为第一二维矩阵;
第二转换单元,用于将所述卷积核的转换为第二二维矩阵;
第一计算单元,用于计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵。
在一个可选的实现方式中,所述第一计算单元包括:
确定子单元,用于根据所述第一二维矩阵的大小和所述第二二维矩阵的大小确定需要计算出的输出矩阵的大小
划分子单元,用于根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
分配子单元,用于在所述寄存器中为每一个子矩阵分别分配一个线程块;
第一计算子单元,用于控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵;
组合子单元,用于将得到的多个子矩阵组合为输出矩阵。
在一个可选的实现方式中,所述划分子单元具体用于:在输出矩阵的大小与拆分策略之间的对应关系中,查找需要计算出的输出矩阵的大小相对应的拆分策略,所述拆分策略至少包括需要拆分得到的子矩阵的大小;基于所述拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
在一个可选的实现方式中,每一个线程块中包括多个线程束;
所述第一计算子单元具体用于:对于每一个子矩阵,将所述子矩阵拆分为多个部分矩阵;控制所述子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;将计算得到的多个部分矩阵组合为所述子矩阵。
在一个可选的实现方式中,所述第一计算单元包括:
第一拆分子单元,用于将所述第一二维矩阵按照行拆分为多个第一子矩阵;
第二拆分子单元,用于将所述第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;
第二计算子单元,用于对于每一个第一子矩阵,计算所述第一子矩阵与对应的第二子矩阵之间的乘积;
相加子单元,用于将得到的每一个乘积相加,得到所述输出矩阵。
在一个可选的实现方式中,所述装置还包括:
调取模块,用于经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数;
处理模块,用于在所述寄存器中基于所述处理函数对所述输出矩阵进行处理,得到处理结果。
在一个可选的实现方式中,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
查找单元,用于对于需要计算出的输出矩阵中的任意每一个元素,在所述输入矩阵中查找用于计算所述元素的数据,第二计算单元,用于根据查找到的数据以及所述卷积核计算所述元素;
第三组合单元,用于将计算出的输出矩阵中的各个元素组合为输出矩阵。
在本申请中,可以在输入矩阵中查找是否存在目标通道,目标通道中包括的数据的数量不为预设数量的整数倍;在输入矩阵存在目标通道的情况下,在目标通道中添加至少一个数据,以使目标通道中的数据的数量为预设数量的整数倍;从内存中读取输入矩阵,并将输入矩阵写入GPU的寄存器中;从内存中读取卷积核,将卷积核写入GPU的寄存器中;在寄存器中对输入矩阵与卷积核进行计算,得到输出矩阵。通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高整体的运算效率。
图17是根据一示例性实施例示出的一种数据处理装置的框图,如图17所示,该装置包括:
输入模块21,用于在对图片进行光学字符识别OCR识别时,将所述图片的输入矩阵输入处理器的内存中;
第三添加模块22,用于所述输入矩阵的通道中添加至少一个数据,以使所述通道中的数据的数量为所述预设数量的整数倍;
第三读取模块23,用于从所述内存中读取所述输入矩阵,第二写入模块24,用于将所述输入矩阵写入所述处理器的寄存器中;
第二运算模块25,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到所述图片的识别结果。
在一个可选的实现方式中,所述装置还包括:
确定模块,用于确定所述处理器是否适用于OCR识别场景;
所述输入模块还用于在所述处理器适用于OCR识别场景的情况下,将所述图片的输入矩阵输入处理器的内存中。
在一个可选的实现方式中,所述处理器为多个;
所述输入模块包括:
选择单元,用于在多个处理器中选择适用于OCR识别场景的处理器;
输入单元,用于将所述图片的输入矩阵输入选择的处理器的内存中。
在一个可选的实现方式中,所述选择单元包括:
查找子单元,用于在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与所述在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识;
选择子单元,用于在多个处理器中选择所述处理器标识所对应的处理器。
在一个可选的实现方式中,所述处理器包括图形处理器GPU或者中央处理器CPU。
通过本申请,输入矩阵中的所有通道的对应的二维矩阵中的第一个数据在内存中的存储地址均为预设数量的整数倍,因此,在从处理器中的内存中读取输入矩阵每一个通道的对应的二维矩阵中的数据时均可以一次读取多个数据,从而可以降低读取次数,进而降低读取数据的过程所需耗费的时长,以提高对图片进行OCR识别的效率。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的对象推荐方法。本申请实施例中,所述电子设备包括服务器、网关、子设备等,子设备为物联网设备等设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端设备如IoT设备等电子设备。
图18示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置1300。
对于一个实施例,图18示出了示例性装置1300,该装置具有一个或多个处理器1302、被耦合到(一个或多个)处理器1302中的至少一个的控制模块(芯片组)1304、被耦合到控制模块1304的存储器1306、被耦合到控制模块1304的非易失性存储器(NVM)/存储设备1308、被耦合到控制模块1304的一个或多个输入/输出设备1310,以及被耦合到控制模块1306的网络接口1312。
处理器1302可包括一个或多个单核或多核处理器,处理器1302可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1300能够作为本申请实施例中所述网关或控制器等服务器设备。
在一些实施例中,装置1300可包括具有指令1314的一个或多个计算机可读介质(例如,存储器1306或NVM/存储设备1308)以及与该一个或多个计算机可读介质相合并被配置为执行指令1314以实现模块从而执行本公开中所述的动作的一个或多个处理器1302。
对于一个实施例,控制模块1304可包括任意适当的接口控制器,以向(一个或多个)处理器1302中的至少一个和/或与控制模块1304通信的任意适当的设备或组件提供任意适当的接口。
控制模块1304可包括存储器控制器模块,以向存储器1306提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1306可被用于例如为装置1300加载和存储数据和/或指令1314。对于一个实施例,存储器1306可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1306可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块1304可包括一个或多个输入/输出控制器,以向NVM/存储设备1308及(一个或多个)输入/输出设备1310提供接口。
例如,NVM/存储设备1308可被用于存储数据和/或指令1314。NVM/存储设备1308可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备1308可包括在物理上作为装置1300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1308可通过网络经由(一个或多个)输入/输出设备1310进行访问。
(一个或多个)输入/输出设备1310可为装置1300提供接口以与任意其他适当的设备通信,输入/输出设备1310可以包括通信组件、音频组件、传感器组件等。网络接口1312可为装置1300提供接口以通过一个或多个网络通信,装置1300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置1300可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1300包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
本申请实施例提供了一种电子设备,包括:一个或多个处理器;和,其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述处理器执行如本申请实施例中一个或多个所述的数据处理方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种数据处理方法装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (34)

1.一种数据处理方法,其特征在于,所述方法包括:
在输入矩阵中查找是否存在目标通道,所述目标通道中包括的数据的数量不为预设数量的整数倍;
在所述输入矩阵存在所述目标通道的情况下,在所述目标通道中添加至少一个数据,以使所述目标通道中的数据的数量为所述预设数量的整数倍;
从图形处理器GPU的内存中读取所述输入矩阵,将所述输入矩阵写入所述GPU的寄存器中;
从所述内存中读取卷积核,将所述卷积核写入所述寄存器中;
在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵。
2.根据权利要求1所述的方法,其特征在于,所述从GPU的内存中读取所述输入矩阵之前,还包括:
如果所述输入矩阵中包括浮点型数据,则将所述输入矩阵中的浮点型数据转换为整型数据。
3.根据权利要求1所述的方法,其特征在于,所述从GPU的内存中读取所述输入矩阵之前,还包括:
如果所述输入矩阵包括的通道的数量不为预设数量的整数倍,在所述输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;
在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵。
4.根据权利要求3所述的方法,其特征在于,所述在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵,包括:
将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;
将得到的多个高位整型数据组合为一个二维矩阵。
5.根据权利要求1所述的方法,其特征在于,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵,包括:
将所述输入矩阵转换为第一二维矩阵;
将所述卷积核的转换为第二二维矩阵;
计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵。
6.根据权利要求1所述的方法,其特征在于,所述计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵,包括:
根据所述第一二维矩阵的大小和所述第二二维矩阵的大小确定需要计算出的输出矩阵的大小
根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
在所述寄存器中为每一个子矩阵分别分配一个线程块;
控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵;
将得到的多个子矩阵组合为输出矩阵。
7.根据权利要求6所述的方法,其特征在于,所述根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵,包括:
在输出矩阵的大小与拆分策略之间的对应关系中,查找需要计算出的输出矩阵的大小相对应的拆分策略,所述拆分策略至少包括需要拆分得到的子矩阵的大小;
基于所述拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
8.根据权利要求6所述的方法,其特征在于,每一个线程块中包括多个线程束;
所述控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵,包括:
对于每一个子矩阵,将所述子矩阵拆分为多个部分矩阵;
控制所述子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;
将计算得到的多个部分矩阵组合为所述子矩阵。
9.根据权利要求5所述的方法,其特征在于,所述计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵,包括:
将所述第一二维矩阵按照行拆分为多个第一子矩阵;
将所述第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;
对于每一个第一子矩阵,计算所述第一子矩阵与对应的第二子矩阵之间的乘积;
将得到的每一个乘积相加,得到所述输出矩阵。
10.根据权利要求1所述的方法,其特征在于,所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵之后,还包括:
经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数;
在所述寄存器中基于所述处理函数对所述输出矩阵进行处理,得到处理结果。
11.根据权利要求1所述的方法,其特征在于,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵,包括:
对于需要计算出的输出矩阵中的任意每一个元素,在所述输入矩阵中查找用于计算所述元素的数据,根据查找到的数据以及所述卷积核计算所述元素;
将计算出的输出矩阵中的各个元素组合为输出矩阵。
12.一种数据处理方法,其特征在于,所述方法包括:
在对图片进行光学字符识别OCR识别时,将所述图片的输入矩阵输入处理器的内存中;
所述输入矩阵的通道中添加至少一个数据,以使所述通道中的数据的数量为所述预设数量的整数倍;
从所述内存中读取所述输入矩阵,将所述输入矩阵写入所述处理器的寄存器中;
在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到所述图片的识别结果。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
确定所述处理器是否适用于OCR识别场景;
在所述处理器适用于OCR识别场景的情况下,再执行所述将所述图片的输入矩阵输入处理器的内存中的步骤。
14.根据权利要求12所述的方法,其特征在于,所述处理器为多个;
所述将所述图片的输入矩阵输入处理器的内存中,包括:
在多个处理器中选择适用于OCR识别场景的处理器;
将所述图片的输入矩阵输入选择的处理器的内存中。
15.根据权利要求14所述的方法,其特征在于,所述在多个处理器中选择适用于OCR识别场景的处理器,包括:
在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与所述在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识;
在多个处理器中选择所述处理器标识所对应的处理器。
16.一种数据处理装置,其特征在于,所述装置包括:
查找模块,用于在输入矩阵中查找是否存在目标通道,所述目标通道中包括的数据的数量不为预设数量的整数倍;
第一添加模块,用于在所述输入矩阵存在所述目标通道的情况下,在所述目标通道中添加至少一个数据,以使所述目标通道中的数据的数量为所述预设数量的整数倍;
第一读取模块,用于从图形处理器GPU的内存中读取所述输入矩阵,第一写入模块,用于将所述输入矩阵写入所述GPU的寄存器中;
第二读取模块,用于从所述内存中读取卷积核,第二写入模块,用于将所述卷积核写入所述寄存器中;
第一运算模块,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到输出矩阵。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括:
转换模块,用于如果所述输入矩阵中包括浮点型数据,则将所述输入矩阵中的浮点型数据转换为整型数据。
18.根据权利要求16所述的装置,其特征在于,所述装置还包括:
第二添加模块,用于如果所述输入矩阵包括的通道的数量不为预设数量的整数倍,在所述输入矩阵中添加至少一个通道对应的二维矩阵,以使输入矩阵中的通道对应的二维矩阵数量为预设数量的整数倍;
合并模块,用于在所述输入矩阵中,将预设数量的整数倍个通道对应的二维矩阵合并为一个二维矩阵。
19.根据权利要求16所述的装置,其特征在于,所述合并模块包括:
第一组合单元,用于将在多个二维矩阵中的位置相同的多个低位整型数据组合为一个高位整型数据;
第二组合单元,用于将得到的多个高位整型数据组合为一个二维矩阵。
20.根据权利要求16所述的装置,其特征在于,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
第一转换单元,用于将所述输入矩阵转换为第一二维矩阵;
第二转换单元,用于将所述卷积核的转换为第二二维矩阵;
第一计算单元,用于计算所述第一二维矩阵与所述第二二维矩阵之间的矩阵乘积,得到所述输出矩阵。
21.根据权利要求16所述的装置,其特征在于,所述第一计算单元包括:
确定子单元,用于根据所述第一二维矩阵的大小和所述第二二维矩阵的大小确定需要计算出的输出矩阵的大小
划分子单元,用于根据需要计算出的输出矩阵的大小,将需要计算出的输出矩阵划分为多个子矩阵;
分配子单元,用于在所述寄存器中为每一个子矩阵分别分配一个线程块;
第一计算子单元,用于控制每一个线程块分别根据所述第一二维矩阵与所述第二二维矩阵计算其对应的子矩阵;
组合子单元,用于将得到的多个子矩阵组合为输出矩阵。
22.根据权利要求21所述的装置,其特征在于,所述划分子单元具体用于:在输出矩阵的大小与拆分策略之间的对应关系中,查找需要计算出的输出矩阵的大小相对应的拆分策略,所述拆分策略至少包括需要拆分得到的子矩阵的大小;基于所述拆分策略将需要计算出的输出矩阵拆分为多个子矩阵。
23.根据权利要求21所述的装置,其特征在于,每一个线程块中包括多个线程束;
所述第一计算子单元具体用于:对于每一个子矩阵,将所述子矩阵拆分为多个部分矩阵;控制所述子矩阵对应的线程块中的每一个线程束分别计算一个部分矩阵;将计算得到的多个部分矩阵组合为所述子矩阵。
24.根据权利要求22所述的装置,其特征在于,所述第一计算单元包括:
第一拆分子单元,用于将所述第一二维矩阵按照行拆分为多个第一子矩阵;
第二拆分子单元,用于将所述第二二维矩阵按照列拆分为多个第二子矩阵;第一子矩阵的数量与第二子矩阵的数量相同;
第二计算子单元,用于对于每一个第一子矩阵,计算所述第一子矩阵与对应的第二子矩阵之间的乘积;
相加子单元,用于将得到的每一个乘积相加,得到所述输出矩阵。
25.根据权利要求16所述的装置,其特征在于,所述装置还包括:
调取模块,用于经由寄存器的预设接口从内存中调取在神经网络模型中位于卷积层之后的至少一个数据处理层对应的处理函数;
处理模块,用于在所述寄存器中基于所述处理函数对所述输出矩阵进行处理,得到处理结果。
26.根据权利要求16所述的装置,其特征在于,所述输入矩阵为三维矩阵,所述卷积核为三维矩阵;
所述运算模块包括:
查找单元,用于对于需要计算出的输出矩阵中的任意每一个元素,在所述输入矩阵中查找用于计算所述元素的数据,第二计算单元,用于根据查找到的数据以及所述卷积核计算所述元素;
第三组合单元,用于将计算出的输出矩阵中的各个元素组合为输出矩阵。
27.一种数据处理装置,其特征在于,所述装置包括:
输入模块,用于在对图片进行光学字符识别OCR识别时,将所述图片的输入矩阵输入处理器的内存中;
第三添加模块,用于所述输入矩阵的通道中添加至少一个数据,以使所述通道中的数据的数量为所述预设数量的整数倍;
第三读取模块,用于从所述内存中读取所述输入矩阵,第二写入模块,用于将所述输入矩阵写入所述处理器的寄存器中;
第二运算模块,用于在所述寄存器中基于卷积核对所述输入矩阵进行运算,得到所述图片的识别结果。
28.根据权利要求27所述的装置,其特征在于,所述装置还包括:
确定模块,用于确定所述处理器是否适用于OCR识别场景;
所述输入模块还用于在所述处理器适用于OCR识别场景的情况下,将所述图片的输入矩阵输入处理器的内存中。
29.根据权利要求27所述的装置,其特征在于,所述处理器为多个;
所述输入模块包括:
选择单元,用于在多个处理器中选择适用于OCR识别场景的处理器;
输入单元,用于将所述图片的输入矩阵输入选择的处理器的内存中。
30.根据权利要求29所述的装置,其特征在于,所述选择单元包括:
查找子单元,用于在场景与适用于场景的处理器的处理器标识之间的对应关系中,查找与所述在多个处理器中选择适用于OCR识别场景的处理器相对应的处理器标识;
选择子单元,用于在多个处理器中选择所述处理器标识所对应的处理器。
31.一种电子设备,其特征在于,包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1-11中一个或多个所述的数据处理方法。
32.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求1-11中一个或多个所述的数据处理方法。
33.一种电子设备,其特征在于,包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求12-15中一个或多个所述的数据处理方法。
34.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求12-15中一个或多个所述的数据处理方法。
CN201911351502.8A 2019-12-24 2019-12-24 一种数据处理方法及装置 Pending CN113032007A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911351502.8A CN113032007A (zh) 2019-12-24 2019-12-24 一种数据处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911351502.8A CN113032007A (zh) 2019-12-24 2019-12-24 一种数据处理方法及装置

Publications (1)

Publication Number Publication Date
CN113032007A true CN113032007A (zh) 2021-06-25

Family

ID=76452480

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911351502.8A Pending CN113032007A (zh) 2019-12-24 2019-12-24 一种数据处理方法及装置

Country Status (1)

Country Link
CN (1) CN113032007A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113469350A (zh) * 2021-07-07 2021-10-01 武汉魅瞳科技有限公司 一种适于npu的深度卷积神经网络加速方法和系统
CN113704689A (zh) * 2021-08-25 2021-11-26 北京大学 一种基于昇腾ai处理器的矩阵乘算子的处理方法及装置
WO2023236929A1 (zh) * 2022-06-06 2023-12-14 上海寒武纪信息科技有限公司 基于指令读取数据中的目标数据的方法及其设备
CN117473212A (zh) * 2023-12-27 2024-01-30 粤港澳大湾区数字经济研究院(福田) Ntt算法的gpu加速方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140365548A1 (en) * 2013-06-11 2014-12-11 Analog Devices Technology Vector matrix product accelerator for microprocessor integration
CN104237859A (zh) * 2014-08-27 2014-12-24 武汉大学 利用gpu实现外辐射源雷达多通道时域杂波抑制的方法
CN108600246A (zh) * 2018-05-04 2018-09-28 浙江工业大学 一种基于knn算法的网络入侵检测并行化加速方法
CN109038543A (zh) * 2018-06-27 2018-12-18 国网辽宁省电力有限公司 一种基于cpu+gpu混合异构的状态估计计算方法
CN109902745A (zh) * 2019-03-01 2019-06-18 成都康乔电子有限责任公司 一种基于cnn的低精度训练与8位整型量化推理方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140365548A1 (en) * 2013-06-11 2014-12-11 Analog Devices Technology Vector matrix product accelerator for microprocessor integration
CN104237859A (zh) * 2014-08-27 2014-12-24 武汉大学 利用gpu实现外辐射源雷达多通道时域杂波抑制的方法
CN108600246A (zh) * 2018-05-04 2018-09-28 浙江工业大学 一种基于knn算法的网络入侵检测并行化加速方法
CN109038543A (zh) * 2018-06-27 2018-12-18 国网辽宁省电力有限公司 一种基于cpu+gpu混合异构的状态估计计算方法
CN109902745A (zh) * 2019-03-01 2019-06-18 成都康乔电子有限责任公司 一种基于cnn的低精度训练与8位整型量化推理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李政;冯春生;张晨松;: "一种针对GPU上的油藏数值模拟的高效SpMV", 数值计算与计算机应用, no. 04, 14 December 2016 (2016-12-14) *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113469350A (zh) * 2021-07-07 2021-10-01 武汉魅瞳科技有限公司 一种适于npu的深度卷积神经网络加速方法和系统
CN113469350B (zh) * 2021-07-07 2023-03-24 武汉魅瞳科技有限公司 一种适于npu的深度卷积神经网络加速方法和系统
CN113704689A (zh) * 2021-08-25 2021-11-26 北京大学 一种基于昇腾ai处理器的矩阵乘算子的处理方法及装置
WO2023236929A1 (zh) * 2022-06-06 2023-12-14 上海寒武纪信息科技有限公司 基于指令读取数据中的目标数据的方法及其设备
CN117473212A (zh) * 2023-12-27 2024-01-30 粤港澳大湾区数字经济研究院(福田) Ntt算法的gpu加速方法、装置、设备及存储介质
CN117473212B (zh) * 2023-12-27 2024-04-16 粤港澳大湾区数字经济研究院(福田) Ntt算法的gpu加速方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
CN109919311B (zh) 生成指令序列的方法、执行神经网络运算的方法和装置
CN113032007A (zh) 一种数据处理方法及装置
US10255547B2 (en) Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
US10540093B2 (en) Multidimensional contiguous memory allocation
CN114391135A (zh) 用于对连续分配数据执行存储器内处理操作的方法及相关存储器装置和系统
US10248908B2 (en) Alternative loop limits for accessing data in multi-dimensional tensors
US20160048327A1 (en) Data distribution among multiple managed memories
KR20190066473A (ko) 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치
EP3686743A1 (en) Hardware double buffering using a special purpose computational unit
US20210192315A1 (en) Method and apparatus with neural network convolution operation
CN111340201A (zh) 卷积神经网络加速器及其执行卷积运算操作的方法
CN111767508B (zh) 计算机实现张量数据计算的方法、装置、介质和设备
CN116028013B (zh) 一种fpga除法运算的优化方法、装置、除法器和介质
CN106462481A (zh) 使用循环冗余校验的重复数据
US20200327390A1 (en) Information processing apparatus and method of operating neural network computing device therein
CN117271136A (zh) 数据处理方法、装置、设备和存储介质
JP2018525730A (ja) スライディングウィンドウ演算
CN116051345A (zh) 图像数据处理方法、装置、计算机设备及可读存储介质
US11636569B1 (en) Matrix transpose hardware acceleration
CN115034351A (zh) 数据处理方法、卷积神经网络训练方法、装置和fpga
US11275562B2 (en) Bit string accumulation
US11726909B2 (en) Two-way interleaving in a three-rank environment
CN117270789B (zh) 一种基于分布式存储的数据控制方法、系统及电子设备
US11842273B2 (en) Neural network processing
US20230205500A1 (en) Computation architecture synthesis

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