CN117763275A - 执行卷积计算的方法、计算装置、介质和程序产品 - Google Patents
执行卷积计算的方法、计算装置、介质和程序产品 Download PDFInfo
- Publication number
- CN117763275A CN117763275A CN202410194553.9A CN202410194553A CN117763275A CN 117763275 A CN117763275 A CN 117763275A CN 202410194553 A CN202410194553 A CN 202410194553A CN 117763275 A CN117763275 A CN 117763275A
- Authority
- CN
- China
- Prior art keywords
- convolution
- meta
- data
- convolution kernel
- 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
- 238000004364 calculation method Methods 0.000 title claims abstract description 102
- 238000000034 method Methods 0.000 title claims abstract description 85
- 239000000872 buffer Substances 0.000 claims description 55
- 239000011159 matrix material Substances 0.000 claims description 34
- 230000001133 acceleration Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 14
- 238000009825 accumulation Methods 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 23
- 238000007796 conventional method Methods 0.000 description 13
- 238000012545 processing Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 6
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 4
- 238000011773 genetically engineered mouse model Methods 0.000 description 3
- 230000000873 masking effect Effects 0.000 description 2
- 230000007334 memory performance Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- -1 e.g. Proteins 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
Landscapes
- Complex Calculations (AREA)
Abstract
本发明涉及一种用于执行卷积计算的方法、计算装置、介质和程序产品。该方法包括:将用于卷积计算的输入数据切分成多个块;针对多个块中的每个块,将对应卷积核拆分为多个元卷积核,使得所述元卷积核的两个维度中的至少一个维度大于或者等于2,所述多个元卷积的尺寸相同或者至少部分不同;以及基于所拆分的元卷积核,执行卷积计算。本发明不仅能够降低访存次数,提高计算访存比,进而显著提升整体计算的性能,而且能够避免硬件电路限制而导致的卷积指令泛化度不足的问题。
Description
技术领域
本发明的实施例总体上涉及数据处理领域,更具体地涉及一种用于执行卷积计算的方法、计算装置、计算机可读存储介质和计算机程序产品。
背景技术
传统的用于执行卷积计算的方法(特别是针对大尺寸卷积核的卷积计算)主要包括两种。第一种方法是将卷积计算转换为矩阵乘法,例如,将多维的卷积核滑动展开为1*1粒度的卷积核,然后反复多次从二级缓存(L2 Cache,简称L2)或者高带宽存储器(HBM)加载数据(例如而不限于图像数据)到GPGPU中的加速计算单元(例如,张量核,即,TensorCore)做卷积计算。上述方法存在重复加载多,计算强度较低,数据利用率不足,以及对带宽要求更高的问题。
第二种方法是采用硬件特性的卷积指令,从L2或者HBM加载一次数据到TensorCore 的输入缓冲器,由TensorCore直接完成卷积核尺寸大小(即,KH*KW,其中,KH为卷积核高度,KW为卷积核宽度)的卷积计算。上述方法存在的不足在于:由于硬件电路的限制,使得卷积指令对卷积核尺寸大小有限制,进而导致泛化度不够。
综上,传统的用于执行卷积计算的方法存在的不足之处在于,难以兼顾解决:因过多重复加载数据而造成计算强度较低和数据利用率不足的问题,以及因硬件电路限制而导致的卷积指令泛化度不足的问题。
发明内容
本发明提供了一种用于执行卷积计算的方法、计算装置、计算机可读存储介质和计算机程序产品,不仅能够降低访存次数,提高计算访存比,进而显著提升整体计算的性能,而且能够避免硬件电路限制而导致的卷积指令泛化度不足的问题。
根据本发明的第一方面,提供了一种用于执行卷积计算的方法。该方法包括:将用于卷积计算的输入数据切分成多个块;针对多个块中的每个块,将对应卷积核拆分为多个元卷积核,使得所述元卷积核的两个维度中的至少一个维度大于或者等于2,所述多个元卷积的尺寸相同或者至少部分不同;以及基于所拆分的元卷积核,执行卷积计算。
根据本发明的第二方面,还提供了一种计算装置。该计算装置包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使计算装置能够执行本发明的第一方面的方法。
根据本发明的第三方面,还提供了一种计算机可读存储介质。该计算机可读存储介质上存储有计算机程序,计算机程序被机器执行时执行本发明的第一方面的方法。
根据本发明的第四方面,还提供了一种计算机程序产品,包括计算机程序,计算机程序被机器执行时执行本发明的第一方面的方法。
在一些实施例中,基于所拆分的元卷积核,执行卷积计算包括:针对每个块的每个元卷积核,生成对应的部分结果,以便针对多个元卷积核所分别对应的部分结果进行累加。
在一些实施例中,将对应卷积核拆分为多个元卷积核包括:基于对应卷积核尺寸、元卷积核集合所包括的多个参考元卷积核中的至少部分参考元卷积核,将所述对应卷积核拆分为多个元卷积核,元卷积核集合所包括的多个参考元卷积核的尺寸彼此不同。
在一些实施例中,用于执行卷积计算的方法还包括:至少基于脉动阵列的硬件参数,确定元卷积核集合所包括的多个参考元卷积核。
在一些实施例中,针对每个块的每个元卷积核,生成对应的部分结果包括:针对每个块的每个元卷积核,执行以下各项:加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器;将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器;经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果;以及将所生成的部分结果累加至缓冲器或者寄存器。
在一些实施例中,针对多个元卷积核所分别对应的部分结果进行累加包括:在将每个块的最后一个元卷积核的部分结果累加至缓冲器或者寄存器之后,将缓冲器或者寄存器的数据存储到高带宽存储器中。
在一些实施例中,用于执行卷积计算的方法还包括:获取跨行状态标识,所述跨行状态标识指示元卷积核的分权重数据对应的输入数据是否存在跨行状态、以及跨行位置。
在一些实施例中,经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果包括:响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,用以生成所述部分结果。
在一些实施例中,经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果包括:响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,以便生成所述部分结果。
在一些实施例中,针对每个块的每个元卷积核,生成对应的部分结果包括:针对每个块的每个元卷积核,执行以下各项:加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器;响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器,而无需加载填补数据;基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,以便生成部分结果;以及将所生成的部分结果累加至缓冲器或者寄存器。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
结合附图并参考以下详细说明,本发明各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素。
图1示意性示出了根据本发明实施例的实施用于执行卷积计算的方法的计算装置的示意图。
图2示出了根据本发明的实施例的用于执行卷积计算的方法的流程图。
图3示出了根据本发明的实施例的用于将卷积核拆分为多个元卷积核的方法的示意图。。
图4示出了根据本发明的一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果的方法的流程图。
图5示出了根据本发明的一些实施例的用于将与所加载的分权重数据对应的输入数据进行加载的方法的示意图。
图6示出了根据本发明的另一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果的方法的流程图。
图7示出了根据本发明的另一些实施例的用于将与所加载的分权重数据对应的输入数据进行加载的方法的示意图。
图8示出了根据本发明的实施例的用于基于包括预定数目的掩码的对应的输入数据执行卷积计算的方法的流程图。
图9示出了根据本发明的实施例的用于将卷积核拆分至多个元卷积核的方式与传统方法的对比示意图。
图10示出了根据本发明的实施例的用于加载数据到加速计算单元做卷积计算的访问性能与传统方法的对比示意图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施例。虽然附图中显示了本发明的优选实施例,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。
如前文所描述,传统的用于执行卷积计算的方法存在的不足之处在于,难以兼顾解决:因过多重复加载数据而造成计算强度较低和数据利用率不足的问题,以及因硬件电路限制而导致的卷积指令泛化度不足的问题。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本发明的示例实施例提出了一种用于执行卷积计算的方法。在该方法中,通过将用于卷积计算的输入数据切分成多个块;针对多个块中的每个块,将对应卷积核拆分为至少一个维度大于或者等于2的多个元卷积核(并且该多个元卷积的尺寸相同或者至少部分不同);以及基于所拆分的元卷积核,执行卷积计算,本发明不仅可以解决因硬件电路尺寸限制而导致卷积指令难以泛化的问题,实现了任意尺寸卷积核在加速计算单元上的计算,进而有利于充分发挥硬件的计算特性。另外,通过拆分至至少一个维度大于或者等于2的较大的元卷积核,避免过小粒度的卷积核而导致的数据过多重复加载,本发明可以降低访存的次数,提高计算访存比,降低带宽需求,提升整体计算的性能。
图1示意性示出了根据本发明实施例的实施用于执行卷积计算的方法的计算装置100的示意图。如图1所示,计算装置100可以具有一个或多个处理单元,包括诸如图形处理器(Graphics Processing Unit,GPU)、现场可程序化逻辑门阵列(Field ProgrammableGate Array,FPGA)和专门应用的集成电路(Application Specific Integrated Circuit,ASIC)、通用图形处理器(General-purpose computing on graphics processing units,GPGPU)等的专用处理单元以及诸如CPU的通用处理单元。计算装置100至少还包括:输入数据的多块切分模块102、元卷积核拆分模块104、基于元卷积核的卷积计算模块106。
关于输入数据的多块切分模块102,其用于将用于卷积计算的输入数据切分成多个块。
关于元卷积核拆分模块104,其用于针对多个块中的每个块,将对应卷积核拆分为多个元卷积核,使得所述元卷积核的两个维度中的至少一个维度大于或者等于2,所述多个元卷积的尺寸相同或者至少部分不同。
关于基于元卷积核的卷积计算模块106,其用于基于所拆分的元卷积核,执行卷积计算。
以下将结合图2、图3、图9和图10描述本发明的实施例的用于执行卷积计算的方法200。图2示出了根据本发明的实施例的用于执行卷积计算的方法200的流程图。图3示出了根据本发明的实施例的用于将卷积核拆分为多个元卷积核的方法的示意图。应当理解,方法200例如可以在图1所描述的计算装置100处执行。方法200还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤202处,计算装置100将用于卷积计算的输入数据切分成多个块。
在一些实施例中,在步骤202之前,方法200例如还包括:计算装置100获取卷积参数,该卷积参数至少指示用于卷积计算的卷积核尺寸和输入数据维度。例如,卷积核尺寸(kernel_size)例如为 2*5, 输入数据维度(input H*W)例如为160*160, 其例如是NHWC的方式数据排布。其中,“N”代表批量(即,batch)大小,“C”代表特征图通道数(即,channels),“H”代表特征图的高,以及“W”代表特征图的宽。
关于将输入数据切分成多个块的方法,其例如包括:计算装置100基于通用矩阵乘计算单元的输入缓冲器的尺寸和累加缓冲器或者寄存器的大小,将用于卷积计算的输入数据切分成多个块(即,Block)。例如,每个块大小为Tile_M x Tile_N(其中,Tile_M指示每个块的第一维度,Tile_N指示每个块的第二维度)。在一些实施例中,Tile_M = 64, Tile_N =64,Tile_C = 128。Tile_C例如指示每个块的第三维度。
关于通用矩阵乘计算单元(General Matrix Multiplication,简称GEMM)的输入缓冲器,其例如是GEMM input buffer,简称GIB。在一些实施例中,通用矩阵乘计算单元的输入缓冲器例如而不限于包括两个缓冲器,分别是:第一缓冲器(例如,buffer-A)和第二缓冲器(例如,buffer-B)。
在步骤204处,计算装置100针对多个块中的每个块,将对应卷积核拆分为多个元卷积核,使得所述元卷积核的两个维度中的至少一个维度大于或者等于2,所述多个元卷积的尺寸相同或者至少部分不同。应当理解,通过上述手段可以将卷积核拆分为小粒度的元卷积核,所拆分的粒度越大,计算强度越大。
关于将卷积核拆分为多个预定粒度的元卷积核的方法,其例如包括:基于对应卷积核尺寸、元卷积核集合所包括的多个参考元卷积核中的至少部分参考元卷积核,将所述对应卷积核拆分为多个元卷积核,元卷积核集合所包括的多个参考元卷积核的尺寸彼此不同。在一些实施例中,元卷积核集合所包括的多个参考元卷积核是至少基于脉动阵列的硬件参数而确定的。硬件参数例如是脉动阵列中计算单元的数量、脉动方式等。由此,可以使得加载数据的访存与做卷积计算的加速计算单元的硬件单元相匹配。应当理解,元卷积核集合所包括的多个参考元卷积核类似于拆分时的基本单元或者基准单元。可以利用元卷积核集合所包括的部分或全部参考元卷积核作为基本单元来拆分对应卷积核尺寸,以使得对应卷积核的尺寸可以被分成整数个(该整数大于或者等于2)所使用的参考元卷积核的尺寸。应当理解,经拆分的元卷积核的预定粒度(或者尺寸)应当与拆分时所利用的参考元卷积核的尺寸相对应。在一些实施例中,在利用元卷积核集合所包括的多个参考元卷积核中的全部或者部分将对应卷积核拆分成预定粒度的元卷积核时,可以使得经拆分后的元卷积核的数量最少,由此可以进一步提高加载数据到加速计算单元做卷积计算的访存性能。例如,如图3所示,计算装置100将卷积核尺寸(kernel_size)为 2*5的卷积核302拆分为4个元卷积核。4个元卷积核例如为:标记312所指示的第一元卷积核(例如,Step0)、标记314所指示的第二元卷积核(例如,Step1)、标记316所指示的第三元卷积核(例如,Step2)、标记318所指示的第四元卷积核(例如,Step3)。4个元卷积核的维度例如分别是1*3、1*2、1*3、1*2。其中,拆分时,利用了元卷积核集合所包括的1*3和1*2维度的两个尺寸不同的参考元卷积核作为基础单元进行拆分,拆分后的元卷积核包括1*3和1*2维度两种不同的尺寸(或者粒度)的元卷积。应当理解,拆分后的元卷积核的尺寸种类与拆分时所实际使用的参考元卷积核的尺寸种类是对应的。
如图3所示,第一元卷积核(例如,Step0)的维度例如为1*3,其具体包括3个分权重数据,即,[w(0, 0), w(0, 1), w(0, 2)]。每个分权重数据的第一个参数指示卷积核尺寸(kernel_size)中的高度坐标,第二个参数指示卷积核尺寸中的宽度坐标,例如,w(0, 1)中的第一参数“0” 指示卷积核尺寸(kernel_size)中的高度坐标为“0”,第二参数“1” 指示卷积核尺寸(kernel_size)中的宽度坐标为“1”。第二元卷积核(例如,Step1)的维度例如为1*2,其具体包括2个子分权重数据,即,[w(0, 3), w(0, 4)]。第三元卷积核(例如,Step2)的维度例如为1*3,其具体包括3个分权重数据,即,[ w(1, 0), w(1, 1), w(1, 2)]。第四元卷积核(例如,Step3)的维度例如为1*2,其具体包括2个分权重数据,即,[ w(1, 3), w(1,4)]。
在步骤206处,计算装置100基于所拆分的元卷积核,执行卷积计算。
关于执行卷积计算的方法,其例如包括:计算装置100针对每个块的每个元卷积核,生成对应的部分结果,以便针对多个元卷积核所分别对应的部分结果进行累加。
具体而言,计算装置100针对每个块的每个元卷积核,执行以下各项,分别执行以下各项:加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器(该步骤例如简称为“加载分权重数据”的步骤,或称“load sub_weight”步骤);将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器(该步骤例如简称为“加载对应输入数据”的步骤,或称“load input”步骤);经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果(该步骤例如简称为“计算部分结果”的步骤,或称“compute”步骤);以及将所生成的部分结果累加至缓冲器或者寄存器(该步骤例如简称为“存储部分结果”的步骤,或称“store”步骤)。在将每个块的最后一个元卷积核的部分结果(partial-sum)累加至缓冲器或者寄存器之后,将缓冲器或者寄存器的数据存储到高带宽存储器(High Bandwidth Memory,HBM)中。例如,计算装置100针对当前块的每个元卷积核依次执行上述的“load sub_weight” 步骤、“load input” 步骤、“compute” 步骤和“store”步骤。然后将当前块的最后一个卷积核的部分结果(partial-sum)累加到buffer或register后,将缓冲器或者寄存器的数据存储到HBM中。之后,计算装置100针对当前块的下一个块再依次执行上述的“load sub_weight” 步骤、“load input” 步骤、“compute” 步骤和“store”步骤、以及将累加至缓冲器或者寄存器的数据存储到HBM中,直至针对所有的块完成所有计算。
以下将结合图9和图10描述本发明的用于执行卷积计算的方法的效果。图9示出了根据本发明的实施例的用于将卷积核拆分至多个元卷积核的方式与传统方法的对比示意图。图10示出了根据本发明的实施例的用于加载数据到加速计算单元做卷积计算的访问性能与传统方法对比示意图。
如图9所示,假设用于卷积核拆分的元卷积核集合为{1*1, 1*2, 1*3, 1*7}, 元卷积核集合包括多个(例如而不限于为4个)不同的参考元卷积核,如图9所示,4个参考元卷积核例如分别为:标记902所指示的维度为1*1的参考元卷积核,标记904所指示的维度为1*2的参考元卷积核、标记906所指示的维度为1*3的参考元卷积核、以及标记908所指示的维度为1*7的参考元卷积核。
例如,用于卷积计算的卷积核是维度为3*3的卷积核。利用本发明的方法,该维度为3*3的卷积核可以被拆分为标记920、922、924所指示的维度均为1*3的3个元卷积核,即,step0、step1、step2。标记930所指示的是利用传统的方法(例如,Implicit GEMM 算法),计算单元需要将3*3的卷积核滑动展开为1*1粒度的9个单元。
再例如,用于卷积计算的卷积核是维度为8*8的卷积核。利用本发明的方法,该维度为8*8的卷积核可以被拆分为16个元卷积核,即,图8中的step0-step15,其中8个元卷积核的维度均为1*1,8个元卷积核的维度均为1*7。标记930所指示的是利用传统的方法,计算单元需要将8*8的卷积滑动展开为1*1粒度的64个单元。
如图10所示,图10左侧指示的是根据传统的方法的用于加载数据到加速计算单元做卷积计算的访存性能示意图。图10右侧指示的是根据本发明的方法的用于加载数据到加速计算单元做卷积计算的访存性能示意图。应当理解,进行卷积计算的时候,数据从动态随机存取存储器(Dynamic Random Access Memory,DRAM)加载至L2,然后由L2加载至通用矩阵乘计算单元的输入缓冲器或共享存储器(即,GIB/SMEM),再由GIB/SMEM加载至GPGPU中的加速计算单元(例如,TensorCore,简称“Tcore”)。在传统的方法中,如图10左侧所示,由L2加载至GIB/SMEM的据访存次数为为N*C*H*W*KH*KW(其中,N代表批量,即batch;C代表输入通道,H代表高度;W代表宽度;KH代表卷积核高度;KW代表卷积核宽度,其卷积核被滑动展开的粒度为1*1维度)。在本发明的方法中,如图10右侧所示,由L2加载至GIB/SMEM的数据访存次数为N*C*H*W*factor(其中,N代表批量,即batch;C代表输入通道,H代表高度;W代表宽度;factor代表所拆分元卷积核的数量)。以将3*3卷积核拆分至3个1*3维度的元卷积核为例,根据本发明的方法,从L2/HBM加载数据到TensorCore做卷积计算的访存次数是传统的方法的对应访存次数的1/3。此外,根据本发明的方法,从L2/HBM加载数据到TensorCore的单次数据访存量是传统的方法的对应数据访存量的3倍。
可见,传统的进行卷积计算的方法因滑动展开的粒度过小,因此需要更多次的从L2/HBM加载数据到TensorCore做卷积计算。上述过多重复加载造成计算强度较低,并且数据利用率不足,而且对带宽要求更高。
相比较而言,本发明通过将用于卷积计算的输入数据切分成多个Block块;并且针对切分后的块,将卷积核拆分为至少一个维度大于或者等于2的多个元卷积核,以及基于所拆分的元卷积核执行卷积计算,本发明不仅可以解决因硬件电路尺寸限制而导致卷积指令难以泛化的问题,实现了任意尺寸卷积核在加速计算单元上的计算,进而有利于充分发挥硬件的计算特性。另外,通过拆分至至少一个维度大于或者等于2的较大的元卷积核,避免过小粒度的卷积核而导致的过多数据重复加载,因此,本发明可以降低访存的次数,提高计算访存比,降低带宽需求,提升整体计算的性能。
以下将结合图4、图5描述本发明的一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果。图4示出了根据本发明的一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果的方法400的流程图。图5示出了根据本发明的一些实施例的用于将与所加载的分权重数据对应的输入数据进行加载的方法500的示意图。应当理解,方法400例如可以在图1所描述的计算装置100处执行。方法400还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤402处,针对每个块的每个元卷积核,计算装置100加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器。
关于通用矩阵乘计算单元的第二输入缓冲器,其例如是GIB buffer-B。
例如,针对当前块(例如,第一块Block0),计算装置100加载第一元卷积核step0的分权重数据(sub_weight,其维度例如为1*3)至GIB buffer-B。
在步骤404处,计算装置100将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器。
关于通用矩阵乘计算单元的第一输入缓冲器,其例如是GIB buffer-A。
例如,计算装置100加载与第一元卷积核step0对应的输入数据(例如,pixel 0~65,即,图5中的p(0, 0)~p(0, 65))至GIB buffer-A。
在步骤406处,计算装置100经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果。
关于加速计算单元,其例如是GPGPU中的张量核(TensorCore)。例如,针对当前块(例如,第一块Block0)和当前元卷积核(例如,第一元卷积核step0),TensorCore利用预定数量个周期执行卷积计算,以便生成当前元卷积核对应部分结果。该周期的预定数量与当前元卷积核的维度有关。例如,第一元卷积核step0的维度为1*3,TensorCore利用3个周期执行卷积计算。
关于利用卷积指令执行卷积计算的方法,其例如包括:从通用矩阵乘计算单元的输入缓冲器获取pixel 0~63,即,p0-p63,以便利用通用矩阵乘计算单元针对w(0, 0)和p0-p63进行卷积计算用以生成第一元卷积核对应第一部分结果;从通用矩阵乘计算单元的输入缓冲器获取pixel 1~64,即,p1-p64,以便针对w(0, 1)和p1-p64进行卷积计算用以生成第一元卷积核对应第二部分结果;以及从通用矩阵乘计算单元的输入缓冲器获取pixel 2~65,即,p2-p65,以便针对(0, 2)和p2-p65进行卷积计算用以生成第一元卷积核对应第三部分结果。
在步骤408处,计算装置100将所生成的部分结果累加至缓冲器或者寄存器。
例如,计算装置100将第一元卷积核对应第一部分结果、第一元卷积核对应第二部分结果、第一元卷积核对应第三部分结果存储至累加缓冲器或者寄存器,以便生成第一元卷积核对应部分结果。
之后,针对当前块(例如,第一块Block0)和下一元卷积核循环执行步骤402至步骤408。例如,例如,针对第一块Block0,计算装置100加载第二元卷积核step1的分权重数据(sub_weight,其维度为1*2)至GIB buffer-B;加载与第二元卷积核step1对应的输入数据(例如,pixel0~64,即,图5中的p(0, 3)~p(0, 67))至GIB buffer-A;经由加速计算单元,利用卷积指令分两步执行卷积计算以便生成第二部分结果(具体而言,例如从通用矩阵乘计算单元的输入缓冲器获取p0-p63,以便利用通用矩阵乘计算单元针对w(0, 3)和p0-p63进行卷积计算用以生成第二元卷积核对应第一部分结果;从通用矩阵乘计算单元的输入缓冲器获取p1-p64,以便针对w(0, 4)和p1-p64进行卷积计算用以生成第二元卷积核对应第二部分结果)。之后,计算装置100将第二元卷积核对应第一部分结果、第二元卷积核对应第二部分结果存储至累加缓冲器或者寄存器,以便生成第二元卷积核对应部分结果。
类似的,分别针对当前块(例如,第一块Block0)和第三元卷积核step2、第四元卷积核step3依次循环执行步骤402至步骤408,直至将最后一个元卷积核(例如,第四元卷积核step3)的部分结果(例如,第四元卷积核对应部分结果)累加到缓冲器或寄存器。
以下将结合图6、图7描述本发明的另一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果的方法600。图6示出了根据本发明的另一些实施例的用于针对每个块的每个元卷积核生成对应的部分结果的方法600的流程图。图7示出了根据本发明的另一些实施例的用于将与所加载的分权重数据对应的输入数据进行加载的方法700的示意图。应当理解,方法600例如可以在图1所描述的计算装置100处执行。方法600还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
例如,用于卷积计算的输入数据的维度为160*160。将输入数据切分成多个Block块,每个块的第一维度Tile_M例如为64, 因此,在针对第三块block2做连续64像素的计算时,像素数据(pixel)会存在跨行状态。此时所获取的、来自硬件的跨行状态标识会指示与所加载的分权重数据存在跨行。以下结合上述示例来说明在输入数据存在跨行时,针对每个块的每个元卷积核生成对应的部分结果的方法600。
在步骤602处,针对每个块的每个元卷积核,计算装置100加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器。
例如,针对当前块(例如,第三块Block2),计算装置100加载第一元卷积核step0的分权重数据(sub_weight,其维度为1*3)至GIB buffer-B。
在步骤604处,响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器,而无需加载填补数据。
例如,计算装置100连续加载与第一元卷积核step0对应的输入数据(例如,图7中的p(0, 128), …, p(0, 159), p(1, 0), …, p(1, 33))至GIB buffer-A,而无需加载填补数据(例如,padding)。
在步骤606处,计算装置100基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,用以生成部分结果。例如,在输入数据加载至通用矩阵乘计算单元的第一输入缓冲器GIB buffer-A将输入数据加载至计算单元时,将跨行状态标识所指示的跨行位置处的像素数据设置为掩码,以便针对元卷积核的分权重数据与包括掩码的对应的输入数据进行卷积计算,用以生成部分结果。
例如,从通用矩阵乘计算单元的输入缓冲器获取p0-p63,以便利用通用矩阵乘计算单元针对w(0, 0)和p0-p63(例如, p(0, 128), …, p(0, 159), p(1, 0), …, p(1,33),图7中仅示出p(0, 128), …, p(0, 159), p(1, 0), …, p(1, 3))进行卷积计算用以生成第一元卷积核对应第一部分结果;从通用矩阵乘计算单元的输入缓冲器获取p1-p64(例如,p(0, 129), …, p(0, 159), p(1, 0), …, p(1, 34),图7中仅示出p(0, 129),…, p(0, 159), p(1, 0), …, p(1, 4));根据基于跨行状态标识和填充数据,在跨行位置处设置掩码(例如,所获取的跨行状态标识指示跨行位置为p(1, 0),此时在p(1, 0)位置处设置掩码,例如将p(1, 0)的数值掩码为填充数据,例如标记702所指示的mask0);以便针对w(0, 1)和经由设置掩码的p1-p64(例如,p(0, 129), …, p(0, 159), mask0, p(1, 1)…, p(1, 33)进行卷积计算用以生成第一元卷积核对应第二部分结果;以及从通用矩阵乘计算单元的输入缓冲器获取p2-p65(例如,p(0, 130), …, p(0, 159), p(1, 0), …, p(1, 35),图7中仅示出p(0, 130), …, p(0, 159), p(1, 0), …, p(1, 5)),根据基于跨行状态标识和填充数据,在跨行位置处设置掩码(例如,所获取的跨行状态标识指示跨行位置为p(1, 0),基于填充数据的个数和所加载的分权重数据的标识,确定掩码的个数为2,此时在p(1, 0)和p(1, 1)位置处设置掩码,例如将p(1, 0)的数值掩码为填充数据,例如标记704所指示的mask0,以及将p(1, 1)的数值掩码为填充数据,例如标记706所指示的mask0);以便针对w(0, 1)和经由设置掩码的p2-p65(例如,p(0, 130), …, p(0, 159), mask0,mask0, p(1, 2) …, p(1, 35)进行卷积计算用以生成第一元卷积核对应第三部分结果。
在步骤608处,计算装置100将所生成的部分结果累加至缓冲器或者寄存器。
例如,计算装置100将第一元卷积核对应第一部分结果、第一元卷积核对应第二部分结果、以及第一元卷积核对应第三部分结果存储至累加缓冲器或者寄存器,以便生成第一元卷积核对应部分结果。
通过采用上述手段,本发明与所加载的元卷积核的分权重数据对应的输入数据存在跨行时,也能够连续地加载输入数据,并且准确地进行卷积计算。
以下将结合图8描述本发明的实施例的用于基于包括预定数目的掩码的对应的输入数据执行卷积计算的方法800。图8示出了根据本发明的实施例的用于基于包括预定数目的掩码的对应的输入数据执行卷积计算的方法800的流程图。应当理解,方法800例如可以在图1所描述的计算装置100处执行。方法800还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤802处,计算装置100基于填充数据的个数和所加载的分权重数据的标识,确定掩码的个数为预定数目。
例如,如果前填充数据为0,后填充数据为4,分权重数据的标识为“0”,则确定掩码的个数为0。例如,图7中的第一元卷积核step0的第一分权重数据w(0,0)的标识为“0”,则确定掩码的个数为0。
如果后填充数据为4,并且分权重数据的标识为“1”,则确定掩码的个数为1。如图7所示,第一元卷积核step0的第二分权重数据w(0,1)的标识为“1”,则确定掩码的个数为1。如标记702所指示。
如果后填充数据为4,并且分权重数据的标识为“2”,则确定掩码的个数为2。如图7所示,第一元卷积核step0的第二分权重数据w(0,2)的标识为“2”,则确定掩码的个数为2。如标记704和706所指示。
在步骤804处,计算装置100在对应的输入数据中的跨行位置处的像素数据开始设置预定数目的掩码,以便基于包括预定数目的掩码的对应的输入数据执行卷积计算。
与所加载的分权重数据对应的输入数据例如是:p(0, 129), …, p(0, 159), p(0, 1), p(1, 1) …, p(1, 33)。如标记710所指示的对应的输入数。
例如,所获取的跨行状态标识指示对应的输入数710中的跨行位置为p(1, 0),此时,在与所加载的分权重数据(例如,第二分权重数据w(0,1))对应的输入数据中的跨行位置处的像素数据开始设置预定数目(该预定数目例如是1,其基于第二分权重数据w(0,1)的标识为“1”而确定的)的掩码在p(1, 0)位置处设置掩码,例如将像素数据p(1, 0)掩码为填充数据,例如标记702所指示的mask0;以便针对w(0, 1)和包括预定数目的掩码的对应的输入数据(例如,p(0, 129), …, p(0, 159), mask0, p(1, 1) …, p(1, 33) 执行卷积计算。
通过采用上述手段,本发明能够准确地基于跨行位置进行掩码操作。
上文所描述的各个过程和处理,例如方法200、400、600、800,可在计算装置处执行。该计算装置例如包括:至少一个处理器(至少一个图形处理器和至少一个中央处理器);以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行。在一些实施例中,方法200、400、600、800,可被实现为计算机软件程序或程序产品,其被有形地包含于机器可读介质。在一些实施例中,计算机程序的部分或者全部可以经由只读存储器(Read-Only Memory,ROM)和/或通信单元而被载入和/或安装到计算装置上。当计算机程序被加载到随机存取存储器(Random-accessmemory, RAM)并由GPU和CPU执行时,可以执行上文描述的方法200、400、600、800,的一个或多个动作。
本发明可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的中央处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的中央处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中加载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。
Claims (13)
1.一种用于执行卷积计算的方法,其特征在于,所述方法包括:
将用于卷积计算的输入数据切分成多个块;
针对多个块中的每个块,将对应卷积核拆分为多个元卷积核,使得所述元卷积核的两个维度中的至少一个维度大于或者等于2,所述多个元卷积的尺寸相同或者至少部分不同;以及
基于所拆分的元卷积核,执行卷积计算。
2.根据权利要求1所述的方法,其特征在于,基于所拆分的元卷积核,执行卷积计算包括:
针对每个块的每个元卷积核,生成对应的部分结果,以便针对多个元卷积核所分别对应的部分结果进行累加。
3.根据权利要求1所述的方法,其特征在于,将对应卷积核拆分为多个元卷积核包括:
基于对应卷积核尺寸、元卷积核集合所包括的多个参考元卷积核中的至少部分参考元卷积核,将所述对应卷积核拆分为多个元卷积核,元卷积核集合所包括的多个参考元卷积核的尺寸彼此不同。
4.根据权利要求3所述的方法,其特征在于,还包括:
至少基于脉动阵列的硬件参数,确定元卷积核集合所包括的多个参考元卷积核。
5.根据权利要求2所述的方法,其特征在于,针对每个块的每个元卷积核,生成对应的部分结果包括:
针对每个块的每个元卷积核,执行以下各项:
加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器;
将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器;
经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果;以及
将所生成的部分结果累加至缓冲器或者寄存器。
6.根据权利要求5所述的方法,其特征在于,针对多个元卷积核所分别对应的部分结果进行累加包括:
在将每个块的最后一个元卷积核的部分结果累加至缓冲器或者寄存器之后,将缓冲器或者寄存器的数据存储到高带宽存储器中。
7.根据权利要求5所述的方法,其特征在于,还包括:
获取跨行状态标识,所述跨行状态标识指示元卷积核的分权重数据对应的输入数据是否存在跨行状态、以及跨行位置。
8.根据权利要求7所述的方法,其特征在于,经由加速计算单元,利用卷积指令执行卷积计算,以便生成部分结果包括:
响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,用以生成所述部分结果。
9.根据权利要求8所述的方法,其特征在于,利用包括掩码的对应的输入数据执行卷积计算,以便生成所述部分结果包括:
基于填充数据的个数和所加载的分权重数据的标识,确定掩码的个数为预定数目;以及
在对应的输入数据中的跨行位置处的像素数据开始设置预定数目的掩码,以便基于包括预定数目的掩码的对应的输入数据执行卷积计算。
10.根据权利要求2所述的方法,其特征在于,针对每个块的每个元卷积核,生成对应的部分结果包括:
针对每个块的每个元卷积核,执行以下各项:
加载元卷积核的分权重数据至通用矩阵乘计算单元的第二输入缓冲器;
响应于确定所获取的跨行状态标识指示:与所加载的分权重数据对应的输入数据存在跨行,将与所加载的分权重数据对应的输入数据加载至通用矩阵乘计算单元的第一输入缓冲器,而无需加载填补数据;
基于跨行状态标识和填充数据,在跨行位置处的像素数据设置掩码,以便利用包括掩码的对应的输入数据执行卷积计算,用以生成部分结果;以及
将所生成的部分结果累加至缓冲器或者寄存器。
11.一种计算装置,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被机器执行时执行根据权利要求1-10中任一项所述的方法。
13.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被机器执行时执行根据权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410194553.9A CN117763275B (zh) | 2024-02-21 | 2024-02-21 | 执行卷积计算的方法、计算装置、介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410194553.9A CN117763275B (zh) | 2024-02-21 | 2024-02-21 | 执行卷积计算的方法、计算装置、介质和程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117763275A true CN117763275A (zh) | 2024-03-26 |
CN117763275B CN117763275B (zh) | 2024-06-21 |
Family
ID=90322383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410194553.9A Active CN117763275B (zh) | 2024-02-21 | 2024-02-21 | 执行卷积计算的方法、计算装置、介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117763275B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160364474A1 (en) * | 2015-06-15 | 2016-12-15 | Ca, Inc. | Identifying Data Offsets Using Binary Masks |
CN115758054A (zh) * | 2023-02-10 | 2023-03-07 | 上海登临科技有限公司 | 一种卷积计算方法、数据处理方法、芯片及电子设备 |
CN116090518A (zh) * | 2023-01-05 | 2023-05-09 | 浙江大华技术股份有限公司 | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 |
CN117435855A (zh) * | 2023-12-19 | 2024-01-23 | 北京壁仞科技开发有限公司 | 用于进行卷积运算的方法、电子设备和存储介质 |
-
2024
- 2024-02-21 CN CN202410194553.9A patent/CN117763275B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160364474A1 (en) * | 2015-06-15 | 2016-12-15 | Ca, Inc. | Identifying Data Offsets Using Binary Masks |
CN116090518A (zh) * | 2023-01-05 | 2023-05-09 | 浙江大华技术股份有限公司 | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 |
CN115758054A (zh) * | 2023-02-10 | 2023-03-07 | 上海登临科技有限公司 | 一种卷积计算方法、数据处理方法、芯片及电子设备 |
CN117435855A (zh) * | 2023-12-19 | 2024-01-23 | 北京壁仞科技开发有限公司 | 用于进行卷积运算的方法、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117763275B (zh) | 2024-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210048984A1 (en) | Accelerated mathematical engine | |
CN110046702B (zh) | 神经网络计算加速器及其执行的方法 | |
GB2542131B (en) | Graphics processing method and system for processing sub-primitives | |
US11263806B2 (en) | Graphics processing method and system for processing sub-primitives | |
US20110043518A1 (en) | Techniques to store and retrieve image data | |
CN109885407B (zh) | 数据处理方法和装置、电子设备、存储介质 | |
US11074750B2 (en) | Scalable parallel tessellation | |
WO2019184888A1 (zh) | 一种基于卷积神经网络的图像处理的方法和装置 | |
US10402196B2 (en) | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients | |
US10929965B2 (en) | Histogram statistics circuit and multimedia processing system | |
CN110618856A (zh) | 数据处理系统 | |
JP2003178293A (ja) | 画像処理装置およびその方法 | |
CN112633470A (zh) | 优化神经网络卷积残差结构的方法、系统、设备及介质 | |
CN118152980A (zh) | 一种分叉算子融合方法、装置、设备及存储介质 | |
CN117763275B (zh) | 执行卷积计算的方法、计算装置、介质和程序产品 | |
CN117851742A (zh) | 数据存储方法、数据处理方法、数据存储器、数据处理器 | |
CN114372928A (zh) | 一种数据处理方法、装置及电子设备 | |
CN113485750A (zh) | 数据处理方法及数据处理装置 | |
CN116484929A (zh) | 一种基于fpga的点云目标检测神经网络加速器和加速方法 | |
US7126604B1 (en) | Efficiently determining storage locations for the levels of detail of a MIP map of an image | |
US20220100814A1 (en) | Graphics processor and acceleration method thereof | |
CN115563443A (zh) | 卷积运算方法及装置、卷积处理方法、设备与存储介质 | |
CN118484322B (zh) | 用于矩阵规约计算的方法、计算装置、介质和程序产品 | |
CN116821576B (zh) | 用于基于risc-v加速n:m稀疏网络的方法和装置 | |
CN109544653B (zh) | 一种基于教育操作系统的WebGL独立进程渲染方法及电子设备 |
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 |