CN117808063A - 用于执行计算的方法、计算装置、介质和程序产品 - Google Patents
用于执行计算的方法、计算装置、介质和程序产品 Download PDFInfo
- Publication number
- CN117808063A CN117808063A CN202410223942.XA CN202410223942A CN117808063A CN 117808063 A CN117808063 A CN 117808063A CN 202410223942 A CN202410223942 A CN 202410223942A CN 117808063 A CN117808063 A CN 117808063A
- Authority
- CN
- China
- Prior art keywords
- matrix
- operator
- block
- calculation results
- multiplier
- 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
- 238000000034 method Methods 0.000 title claims abstract description 105
- 239000011159 matrix material Substances 0.000 claims abstract description 306
- 238000004364 calculation method Methods 0.000 claims abstract description 165
- 230000004927 fusion Effects 0.000 claims abstract description 52
- 230000003213 activating effect Effects 0.000 claims abstract description 15
- 239000000872 buffer Substances 0.000 claims description 55
- 230000004913 activation Effects 0.000 claims description 49
- 238000004590 computer program Methods 0.000 claims description 14
- 230000008707 rearrangement Effects 0.000 claims description 13
- 230000006870 function Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 16
- 238000012545 processing Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 9
- 230000011218 segmentation Effects 0.000 description 8
- 238000007796 conventional method Methods 0.000 description 7
- 238000003070 Statistical process control Methods 0.000 description 6
- 101100023550 Mycobacterium bovis (strain ATCC BAA-935 / AF2122/97) cmaD gene Proteins 0.000 description 5
- 101150024128 mmaA1 gene Proteins 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 3
- 230000036316 preload Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000002407 reforming Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 101001128694 Homo sapiens Neuroendocrine convertase 1 Proteins 0.000 description 1
- 101000828971 Homo sapiens Signal peptidase complex subunit 3 Proteins 0.000 description 1
- 101000979222 Hydra vulgaris PC3-like endoprotease variant A Proteins 0.000 description 1
- 101000979221 Hydra vulgaris PC3-like endoprotease variant B Proteins 0.000 description 1
- 102100032132 Neuroendocrine convertase 1 Human genes 0.000 description 1
- 102100038946 Proprotein convertase subtilisin/kexin type 6 Human genes 0.000 description 1
- 101710180552 Proprotein convertase subtilisin/kexin type 6 Proteins 0.000 description 1
- 102100038950 Proprotein convertase subtilisin/kexin type 7 Human genes 0.000 description 1
- 101710180647 Proprotein convertase subtilisin/kexin type 7 Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013473 artificial intelligence 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
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 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
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7825—Globally asynchronous, locally synchronous, e.g. network on chip
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0499—Feedforward networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种用于执行计算的方法、计算装置、介质和程序产品。该方法包括:计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果,所述位置不连续的两个块计算结果分别位于第一矩阵乘算子的计算结果的不同半区的对应位置;将所述位置不连续的两个块计算结果输出至连续的寄存器中,以便形成连续的两个块计算结果;以及激活运算算子按照块的粒度,从寄存器中获取所述连续的两个块计算结果进行计算、以便生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果。本发明能够在有效减少中间张量的吞吐的同时,提高执行计算的效率,进而有效地提升整个算子性能。
Description
技术领域
本发明的实施例总体上涉及人工智能领域,更具体地涉及一种用于执行计算的方法、计算装置、计算机可读存储介质和计算机程序产品。
背景技术
传统的用于执行计算的方案主要包括两种。例如而不限于以多层感知机(Multilayer Perceptron,MLP)算子为例,第一种执行计算的方法例如包括:将MLP算子拆成三个独立的单算子,其中,三个独立的单算子分别是第一矩阵乘算子、激活运算算子以及第二矩阵乘算子;以及逐个调用所拆分的三个独立的单算子。第二种执行计算的方法例如包括:将第一个矩阵乘法运算例如拆成两个矩阵乘子算子;同时将激活运算拆成两个普通的逐元素算子(即,激活函数算子和乘法算子);以及将一个矩阵乘子算子和乘法算子组成一个融合算子;另一个矩阵乘子算子和激活函数算子组成另一个融合算子。
第一种执行计算的方法虽然具有简单的优势,但是其计算效率较低,难以进行性能提升。第二种执行计算的方法虽然一定程度上减少了中间张量的吞吐,但是存在额外的开销,以及增加了输入张量的加载交互,因而导致计算效率不高。
综上,传统的执行计算的方法存在的不足之处在于:难以在减少中间张量的吞吐的同时,提高执行计算的效率,进而难以有效提升算子的性能。
发明内容
本发明提供了一种用于执行计算的方法、计算设备、计算机可读存储介质和计算机程序产品,不仅能够在有效减少中间张量的吞吐的同时,提高执行计算的效率,而且能够有效提升整个算子性能。
根据本发明的第一方面,提供了一种用于执行计算的方法。该方法包括:计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果,所述位置不连续的两个块计算结果分别位于第一矩阵乘算子的计算结果的不同半区的对应位置;将所述位置不连续的两个块计算结果输出至连续的寄存器中,以便形成连续的两个块计算结果;以及激活运算算子按照块的粒度,从寄存器中获取所述连续的两个块计算结果进行计算、以便生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果。
在一些实施例中,用于执行计算的方法还包括:将寄存器文件划分成多个缓冲区,所述多个缓冲区用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算,多个缓冲区中的每个缓冲区被配置有多个连续的寄存器。
在一些实施例中,第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算包括:确定多个缓冲区中的当前缓冲区中的多个连续的寄存器在当前组不连续的两个块计算结果输出之后已被放满,将下一组不连续的两个块计算结果输出至下一缓冲区中的连续的寄存器中;以及在不连续的两个块计算结果被输出至下一缓冲区中的连续的寄存器的同时,激活运算算子从当前缓冲区中的寄存器中获取连续的两个块计算结果以进行激活运算。
在一些实施例中,用于执行计算的方法还包括:经由片上共享存储器,将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以用于第二矩阵乘运算。
在一些实施例中,将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子包括:
经由片上共享存储器,按组块粒度将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以便输出关于第二矩阵乘算子的部分计算结果,所述组块的尺寸被配置为满足预定约束条件;以及利用L1缓存或L2 缓存的近存计算单元累加所输出的多个关于第二矩阵乘算子的部分计算结果,以便生成第二矩阵乘算子的输出结果。
在一些实施例中,预定约束条件包括以下各项:第一矩阵乘算子的第一输入矩阵的第一维度为所述组块的第一维度的整数倍或者倍数的向上取整;第一矩阵乘算子的第二输入矩阵的第二维度的一半为所述组块的第二维度的整数倍或者倍数的向上取整;以及所述组块的第一维度、第二维度与数据单元的尺寸标识的乘积小于片上共享存储器的尺寸。
在一些实施例中,计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果包括:将第一矩阵乘算子的第一输入矩阵的选定行和第二输入矩阵的选定列相乘,以获得所述位置不连续的两个块计算结果中的第一块计算结果;以及将第一输入矩阵的所述选定行和第二输入矩阵的预定跨度列相乘,以获得所述位置不连续的两个块计算结果中的第二块计算结果,预定跨度列与选定列之间的跨度等于第二输入矩阵的第二维度的一半。
在一些实施例中,用于执行计算的方法还包括:确定第一矩阵乘算子的第一输入矩阵和第二输入矩阵中的需重复加载数据的次数相对较多的输入矩阵;在第二矩阵乘算子进行计算时,针对所确定的需重复加载数据的次数相对较多的输入矩阵进行预加载;以及在第一矩阵乘算子进行计算时,将第二矩阵乘算子的第三输入矩阵进行预加载。
在一些实施例中,用于执行计算的方法还包括:将第一矩阵乘算子的第二输入矩阵进行离线重排操作,以便经由离线重排操作的第二输入矩阵被配置为目标排列方式,在目标排列方式下,离线重排操作之前的第二输入矩阵的第一半区的分块与第二半区的分块间隔设置;以及针对被配置为目标排列方式的第二输入矩阵的第二维度进行多计算核的拆分,以用于第一矩阵乘算子的计算。
根据本发明的第二方面,还提供了一种计算装置。该计算装置包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使计算装置能够执行本发明的第一方面的方法。
根据本发明的第三方面,还提供了一种计算机可读存储介质。该计算机可读存储介质上存储有计算机程序,计算机程序被机器执行时执行本发明的第一方面的方法。
根据本发明的第四方面,还提供了一种计算机程序产品,包括计算机程序,计算机程序被机器执行时执行本发明的第一方面的方法。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
结合附图并参考以下详细说明,本发明各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素。
图1示意性示出了根据本发明实施例的实施用于执行计算的方法的计算装置的示意图。
图2示出了根据本发明的实施例的用于执行计算的方法的流程图。
图3示出了根据本发明的实施例的用于生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果的方法的示意图。
图4示出了根据本发明的实施例的用于生成关于第二矩阵乘算子的输出结果的方法的流程图。
图5示出了根据本发明的实施例的用于生成输出结果的方法的示意图。
图6示出了根据本发明的实施例的用于预加载输入矩阵的方法的流程图。
图7示出了根据本发明的实施例的用于针对第一矩阵乘算子的第二输入矩阵的切分方法的流程图。
图8示出了根据本发明的实施例的用于针对第一矩阵乘算子的第二输入矩阵的切分方法与传统方法的对比示意图。
图9示出了根据本发明的实施例的用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算的方法的流程图。
图10示意性示出了传统的第一种执行计算的方法的示意图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本发明的优选实施例。虽然附图中显示了本发明的优选实施例,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。
如前文所描述,传统的用于执行计算的方案主要包括两种(即,传统的第一种执行计算的方法和第二种执行计算的方法)。以下结合MLP算子来说明传统的第一种执行计算的方法和第二种执行计算的方法。应当理解,例如在Transformer模型中,MLP算子被用于实现多头自注意力机制的前向传递过程。具体地,Transformer模型中的每个多头自注意力机制都由三个线性变换组成,分别是查询(query)、键(key)和值(value)的线性变换,这三个线性变换的输出都会被输入到一个MLP算子中,进行非线性变换和多头(multi-head)特征提取,以增强模型的表达能力。
以下结合图10来说明传统的第一种执行计算的方法。图10示意性示出了传统的第一种执行计算的方法1000的示意图。该方法1000例如包括:将MLP算子拆成三个独立的单算子,其中,三个独立的单算子分别是第一矩阵乘算子(例如,简称为MMA0算子)、激活运算算子(例如,简称为xGLU算子)、以及第二矩阵乘算子(例如,简称为MMA1算子);以及逐个调用MMA0算子、xGLU算子、和MMA1算子。该方法1000例如还可以包括:将MLP算子拆成四个独立的单算子,其中,四个独立的单算子分别是MMA0算子、激活函数算子(典型的激活函数算子例如是Sigmoid算子、GeLU算子、SiLU算子)、乘法算子(例如,简称为Mul算子)、以及第二矩阵乘算子(例如,简称为MMA1算子);以及逐个调用MMA0算子、激活函数算子、Mul算子和MMA1算子。图10中的上半部分示例性地示出了典型MLP算子的结构。MLP算子例如包含依次连接的第一全连接层1002、激活层1004和第二全连接层1006。其中,第一全连接层1002例如对应MMA0算子,MMA0算子的输出数据例如为第一张量(例如,图10中的tensor 1所指示)。激活层1004例如对应xGLU算子, xGLU算子的例如包括激活函数算子1008(典型的激活函数算子例如包括:Sigmoid算子、GeLU算子、或者SiLU算子)和Mul算子1010。输出数据例如为第二张量(例如,图10中的tensor 2所指示)。图10中的下半部分示例性地示出了该方法1000的xGLU算子的计算细节。例如,MMA0算子的输出数据1012的右半区(即,tensor 1的右半区)输入激活函数算子1008,经由激活函数算子1008输出的计算结果1014与MMA0算子的输出数据1012的左半区(即,tensor 1的左半区)输入Mul算子1010以进行乘法运算,从而生成xGLU算子的输出数据(即,tensor 2)。经研究发现,对于上述传统的第一种执行计算的方法1000而言,其虽然具有简单的优势,但是计算效率较低,难以进行性能提升。
传统的第二种执行计算的方法例如包括:将第一个矩阵乘法运算(MatMul_0)例如拆成两个矩阵乘法子算子(即,MMA0_A算子和MMA0_B算子);以及将激活运算(即,xGLU)拆成两个普通的逐元素算子(即,两个elementwise算子)。该两个逐元素算子例如是激活函数算子以及乘法算子,其中,激活函数算子例如是S型函数(Sigmoid)算子、高斯误差线性单元函数(Gaussian Error Linear Unit,GeLU)算子和S 型加权线性单元函数(Sigmoid-Weighted Linear Units,SiLU)算子中的任一算子,统称为“Sigmoid/GeLU/SiLU算子”。乘法算子例如为Mul算子。然后,将MMA0_B算子和Sigmoid/GeLU/SiLU算子组成一个融合算子,以及将MMA0_A算子和Mul算子组成另一个融合算子。或者,将MMA0_A算子独立实现,以及将MMA0_B算子、Sigmoid/GeLU/SiLU算子以及Mul算子组成一个融合算子。经研究发现,在传统的第二种执行计算的方法中,虽然通过矩阵乘法子算子和elementwise算子进行了融合,有利于一定程度上减少中间张量的吞吐,但是因为将第一个矩阵乘法运算拆成了两个矩阵乘法子算子,即MMA0_A算子和MMA0_B算子,因此存在额外的开销,并且在进行第一个矩阵乘法运算时,同一个输入张量会在MMA0_A算子和MMA0_B算子计算中分别进行数据加载,因此,存在增加输入张量的加载交互的问题,因而使得计算效率不高。
综上,传统的执行计算的方法存在的不足之处在于,难以在减少中间张量的吞吐的同时,提高执行计算的效率,进而难以有效提升执行计算的性能。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本发明的示例实施例提出了一种用于执行计算的方法。在该方法中,通过计算在第一矩阵乘算子的计算结果的不同半区的对应位置的两个不连续的块计算结果,并将其连续地放置在寄存器中,则激活运算算子就可以直接利用连续寄存器中相邻的块计算结果方便地计算融合算子的对应块计算结果;而无需如传统方法中那样使得第一矩阵乘算子输出两个相隔较远的不连续的块计算结果之间的所有块计算结果,因而本发明能够显著减少中间张量的吞吐,提高了计算效率。另外,本发明使得第一矩阵乘和激活运算之间通过连续的寄存器进行数据同步、实现深度融合,因而可以充分地利用寄存器这种片上存储资源,有利于提高执行计算的效率,因而,本发明能够在减少中间张量的吞吐的同时,兼顾提高执行计算的效率,并且能够有效提升整个算子性能。另外,本发明因为无需输出两个相隔较远的不连续的块计算结果之间的所有块计算结果,因而也避免了“当张量跨度较大时,因可能放不下输出的所有块计算结果而导致的无法准确获得用于激活运算算子所需的块计算结果”的不足之处,进而显著提高了计算性能。
图1示意性示出了根据本发明实施例的实施用于执行计算的方法的计算装置100的示意图。如图1所示,计算装置100可以具有一个或多个处理单元,包括诸如图形处理器(Graphics Processing Unit,GPU)、现场可程序化逻辑门阵列(Field Programmable GateArray,FPGA)、专门应用的集成电路(Application Specific Integrated Circuit,ASIC)、或者通用图形处理器(General-purpose computing on graphics processing units,GPGPU)等的专用处理单元以及诸如CPU的通用处理单元。计算装置100至少还包括:不连续的两个块计算结果的计算模块102、连续的两个块计算结果的形成模块104、以融合算子的对应块计算结果的生成模块106。
关于不连续的两个块计算结果的计算模块102,其用于计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果,所述位置不连续的两个块计算结果分别位于第一矩阵乘算子的计算结果的不同半区的对应位置。
关于连续的两个块计算结果的形成模块104,其用于将所述位置不连续的两个块计算结果输出至连续的寄存器中,以便形成连续的两个块计算结果。
关于融合算子的对应块计算结果的生成模块106,其用于激活运算算子按照块的粒度,从寄存器中获取所述连续的两个块计算结果进行计算、以便生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果。
以下将结合图2和图3描述本发明的实施例的用于执行计算的方法200。图2示出了根据本发明的实施例的用于执行计算的方法200的流程图。图3示出了根据本发明的实施例的用于生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果的方法的示意图。应当理解,方法200例如可以在图1所描述的计算装置100处执行。方法200还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤202处,计算装置100计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果,所述位置不连续的两个块计算结果分别位于第一矩阵乘算子的计算结果的不同半区的对应位置。
关于第一矩阵乘算子,其例如用于将第一输入矩阵302和第二输入矩阵304相乘,以便生成第一矩阵乘算子的计算结果306。第一输入矩阵302例如是M*K维度。第二输入矩阵304例如是K*N0维度。第一矩阵乘算子的计算结果例如是M* N0维度。例如,如图3所示,第一矩阵乘算子的计算结果306中例如包括多个块计算结果,图3中仅仅示例出多个块计算结果中的部分块计算结果,例如,计算结果的左半区中的四个块计算结果(图3中以L0至L3示例),以及计算结的右半区中的四个块计算结果(图3中以R0- L3示例)。
关于第一矩阵乘算子的计算结果的不同半区,在一些实施例中,其例如是第一矩阵乘算子的计算结果的左半区和右半区。在另一些实施例中,其例如是第一矩阵乘算子的计算结果的上半区和下半区。
在一些实施例中,第一矩阵乘算子例如而不限于是transformer模型中的MLP算子中的矩阵乘法算子。应当理解,MLP算子包含两个全连接层和一个激活层。其中,激活层处于两个全连接层之间,全连接层一般用矩阵乘法算子或者Linear算子表示。在图3所示例性实施方式中,第一矩阵乘算子例如是MLP算子中的、与激活层之前的全连接层所对应的矩阵乘法算子306(图3中简称为MMA)。应当理解,第一矩阵乘算子也可以应用于其他符合“全连接层组合激活层”的这种结构的算子或者计算图,而不局限于MLP算子。
关于获取第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果的方法,其例如包括:将第一输入矩阵302的选定行301(或者是选定列)和第二输入矩阵的选定列303(或者选定行)相乘,以获得所述位置不连续的两个块计算结果中的第一块计算结果(例如,标记312所指示,图3中以L0示例);以及将第一输入矩阵302的所述选定行301(或者是选定列)和第二输入矩阵304的预定跨度列305(或者是预定跨度行)相乘,以获得所述位置不连续的两个块计算结果中的第二块计算结果(例如,标记316所指示,图3中以R0示例),预定跨度列305(或者是预定跨度行)与选定列303(或者是预定行)之间的跨度等于第二矩阵304的第一维度的一半。例如,第二矩阵304的第二维度为N,预定跨度列305与选定列303之间的跨度等于N/2,N为大于2的偶数。具体而言,该位置不连续的两个块计算结果中的第一块计算结果例如是第一矩阵乘算子的计算结果中左半区(或者上半区)中的某一位置的块计算结果,该位置不连续的两个块计算结果中的第二块计算结果例如是第一矩阵乘算子的计算结果中右半区(或者下半区)中的对应位置的块计算结果。应当理解,本发明在做第一矩阵乘算子的计算时,对第二维度(例如,N维度)的遍历不是完全连续的,而是在计算结果的左右两个半区(或者上下两个半区)之间跨度了N/2的距离,使得每一次第一矩阵乘算子所输出的块计算结果为左右两个不同半区(或者上下两个不同半区)中的对应位置的成对块计算结果。
在步骤204处,计算装置100将所述位置不连续的两个块计算结果输出至连续的寄存器中,以便形成连续的两个块计算结果。
关于连续的寄存器,其生成方式例如是:计算装置100将寄存器文件(Registerfile)划分成多个缓冲区(buffer),所述多个缓冲区用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算,多个缓冲区中的每个缓冲区被配置有多个连续的寄存器。例如,第一缓冲区330、第二缓冲区332等等。第一缓冲区330和第二缓冲区332中的每个缓冲区例如包括4个连续的寄存器。在一些实施例中,计算装置100将寄存器文件划分成偶数个(例如而不限于是2个、4个等等)缓冲区。应当理解,计算装置100将寄存器文件划分成奇数个缓冲区。
例如,计算装置100将位置不连续的两个块计算结果(例如,第一矩阵乘算子的计算结果的左半区的第一块计算结果(例如,标记312所指示,图3中以L0示例)和右半区的第二块计算结果(例如,标记316所指示,图3中以R0示例)输出至第一缓冲区330的第一寄存器和第二寄存器(例如,块计算结果L0和R0所对应的两个连续的寄存器)中;以及将第一矩阵乘算子的计算结果的左半区的块计算结果L1(例如,标记314所指示)和右半区的块计算结果R1(例如,标记318所指示)输出至第一缓冲区330的第三寄存器和第四寄存器(例如,块计算结果L1和R1所对应的两个连续的寄存器)中;以此类推,将每一次第一矩阵乘算子所输出的左右两个不同半区中的不连续的两个块计算结果输出至缓冲区的连续的寄存器中。应当理解,通过采用上述手段,本发明可以使得第一矩阵乘算子的计算结果中原本位于不同半区的位置不连续的块计算结果被放在连续的寄存器中。
在步骤206处,激活运算算子按照块的粒度,从寄存器中获取所述连续的两个块计算结果进行计算、以便生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果。
关于激活运算算子,其例如而不限于是transformer模型中的MLP算子中的激活运算算子,其例如是与处于两个全连接层之间的激活层所对应的激活运算算子。如图3中的标记350所指示。
例如,计算装置100利用激活运算算子350获取第一寄存器中的块计算结果L0和第二寄存器中的块计算结果R0以进行激活运算,进而生成关于第一矩阵乘和激活运算的融合算子的第一对应块计算结果342(例如,图3中以“O0”示例);以及获取第三寄存器中的块计算结果L1和第四寄存器中的块计算结果R1进行激活运算,进而生成关于第一矩阵乘和激活运算的融合算子的第二对应块计算结果344(例如,图3中以“O1”示例)。
应当理解,通过计算在第一矩阵乘算子的计算结果的不同半区的对应位置的两个不连续的块计算结果,并将其连续地放置在寄存器中,则激活运算算子就可以直接利用连续寄存器中相邻的块计算结果方便地计算融合算子的对应块计算结果;而无需如传统方法中那样使得第一矩阵乘算子输出两个相隔较远的不连续的块计算结果之间的所有块计算结果,因而本发明能够显著减少中间张量的吞吐,提高了计算效率。另外,本发明使得第一矩阵乘和激活运算之间通过连续的寄存器进行数据同步、实现深度融合,因而可以充分地利用寄存器这种片上存储资源,有利于提高执行计算的效率,因而,本发明不仅能够在减少中间张量的吞吐的同时,兼顾提高执行计算的效率,并且能够有效提升整个算子性能。
在一些实施例中,方法200还包括:在步骤202之前,计算装置100将寄存器文件划分成多个缓冲区,所述多个缓冲区用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算,多个缓冲区中的每个缓冲区被配置有多个连续的寄存器。
关于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算的方式,其例如包括:确定多个缓冲区中的当前缓冲区中的多个连续的寄存器在当前组不连续的两个块计算结果输出之后已被放满,将下一组不连续的两个块计算结果输出至下一缓冲区中的连续的寄存器中;以及在不连续的两个块计算结果被输出至下一缓冲区中的连续的寄存器的同时,激活运算算子从当前缓冲区中的寄存器中获取连续的两个块计算结果以进行激活运算。下文将结合图5和图9详细说明用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算的方法,在此,不再赘述。
在一些实施例中,方法200还包括:计算装置100经由片上共享存储器,将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以用于第二矩阵乘运算。
关于第二矩阵乘算子,其例如而不限于是transformer模型中的MLP算子中的矩阵乘算子,例如是与处于激活层之后的全连接层所对应的矩阵乘算子。应当理解,由于第一矩阵乘算子和激活运算算子对于寄存器文件的需求比较大。其主要原因在于:第一矩阵乘算子和激活运算算子深度融合,通过将寄存器文件划分多个缓冲区并通过流水线模式进行数据同步,从而实现进程并行执行方式;另外,第一矩阵乘算子因为性能的极致追求而通常采用的Zigzag的分块(tiling)方式,因而一般需要在张量计算核(Tensor core)之外使用寄存器文件(register file)进行K维度的累加(尤其当K维度比较大的时候);并且激活运算算子内部运算也需要用一部分寄存器文件,因此,经由片上共享存储器,将所生成的融合算子的对应块计算结果传递给第二矩阵乘算子,有利于将所有寄存器文件留给第一矩阵乘和激活运算的融合算子使用,从而实现进一步提升计算性能。另外,在一些实施例中,第一矩阵乘算子(第一矩阵乘算子和激活运算算子之间是进程并行执行方式)和第二矩阵乘算子都会用到张量计算核(Tensor core),所以,第一矩阵乘和激活运算的融合算子和第二矩阵乘算子之间无法做到并行,通过采用片上共享存储器可以显著提高数据访存速度,同时也能减少片上网络(Network on Chip,NoC)带宽的压力。
以下将结合图4和图5描述本发明的实施例的用于生成关于第二矩阵乘算子的输出结果的方法400。图4示出了根据本发明的实施例的用于生成关于第二矩阵乘算子的输出结果的方法400的流程图。图5示出了根据本发明的实施例的用于生成输出结果的方法的示意图。应当理解,方法400例如可以在图1所描述的计算装置100处执行。方法400还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤402处,计算装置100经由片上共享存储器,按组块粒度将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以便输出关于第二矩阵乘算子的部分计算结果,所述组块的尺寸被配置为满足预定约束条件。
如图5所示,第一矩阵乘算子522的第一输入矩阵(例如,张量数据A,即,tensor A)的维度例如为M*K(其中,M为第一输入矩阵的第一维度,M为大于或者等于2的整数;K为第一输入矩阵的第二维度,K为正整数)。第二输入矩阵(例如,张量数据B,即,tensor B)的维度例如为K*N0(其中,K为第二输入矩阵的第一维度,K为正整数,N0为第二输入矩阵的第二维度,N0为大于或者等于2的偶数)。第一矩阵乘和激活运算的融合算子(例如,简称为“MMA0+xGLU融合算子”)的整个计算结果的维度例如为M*N0/2。应当理解,片上共享存储器的大小存在限制,当M或者N0/2较大时,片上共享存储器一般无法放下第一矩阵乘和激活运算的融合算子的整个输出结果,因此,本发明可以采用flash的方式,按组块(chunk)的粒度进行数据传递,即,按组块的粒度将关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子。在一些实施例中,组块的尺寸(chunk size)例如等于m*n0*demsize(其中,m代表组块的第一维度,m为正整数;n0代表组块的第二维度,n0为正整数;demsize代表数据单元的尺寸标识,即,data element size,例如,demsize为1时,代表8-bit数据单元, demsize为2时,代表16-bit数据单元, demsize为4时,代表32-bit数据单元)。图5所示例的组块510的尺寸例如为m*n0,demsize例如为1。组块510例如被配置为包括6个关于第一矩阵乘和激活运算的融合算子的对应块计算结果,例如图5中的融合算子的对应块计算O0、O1、O2、O3、O4、和O5所示例。
用于第二矩阵乘运算的输入数据例如分别是关于第一矩阵乘和激活运算的融合算子的计算结果和第三输入矩阵(例如,张量数据C,即,tensor C)。关于第一矩阵乘和激活运算的融合算子的整个计算结果的维度例如为M*N0/2。第三输入矩阵例如是N0/2*N1维度(N0为大于或者等于2的偶数,N1为正整数)。
关于第二矩阵乘算子526的部分计算结果512,其例如是基于经由片上共享存储器以组块粒度传递的关于第一矩阵乘和激活运算的融合算子(例如,标记528所指示)的多个对应块计算结果(例如,图5所示的组块510所包括的6个对应块计算结果)、以及第三输入矩阵的对应块(该第三输入矩阵的对应块例如是经由针对所加载的第三输入矩阵进行分块而获得的)的计算结果。例如,第二矩阵乘算子的部分计算结果512例如是图5所示的m*N1维度的DO’。例如,片上共享存储器每次以组块粒度所传递的数据的维度为m*n0,则第三输入矩阵的对应块的维度为n0* N1(N0/2为n0的整数倍)。
应当理解,组块的尺寸被配置为满足预定约束条件。例如,在一些实施例中,预定约束条件例如包括:组块的尺寸小于片上共享存储器的尺寸;组块的第一维度小于或者等于第一矩阵乘算子的第一输入矩阵的第一维度(即,m<=M);组块的第二维度小于或者等于第一矩阵乘算子的第二输入矩阵的第二维度的一半(即,n0<=N0/2)。在另一些实施例中,关于预定约束条件,其例如包括以下各项:第一矩阵乘算子的第一输入矩阵的第一维度为所述组块的第一维度的整数倍或者倍数的向上取整(即,M是m的整数倍或者是倍数的向上取整);第一矩阵乘算子的第二输入矩阵的第二维度的一半为所述组块的第二维度的整数倍或者倍数的向上取整(即,N0/2是n0的整数倍或者是倍数的向上取整);以及所述组块的第一维度、第二维度与数据单元的尺寸标识的乘积小于片上共享存储器的尺寸(即,m*n0*demsize<Shared memory size)。
在步骤404处,计算装置100利用L1缓存或L2 缓存的近存计算单元累加所输出的多个关于第二矩阵乘算子的部分计算结果,以便生成第二矩阵乘算子的输出结果。例如,如图5右半部分所示,通过将第一部分计算结果D0和第二部分计算结果D1进行累加,生成第二矩阵乘算子的M*N1维度的输出结果。其中,第一部分计算结果D0的维度是m*N1,第二部分计算结果D1的维度也是m*N1,其中,m=M/2。第二矩阵乘算子的输出结果(例如,张量数据D,即,tensor D)的维度为M*N1。
应当理解,通过L1缓存或L2 缓存的近存计算单元累加关于第二矩阵乘算子的多个部分计算结果512可以进一步避免占用寄存器文件(register file)或者片上共享存储器(shared memory)的空间,而且可以在存储的过程中完成最终输出结果的计算。在一些实施例中,第二矩阵乘算子(即,MMA1)的输出结果可以直接写到显存(经由L1缓存或L2 缓存),这主要是因为Zigzag的分块(tiling)方式,需要在张量计算核(Tensor core)之外进行关于第二矩阵乘算子的多个部分计算结果的累加(例如是按照MMA的N0/2这个维度针对多个部分计算结果进行累加)。
例如,计算装置100利用L2 缓存的近存计算直接针对所生成的关于第二矩阵乘算子的多个部分计算结果进行累加,以便将累加结果存储到HBM上,以生成第二矩阵乘的输出结果。
应当理解,每个关于第二矩阵乘算子的部分计算结果DO’的维度为m*N1,多个关于第二矩阵乘算子的部分计算结果DO’累加后所生成的第二矩阵乘算子的整个输出结果DO的维度为M* N1。
关于第二矩阵乘算子的输出结果,其例如为输出张量Tensor D。在一些实施例中,其例如而不限于是整个MLP算子的计算结果。在一些实施例中,第二矩阵乘算子的输出结果例如而不限于是包括第一矩阵乘、激活运算、第二矩阵乘结构的算子的计算结果。
通过采用上述手段,本发明可以显著提高数据访存速度,同时减少片上网络带宽的压力,因而能够进一步提高计算性能。
应当理解,第一矩阵乘算子的输入数据(或者输入矩阵,例如Tensor A、Tensor B)一般需要从显存加载。由于从显存加载的路径较长,因此,可能出现数据加载速度赶不上数据计算速度的问题,例如,造成当前已加载数据已经计算完成,计算单元需要等待下一次加载数据的问题。为了避免上述问题,在一些实施例中,方法200还包括:针对第一矩阵乘算子的输入矩阵或第二矩阵乘算子的输入矩阵进行预加载。以下将结合图5和图6描述本发明的实施例的用于预加载输入矩阵的方法600。图6示出了根据本发明的实施例的用于预加载输入矩阵的方法600的流程图。应当理解,方法600例如可以在图1所描述的计算装置100处执行。方法600还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤602处,计算装置100确定第一矩阵乘算子的第一输入矩阵和第二输入矩阵中的需重复加载数据的次数相对较多的输入矩阵。
在步骤604处,计算装置100在第二矩阵乘算子进行计算时,针对所确定的需重复加载数据的次数相对较多的输入矩阵进行预加载。应当理解,预加载的可以是需重复加载数据的次数相对较多的整个输入矩阵,也可以是输入矩阵的一部分。
例如,确定第一矩阵乘算子的第一输入矩阵(例如,Tensor A)需重复加载数据的次数相对较多,则在进行MMA1计算时,针对第一矩阵乘算子的第一输入矩阵(例如,TensorA,或Tensor A中一部分)进行预加载,将其预加载至片上共享存储器中或者某一级的数据缓存(data cache)中(例如,L1缓存或L2 缓存中)。
在步骤606处,计算装置100在第一矩阵乘算子进行计算时,将第二矩阵乘算子的第三输入矩阵进行预加载。
例如,可以针对第二矩阵乘算子的第三输入矩阵(Tensor C,或Tensor C的一部分)进行预加载,将其加载至片上共享存储器(shared memory)中或者某一级的数据缓存(data cache)中(例如,L1缓存或L2 缓存中)。
应当理解,如果将第二矩阵乘算子的第三输入矩阵预加载至片上共享存储器中,在提前配置片上共享存储器的时候,需要将片上共享存储器的一部分用于以块组粒度传递数据,共享存储器的另一部分用于预加载输入矩阵。
应当理解,在进行矩阵乘算子的输入矩阵的预加载的时候并没有占用张量计算核,因此可以在预加载的数据的同时并行地进行矩阵乘的计算。因而,通过采用上述手段,本发明可以显著缓解矩阵乘计算过程中的带宽压力,有效避免数据加载速度赶不上数据计算速度的问题。另外,本发明可以进一步提高整个算子的计算效率,使得输入矩阵的加载与计算可以并行。
应当理解,一般而言, GPU设备中通常含有多个计算核(例如,SPC或GPC),为了提高张量计算的并行或者模型的并行性能,需要将一个算子分到多个计算核上去执行。而对于MLP算子中的第一矩阵乘和激活运算的(MMA0+xGLU)融合算子而言,需要针对批量(Batch)维度或者M维度进行多计算核切分。如果针对第一矩阵乘算子的第二输入矩阵的第二维度(例如,图5中N0维度)进行切分的话,则可能导致在MMA0+xGLU融合算子内部涉及到跨计算核访问数据的问题,这将意味着在MMA0+xGLU融合算子的计算过程中需要进行计算核之间的数据同步,这将会大大增加融合算子的实现难度、以及降低融合算子的计算性能。图8示出了根据本发明的实施例的用于针对第一矩阵乘算子的第二输入矩阵的切分方法与传统方法的对比示意图。图8中的左侧部分示例了传统的针对第一矩阵乘算子的第二输入矩阵的切分方法。如图8中的标记810所指示,第一矩阵乘算子的第二输入矩阵例如是MMA0的Tensor B,即,权重张量(weight tensor)。如图8所示,第二输入矩阵810包括第一半区802与第二半区804。传统的针对第二输入矩阵分块的方式例如是按照第二输入矩阵810的排列顺序将其划分至多个计算核上。例如,以8个计算核为例,根据传统方式,将第二输入矩阵810的第一半区802划分至第一计算核至第四计算核上(例如,图8所示的SPC0至SPC3上),以及将第二输入矩阵810的第二半区804划分至第五计算核至第八计算核上(例如,图8所示的SPC4至SPC7上)。在上述传统的切分方式下,当激活运算算子进行计算时,需要跨计算核访问数据,例如,激活运算算子生成融合算子的对应块计算结果(例如,标记822所指示)时,需要跨第一计算核SPC0和第五计算核SPC4访问数据。由此可见,传统的针对第二输入矩阵的第二维度进行切分的方式会导致在MMA0+xGLU融合算子内部涉及跨计算核的数据访问。
如果在批量(Batch)维度或者M维度都比较小的情况下,不针对第一矩阵乘算子的第二输入矩阵的第二维度(例如,图5中N0维度)进行切分的话,将无法用满计算核的核资源。为了避免在MMA0+xGLU融合算子的计算涉及跨计算核的数据访问,方法200还包括针对第一矩阵乘算子的第二输入矩阵的切分方法700。
以下将结合图7和图8描述本发明的实施例的用于针对第一矩阵乘算子的第二输入矩阵的切分方法700。图7示出了根据本发明的实施例的用于针对第一矩阵乘算子的第二输入矩阵的切分方法700的流程图。图8中的右侧部分示例了根据本发明的实施例的针对第一矩阵乘算子的第二输入矩阵的切分方法的效果。应当理解,方法700例如可以在图1所描述的计算装置100处执行。方法700还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤702处,计算装置100将第一矩阵乘算子的第二输入矩阵进行离线重排操作,以便经由离线重排操作的第二输入矩阵被配置为目标排列方式,在目标排列方式下,离线重排操作之前的第二输入矩阵的第一半区的分块与第二半区的分块间隔设置。
关于离线重排操作的方式,其例如包括:在主机(host)端到设备(device)端搬运第二输入矩阵(例如,权重张量)的过程中,将第二输入矩阵重整为目标排列方式;然后将目标排列格式的第二输入矩阵存到device端。如图8的右侧部分所示,标记830指示经由离线重排操作后的、被配置为目标排列方式的第二输入矩阵。其中,第一半区(例如,离线重排操作之前的第二输入矩阵的左半区)的分块(例如,标记832所指示)与第二半区(例如,离线重排操作之前的第二输入矩阵的右半区)的分块(例如,标记834所指示)间隔设置。应当理解,通过将第一矩阵乘算子的第二输入矩阵进行离线重排操作,本发明避免了重整操作所带来的对计算资源的额外开销。
在步骤704处,计算装置100针对被配置为目标排列方式的第二输入矩阵的第二维度进行多计算核的拆分,以用于第一矩阵乘算子的计算。
例如,计算装置100针对经由离线重排操作为目标排列方式的MMA0算子的权重张量(weight tensor)在N维度进行多SPC切分,以便针对每个SPC生成目标形状用于第一矩阵乘算子的计算。如图8所示,鉴于目标排列方式的第二输入矩阵中第一半区的分块与第二半区的分块是间隔设置的,因此,针对目标排列方式的第二输入矩阵的第二维度进行多计算核的拆分时,可以使得每个计算核上的目标形状包括第一半区的分块与第二半区的分块,因此,当激活运算算子进行计算时,不需要跨计算核访问数据,例如,当激活运算算子生成标记842所指示的融合算子的对应块计算结果时,仅需要访问第一计算核SPC0的数据。由此,本发明可以即便面临M维度较小的情形,也可以通过针对第二输入矩阵的权重张量的N维度进行多SPC切分,来保证多SPC的利用率。
通过采用上述手段,本发明不仅可以避免在MMA0+xGLU融合算子的计算过程中进行跨计算核的数据访问,而且可以在不引入针对计算资源的额外开销的前提下,对于各种形状(shape)的场景都能最大化地利用GPU卡上的所有计算核资源。
以下将结合图5和图9描述本发明的实施例的用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算的方法900。图9示出了根据本发明的实施例的用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算的方法900的流程图。应当理解,方法900例如可以在图1所描述的计算装置100处执行。方法900还可以包括未示出的附加动作和/或可以省略所示出的动作,本发明的范围在此方面不受限制。
在步骤902处,计算装置100确定多个缓冲区中的当前缓冲区中的多个连续的寄存器在当前组不连续的两个块计算结果输出之后已被放满,将下一组不连续的两个块计算结果输出至下一缓冲区中的连续的寄存器中。
例如,在一些实施例中,图5中寄存器文件被划分成两个缓冲区,分别是用于乒(ping)操作的第一缓冲区502和用于乓(pong)操作的第二缓冲区504。例如,如图5中箭头1所示例的操作,如果计算装置100确定第一缓冲区502中的多个连续的寄存器在当前组不连续的两个块计算结果(例如,两个块计算结果L1和R1)输出之后已被放满,则如图5中箭头2所示例的操作,将下一组不连续的两个块计算结果(例如,两个块计算结果L2和R2)连续输出至第二缓冲区504中的连续的寄存器中。以此类推,如果计算装置100确定第二缓冲区504中的多个连续的寄存器在不连续的两个块计算结果L3和R3输出之后也已被放满,则如图5中箭头3所示例的操作,将下一组不连续的两个块计算结果L4和R4连续输出至所复用的第一缓冲区502中的连续的寄存器中。由此,可以以流水线操作(例如而不限于乒乓操作,即,ping- pong操作)的方式复用第一缓冲区502和第二缓冲区504来实现第一矩阵乘算子的块计算结果的输出。应当理解,寄存器文件也可以被划分成更多个缓冲区(例如,3个或更多),以便循环复用这些更多个缓冲区来实现第一矩阵乘算子的块计算结果的输出。
在步骤904处,计算装置100在不连续的两个块计算结果被输出至下一缓冲区中的连续的寄存器的同时,激活运算算子从当前缓冲区中的寄存器中获取连续的两个块计算结果以进行激活运算。
例如,在不连续的两个块计算结果L2和R2被输出至第二缓冲区504中的连续的寄存器的同时,激活运算算子524从第一缓冲区502中的寄存器中获取连续的两个块计算结果以进行计算。由此可以实现,在第一矩阵乘算子522的块计算结果被输出至第二缓冲区504的同时,获取第一缓冲区502中的连续的寄存器中的成对的块计算结果进行激活运算算子524的计算,进而以流水线操作的方式实现第一矩阵乘算子522的块计算结果的输出与激活运算算子524的计算的进程(pipeline)并行执行。
通过采用上述手段,本发明可以实现第一矩阵乘和激活运算的深度融合,并且通过利用多个缓冲区的流水线操作进行数据同步,可以有效提高进程(pipeline)并行执行的性能。
上文所描述的各个过程和处理,例如方法200、400、600、700、900,可在计算装置处执行。该计算装置例如包括:至少一个处理器(至少一个图形处理器和至少一个中央处理器);以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行。在一些实施例中,方法200、400、600、700、900可被实现为计算机软件程序或程序产品,其被有形地包含于机器可读介质。在一些实施例中,计算机程序的部分或者全部可以经由只读存储器(Read-Only Memory,ROM)和/或通信单元而被载入和/或安装到计算装置上。当计算机程序被加载到随机存取存储器(Random-accessmemory, RAM)并由GPU和CPU执行时,可以执行上文描述的方法200、400、600、700、900的一个或多个动作。
本发明可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的中央处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的中央处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。
Claims (12)
1.一种用于执行计算的方法,其特征在于,所述方法包括:
计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果,所述位置不连续的两个块计算结果分别位于第一矩阵乘算子的计算结果的不同半区的对应位置;
将所述位置不连续的两个块计算结果输出至连续的寄存器中,以便形成连续的两个块计算结果;以及
激活运算算子按照块的粒度,从寄存器中获取所述连续的两个块计算结果进行计算、以便生成关于第一矩阵乘和激活运算的融合算子的对应块计算结果。
2.根据权利要求1所述的方法,其特征在于,还包括:
将寄存器文件划分成多个缓冲区,所述多个缓冲区用于第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算,多个缓冲区中的每个缓冲区被配置有多个连续的寄存器。
3.根据权利要求2所述的方法,其特征在于,第一矩阵乘算子和激活运算算子以流水线操作的方式执行并行计算包括:
确定多个缓冲区中的当前缓冲区中的多个连续的寄存器在当前组不连续的两个块计算结果输出之后已被放满,将下一组不连续的两个块计算结果输出至下一缓冲区中的连续的寄存器中;以及
在不连续的两个块计算结果被输出至下一缓冲区中的连续的寄存器的同时,激活运算算子从当前缓冲区中的寄存器中获取连续的两个块计算结果以进行激活运算。
4.根据权利要求1所述的方法,其特征在于,还包括:
经由片上共享存储器,将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以用于第二矩阵乘运算。
5.根据权利要求4所述的方法,其特征在于,将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子包括:
经由片上共享存储器,按组块粒度将所生成的关于第一矩阵乘和激活运算的融合算子的多个对应块计算结果传递给第二矩阵乘算子,以便输出关于第二矩阵乘算子的部分计算结果,所述组块的尺寸被配置为满足预定约束条件;以及
利用L1缓存或L2 缓存的近存计算单元累加所输出的多个关于第二矩阵乘算子的部分计算结果,以便生成第二矩阵乘算子的输出结果。
6.根据权利要求5所述的方法,其特征在于,预定约束条件包括以下各项:
第一矩阵乘算子的第一输入矩阵的第一维度为所述组块的第一维度的整数倍或者倍数的向上取整;
第一矩阵乘算子的第二输入矩阵的第二维度的一半为所述组块的第二维度的整数倍或者倍数的向上取整;以及
所述组块的第一维度、第二维度与数据单元的尺寸标识的乘积小于片上共享存储器的尺寸。
7.根据权利要求1所述的方法,其特征在于,计算第一矩阵乘算子的计算结果中的位置不连续的两个块计算结果包括:
将第一矩阵乘算子的第一输入矩阵的选定行和第二输入矩阵的选定列相乘,以获得所述位置不连续的两个块计算结果中的第一块计算结果;以及
将第一输入矩阵的所述选定行和第二输入矩阵的预定跨度列相乘,以获得所述位置不连续的两个块计算结果中的第二块计算结果,预定跨度列与选定列之间的跨度等于第二输入矩阵的第二维度的一半。
8.根据权利要求1所述的方法,其特征在于,还包括:
确定第一矩阵乘算子的第一输入矩阵和第二输入矩阵中的需重复加载数据的次数相对较多的输入矩阵;
在第二矩阵乘算子进行计算时,针对所确定的需重复加载数据的次数相对较多的输入矩阵进行预加载;以及
在第一矩阵乘算子进行计算时,将第二矩阵乘算子的第三输入矩阵进行预加载。
9.根据权利要求1所述的方法,其特征在于,还包括:
将第一矩阵乘算子的第二输入矩阵进行离线重排操作,以便经由离线重排操作的第二输入矩阵被配置为目标排列方式,在目标排列方式下,离线重排操作之前的第二输入矩阵的第一半区的分块与第二半区的分块间隔设置;以及
针对被配置为目标排列方式的第二输入矩阵的第二维度进行多计算核的拆分,以用于第一矩阵乘算子的计算。
10.一种计算装置,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-9中任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被机器执行时执行根据权利要求1-9中任一项所述的方法。
12.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被机器执行时执行根据权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410223942.XA CN117808063B (zh) | 2024-02-28 | 2024-02-28 | 用于执行计算的方法、计算装置、介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410223942.XA CN117808063B (zh) | 2024-02-28 | 2024-02-28 | 用于执行计算的方法、计算装置、介质和程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117808063A true CN117808063A (zh) | 2024-04-02 |
CN117808063B CN117808063B (zh) | 2024-05-28 |
Family
ID=90428184
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410223942.XA Active CN117808063B (zh) | 2024-02-28 | 2024-02-28 | 用于执行计算的方法、计算装置、介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117808063B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118093021A (zh) * | 2024-04-26 | 2024-05-28 | 北京壁仞科技开发有限公司 | 执行转置计算的方法、计算核、装置、介质和程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783966A (zh) * | 2019-04-04 | 2020-10-16 | 北京芯启科技有限公司 | 一种深度卷积神经网络硬件并行加速器的硬件装置及方法 |
WO2021250392A1 (en) * | 2020-06-10 | 2021-12-16 | Arm Limited | Mixed-element-size instruction |
CN115828992A (zh) * | 2022-11-11 | 2023-03-21 | 阿里巴巴(深圳)技术有限公司 | 处理神经网络模型的方法 |
-
2024
- 2024-02-28 CN CN202410223942.XA patent/CN117808063B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783966A (zh) * | 2019-04-04 | 2020-10-16 | 北京芯启科技有限公司 | 一种深度卷积神经网络硬件并行加速器的硬件装置及方法 |
WO2021250392A1 (en) * | 2020-06-10 | 2021-12-16 | Arm Limited | Mixed-element-size instruction |
CN115828992A (zh) * | 2022-11-11 | 2023-03-21 | 阿里巴巴(深圳)技术有限公司 | 处理神经网络模型的方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118093021A (zh) * | 2024-04-26 | 2024-05-28 | 北京壁仞科技开发有限公司 | 执行转置计算的方法、计算核、装置、介质和程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN117808063B (zh) | 2024-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111667051B (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
CA3070972C (en) | Accelerated mathematical engine | |
CN117808063B (zh) | 用于执行计算的方法、计算装置、介质和程序产品 | |
Parashar et al. | SCNN: An accelerator for compressed-sparse convolutional neural networks | |
CN108765247B (zh) | 图像处理方法、装置、存储介质及设备 | |
CN110210610B (zh) | 卷积计算加速器、卷积计算方法及卷积计算设备 | |
US11989638B2 (en) | Convolutional neural network accelerating device and method with input data conversion | |
CN116541647A (zh) | 运算加速器、处理方法及相关设备 | |
US8766992B2 (en) | Methods and apparatus for image processing at pixel rate | |
CN112199636B (zh) | 适用于微处理器的快速卷积方法及装置 | |
CN112784973A (zh) | 卷积运算电路、装置以及方法 | |
US10353709B2 (en) | Digital signal processing array using integrated processing elements | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
WO2022110386A1 (zh) | 数据处理方法及人工智能处理器 | |
CN112836813B (zh) | 一种用于混合精度神经网络计算的可重构脉动阵列系统 | |
CN112734020B (zh) | 卷积神经网络的卷积乘累加硬件加速装置、系统以及方法 | |
CN113918120A (zh) | 计算装置、神经网络处理设备、芯片及处理数据的方法 | |
CN114995782A (zh) | 数据处理方法、装置、设备和可读存储介质 | |
CN111008691B (zh) | 一种权值和激活值都二值化的卷积神经网络加速器架构 | |
CN111210004B (zh) | 卷积计算方法、卷积计算装置及终端设备 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
CN114003201A (zh) | 矩阵变换方法、装置及卷积神经网络加速器 | |
CN109447239B (zh) | 一种基于arm的嵌入式卷积神经网络加速方法 | |
CN114219699A (zh) | 匹配代价处理方法及电路和代价聚合处理方法 | |
CN112149047A (zh) | 数据的处理方法及装置、存储介质和电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |