CN117454068A - 实现矩阵乘运算的方法和计算设备 - Google Patents
实现矩阵乘运算的方法和计算设备 Download PDFInfo
- Publication number
- CN117454068A CN117454068A CN202311502624.9A CN202311502624A CN117454068A CN 117454068 A CN117454068 A CN 117454068A CN 202311502624 A CN202311502624 A CN 202311502624A CN 117454068 A CN117454068 A CN 117454068A
- Authority
- CN
- China
- Prior art keywords
- matrix
- dimension
- dimensional
- dimensional matrix
- loading
- 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
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 549
- 238000000034 method Methods 0.000 title claims abstract description 38
- 238000011068 loading method Methods 0.000 claims abstract description 55
- 230000015654 memory Effects 0.000 claims abstract description 48
- 230000004044 response Effects 0.000 claims abstract description 14
- 239000013598 vector Substances 0.000 claims description 42
- 238000013500 data storage Methods 0.000 claims description 9
- 238000000638 solvent extraction Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000017105 transposition Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000005658 nuclear physics Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
Abstract
本公开提供了一种实现矩阵乘运算的方法和计算设备。该方法包括:将所述矩阵乘运算的第一矩阵转换为第一二维矩阵并加载至张量核内用于所述第一矩阵的第一缓存器,其中所述第一矩阵为三维矩阵;确定所述矩阵乘运算的第二矩阵是二维矩阵还是三维矩阵;响应于所述第二矩阵是二维矩阵,将所述第二矩阵加载至所述张量核内用于所述第二矩阵的第二缓存器;响应于所述第二矩阵是三维矩阵,将所述第二矩阵转换为第二二维矩阵并加载至所述张量核内用于所述第二矩阵的第二缓存器;以及在所述张量核中对所述第一二维矩阵和所述第二矩阵或所述第二二维矩阵执行矩阵乘。
Description
技术领域
本公开概括而言涉及处理器领域,更具体地,涉及一种用于实现矩阵乘运算的方法和计算设备。
背景技术
在诸如气象预报、石油勘探、核子物理等现代科学技术中,大量依赖计算机的模拟计算,模拟计算的核心是表示状态转移的矩阵计算。计算机图形处理以及深度学习等领域也大量涉及矩阵乘运算。
在执行两个矩阵的矩阵乘操作时,受限于硬件(如GEMM(GEneral Matrix toMatrix Multiplication,通用矩阵乘)单元或张量核(Tensor Core))要求,需要对输入矩阵进行分块并基于分块矩阵执行矩阵乘操作。
然而,在输入矩阵的对应维度(如批量(Batch)维度)相对于硬件乘法粒度取模的余数值较小时,硬件使用效率较低。
发明内容
针对上述问题,本公开提供了一种针对不同形状的输入矩阵,通过进行维度折叠来执行矩阵乘的方法。
根据本公开的一个方面,提供了一种实现卷积运算的方法。该方法包括:将所述矩阵乘运算的第一矩阵转换为第一二维矩阵并加载至张量核内用于所述第一矩阵的第一缓存器,其中所述第一矩阵为三维矩阵;确定所述矩阵乘运算的第二矩阵是二维矩阵还是三维矩阵;响应于所述第二矩阵是二维矩阵,将所述第二矩阵加载至所述张量核内用于所述第二矩阵的第二缓存器;响应于所述第二矩阵是三维矩阵,将所述第二矩阵转换为第二二维矩阵并加载至所述张量核内用于所述第二矩阵的第二缓存器;以及在所述张量核中对所述第一二维矩阵和所述第二矩阵或所述第二二维矩阵执行矩阵乘。
在一些实现中,将所述矩阵乘运算的第一矩阵转换为第一二维矩阵并加载至张量核内用于所述第一矩阵的第一缓存器包括:通过多数据加载操作将所述第一矩阵从所述张量核外的第一存储器加载至向量核;在所述向量核中基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度;通过多数据存储操作将所述第一二维矩阵从所述向量核存储至所述张量核附近的第二存储器;以及基于所述第一缓存器的大小将所述第一二维矩阵加载至所述第一缓存器。
在一些实现中,在所述向量核中基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度包括:确定所述第一矩阵的第二维度和第三维度中需要与所述第一矩阵的第一维度进行合并的维度是否满足预定条件;响应于确定所述需要与所述第一矩阵的第一维度进行合并的维度满足所述预定条件,确定所述需要与所述第一矩阵的第一维度进行合并的维度对所述张量核的硬件乘法粒度取模的余数值;确定所述余数值是否大于或等于预定阈值,其中所述预定阈值与所述张量核的硬件乘法粒度相关联;响应于确定所述余数值大于或等于所述预定阈值,按照所述第一矩阵的第一维度和所述需要与所述第一矩阵的第一维度进行合并的维度对所述第一矩阵进行分块,并按照所述第一矩阵的第二维度和第三维度中的另一维度来读取所述第一矩阵作为所述第一二维矩阵;以及响应于确定所述余数值小于所述预定阈值,沿着所述第一矩阵的第一维度对所述第一矩阵进行拼接以形成所述第一二维矩阵。
在一些实现中,将所述第二矩阵转换为第二二维矩阵并加载至所述张量核内用于所述第二矩阵的第二缓存器包括:通过多数据加载操作将所述第二矩阵从所述张量核外的第一存储器加载至向量核;基于所述第一二维矩阵的第一维度和第二维度,在所述向量核中确定所述第二二维矩阵的第一维度和第二维度;通过多数据存储操作将所述第二二维矩阵从所述向量核存储于所述张量核附近的第二存储器;以及基于所述第二缓存器的大小将所述第二二维矩阵加载至所述第二缓存器。
在一些实现中,基于所述第一二维矩阵的第一维度和第二维度,在所述向量核中确定所述第二二维矩阵的第一维度和第二维度包括:基于所述第一二维矩阵的第一维度确定所述第一矩阵的第二维度是否与所述第一矩阵的第一维度进行了合并;如果确定第一矩阵的第二维度与所述第一矩阵的第一维度进行了合并,则将所述第二矩阵的第一维度和第三维度对所述第一矩阵进行分块,并按照所述第二矩阵的第二维度来读取所述第二矩阵作为所述第二二维矩阵;以及如果确定第一矩阵的第二维度没有与所述第一矩阵的第一维度进行合并,则将所述第二矩阵的第一维度和第二维度对所述第二矩阵进行分块,并按照所述第二矩阵的第三维度来读取所述第二矩阵作为所述第二二维矩阵。
根据本发明的另一个方面,提供了一种计算设备。该计算设备包括:张量核,其包括通用矩阵乘单元、用于矩阵乘运算的第一矩阵的第一缓存器和用于矩阵乘运算的第二矩阵的第二缓存器,其中所述第一矩阵为三维矩阵;位于所述张量核之外的第一存储器,其被配置为在所述矩阵乘运算之前存储所述第一矩阵和所述第二矩阵;向量核,其被配置为将所述第一矩阵和所述第二矩阵转换为第一二维矩阵和第二二维矩阵;以及位于所述张量核附近的第二存储器,其被配置为存储所述第一二维矩阵和所述第二二维矩阵,其中所述张量核被配置为:将所述第一二维矩阵加载至所述第一缓存器,在所述第二矩阵是二维矩阵时,将所述第二矩阵加载至所述第二缓存器,或者在所述第二矩阵是三维矩阵时,将所述第二二维矩阵加载至所述第二缓存器,以及对所述第一二维矩阵和所述第二矩阵或所述第二二维矩阵执行矩阵乘。
在一些实现中,所述向量核被配置为:通过多数据加载操作从所述第一存储器加载所述第一矩阵;基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度;以及通过多数据存储操作将所述第一二维矩阵存储至所述第二存储器。
在一些实现中,所述向量核被配置为:确定所述第一矩阵的第二维度和第三维度中需要与所述第一矩阵的第一维度进行合并的维度是否满足预定条件;响应于确定所述需要与所述第一矩阵的第一维度进行合并的维度满足所述预定条件,确定所述需要与所述第一矩阵的第一维度进行合并的维度对所述张量核的硬件乘法粒度取模的余数值;确定所述余数值是否大于或等于预定阈值,其中所述预定阈值与所述张量核的硬件乘法粒度相关联;响应于确定所述余数值大于或等于所述预定阈值,按照所述第一矩阵的第一维度和所述需要与所述第一矩阵的第一维度进行合并的维度对所述第一矩阵进行分块,并按照所述第一矩阵的第二维度和第三维度中的另一维度来读取所述第一矩阵作为所述第一二维矩阵;以及响应于确定所述余数值小于所述预定阈值,沿着所述第一矩阵的第一维度对所述第一矩阵进行拼接以形成所述第一二维矩阵。
在一些实现中,所述向量核被配置为:通过多数据加载操作从所述第一存储器加载所述第二矩阵;基于所述第一二维矩阵的第一维度和第二维度确定所述第二二维矩阵的第一维度和第二维度;以及通过多数据存储操作将所述第二二维矩阵存储于所述第二存储器。
在一些实现中,所述向量核被配置为:基于所述第一二维矩阵的第一维度确定所述第一矩阵的第二维度是否与所述第一矩阵的第一维度进行了合并;如果确定第一矩阵的第二维度与所述第一矩阵的第一维度进行了合并,则将所述第二矩阵的第一维度和第三维度对所述第一矩阵进行分块,并按照所述第二矩阵的第二维度来读取所述第二矩阵作为所述第二二维矩阵;以及如果确定第一矩阵的第二维度没有与所述第一矩阵的第一维度进行合并,则将所述第二矩阵的第一维度和第二维度对所述第二矩阵进行分块,并按照所述第二矩阵的第三维度来读取所述第二矩阵作为所述第二二维矩阵。
附图说明
通过参考下列附图所给出的本公开的具体实施方式的描述,将更好地理解本公开,并且本公开的其他目的、细节、特点和优点将变得更加显而易见。
图1A和图1B示出了两种不同情况的矩阵乘运算的示意图。
图2示出了根据本发明实施例的用于执行矩阵乘操作的计算设备的示意图。
图3示出了根据本发明实施例的用于实现矩阵乘运算的方法的示意性流程图。
图4示出了根据本发明一些实施例的对第一矩阵进行转换和加载的过程的进一步详细流程图。
图5示出了根据本发明一些实施例的确定第一二维矩阵的第一维度和第二维度的过程的进一步详细示意图。
图6示出了根据本发明一些实施例的对第二矩阵进行转换和加载的过程的进一步详细流程图。
图7示出了根据本发明一些实施例的确定第二二维矩阵的第一维度和第二维度的过程的进一步详细示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一些实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。
图1A和图1B示出了两种不同情况的矩阵乘运算的示意图。
在图1A所示的实例中,矩阵乘运算的两个输入矩阵中,第一矩阵A为三维矩阵(Batch,M,K),第二矩阵B为二维矩阵(K,N),执行矩阵乘运算之后的输出矩阵C为三维矩阵(Batch,M,N)。其中,第一矩阵A的最后一个维度(第三维度K)与第二矩阵B的第一维度K相同(即前者的最后一个维度与后者的第一个维度相同)以使得矩阵乘运算是可行的。
在图1B所示的实例中,矩阵乘运算的两个输入矩阵中,第一矩阵A为三维矩阵(Batch,M,K),第二矩阵B为三维矩阵(Batch,K,N),执行矩阵乘运算之后的输出矩阵C为二维矩阵(M,N)。这里,出于实际应用的习惯将第一矩阵A的最后一个维度(第三维度K)表示为与第二矩阵B的第二维度K相同,然而,本领域技术人员可以理解,这样的表述仅仅是为了描述方便,事实上,在实际的矩阵乘运算中,可以对第二矩阵B进行转置,以使得第一矩阵A与转置后的第二矩阵B之间的矩阵乘运算是可行的,即前者的最后一个维度与后者的第一个维度相同,本文中有可能略去这种转置操作的描述。
此外,更一般性地,执行矩阵乘运算的两个矩阵中有至少一个维度相同即可,而不要求该维度的具体顺序。在这种情况下,在执行矩阵乘运算之前,可以对两个原始矩阵中的至少一个执行矩阵转置以使得转置后得到的第一矩阵A的最后一个维度与第二矩阵B的第一个维度相同,此处不再赘述。
执行上述矩阵乘运算的方法主要有两种。一种是将Batch维度在外层循环,内层进行MxNxK的矩阵运算。例如,对于图1A的情况,可以按照Batch维度将第一矩阵A切片为Batch个二维矩阵(M,K),然后将每个二维矩阵(M,K)与第二矩阵B(K,N)进行矩阵乘运算,从而得到Batch个二维矩阵(M,N),这Batch个二维矩阵(M,N)堆叠为输出的三维矩阵C(Batch,M,N)。对于图1B的情况,可以按照Batch维度将第一矩阵A和第二矩阵B分别切片为Batch个二维矩阵(M,K)和(K,N),然后将每个Batch的二维矩阵(M,K)和(K,N)进行矩阵乘操作,从而得到Batch个二维矩阵(M,N),这Batch个二维矩阵(M,N)进行叠加以产生输出的二维矩阵(M,N)。然而,在这种方法中,二维矩阵的维度(M、K和N)没有发生变化,在其相对于硬件乘法粒度取模的余数值较小时,硬件使用效率仍然较低。
另一种方法是在第一矩阵A和第二矩阵B执行矩阵乘运算之前先通过软件将输入的三维矩阵重塑(reshape)为二维矩阵,然后在硬件中对转换得到的二维矩阵执行矩阵乘操作。例如,对于图1A的情况,可以将第一矩阵A重塑为二维矩阵(Batch*M,K),然后对二维矩阵(Batch*M,K)与第二矩阵B(K,N)进行矩阵乘运算,从而得到输出的二维矩阵(Batch*M,N),该输出的二维矩阵(Batch*M,N)根据需要可以重塑为输出的三维矩阵C(Batch,M,N)。在这种方式中,通过重塑操作使得输入矩阵从三维矩阵转换为二维矩阵,从而输入矩阵的某个维度相对于硬件乘法粒度取模的余数值较小的情况大大减少(最多一个),硬件使用效率提高。然而,在这种方法中,软件执行的重塑操作将会带来较多的访存操作,总的消耗时间反而会增加,整体性能变差。
在上述两种矩阵乘运算中,如果M、K未与硬件乘法粒度对齐,则不能充分利用Batch维度的信息,尤其是当M或K对硬件乘法粒度取模后的余数值为2、4、8等这种较小的数时,矩阵乘硬件的利用率以及缓存器的使用率都会很低,导致整体性能较差,如果***重塑过程,又会产生较大访存,使得整体性能变差。
针对上述问题,本发明提出了一种通过对矩阵乘运算的两个输入矩阵进行维度折叠来优化矩阵乘运算的方法,能够充分利用矩阵乘硬件的处理能力并提高缓存器的使用率。
图2示出了根据本发明实施例的用于执行矩阵乘操作的计算设备200的示意图。如图2中所示,计算设备200可以包括用于执行矩阵乘运算的张量核210,张量核210具有给定的硬件乘法粒度,该硬件乘法粒度限制了张量核210能够处理的输入矩阵的最大维度(即M或K的最大值)。
计算设备200还可以包括张量核210外的第一存储器220。第一存储器220用于在张量核210执行矩阵乘运算之前存储第一矩阵A和第二矩阵B,以及在矩阵乘运算结束之后存储输出矩阵C。第一存储器220例如可以是高带宽存储器(High Bandwidth Memory,HBM),HBM具有高吞吐高带宽的优势,可以广泛应用于对大数据量访存要求较高的领域,如人工智能(AI)计算等。
计算设备200还可以包括向量核230。向量核230用于将三维的输入矩阵转换为二维矩阵。
计算设备200还可以包括张量核210附近的第二存储器240。第二存储器240可以由多个寄存器构成,用于存储向量核230将三维输入矩阵转换产生的二维矩阵。第二存储器240作为张量核210的主存储器通常与张量核210直接相连而无需再经由其他中间转换,以使得张量核210计算所需的数据存储在距离张量核210尽可能近的地方。
在一些实施例中,张量核210、向量核230和第二存储器240可以是独立的流处理单元250的一部分。尽管图2中仅示出了一个流处理单元250,但是本领域技术人员可以理解,计算设备200可以包含多个这样的流处理单元250。在这种情况下,第一存储器220可以服务于多个流处理单元250,并且可以通过高速总线或片上网络与计算设备200的每个流处理单元250进行数据和指令交换。
在一些实施例中,张量核210可以进一步包括通用矩阵乘单元(GEMM)212、用于第一矩阵A的第一缓存器(A_buffer)214和用于第二矩阵B的第二缓存器(B_buffer)216。第一缓存器214和第二缓存器216可以是张量核210内专用于张量核210的存储器,其中第一缓存器214用于按照GEMM 212的硬件乘法粒度每次缓存第一矩阵A的一个矩阵,第二缓存器216用于按照GEMM 212的硬件乘法粒度每次缓存第二矩阵B的一个向量。即,第一缓存器214和第二缓存器216的大小由GEMM 212或者张量核210的硬件乘法粒度决定。例如,在GEMM 212是nxn的二维累加器阵列的情况下,第一缓存器214和第二缓存器216每次分别缓存第一矩阵A和第二矩阵B的一个长度为N*n的向量。GEMM 212用于在张量核210接收到的矩阵乘指令的触发下,每次对从第一缓存器214和第二缓存器216输入的向量执行矩阵乘运算。
此外,在一些实施例中,在张量核210中,在第一缓存器214和第二缓存器216之前,还可以将来自第二存储器240的二维矩阵进行转置(图中未示出)。
图3示出了根据本发明实施例的用于实现矩阵乘运算的方法300的示意性流程图。方法300可以由计算设备200执行或者在计算设备200中执行。这里,假设矩阵乘运算的第一矩阵A和第二矩阵B已经预先存储在第一存储器220中,并且第一矩阵A是如图1A和图1B所示的三维矩阵(Batch,M,K),第二矩阵B可以是如图1A所示的二维矩阵(K,N)或者是如图1B所示的三维矩阵(Batch,K,N)。取决于第二矩阵B为二维矩阵还是三维矩阵,在方法300中对第二矩阵B执行不同的处理。
如图3中所示,在方框310,可以将矩阵乘运算的第一矩阵A转换为第一二维矩阵A’并将该第一二维矩阵A’加载至张量核210内用于第一矩阵A的第一缓存器214。例如,假设第一矩阵A为三维矩阵(Batch,M,K),则转换得到的第一二维矩阵A’为二维矩阵(Batch*M,K)或(M,Batch*K)。这里,对第一矩阵A进行转换和加载的更具体的实施例在下面参考图4进行描述。
在方框320,可以确定矩阵乘运算的第二矩阵B是二维矩阵还是三维矩阵,例如是图1A所示的矩阵还是如图1B所示的矩阵。
如果第二矩阵B是二维矩阵(例如图1A所示的二维矩阵(K,N)),则在方框330,可以将第二矩阵B直接加载至张量核210内用于第二矩阵B的第二缓存器216。
如果第二矩阵B是三维矩阵(例如图1B所示的三维矩阵(Batch,K,N)),则在方框340,可以将第二矩阵B转换为第二二维矩阵B’并加载至张量核210内用于第二矩阵B的第二缓存器216。这里,对第二矩阵B进行转换和加载的更具体的实施例在下面参考图6进行描述,其与第一矩阵A的转换和加载方式相对应。
然后,在方框350,在张量核210中对第一二维矩阵A’和第二矩阵B(方框330的情况)或第二二维矩阵B’(方框340的情况)执行矩阵乘。
注意,对第一矩阵A的转换和加载可以与第二矩阵B的加载(方框330)或转换和加载(方框340)可以同时执行或者可以以先后顺序执行,本文并不局限其具体执行顺序。
图4示出了根据本发明一些实施例的对第一矩阵A进行转换和加载的过程(方框310)的进一步详细流程图。
如图4中所示,在方框312,可以通过多数据加载(Load Much,LDM)操作将第一矩阵A从张量核210外的第一存储器220加载至向量核230。
在方框314,在向量核230中,可以基于第一矩阵A的第二维度M和第三维度K确定第一二维矩阵A’的第一维度和第二维度。这里,向量核230对第一矩阵A的转换是通过对第一矩阵A中的各个元素进行地址转换实现的。取决于第一矩阵A的第二维度M和第三维度K的不同情况,转换得到的第一二维矩阵A’可以是(Batch*M,K)或(M,Batch*K),如下所详述。
图5示出了根据本发明一些实施例的确定第一二维矩阵A’的第一维度和第二维度的过程(方框314)的进一步详细示意图。
如图5中所示,在方框3141,可以确定第一矩阵A的第二维度M和第三维度K中需要与第一维度Batch合并的维度是否满足预定条件。这里,预定条件可以指第二维度M或第三维度K的绝对值较小或者相对于另一者较小。
例如,假设第一矩阵A的第二维度M被指定为需要与第一维度Batch合并的维度。在这种情况下,如果第二维度M<<第三维度K,或者,第二维度M的绝对值较小(例如在张量核的硬件乘法粒度为64的情况下,第二维度M为2、4或8),则认为第一矩阵A的第二维度M满足该预定条件。
又例如,假设第一矩阵A的第三维度K被指定为需要与第一维度Batch合并的维度。在这种情况下,如果第三维度K<<第二维度M,或者,第三维度K的绝对值较小(例如在张量核的硬件乘法粒度为64的情况下,第三维度K为2、4或8),则认为第一矩阵A的第三维度K满足该预定条件。
本领域技术人员可以理解,这里的第二维度M和第三维度K仅仅是示例性的,并不用于对第二维度和第三维度的顺序或大小进行任何限定。
在方框3142,如果确定需要与第一矩阵A的第一维度Batch进行合并的维度(第二维度M或第三维度K)满足该预定条件,则可以确定该需要进行合并的维度对张量核210的硬件乘法粒度Kd取模的余数值k,即k=M%Kd或k=K%Kd,%表示求余操作。这里,假设张量核210的硬件乘法粒度Kd为64,即,张量核210每次可以处理Kd*Kd大小的矩阵乘法,但是本领域技术人员可以理解,本发明并不局限于此,取决于计算设备200或张量核210的不同硬件实现,硬件乘法粒度Kd可以是其他值,例如8*8、16*16等。
在方框3143,可以确定该余数值k是否大于或等于预定阈值,其中该预定阈值与张量核210的硬件乘法粒度Kd相关联。例如,该预定阈值可以是张量核210的硬件乘法粒度Kd的一半或更小。
如果确定该余数值k大于或等于该预定阈值,则在方框3144,可以按照第一矩阵A的第一维度Batch和该需要合并的维度M或K对该第一矩阵A进行分块,并按照第一矩阵A的维度M或K中的另一维度来读取该第一矩阵A作为第一二维矩阵A’。也就是说,在这种情况下,事实上是将第一矩阵A直接看做(Batch*M,K)或(M,Batch*K)的二维矩阵进行数据读取,而不对分块后的第一矩阵A进行拼接,即,并不对矩阵元素的存储方式进行改变。
另一方面,如果确定该余数值k小于该预定阈值,则在方框3145,可以沿着第一矩阵A的第一维度Batch对第一矩阵A进行拼接以形成第一二维矩阵A’。也就是说,在k较小的情况下,需要沿着第一矩阵A的第一维度Batch进行拼接,即,改变了矩阵元素的存储方式。
这里,方框3144中对第一矩阵A(Batch,M,K)进行分块和拼接的方法例如可以参考申请号为202210440010.1的中国发明专利申请中的描述。
通过上述方式,可以将第一矩阵A转换为适合于张量核210的硬件处理能力的第一二维矩阵A’(Batch*M,K)或(M,Batch*K)。
继续图4,在方框316,可以通过多数据存储(Store Much,STM)操作将第一二维矩阵A’从向量核230存储至张量核210附近的第二存储器240。
这里,LDM操作和STM操作是针对多个寄存器的单指令读写操作,其中LDM操作可以通过单个LDM指令将地址空间中的一段地址的数据依次加载至向量核230,并且STM操作可以通过单个STM指令将多个寄存器的数据依次写入第二存储器240的多个寄存器。
在方框318,可以基于第一缓存器214的大小将第一二维矩阵A’加载至第一缓存器214。
通过这种方式,可以将矩阵乘运算的一个三维输入矩阵转换为适当的二维矩阵并且改进了数据向张量核210中的对应缓存器的加载方法,充分利用了缓存器空间,降低了数据加载次数,提高了计算性能。
图6示出了根据本发明一些实施例的对第二矩阵B进行转换和加载的过程(方框340)的进一步详细流程图。在方框340的实施方式中,第二矩阵B是三维矩阵,并且第二矩阵B的转换和加载过程取决于上述结合图4和图5所描述的第一矩阵A的转换和加载过程而对应执行。
如图6中所示,在方框342,可以通过多数据加载(LDM)操作将第二矩阵B从张量核210外的第一存储器220加载至向量核230。
在方框344,在向量核230中,可以基于第一二维矩阵A’的第一维度(Batch*M或M)和第二维度(K或Batch*K),在向量核230中确定第二二维矩阵B’的第一维度(K或Batch*K)和第二维度(Batch*N或N)。
具体地,如上所述,第一二维矩阵A’可以被确定为(Batch*M,K)或(M,Batch*K)。在第一二维矩阵A’为(Batch*M,K)的情况下,第一矩阵A的第一维度Batch与第二维度M进行合并,因此第二矩阵B应当将第一维度Batch与第三维度N进行合并。另一方面,在第一二维矩阵A’为(M,Batch*K)的情况下,第一矩阵A的第一维度Batch与第三维度K进行合并,因此第二矩阵B应当将第一维度Batch与第二维度K进行合并,以保证第一二维矩阵A’和第二二维矩阵B’之间可执行矩阵乘运算。
图7示出了根据本发明一些实施例的确定第二二维矩阵B’的第一维度和第二维度的过程(方框344)的进一步详细示意图。
如图7中所示,在方框3442,可以基于第一二维矩阵A’的第一维度Batch*M或M确定第一矩阵A的第二维度M是否与第一矩阵A的第一维度Batch进行了合并。即,相当于确定第一矩阵A的第二维度M还是第三维度K与第一维度Batch进行了合并。
如果确定第一矩阵A的第二维度M与第一矩阵A的第一维度Batch进行了合并(即第一二维矩阵A’为(Batch*M,K)),则在方框3444,可以按照第二矩阵B的第一维度Batch和第三维度N对第二矩阵B进行分块,并且按照第二矩阵B的第二维度K的顺序来读取该第二矩阵B作为第二二维矩阵B’。也就是说,在这种情况下,事实上是将第二矩阵B直接看做(K,Batch*N)或(Batch*K,N)的二维矩阵进行数据读取,而不对分块后的第二矩阵B进行拼接,即,并不对矩阵元素的存储方式进行改变。
另一方面,如果确定第一矩阵A的第二维度M没有与第一矩阵A的第一维度Batch进行合并(即第一矩阵A的第一维度Batch与第三维度K进行合并),则在方框3446,可以按照第二矩阵B的第一维度Batch和第二维度K对第二矩阵B进行分块,并按照第二矩阵B的第三维度N来读取第二矩阵B作为第二二维矩阵B’。
通过上述方式,可以将第二矩阵B转换为适合于张量核210的硬件处理能力的第二二维矩阵B’。
继续图6,在方框346,可以通过多数据存储(STM)操作将第二二维矩阵B’从向量核230存储于张量核210附近的第二存储器240。
在方框348,可以基于第二缓存器216的大小将第二二维矩阵B’加载至第二缓存器216。
通过这种方式,可以将矩阵乘运算的一个三维输入矩阵转换为适当的二维矩阵并且改进了数据向张量核210中的对应缓存器的加载方法,充分利用了缓存器空间,降低了数据加载次数,提高了计算性能。
以上结合附图对根据本公开的用于实现矩阵乘运算的计算设备和方法进行了描述。然而本领域技术人员可以理解,上述方法的执行并不局限于图中所示和以上所述的顺序,而是可以以任何其他合理的顺序来执行。此外,计算设备也不必须包括图中所示的所有组件,其可以仅仅包括执行本公开中所述的功能所必须的其中一些组件或更多组件,并且这些组件的连接方式也不局限于图中所示的形式。
本公开可以实现为方法、计算设备、***和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算设备可以包括至少一个处理器和耦合到该至少一个处理器的至少一个存储器,该存储器可以存储用于由至少一个处理器执行的指令。该指令在由该至少一个处理器执行时,该计算设备可以执行上述方法。
在一个或多个示例性设计中,可以用硬件、软件、固件或它们的任意组合来实现本公开所述的功能。例如,如果用软件来实现,则可以将所述功能作为一个或多个指令或代码存储在计算机可读介质上,或者作为计算机可读介质上的一个或多个指令或代码来传输。
本文公开的装置的各个单元可以使用分立硬件组件来实现,也可以集成地实现在一个硬件组件,如处理器上。例如,可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或用于执行本文所述的功能的任意组合来实现或执行结合本公开所描述的各种示例性的逻辑块、模块和电路。
本领域普通技术人员还应当理解,结合本公开的实施例描述的各种示例性的逻辑块、模块、电路和算法步骤可以实现成电子硬件、计算机软件或二者的组合。
本公开的以上描述用于使本领域的任何普通技术人员能够实现或使用本公开。对于本领域普通技术人员来说,本公开的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本公开的精神和保护范围的情况下应用于其它变形。因此,本公开并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。
Claims (10)
1.一种实现矩阵乘运算的方法,包括:
将所述矩阵乘运算的第一矩阵转换为第一二维矩阵并加载至张量核内用于所述第一矩阵的第一缓存器,其中所述第一矩阵为三维矩阵;
确定所述矩阵乘运算的第二矩阵是二维矩阵还是三维矩阵;
响应于所述第二矩阵是二维矩阵,将所述第二矩阵加载至所述张量核内用于所述第二矩阵的第二缓存器;
响应于所述第二矩阵是三维矩阵,将所述第二矩阵转换为第二二维矩阵并加载至所述张量核内用于所述第二矩阵的第二缓存器;以及
在所述张量核中对所述第一二维矩阵和所述第二矩阵或所述第二二维矩阵执行矩阵乘。
2.如权利要求1所述的方法,其中将所述矩阵乘运算的第一矩阵转换为第一二维矩阵并加载至张量核内用于所述第一矩阵的第一缓存器包括:
通过多数据加载操作将所述第一矩阵从所述张量核外的第一存储器加载至向量核;
在所述向量核中基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度;
通过多数据存储操作将所述第一二维矩阵从所述向量核存储至所述张量核附近的第二存储器;以及
基于所述第一缓存器的大小将所述第一二维矩阵加载至所述第一缓存器。
3.如权利要求2所述的方法,其中在所述向量核中基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度包括:
确定所述第一矩阵的第二维度和第三维度中需要与所述第一矩阵的第一维度进行合并的维度是否满足预定条件;
响应于确定所述需要与所述第一矩阵的第一维度进行合并的维度满足所述预定条件,确定所述需要与所述第一矩阵的第一维度进行合并的维度对所述张量核的硬件乘法粒度取模的余数值;
确定所述余数值是否大于或等于预定阈值,其中所述预定阈值与所述张量核的硬件乘法粒度相关联;
响应于确定所述余数值大于或等于所述预定阈值,按照所述第一矩阵的第一维度和所述需要与所述第一矩阵的第一维度进行合并的维度对所述第一矩阵进行分块,并按照所述第一矩阵的第二维度和第三维度中的另一维度来读取所述第一矩阵作为所述第一二维矩阵;以及
响应于确定所述余数值小于所述预定阈值,沿着所述第一矩阵的第一维度对所述第一矩阵进行拼接以形成所述第一二维矩阵。
4.如权利要求2所述的方法,其中将所述第二矩阵转换为第二二维矩阵并加载至所述张量核内用于所述第二矩阵的第二缓存器包括:
通过多数据加载操作将所述第二矩阵从所述张量核外的第一存储器加载至向量核;
基于所述第一二维矩阵的第一维度或第二维度,在所述向量核中确定所述第二二维矩阵的第一维度和第二维度;
通过多数据存储操作将所述第二二维矩阵从所述向量核存储于所述张量核附近的第二存储器;以及
基于所述第二缓存器的大小将所述第二二维矩阵加载至所述第二缓存器。
5.如权利要求4所述的方法,其中基于所述第一二维矩阵的第一维度和第二维度,在所述向量核中确定所述第二二维矩阵的第一维度和第二维度包括:
基于所述第一二维矩阵的第一维度确定所述第一矩阵的第二维度是否与所述第一矩阵的第一维度进行了合并;
如果确定第一矩阵的第二维度与所述第一矩阵的第一维度进行了合并,则将所述第二矩阵的第一维度和第三维度对所述第一矩阵进行分块,并按照所述第二矩阵的第二维度来读取所述第二矩阵作为所述第二二维矩阵;以及
如果确定第一矩阵的第二维度没有与所述第一矩阵的第一维度进行合并,则将所述第二矩阵的第一维度和第二维度对所述第二矩阵进行分块,并按照所述第二矩阵的第三维度来读取所述第二矩阵作为所述第二二维矩阵。
6.一种计算设备,包括:
张量核,其包括通用矩阵乘单元、用于矩阵乘运算的第一矩阵的第一缓存器和用于矩阵乘运算的第二矩阵的第二缓存器,其中所述第一矩阵为三维矩阵;
位于所述张量核之外的第一存储器,其被配置为在所述矩阵乘运算之前存储所述第一矩阵和所述第二矩阵;
向量核,其被配置为将所述第一矩阵和所述第二矩阵转换为第一二维矩阵和第二二维矩阵;以及
位于所述张量核附近的第二存储器,其被配置为存储所述第一二维矩阵和所述第二二维矩阵,
其中所述张量核被配置为:
将所述第一二维矩阵加载至所述第一缓存器,
在所述第二矩阵是二维矩阵时,将所述第二矩阵加载至所述第二缓存器,或者在所述第二矩阵是三维矩阵时,将所述第二二维矩阵加载至所述第二缓存器,以及
对所述第一二维矩阵和所述第二矩阵或所述第二二维矩阵执行矩阵乘。
7.如权利要求6所述的计算设备,其中所述向量核被配置为:
通过多数据加载操作从所述第一存储器加载所述第一矩阵;
基于所述第一矩阵的第二维度和第三维度确定所述第一二维矩阵的第一维度和第二维度;以及
通过多数据存储操作将所述第一二维矩阵存储至所述第二存储器。
8.如权利要求7所述的计算设备,其中所述向量核被配置为:
确定所述第一矩阵的第二维度和第三维度中需要与所述第一矩阵的第一维度进行合并的维度是否满足预定条件;
响应于确定所述需要与所述第一矩阵的第一维度进行合并的维度满足所述预定条件,确定所述需要与所述第一矩阵的第一维度进行合并的维度对所述张量核的硬件乘法粒度取模的余数值;
确定所述余数值是否大于或等于预定阈值,其中所述预定阈值与所述张量核的硬件乘法粒度相关联;
响应于确定所述余数值大于或等于所述预定阈值,按照所述第一矩阵的第一维度和所述需要与所述第一矩阵的第一维度进行合并的维度对所述第一矩阵进行分块,并按照所述第一矩阵的第二维度和第三维度中的另一维度来读取所述第一矩阵作为所述第一二维矩阵;以及
响应于确定所述余数值小于所述预定阈值,沿着所述第一矩阵的第一维度对所述第一矩阵进行拼接以形成所述第一二维矩阵。
9.如权利要求6所述的计算设备,其中所述向量核被配置为:
通过多数据加载操作从所述第一存储器加载所述第二矩阵;
基于所述第一二维矩阵的第一维度或第二维度确定所述第二二维矩阵的第一维度和第二维度;以及
通过多数据存储操作将所述第二二维矩阵存储于所述第二存储器。
10.如权利要求9所述的计算设备,其中所述向量核被配置为:
基于所述第一二维矩阵的第一维度确定所述第一矩阵的第二维度是否与所述第一矩阵的第一维度进行了合并;
如果确定第一矩阵的第二维度与所述第一矩阵的第一维度进行了合并,则将所述第二矩阵的第一维度和第三维度对所述第一矩阵进行分块,并按照所述第二矩阵的第二维度来读取所述第二矩阵作为所述第二二维矩阵;以及
如果确定第一矩阵的第二维度没有与所述第一矩阵的第一维度进行合并,则将所述第二矩阵的第一维度和第二维度对所述第二矩阵进行分块,并按照所述第二矩阵的第三维度来读取所述第二矩阵作为所述第二二维矩阵。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311502624.9A CN117454068A (zh) | 2023-11-10 | 2023-11-10 | 实现矩阵乘运算的方法和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311502624.9A CN117454068A (zh) | 2023-11-10 | 2023-11-10 | 实现矩阵乘运算的方法和计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117454068A true CN117454068A (zh) | 2024-01-26 |
Family
ID=89594629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311502624.9A Pending CN117454068A (zh) | 2023-11-10 | 2023-11-10 | 实现矩阵乘运算的方法和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117454068A (zh) |
-
2023
- 2023-11-10 CN CN202311502624.9A patent/CN117454068A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11449576B2 (en) | Convolution operation processing method and related product | |
US11907830B2 (en) | Neural network architecture using control logic determining convolution operation sequence | |
EP3676700B1 (en) | Efficient direct convolution using simd instructions | |
CN107301455B (zh) | 用于卷积神经网络的混合立方体存储***及加速计算方法 | |
US10769749B2 (en) | Processor, information processing apparatus, and operation method of processor | |
US10768894B2 (en) | Processor, information processing apparatus and operation method for processor | |
EP4024291A1 (en) | Neural network comprising matrix multiplication | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
CN110837483B (zh) | 张量维度变换的方法以及装置 | |
CN117435855B (zh) | 用于进行卷积运算的方法、电子设备和存储介质 | |
US20230305807A1 (en) | Core group memory processsing with mac reuse | |
CN109800867B (zh) | 一种基于fpga片外存储器的数据调用方法 | |
EP4113389A1 (en) | Neural network comprising matrix multiplication | |
CN117454068A (zh) | 实现矩阵乘运算的方法和计算设备 | |
US20210082082A1 (en) | Data processing method and processing circuit | |
CN112434255A (zh) | 向量-矩阵运算和数据处理方法、乘法器和处理器芯片 | |
US20240028666A1 (en) | Method for optimizing matrix multiplication operation on system on chip, and related product | |
CN118245110A (zh) | 面向稀疏矩阵向量乘计算的软硬件协同设计方法和框架 | |
CN117194861A (zh) | 一种支持输出剪枝的可重构混合基fft装置 | |
KR20240099773A (ko) | 효율적인 연산 분할을 위한 텐서 변형 방법, 메모리 액세스 방법, 및 이를 위한 뉴럴 프로세싱 유닛 | |
CN118193443A (zh) | 用于处理器的数据加载方法、处理器、计算设备和介质 | |
US20190042421A1 (en) | Memory control apparatus and memory control method | |
KR20230095775A (ko) | Ndp 기능을 포함하는 메모리 확장 장치 및 이를 포함하는 가속기 시스템 | |
CN116955892A (zh) | 张量转置装置、方法、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |