CN112434256B - 矩阵乘法器和处理器 - Google Patents
矩阵乘法器和处理器 Download PDFInfo
- Publication number
- CN112434256B CN112434256B CN202011406153.8A CN202011406153A CN112434256B CN 112434256 B CN112434256 B CN 112434256B CN 202011406153 A CN202011406153 A CN 202011406153A CN 112434256 B CN112434256 B CN 112434256B
- Authority
- CN
- China
- Prior art keywords
- vector register
- vector
- matrix
- multiply
- units
- 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.)
- Active
Links
Images
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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
一种矩阵乘法器和处理器。该矩阵乘法器用于第一矩阵和第二矩阵的乘法运算,且包括:第一至第三向量寄存器组、乘累加运算单元组以及耦接到第一至第三向量寄存组和乘累加运算单元组的控制器。第一和第二向量寄存器组分别用于存储第一和第二矩阵;乘累加运算单元组包括的多个乘累加运算单元的每个包括第一至第三端;多个乘累加运算单元的第一端被配置为在操作中分别耦接到第一向量寄存器组中被选择的第一向量寄存器的多个第一向量寄存单元;多个乘累加运算单元的第二端彼此相连;多个乘累加运算单元的第三端被配置为在操作中分别耦接到第三向量寄存器组的被选择的第三向量寄存器的多个第三向量寄存单元。
Description
技术领域
本公开的实施例涉及一种矩阵乘法器和处理器。
背景技术
矩阵乘法在高性能计算和基于神经网络的人工智能模型训练和推理中起着关键作用。矩阵乘法器通过将两个矩阵,例如,矩阵AM×K以及矩阵BK×N相乘生成一个乘积矩阵CM×N,此处,CM×N=AM×K×BK×N,M、K和N为正整数。乘积矩阵CM×N的元素Cij等于矩阵AM×K对应的行向量与矩阵BK×N的对应的列向量之间的点乘。
发明内容
本公开的至少一个实施例提供了一种矩阵乘法器,其用于第一矩阵和第二矩阵的乘法运算,且包括:第一向量寄存器组、第二向量寄存器组、第三向量寄存组、乘累加运算单元组和控制器。所述第一向量寄存器组被配置为存储所述第一矩阵且包括多个第一向量寄存器,所述多个第一向量寄存器的每个包括多个第一向量寄存单元;所述第二向量寄存器组被配置为存储所述第二矩阵且包括多个第二向量寄存器,所述多个第二向量寄存器的每个包括多个第二向量寄存单元;所述第三向量寄存器组包括多个第三向量寄存器,所述多个第三向量寄存器的每个包括多个第三向量寄存单元;所述乘累加运算单元组包括多个乘累加运算单元;所述多个乘累加运算单元的每个包括第一端、第二端和第三端,且被配置为将从所述第一端接收的第一输入数据和从所述第二端接收的第二输入数据相乘得到的乘积与从所述第三端接收的第三输入数据的累加和从所述第三端输出;所述乘累加运算单元组耦接到所述第一向量寄存器组,且所述多个乘累加运算单元的第一端被配置为在操作中分别耦接到所述第一向量寄存器组中被选择的第一向量寄存器的多个第一向量寄存单元,分别接收所述被选择的第一向量寄存器的多个第一向量寄存单元提供的多个所述第一输入数据;所述多个乘累加运算单元的第二端彼此相连,以得到公共端以接收相同的第二输入数据;所述乘累加运算单元组耦接到所述第三向量寄存器组,且所述多个乘累加运算单元的第三端被配置为在操作中分别耦接到所述第三向量寄存器组的被选择的第三向量寄存器的多个第三向量寄存单元,分别接收所述被选择的第三向量寄存器的多个第三向量寄存单元提供的多个所述第三输入数据,以及分别输出多个所述累加和至所述被选择的第三向量寄存器的多个第三向量寄存单元;所述控制器耦接到所述第一向量寄存器组、所述第二向量寄存器组、所述第三向量寄存组和所述乘累加运算单元组,且被配置为在操作中:选择所述第一向量寄存器组的多个第一向量寄存器之一与所述乘累加运算单元组耦接,选择所述第二向量寄存器组的多个第二向量寄存器之一,并使得被选择的第二向量寄存器包括的多个第二向量寄存器单元之一与所述乘累加运算单元组的公共端耦接,以及选择所述第三向量寄存器组的多个第三向量寄存器之一与所述乘累加运算单元组耦接。
本公开的至少一个实施例还提供了一种处理器,其包括本公开的至少一个实施例提供的任一矩阵乘法器。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1是本公开的至少一个实施例提供的矩阵乘法器的示例性框图;
图2是本公开的至少一个实施例提供的矩阵乘法器的第一个示例的示意图;
图3A是图2所示的第一至第三向量寄存器组的示意图;
图3B示出了本公开的至少一个实施例提供的控制包的示例;
图4是图2所示的矩阵乘法器进行矩阵运算的流程图;
图5是本公开的至少一个实施例提供的矩阵乘法器的第二个示例的示意图;
图6是图5所示的第一至第三向量寄存器组的示意图;
图7是图5所示的矩阵乘法器进行矩阵运算的流程图;以及
图8是本公开的至少一个实施例提供的处理器的示例性框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本公开的至少一个实施例可以涉及的术语的说明如下。
向量寄存器:用于储存具有一定数量的元素的向量的寄存器,例如,512位向量寄存器可以表示(存储)8个双精度浮点数、16个单精度浮点数或者64个8位整数等。
流水线:用于把一个操作分成多个阶段(例如,被提取、解码、执行、结果写入),此种情况下,可以在每个周期的不同流水阶段同时执行多个操作,并因此可以提高处理器的性能。
乘累加运算:用于3个源操作数之间的乘法和累加,例如,将两个源操作数的乘积累加至第三个源操作数上。可以使用乘累加运算算术逻辑单元(MAD-ALU)在硬件上实现上述操作。
本公开的发明人在研究中注意到一类矩阵乘法器的运算速度较慢,占用的向量寄存器的空间较大且功耗较大;另一类矩阵乘法器通过采用额外的计算单元以及降低计算精度来提升矩阵乘法器的运算速度;再一类矩阵乘法器通过设置本地数据共享单元来降低矩阵运算占用的向量寄存器的空间。下面结合三个示例对上述三类矩阵乘法器进行示例性说明。
在第一个示例中,矩阵AM×K和矩阵BK×N均被加载到向量寄存器中,矩阵乘法器通过计算矩阵AM×K对应的行向量和矩阵BK×N的列向量之间的点乘来获得乘积矩阵CM×N的每个元素Cij。
在第一个示例中,本公开的发明人在研究中注意到,需要在将矩阵AM×K和矩阵BK×N全部加载至向量寄存器后,矩阵乘法器才能计算矩阵AM×K包括的对应的行向量和矩阵BK×N包括的对应的列向量之间的点乘,这使得第一个示例中的矩阵乘法器在矩阵乘法运算中占用的向量寄存器的空间较大。
在第一个示例中,矩阵运算涉及M×N个向量-向量乘加指令,上述M×N个向量-向量乘加指令被存储在已分发的指令队列中,向量-向量乘加指令被执行后被删除。然而,本公开的发明人在研究中注意到,对于支持乱序执行的中央处理单元(CPU),被删除的乘加指令可能在指令队列中任意位置,并因此导致指令队列中具有不连续的多个空槽。为了在保持分发到指令队列中的指令的顺序情况下使得多个空槽连续,调度器需要频繁地对指令队列做坍塌-移位(collapse-shift)操作,该操作将导致大量功耗。
在第一个示例中,矩阵运算占用了更多资源(例如,占用了指令队列和重排序缓冲器中的更多存储空间),这可能导致调度上的气泡(bubble),并导致向量-向量乘加流水线不能满负荷的运行向量-向量乘加指令,由此导致矩阵乘法器的整体运算速度较慢。
在第二个示例中,矩阵乘法器通过额外设置一组平铺(tile)寄存器(例如,8KB)以及脉动阵列(systotic array)来实现矩阵乘法运算。例如,脉动阵列包括1024个8位整数或512个半精度浮点融合乘加(FMA)算术逻辑单元(ALU)。第二个示例中的矩阵乘法器的矩阵乘法运算的具体过程如下。矩阵AM×K和矩阵BK×N被预加载到平铺(tile)寄存器中,并流经脉动阵列,脉动阵列输出乘积矩阵CM×N。然而,本公开的发明人在研究中注意到,第二个示例中的矩阵乘法器例如只支持8位整型运算并例如仅适用于接受低计算精度的矩阵运算的应用领域(例如,人工智能),因此,第二个示例中的矩阵乘法器不仅不适用于要求双倍精度的高性能计算的应用场景,而且不适用于应用到面积预算有限的设计。
在第三个示例中,矩阵乘法器通过设置本地数据共享单元(LDS)降低矩阵运算占用的向量寄存器的空间,并通过流处理器直接在向量寄存器(用于存储矩阵AM×K)和LDS(用于存储矩阵BK×N)之间执行乘累加运算来降低向量寄存器、LDS和流处理器之间的数据传输开销。然而,本公开的发明人在研究中注意到,第三个示例中的矩阵乘法器通常要求LDS作为一个面向应用程序的组件,这使得第三个示例中的矩阵乘法器不适用于X86架构和ARM架构等通用的CPU架构。
本公开的至少一个实施例提供的矩阵乘法器和处理器。本公开的至少一个实施例提供了一种矩阵乘法器具有在不增加额外的ALU单元的情况下提升矩阵乘法器的性能的潜力。例如,提升矩阵乘法器的性能是指降低功耗,提升运算速度、提升吞吐效率的至少一个。
例如,本公开的至少一个实施例提供的矩阵乘法器适用于支持通用向量计算的CPU架构。例如,X86处理器中的高级矢量扩展(AVX)指令集,ARM处理器的可伸缩矢量扩展(Scalable Vector Extensions,SVE)指令集。
例如,本公开的至少一个实施例提供的矩阵乘法器可以复用底层CPU架构的乘累加(multiplication and accumulation)算术逻辑单元(MAD-ALU)实现矩阵运算,由此无需添加额外的ALU单元。
例如,本公开的至少一个实施例提供的矩阵乘法器可以在支持双精度的向量计算指令集的硬件资源的基础上,实现矩阵乘法运算,由此可以尽量复用已有的硬件资源。
下面通过几个示例和实施例对根据本公开的至少一个实施例提供的矩阵乘法器进行非限制性的说明,如下面所描述的,在不相互抵触的情况下这些具体示例和实施例中不同特征可以相互组合,从而得到新的示例和实施例,这些新的示例和实施例也都属于本公开保护的范围。
图1是本公开的至少一个实施例提供的矩阵乘法器100的示例性框图。
例如,该矩阵乘法器100用于第一矩阵AM×K和第二矩阵BK×N的乘法运算,以获得第一矩阵和第二矩阵的乘积矩阵,也即,第三矩阵CM×N,M、K和N为正整数。例如,第一矩阵AM×K、第二矩阵BK×N、第三矩阵(也即,乘积矩阵)CM×N以及第三矩阵的元素Cij(也即,位于第三矩阵的第i+1行第j+1列的元素)满足以下的表达式,此处,j为小于等于M-1的非负整数,i为小于等于N-1的非负整数。
需要说明的是,为方便描述,以下的示例中,以M、K和N均为4为对本公开的至少一个实施例提供的矩阵乘法器100进行说明,但本公开的至少一个实施例提供的矩阵乘法器100不限于用于两个4×4的矩阵之间的乘法运算,本公开的至少一个实施例提供的矩阵乘法器100还可以用于其它具有适用尺寸的矩阵之间的乘法运算。
图2是本公开的至少一个实施例提供的矩阵乘法器100的第一个示例的示意图。如图1和图2所示,该矩阵乘法器100包括第一向量寄存器组110、第二向量寄存器组120、第三向量寄存器组130、乘累加运算单元组140和控制器150。
例如,第一向量寄存器组110被配置为存储第一矩阵,第二向量寄存器组120被配置为存储第二矩阵。例如,第三向量寄存器组130被配置为存储矩阵乘法器100的中间运算结果以及第三矩阵。例如,在矩阵乘法运算完成之后,第三向量寄存器组130被配置为存储第三矩阵,在矩阵乘法运算的过程中,第三向量寄存器组130被配置为存储矩阵乘法器100的中间运算结果。
图3A是图2所示的第一至第三向量寄存器组110-130的示意图。
如图2和图3A所示,第一向量寄存器组110包括多个第一向量寄存器111;第二向量寄存器组120多个第二向量寄存器121;第三向量寄存器组130包括多个第三向量寄存器131。
例如,如图2和图3A所示,第一向量寄存器组110包括的多个第一向量寄存器111分别为第一向量寄存器a0、a1、a2和a3;第二向量寄存器组120包括的多个第二向量寄存器121分别为第二向量寄存器b0、b1、b2和b3;第三向量寄存器组130包括的多个第三向量寄存器131分别为第三向量寄存器c0、c1、c2和c3。
例如,多个第一向量寄存器111分别用于存储第一矩阵包括的多个列向量,因此,第一向量寄存器组110包括的多个第一向量寄存器111的数目等于第一矩阵包括的多个列向量的数目K。例如,多个第二向量寄存器121分别用于存储第二矩阵包括的多个行向量,第二向量寄存器组120包括的多个第二向量寄存器121的数目等于第二矩阵包括的多个行向量的数目K。例如,在完成矩阵运算之后,多个第三向量寄存器131分别用于存储第三矩阵包括的多个列向量,因此,第三向量寄存器组130包括的多个第三向量寄存器131的数目等于第三矩阵包括的多个列向量的数目N。
例如,如图2和图3A所示,多个第一向量寄存器111的每个包括多个第一向量寄存单元112,第一向量寄存器组110包括的多个第一向量寄存单元112的每个用于存储第一矩阵中对应的一个元素;多个第二向量寄存器121的每个包括多个第二向量寄存单元122,第二向量寄存器组120包括的多个第二向量寄存单元122的每个用于存储第二矩阵中对应的一个元素;多个第三向量寄存器131的每个包括多个第三向量寄存单元132,第三向量寄存器组130包括的多个第三向量寄存单元132的每个在可用于存储第三矩阵中对应的一个元素(在矩阵运算完成之后)。例如,多个第一向量寄存单元112、多个第二向量寄存单元122和多个第三向量寄存单元132的每个具有地址,可以利用寄存单元的地址从寄存单元中读取寄存单元中存储的数据或向寄存单元中写入(或加载)数据。
例如,多个第一向量寄存器111的每个包括多个第一向量寄存单元112的数目等于第一矩阵包括的多个行向量的数目M;多个第二向量寄存器121的每个包括多个第二向量寄存单元122的数目等于第二矩阵包括的多个列向量的数目N;多个第三向量寄存器131的每个包括多个第三向量寄存单元132的数目等于第三矩阵包括的多个行向量的数目M。
例如,在M、K和N均为4的情况下,第一向量寄存器组110包括的多个第一向量寄存器111的数目,第二向量寄存器组120包括的多个第二向量寄存器121的数目,第三向量寄存器组130包括的多个第三向量寄存器131的数目,多个第一向量寄存器111的每个包括多个第一向量寄存单元112的数目,多个第二向量寄存器121的每个包括多个第二向量寄存单元122的数目,以及多个第三向量寄存器131的每个包括多个第三向量寄存单元132的数目均为4。
例如,多个第一向量寄存器111的数目等于多个第二向量寄存器121的数目。例如,多个第一向量寄存器111的每个包括多个第一向量寄存单元112的数目等于多个第三向量寄存器131的每个包括多个第三向量寄存单元132的数目。例如,多个第三向量寄存器131的数目等于多个第二向量寄存器121的每个包括的第二向量寄存的数目。
例如,通过使得向量寄存器组包括的向量寄存器的数目与向量寄存器组存储的尺寸匹配,可以降低矩阵运算占用的向量寄存器的空间,然而,本领域技术人员可以理解,也可以使得向量寄存器组包括的向量寄存器的数目与向量寄存器组存储的尺寸不完全匹配,此种情况下,本公开的至少一个实施例提供的矩阵乘法器100具有在不增加额外的ALU单元的情况下提升矩阵乘法器的性能(例如,降低功耗)的潜力。
例如,如图3A所示,第一向量寄存器组110中的元素aj i表示第一向量寄存器aj(也即,第j+1个第一向量寄存器111)中的第i+1个元素,并等于第一矩阵的元素Aij;第二向量寄存器组120中的元素bi j表示第二向量寄存器bi(也即,第i+1个第一向量寄存器111)中的第j+1个元素,并等于第二矩阵的元素Bij;第三向量寄存器组130中的元素cj i表示第三向量寄存器cj(也即,第j+1个第一向量寄存器111)中的第i+1个元素,并等于第三矩阵的元素Cij。
例如,如图2所示,乘累加运算单元组140包括多个乘累加(multiplication andaccumulation)运算单元MAD。
例如,乘累加运算单元组140包括的多个乘累加运算单元MAD的数目等于多个第一向量寄存器111的每个包括多个第一向量寄存单元112的数目以及多个第三向量寄存器131的每个包括多个第三向量寄存单元132的数目。
例如,如图2所示,多个乘累加运算单元MAD的每个包括第一端、第二端和第三端,且被配置为将从第一端接收的第一输入数据和从第二端接收的第二输入数据相乘得到的乘积与从第三端接收的第三输入数据的累加和从第三端输出。
如图2所示,乘累加运算单元组140耦接到第一向量寄存器组110,且多个乘累加运算单元MAD的第一端被配置为在操作中分别耦接到第一向量寄存器组110中被选择的第一向量寄存器111的多个第一向量寄存单元112,分别接收被选择的第一向量寄存器111的多个第一向量寄存单元112提供的多个第一输入数据。
如图2所示,多个乘累加运算单元MAD的第二端彼此相连,以得到公共端以接收相同的第二输入数据。公共端被配置为接收被选择的第二向量寄存器包括的被选择的第二向量寄存单元中存储的数据作为第二输入数据。
如图2所示,乘累加运算单元组140耦接到第三向量寄存器组130,且多个乘累加运算单元MAD的第三端被配置为在操作中分别耦接到第三向量寄存器组130的被选择的第三向量寄存器131的多个第三向量寄存单元132,分别接收被选择的第三向量寄存器131的多个第三向量寄存单元132提供的多个第三输入数据,分别输出多个累加和至被选择的第三向量寄存器131的多个第三向量寄存单元132。
例如,在操作中,第一向量寄存器a0、第一向量寄存器a1、第一向量寄存器a2和第一向量寄存器a3顺次被选择;第二向量寄存器b0、第二向量寄存器b1、第二向量寄存器b2和第二向量寄存器b3顺次被选择;第三向量寄存器c0、第三向量寄存器c1、第三向量寄存器c2和第三向量寄存器c3顺次被选择。
例如,如图2所示,在操作中,在第x个第一向量寄存器ax-1被选择时(例如,被选择的同时),第x个第二向量寄存器bx-1被选择;在第y个第三向量寄存器被选择时(例如,被选择的同时),被选择的第二向量寄存器包括的第y个第二向量寄存单元(例如,第二向量寄存器bx-1的第y个第二向量寄存单元)被选择;此种情况下,多个乘累加运算单元MAD包括的第一端分别接收第x个第一向量寄存器ax-1中存储的元素(ax-1 0 ax-1 1 ax-1 2 ax-1 3);多个乘累加运算单元MAD包括的第二端均接收第二向量寄存器bx-1的第y个第二向量寄存单元存储的元素bx-1 y-1;多个乘累加运算单元MAD包括的第三端分别接收第y个第三向量寄存器中存储的元素(cy-1 0 cy-1 1 cy-1 2 cy-1 3);多个乘累加运算单元MAD输出的多个累加和为下方向量中的多个元素。
(ax-1 0×bx-1 y-1+cy-1 0 ax-1 1×bx-1 y-1+cy-1 1 ax-1 2×bx-1 y-1+cy-1 2 ax-1 3×bx-1 y-1+cy-1 3)
然后,多个乘累加运算单元MAD输出的多个累加被写入第y个第三向量寄存器中。例如,在x=1的情况下,多个乘累加运算单元MAD的第三端接收的数据均为零。
例如,在操作中,可以使得x和y分别为外循环和内循环的控制参数,并使得x从1增加至4(步长为1),可以使得y从1增加至4(步长为1),由此在完成上述内外循环的迭代之后可以获得第一矩阵和第二矩阵的乘积矩阵,也即,第三矩阵。
如图2所示,控制器150耦接到第一向量寄存器组110、第二向量寄存器组120、第三向量寄存器组130和乘累加运算单元组140,且被配置为在操作中:选择第一向量寄存器组110的多个第一向量寄存器111之一与乘累加运算单元组140耦接,选择第二向量寄存器组120的多个第二向量寄存器121之一的多个第二向量寄存器单元122之一与乘累加运算单元组140的公共端耦接,以及选择第三向量寄存器组130的多个第三向量寄存器131之一与乘累加运算单元组140耦接。
例如,本公开的至少一个实施例提供的矩阵乘法器100将矩阵乘法分解为多个乘累加运算,并复用多个乘累加运算单元MAD实现上述多个乘累加运算,由此本公开的至少一个实施例提供的矩阵乘法器100无需添加额外的算术逻辑(ALU)单元即可实现矩阵乘法,也即,可以降低面积需求。
例如,本公开的至少一个实施例提供的矩阵乘法器100通过使用控制器150控制多个乘累加运算单元MAD依序实现多个乘累加运算,此种情况下,在控制器150接收单个矩阵乘法指令之后,矩阵乘法器100便可基于矩阵乘法指令通过计算获取一个乘积矩阵,由此使得矩阵乘法器100可以降低矩阵运算占用的资源(例如,降低因矩阵运算分发的指令占用的指令队列的存储空间),降低因坍塌-移位操作导致的功耗,以及使得矩阵乘法器100具有降低出现调度上的气泡的可能性以及因调度上的气泡导致矩阵乘法器100的整体运算速度降低的可能性,也即,本公开的至少一个实施例提供的矩阵乘法器100具有在不增加额外的ALU单元的情况下提升矩阵乘法器100的性能的潜力。
例如,如图2所示,控制器150包括第一选择器152、第二选择器153、多路复用器154以及流水线控制单元151。
例如,流水线控制单元151被配置为接收矩阵乘法指令。例如,矩阵乘法指令包括对应于用于第一矩阵A的基地址寄存器的部分和用于第二矩阵B的基地址寄存器的部分。例如,矩阵乘法指令还包括对应于用于第三矩阵C的基地址寄存器的部分。例如,用于第一矩阵A的基地址寄存器、用于第二矩阵B的基地址寄存器以及用于第三矩阵C的基地址寄存器分别为a0、b0和c0。
例如,流水线控制单元151被配置为基于矩阵乘法指令生成控制包(参见下面的图3B);控制包包括用于第一矩阵的基地址寄存器的信息以及用于第二矩阵的基地址寄存器的信息。
例如,流水线控制单元151还包括解码器和调度器。例如,解码器和调度器被配置为根据矩阵乘法指令生成的控制包或微操作。例如,控制包或微操作至少包含图3B所示的信息,也即,用于指示第一矩阵A的基地址寄存器、用于第二矩阵B的基地址寄存器和用于第三矩阵C的基地址寄存器分别为a0、b0和c0的信息。
例如,对于图2所示的矩阵乘法器100,流水线控制单元151还被配置为经由第一选择器152设置用于第一矩阵的基地址寄存器以及用于第二矩阵的基地址寄存器,并经由第二选择器153设置用于第三矩阵的基地址寄存器。
例如,多个第一向量寄存器111的编号连续,多个第二向量寄存器121的编号连续,以及多个第三向量寄存器131的编号连续。例如,通过使得多个第一向量寄存器111的编号连续,多个第二向量寄存器121的编号连续,以及多个第三向量寄存器131的编号连续,可以利用用于矩阵(例如,第一矩阵)的基地址寄存器(base register)和偏移量(step oroffset counter)的快速寻址矩阵(例如,第一矩阵)中的任意向量,由此可以简化流水线控制单元151的设计。
例如,流水线控制单元151还被配置为在操作中输出第一选择信号和第二选择信号。例如,流水线控制单元151包括第一计数器(例如,用于外循环)和第二计数器(例如,用于内循环);流水线控制单元151还被配置为分别基于第一计数器和第二计数器输出第一选择信号和第二选择信号。例如,流水线控制单元151还被配置为使得第一选择信号和第二选择信号分别为外循环的选择信号和内循环的选择信号。
例如,流水线控制单元151还被配置为执行启动和结束矩阵乘积运算的全部操作。
例如,在流水线控制单元151接收矩阵乘法指令,并使得包括该矩阵乘法器100的处理器进入矩阵乘法模式之后,使得第一向量寄存器组110包括的多个第一向量寄存器111的编号连续,第二向量寄存器组120包括的多个第二向量寄存器121以及第三向量寄存器组130包括的多个第三向量寄存器131被设置为不参与重命名的寄存器。
例如,流水线控制单元151还被配置为发出结束信号。例如,在流水线控制单元151发出结束信号之后,包括该矩阵乘法器100的处理器退出矩阵乘法模式,并将多个第一向量寄存器111,多个第二向量寄存器121以及多个第三向量寄存器131设置为可参与重命名的寄存器。
例如,本公开的至少一个实施例提供的矩阵乘法器100可以利用第一选择器152、第二选择器153、多路复用器154以及流水线控制单元151将矩阵乘法分解为两级(例如,内外两级循环)乘累加运算,两级流乘累加运算的至少一级(例如,两级)可以采用流水操作,由此使得矩阵乘法器100具有降低出现调度上的气泡的可能性,以及提升矩阵乘法器100的性能的潜力。
例如,第一选择器152、第二选择器153、多路复用器154以及流水线控制单元151可以是基本的逻辑器件,这些器件对面积需求小,由此本公开的至少一个实施例提供的矩阵乘法器100容易实现。
下面结合图2对于第一至第三向量寄存器、第一选择器152、第二选择器153、多路复用器154以及流水线控制单元151之间的耦接关系进行示例性说明。
例如,如图2所示,第一选择器152的控制端与流水线控制单元151耦接,且被配置为在操作中接收第一选择信号;第一选择器152的多个输出端分别与多个第一向量寄存器111耦接,以在操作中允许第一选择器152选择多个第一向量寄存器111中对应于第一选择信号的第一向量寄存器111;第一选择器152的多个输出端还分别与多个第二向量寄存器121耦接,以在操作中允许第一选择器152还选择多个第二向量寄存器121中对应于第一选择信号的第二向量寄存器121。
例如,对于图2所示的矩阵乘法器100,流水线控制单元151被配置为在操作中:使得第一选择器152选择第一向量寄存器组110的第x个第一向量寄存器111与乘累加运算单元组140的多个第一端耦接,并经由第一选择器152选择第x个第二向量寄存器121,其中,x为整数,且x大于等于1小于等于第一向量寄存器组110包括的多个第一向量寄存器111的数目。
需要说明的是,尽管在图2所示的示例中,单个第一选择器152的多个输出端不仅分别与多个第一向量寄存器111耦接,而且还分别与多个第二向量寄存器121耦接,但本公开的至少一个实施例不限于此。在一些示例中,矩阵乘法器可以包括两个第一选择器152,两个第一选择器152之一的多个输出端分别与多个第一向量寄存器111耦接,两个第一选择器152的另一个的多个输出端分别与多个第二向量寄存器121耦接。
例如,如图2所示,多路复用器154包括输出端、控制端和多个输入端;多路复用器154的输出端耦接到公共端;多路复用器154的多个输入端耦接到第二向量寄存器组120,且多路复用器154包括的多个输入端被配置为在操作中分别耦接到第二向量寄存器组120中被选择的第二向量寄存器121的多个第二向量寄存单元122。
例如,在经由第一选择器152选择第x个第二向量寄存器121的情况下,多路复用器154包括的多个输入端被配置为在操作中分别耦接到第x个第二向量寄存器121包括的多个第二向量寄存单元122,由此多路复用器154可以在操作中顺次选择第x个第二向量寄存器121的多个第二向量寄存器单元122与乘累加运算单元组140的公共端耦接。
例如,如图2所示,第二选择器153的控制端与流水线控制单元151耦接,且被配置为在操作中接收第二选择信号;第二选择器153的多个输出端分别与多个第三向量寄存器131耦接,以在操作中允许第二选择器153选择多个第三向量寄存器131中对应于第二选择信号的第三向量寄存器131;多路复用器154的控制端与流水线控制单元151耦接,且被配置为在操作中接收第二选择信号;多路选择器被配置为使得经由多路复用器154包括的多个输入端中对应于第二选择信号的输入端获得的数据从多路选择器的输出端输出。
例如,在经由第一选择器152和多路复用器154选择第x个第二向量寄存器121的第y个第二向量寄存器单元122与乘累加运算单元组140的公共端耦接的同时,经由第二选择器153选择第y个第三向量寄存器131包括的多个第三向量寄存单元132分别与多个第三端耦接,其中,y为整数,且y大于等于1小于等于第三向量寄存器组130包括的多个第三向量寄存器131的数目。
例如,乘累加运算单元组140通过计算获得多个累加和(基于接收到的第一至第三输入数据),并将多个累加和分别写入第y个第三向量寄存器131的多个第三向量寄存单元132中。
例如,对于图2所示的矩阵乘法器100,流水线控制单元151还被配置为在操作中:在第一矩阵包括的第x个列向量被加载至第x个第一向量寄存器111以及第二矩阵的第x个行向量被加载至第二向量寄存器组120的第x个第二向量寄存器121之后(例如,立即),经由第一选择器152选择第x个第一向量寄存器111包括的多个第一向量寄存单元112分别与乘累加运算单元组140的多个第一端耦接(对应地,第x个第一向量寄存器111中存储的元素作为第一输入数据分别提供给多个乘累加运算单元MAD的第一端),经由第一选择器152和多路复用器154选择第x个第二向量寄存器121的第y个第二向量寄存器单元122与乘累加运算单元组140的公共端耦接(对应地,第x个第二向量寄存器121的第y个第二向量寄存器单元122中存储的元素被提供给公共端),经由第二选择器153选择第y个第三向量寄存器131包括的多个第三向量寄存单元132分别与多个第三端耦接(对应地,第y个第三向量寄存器131中存储的元素作为第三输入数据分别提供给多个乘累加运算单元MAD的第三端),然后利用乘累加运算单元组140通过计算获得多个累加和,而无需等待将第一矩阵和第二矩阵的全部元素分别加载至第一向量寄存器组110和第二向量寄存器组120,由此可以提升矩阵乘法器100的性能。
例如,在针对每对的第一向量寄存器111和第二向量寄存器121的乘累加运算完成之后,便可以将该对第一向量寄存器111和第二向量寄存器121(例如,第一向量寄存器a0和第二向量寄存器b0)的存储空间释放,由此可以降低矩阵运算所占用的寄存器空间。
例如,可以在将第一至第三输入数据分别提供给乘累加运算单元MAD的第一至第三端以及执行乘累加运算的过程中,将第一矩阵的除第一列的其它列向量以及第二矩阵的除第一行的其它行向量,加载至对应的向量寄存器,由此使得矩阵乘法器100的外循环可以采用流水操作,并因此可以提升矩阵乘法器100的性能。
例如,矩阵乘法器100的内循环也可以采用流水操作,并因此可以进一步的提升矩阵乘法器100的性能,此种情况下,矩阵乘法器100将矩阵运算分解为由控制器150(例如,控制引擎)控制的两级流水线乘累加运算操作;通过迭代两级流水线操作获得的最终的乘积矩阵(也即,第三矩阵C)被写入第三向量寄存器组中。例如,通过使得将矩阵运算分解为两级流水线乘累加运算操作,可以提升单位时间内执行乘累加运算操作操作的次数,由此可以提升矩阵乘法器100的性能。例如,流水线控制单元151被配置为负责(控制)矩阵-矩阵乘法的全部流水线操作。
例如,在矩阵乘法涉及非常多的乘累加运算操作(例如,向量-向量乘累加运算操作)的情况下,矩阵乘法器100可以将矩阵运算分解为深流水线(deep pipelined.)乘累加运算操作(例如,向量-向量乘累加运算操作)。
例如,本公开的至少一个实施例提供的矩阵乘法器100便可基于矩阵乘法指令实现获取一个乘积矩阵,由此使得矩阵乘法器100可以降低矩阵运算占用的资源(例如,降低占用的指令队列的存储空间),降低因坍塌-移位操作导致的功耗,以及使得矩阵乘法器100可以在不增加额外的ALU单元(例如,不增加面积预算)的情况下提升矩阵乘法器100的性能。
例如,本公开的至少一个实施例提供的矩阵乘法器100无需设置额外的存储器件和ALU单元,而只需增加流水控制部件(例如,第一选择器152、第二选择器153、多路复用器154以及流水线控制单元151),由此可以提升包括该矩阵乘法器100的处理器的硬件效率。
例如,每个乘累加运算操作可以在4-5个CPU核的时钟周期完成。例如,每个乘累加运算操作包括:RDY(就绪)->SCH(调度)->XRF(读数据)->EX0(执行0)->EX1(执行1)等节拍。
图4是图2所示的矩阵乘法器100进行矩阵运算的流程图。例如,如图4所示,该矩阵乘法器100进行矩阵运算的流程包括以下的步骤S111-步骤S117。例如,在图4所示的示例中,i和j为大于等于0小于等于3的整数。
步骤S111:流水线控制单元151接收矩阵乘法指令。
步骤S112:流水线控制单元151将用于外循环的第一计数器置零,并使得第一选择器152将用于第一矩阵A的基地址寄存器和用于第二矩阵B的基地址寄存器分别设置为a0和b0。
步骤S113:流水线控制单元151将用于内循环的第二计数器置零,并使得第二选择器153将用于第三矩阵C的基地址寄存器设置为c0;第一选择器152选择A[j,]和B[j,],也即,选择第一向量寄存器aj以及第二向量寄存器bj。
例如,流水线控制单元151向第一选择器152提供第一选择信号,第一选择器152选择对应于第一选择信号的第一寄存器包括的多个第一向量寄存单元112分别与乘累加运算单元组140的多个第一端耦接,并选择对应于第一选择信号的第二寄存器包括的多个第二向量寄存单元122分别与多路复用器154的多个输入端耦接。
例如,流水线控制单元151可以基于第一计数器的值向第一选择器152提供第一选择信号。例如,在第一计数器的值为j的情况下,第一选择器152选择第一向量寄存器aj以及第二向量寄存器bj;第一向量寄存器aj存储的元素(aj 0 aj 1 aj 2 aj 3)为位于第一矩阵的第j+1列的列向量(A0j A1j A2j A3j),为方便描述,上述列向量以及第一向量寄存器aj中的元素记为A[j,];第二向量寄存器bj存储的元素(bj 0 bj 1 bj 2 bj 3)为位于第二矩阵的第j+1行的行向量(Bj0 Bj1 Bj2 Bj3),上述行向量以及第二向量寄存器bj中的元素记为B[j,];对应地,位于第一矩阵的第j+1列的列向量A[j,]的元素被分别提供至乘累加运算单元组140的多个第一端,以分别作为对应的乘累加运算单元组140的第一输入数据;第二矩阵的第j+1行的行向量B[j,]的元素分别提供给多路复用器154的多个输入端。
步骤S114:第二选择器153选择B[j,i]和C[i,],多个乘累加运算单元MAD执行乘累加运算A[j,]×B[j,i]+C[i,]。步骤S114包括以下的步骤S114a和步骤S114b。
步骤S114a:流水线控制单元151向第二选择器153提供第二选择信号,第二选择器153选择对应于第二选择信号的第三向量寄存器包括的多个第三向量寄存单元132分别与乘累加运算单元组140的多个第三端耦接,并选择多路复用器154的多个输入端中对应于第二选择信号的输入端与多路复用器154的输出端电连接,对应地,使得第二向量寄存器bj的对应于第二选择信号的第二向量寄存单元122与乘累加运算单元组140的公共端(也即,彼此相连的多个乘累加运算单元MAD的第二端)耦接。
例如,流水线控制单元151可以基于第二计数器的值向第二选择器153提供第二选择信号。例如,在第二计数器的值为i的情况下,第二选择器153选择第三向量寄存器ci以及第二向量寄存器bj的第i+1个第二向量寄存单元122;第二向量寄存器bj的第i+1个第二向量寄存单元122存储的元素bj i为位于第二矩阵的第j+1行第i+1列的元素Bji(记为B[j,i]);对应地,第二向量寄存器bj的第i+1个第二向量寄存单元122存储的元素bj i被提供给公共端,以作为多个乘累加运算单元MAD的相同的第二输入数据;第三向量寄存器ci存储的元素(也即,(ci 0 ci 1 ci 2 ci 3),记为C[i,]),被分别提供至乘累加运算单元组140的多个第三端,以分别作为对应的乘累加运算单元MAD的第三输入数据。
步骤S114b:多个乘累加运算单元MAD执行乘累加运算,并将第一输入数据和第二输入数据的乘积与第三输入数据的累加和(也即,A[j,]×B[j,i]+C[i,])作为乘累加运算的计算结果写入第三向量寄存器ci中。
步骤S115:确认第二计数器的值i是否达到N-1;如果没有达到N-1,则使得第二计数器的值i增加1,并再次执行步骤S114;如果达到N-1,则执行下面的步骤S116。
步骤S116:确认第一计数器的值j是否达到M-1;如果没有达到M-1,则使得第二计数器的值j增加1,并再次执行步骤S113-步骤S115;如果达到M-1,则执行下面的步骤S117。
步骤S117:流水线控制单元151发出结束信号。
例如,在j=0时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器组130之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×b0 j。例如,在j=0时,从第三向量寄存器组130获取的第三输入数据均为零。
例如,在j=0时,第三向量寄存器组130的元素cj i(对应于下表中第i+1行,第j列的元素)可以参见下表1。
表1.第三向量寄存器组130的元素(j=0)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>3</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>3</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>3</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>3</sup> |
例如,在j=1时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×b0 j+a1 i×b1 j。
例如,在j=1时,第三向量寄存器组130的元素cj i可以参见下表2。
表2.第三向量寄存器组130的元素(j=1)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>3</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>3</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>3</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>3</sup> |
例如,在j=2时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×b0 j+a1 i×b1 j+a2 i×b2 j。
例如,在j=2时,第三向量寄存器组130的元素cj i可以参见下表3。
表3.第三向量寄存器组130的元素(j=2)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>3</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>3</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>3</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>3</sup> |
例如,在j=3时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素cj i(对应于第三矩阵的Cij)满足以下的表达式:
例如,在j=3时,第三向量寄存器组130的元素cj i的表达式可以参见下表4。
表4.第三向量寄存器组130的元素(j=3)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>0</sup>+a<sub>3</sub><sup>0</sup>b<sub>3</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>1</sup>+a<sub>3</sub><sup>0</sup>b<sub>3</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>0</sup>b<sub>3</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>3</sup>+a<sub>3</sub><sup>0</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>0</sup>+a<sub>3</sub><sup>1</sup>b<sub>3</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>1</sup>+a<sub>3</sub><sup>1</sup>b<sub>3</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>1</sup>b<sub>3</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>3</sup>+a<sub>3</sub><sup>1</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>0</sup>+a<sub>3</sub><sup>2</sup>b<sub>3</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>1</sup>+a<sub>3</sub><sup>2</sup>b<sub>3</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>2</sup>b<sub>3</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>3</sup>+a<sub>3</sub><sup>2</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>0</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>0</sup>+a<sub>3</sub><sup>3</sup>b<sub>3</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>1</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>1</sup>+a<sub>3</sub><sup>3</sup>b<sub>3</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>2</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>2</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>3</sup>b<sub>3</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>3</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>3</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>3</sup>+a<sub>3</sub><sup>3</sup>b<sub>3</sub><sup>3</sup> |
图5是本公开的至少一个实施例提供的矩阵乘法器100的第二个示例的示意图。图6是图5所示的第一至第三向量寄存器组130的示意图。图7是图5所示的矩阵乘法器100进行矩阵运算的流程图。
图5所示的矩阵乘法器100与图2所示的矩阵乘法器100相似,因此,在此主要阐述两者的不同之处,相同之处不再赘述。图5所示的矩阵乘法器100与图2所示的矩阵乘法器100的不同之处包括如下几点。
(1)在图5所示的矩阵乘法器100中,多个第二向量寄存器121分别与第二选择器153的多个输出端耦接,对应地,在操作中,第二选择器153选择多个第二向量寄存器121中对应于第二选择信号的第二向量寄存器121的多个第二向量寄存单元122分别与多个多路复用器154的输入端耦接。在图2所示的矩阵乘法器100中,多个第二向量寄存器121分别与第一选择器152的多个输出端耦接;对应地,在操作中,第一选择器152选择多个第二向量寄存器121中对应于第一选择信号的第二向量寄存器121的多个第二向量寄存单元122分别与多个多路复用器154的输入端耦接。
(2)在图5所示的矩阵乘法器100中,多路复用器154的控制端被配置为在操作中接收第一选择信号,由此,在操作中,多路复用器154选择对应于第二选择信号的第二向量寄存器121包括的多个第二向量寄存单元122中对应于第一选择信号的第二向量寄存器121与多个乘累加运算单元MAD的彼此电连接的第二端耦接。在图2所示的矩阵乘法器100中,多路复用器154的控制端被配置为在操作中接收第二选择信号,由此,在操作中,多路复用器154选择对应于第一选择信号的第二向量寄存器121包括的多个第二向量寄存单元122中对应于第二选择信号的第二向量寄存单元122与多个乘累加运算单元MAD的彼此电连接的第二端耦接。
(3)在图5所示的矩阵乘法器100中,多个第二向量寄存器121分别用于存储第二矩阵包括的多个列向量,因此,第二矩阵的元素Bij为图3A所示的第一向量寄存器组110中的元素bj i;对应地,在加载第二矩阵时,第二矩阵包括的多个列向量顺次加载至多个第二向量寄存器121中。在图2所示的矩阵乘法器100中,在多个第二向量寄存器121分别用于存储第二矩阵包括的多个行向量,因此,第二矩阵的元素Bij为图3A所示的第一向量寄存器组110中的元素bi j;对应地,在加载第二矩阵时,第二矩阵包括的多个行向量顺次加载至多个第二向量寄存器121中。
例如,在图5所示的矩阵乘法器100中,流水线控制单元151还被配置为经由第一选择器152设置用于第一矩阵的基地址寄存器,并经由第二选择器153设置用于第二矩阵的基地址寄存器以及用于第三矩阵的基地址寄存器。
例如,在图5所示的矩阵乘法器100中,第二向量寄存器组120包括的多个第二向量寄存器121的数目等于第三向量寄存器组130包括的多个第三向量寄存器131的数目;多个第二向量寄存器121的每个包括的多个第二向量寄存单元122的数目等于第三向量寄存器组130包括的多个第三向量寄存器131的数目;在图2所示的矩阵乘法器100中,第二向量寄存器组120包括的多个第二向量寄存器121的数目等于第一向量寄存器组110包括的多个第一向量寄存器111的数目。
例如,对于图5所示的矩阵乘法器100,流水线控制单元151被配置为在操作中:使得第一选择器152选择第一向量寄存器组110的第x个第一向量寄存器111与乘累加运算单元组140的多个第一端耦接,其中,x为整数,且x大于等于1小于等于第一向量寄存器组110包括的多个第一向量寄存器111的数目;允许多路复用器154的对应于第二向量寄存器组120中位于第x列的多个第二向量寄存单元122的输入端与多路复用器154的输出端电连接,并经由第二选择器153顺次选择位于第x列的多个第二向量寄存单元122与多路复用器154的对应于第二向量寄存器组120中位于第x列的多个第二向量寄存单元122的输入端耦接,以使得位于第x列的多个第二向量寄存单元122顺次与乘累加运算单元组140的公共端耦接;经由第二选择器153和多路复用器154选择第y个第二向量寄存器121的第x个第二向量寄存器单元122与乘累加运算单元组140的公共端耦接的同时,经由第二选择器153选择第y个第三向量寄存器131包括的多个第三向量寄存单元132分别与多个第三端耦接,其中,y为整数,且y大于等于1小于等于第三向量寄存器组130包括的多个第三向量寄存器131的数目;以及使得乘累加运算单元组140通过计算获得多个累加和,并将多个累加和分别写入第y个第三向量寄存器131的多个第三向量寄存单元132中。
需要说明的是,尽管在图5所示的示例中,单个第二选择器153的多个输出端不仅分别与多个第三向量寄存器131耦接,而且还分别与多个第二向量寄存器121耦接,但本公开的至少一个实施例不限于此。在一些示例中,矩阵乘法器可以包括两个第二选择器153,两个第二选择器153之一的多个输出端分别与多个第三向量寄存器131耦接,两第二选择器153的另一个的多个输出端分别与多个第二向量寄存器121耦接。
图7是图5所示的矩阵乘法器100进行矩阵运算的流程图。例如,如图7所示,图5所示的矩阵乘法器100进行矩阵运算的流程包括以下的步骤S211-步骤S217。
步骤S211:流水线控制单元151接收矩阵乘法指令。
步骤S212:流水线控制单元151将用于外循环的第一计数器置零,并使得第一选择器152将用于第一矩阵A的基地址寄存器设置为a0。
步骤S213:流水线控制单元151将用于内循环的第二计数器置零,并使得第二选择器153将用于第二矩阵B的基地址寄存器和用于第三矩阵C的基地址寄存器分别设置为b0和c0;第一选择器152选择A[j,]。
例如,在步骤S213中,A[j,]表示第一向量寄存器aj存储的元素(aj 0 aj 1 aj 2 aj 3),也即,位于第一矩阵的第j+1列的列向量(A0j A1j A2j A3j)。
步骤S214:第二选择器153选择B[i,]和C[i,]),多个乘累加运算单元MAD执行乘累加运算A[j,]×B[i,j]+C[i,]。
例如,在步骤S214中,B[i,]是指第二向量寄存器bi存储的元素,也即,位于第二矩阵的第i+1列的列向量(B0i B1i B2i B3i);B[i,j]是指第二向量寄存器bi中的第j+1个元素bi j,也即,位于第二矩阵的第j+1行第i+1列的元素Bji;C[i,]是指第三向量寄存器ci存储的元素,也即,(ci 0 ci 1 ci 2 ci 3)。
步骤S215:确认第二计数器的值i是否达到N-1;如果没有达到N-1,则使得第二计数器的值i增加1,并再次执行步骤S214;如果达到N-1,则执行下面的步骤S216。
步骤S216:确认第一计数器的值j是否达到M-1;如果没有达到M-1,则使得第二计数器的值j增加1,并再次执行步骤S213-步骤S215;如果达到M-1,则执行下面的步骤S217。
步骤S217:流水线控制单元151发出结束信号。
例如,在j=0时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器组130之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×bj 0。
例如,在j=0时,第三向量寄存器组130的元素cj i的表达式可以参见下表5。
表5第三向量寄存器组130的元素(j=0)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>0</sup>b<sub>3</sub><sup>0</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>1</sup>b<sub>3</sub><sup>0</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>2</sup>b<sub>3</sub><sup>0</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>1</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>2</sub><sup>0</sup> | a<sub>0</sub><sup>3</sup>b<sub>3</sub><sup>0</sup> |
例如,在j=1时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×bj 0+a1 i×bj 1。
例如,在j=1时,第三向量寄存器组130的元素cj i的表达式可以参见下表6。
表6第三向量寄存器组130的元素(j=1)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>0</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>3</sub><sup>1</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>1</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>3</sub><sup>1</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>2</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>3</sub><sup>1</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>0</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>2</sub><sup>1</sup> | a<sub>0</sub><sup>3</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>3</sub><sup>1</sup> |
例如,在j=2时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素满足以下的表达式:cj i=a0 i×bj 0+a1 i×bj 1+a2 i×bj 2。
例如,在j=2时,第三向量寄存器组130的元素cj i的表达式可以参见下表7。
表7第三向量寄存器组130的元素(j=2)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>0</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>3</sub><sup>2</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>1</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>3</sub><sup>2</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>2</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>3</sub><sup>2</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>0</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>1</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>2</sup> | a<sub>0</sub><sup>3</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>3</sub><sup>2</sup> |
例如,在j=3时,多个乘累加运算单元MAD的乘累加运算完成,乘累加运算的计算结果被写入第三向量寄存器131之后,第三向量寄存器组130的元素cj i(对应于第三矩阵的Cij)满足以下的表达式:
例如,在j=3时,第三向量寄存器组130的元素cj i的表达式可以参见下表8。
表8第三向量寄存器组130的元素(j=3)
a<sub>0</sub><sup>0</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>0</sub><sup>2</sup>+a<sub>3</sub><sup>0</sup>b<sub>0</sub><sup>3</sup> | a<sub>0</sub><sup>0</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>1</sub><sup>2</sup>+a<sub>3</sub><sup>0</sup>b<sub>1</sub><sup>3</sup> | a<sub>0</sub><sup>0</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>0</sup>b<sub>2</sub><sup>3</sup> | a<sub>0</sub><sup>0</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>0</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>0</sup>b<sub>3</sub><sup>2</sup>+a<sub>3</sub><sup>0</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>1</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>0</sub><sup>2</sup>+a<sub>3</sub><sup>1</sup>b<sub>0</sub><sup>3</sup> | a<sub>0</sub><sup>1</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>1</sub><sup>2</sup>+a<sub>3</sub><sup>1</sup>b<sub>1</sub><sup>3</sup> | a<sub>0</sub><sup>1</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>1</sup>b<sub>2</sub><sup>3</sup> | a<sub>0</sub><sup>1</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>1</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>1</sup>b<sub>3</sub><sup>2</sup>+a<sub>3</sub><sup>1</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>2</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>0</sub><sup>2</sup>+a<sub>3</sub><sup>2</sup>b<sub>0</sub><sup>3</sup> | a<sub>0</sub><sup>2</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>1</sub><sup>2</sup>+a<sub>3</sub><sup>2</sup>b<sub>1</sub><sup>3</sup> | a<sub>0</sub><sup>2</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>2</sup>b<sub>2</sub><sup>3</sup> | a<sub>0</sub><sup>2</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>2</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>2</sup>b<sub>3</sub><sup>2</sup>+a<sub>3</sub><sup>2</sup>b<sub>3</sub><sup>3</sup> |
a<sub>0</sub><sup>3</sup>b<sub>0</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>0</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>0</sub><sup>2</sup>+a<sub>3</sub><sup>3</sup>b<sub>0</sub><sup>3</sup> | a<sub>0</sub><sup>3</sup>b<sub>1</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>1</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>1</sub><sup>2</sup>+a<sub>3</sub><sup>3</sup>b<sub>1</sub><sup>3</sup> | a<sub>0</sub><sup>3</sup>b<sub>2</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>2</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>2</sub><sup>2</sup>+a<sub>3</sub><sup>3</sup>b<sub>2</sub><sup>3</sup> | a<sub>0</sub><sup>3</sup>b<sub>3</sub><sup>0</sup>+a<sub>1</sub><sup>3</sup>b<sub>3</sub><sup>1</sup>+a<sub>2</sub><sup>3</sup>b<sub>3</sub><sup>2</sup>+a<sub>3</sub><sup>3</sup>b<sub>3</sub><sup>3</sup> |
例如,步骤S211-步骤S217的具体实现方式可以参照步骤S111-步骤S117,在此不再赘述。
本公开的发明人在研究中发现,一些应用场合(例如,基础线性代数子程序库,BLAS)倾向于以列主序的形式(例如,仅以列主序或者顺列存放的形式)存储矩阵;本公开的发明人在研究中还发现,通过使得图5所示的矩阵乘法器100包括的多个第二向量寄存器121分别用于存储第二矩阵包括的多个列向量,可以使得CPU单次访存就能将矩阵的对应元素加载至单个向量寄存器中,而不需多次跨缓存行读取,由此可以抑制(例如,大幅抑制)访存延迟。
需要说明的是,在待计算的矩阵的尺寸较大时,可以将待计算的矩阵划分为多个子矩阵,上述多个子矩阵适用于与本公开的至少一个实施例提供的矩阵乘法器100处理,然后通过使用本公开的至少一个实施例提供的矩阵乘法器100计算对应的子矩阵的子乘积矩阵来计算待计算的矩阵的乘积矩阵。
本公开的至少一个实施例还提供了一种处理器。图8是本公开的至少一个实施例提供的处理器的示例性框图。如图8所示,该处理器本公开的至少一个实施例提供的任一矩阵乘法器100。
需要说明的是,本领域的普通技术人员应该理解,该处理器的其它组成部分(例如,微控制器、缓冲存储器等)可以采用适用部件,在此不做赘述,也不应作为对本公开实施例的限制。
虽然上文中已经用一般性说明及具体实施方式,对本公开作了详尽的描述,但在本公开实施例基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本公开精神的基础上所做的这些修改或改进,均属于本公开要求保护的范围。
以上所述仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。
Claims (20)
1.一种矩阵乘法器,用于第一矩阵和第二矩阵的乘法运算,包括:第一向量寄存器组、第二向量寄存器组、第三向量寄存器 组、乘累加运算单元组和控制器,
其中,所述第一向量寄存器组被配置为存储所述第一矩阵且包括多个第一向量寄存器,所述多个第一向量寄存器的每个包括多个第一向量寄存单元;
所述第二向量寄存器组被配置为存储所述第二矩阵且包括多个第二向量寄存器,所述多个第二向量寄存器的每个包括多个第二向量寄存单元;
所述第三向量寄存器组包括多个第三向量寄存器,所述多个第三向量寄存器的每个包括多个第三向量寄存单元;
所述乘累加运算单元组包括多个乘累加运算单元;
所述多个乘累加运算单元的每个包括第一端、第二端和第三端,且被配置为将从所述第一端接收的第一输入数据和从所述第二端接收的第二输入数据相乘得到的乘积与从所述第三端接收的第三输入数据的累加和从所述第三端输出;
所述乘累加运算单元组耦接到所述第一向量寄存器组,且所述多个乘累加运算单元的第一端被配置为在操作中分别耦接到所述第一向量寄存器组中被选择的第一向量寄存器的多个第一向量寄存单元,分别接收所述被选择的第一向量寄存器的多个第一向量寄存单元提供的多个所述第一输入数据;
所述多个乘累加运算单元的第二端彼此相连,以得到公共端以接收相同的第二输入数据;
所述乘累加运算单元组耦接到所述第三向量寄存器组,且所述多个乘累加运算单元的第三端被配置为在操作中分别耦接到所述第三向量寄存器组的被选择的第三向量寄存器的多个第三向量寄存单元,分别接收所述被选择的第三向量寄存器的多个第三向量寄存单元提供的多个所述第三输入数据,以及分别输出多个所述累加和至所述被选择的第三向量寄存器的多个第三向量寄存单元;
所述控制器耦接到所述第一向量寄存器组、所述第二向量寄存器组、所述第三向量寄存器 组和所述乘累加运算单元组,且被配置为在操作中:
选择所述第一向量寄存器组的多个第一向量寄存器之一与所述乘累加运算单元组耦接,
选择所述第二向量寄存器组的多个第二向量寄存器之一,并使得被选择的第二向量寄存器包括的多个第二向量寄存器单元之一与所述乘累加运算单元组的公共端耦接,以及
选择所述第三向量寄存器组的多个第三向量寄存器之一与所述乘累加运算单元组耦接。
2.根据权利要求1所述的矩阵乘法器,其中,所述控制器包括第一选择器以及流水线控制单元;
所述流水线控制单元被配置为在操作中输出第一选择信号;
所述第一选择器的控制端与所述流水线控制单元耦接,且被配置为在操作中接收所述第一选择信号;以及
所述第一选择器的多个输出端分别与所述多个第一向量寄存器耦接,以在操作中允许所述第一选择器选择所述多个第一向量寄存器中对应于所述第一选择信号的第一向量寄存器。
3.根据权利要求2所述的矩阵乘法器,其中,所述控制器还包括第二选择器;
所述流水线控制单元还被配置为在操作中输出第二选择信号;
所述第二选择器的控制端与所述流水线控制单元耦接,且被配置为在操作中接收所述第二选择信号;以及
所述第二选择器的多个输出端分别与所述多个第三向量寄存器耦接,以在操作中允许所述第二选择器选择所述多个第三向量寄存器中对应于所述第二选择信号的第三向量寄存器。
4.根据权利要求3所述的矩阵乘法器,其中,所述控制器还包括多路复用器;
所述多路复用器包括输出端和多个输入端;
所述多路复用器的输出端耦接到所述公共端;以及
所述多路复用器的多个输入端耦接到所述第二向量寄存器组,且所述多路复用器包括的多个输入端被配置为在操作中分别耦接到所述第二向量寄存器组中被选择的第二向量寄存器的多个第二向量寄存单元。
5.根据权利要求4所述的矩阵乘法器,其中,所述第一选择器的多个输出端还分别与所述多个第二向量寄存器耦接,以在操作中允许所述第一选择器还选择所述多个第二向量寄存器中对应于所述第一选择信号的第二向量寄存器;
所述多路复用器还包括控制端;
所述多路复用器的控制端与所述流水线控制单元耦接,且被配置为在操作中接收所述第二选择信号;以及
所述多路复用器被配置为使得经由所述多路复用器包括的多个输入端中对应于所述第二选择信号的输入端获得的数据从所述多路复用器的输出端输出。
6.根据权利要求5所述的矩阵乘法器,其中,所述多个第一向量寄存器被配置为分别存储所述第一矩阵包括的多个列向量;以及
所述多个第二向量寄存器被配置为分别存储所述第二矩阵包括的多个行向量。
7.根据权利要求6所述的矩阵乘法器,其中,所述流水线控制单元被配置为在操作中:
使得所述第一选择器选择所述第一向量寄存器组的第x个第一向量寄存器包括的多个第一向量寄存单元分别与与所述乘累加运算单元组的多个第一端耦接,其中,x为整数,且x大于等于1小于等于所述第一向量寄存器组包括的多个第一向量寄存器的数目;
经由所述第一选择器选择所述第二向量寄存器组的第x个第二向量寄存器,并经由所述多路复用器顺次选择所述第二向量寄存器组的第x个第二向量寄存器的多个第二向量寄存器单元与所述乘累加运算单元组的公共端耦接;
在经由所述第一选择器和所述多路复用器选择所述第二向量寄存器组的第x个第二向量寄存器的第y个第二向量寄存器单元与所述乘累加运算单元组的公共端耦接的同时,经由所述第二选择器选择第y个第三向量寄存器包括的多个第三向量寄存单元分别与所述乘累加运算单元组的多个第三端耦接,其中,y为整数,且y大于等于1小于等于所述第三向量寄存器组包括的多个第三向量寄存器的数目;以及
使得所述乘累加运算单元组通过计算获得多个所述累加和,并将多个所述累加和分别写入所述第y个第三向量寄存器的多个第三向量寄存单元中。
8.根据权利要求7所述的矩阵乘法器,其中,在所述第一矩阵包括的第x个列向量被加载至所述第x个第一向量寄存器以及所述第二矩阵的第x个行向量被加载至所述第二向量寄存器组的第x个第二向量寄存器之后,所述流水线控制单元被配置为:经由所述第一选择器选择所述第x个第一向量寄存器包括的多个第一向量寄存单元分别与所述乘累加运算单元组的多个第一端耦接。
9.根据权利要求5所述的矩阵乘法器,其中,所述第一向量寄存器组包括的多个第一向量寄存器的数目等于所述第二向量寄存器组包括的多个第二向量寄存器的数目。
10.根据权利要求4所述的矩阵乘法器,其中,所述第二选择器的多个输出端还分别与所述多个第二向量寄存器耦接,以在操作中允许所述第二选择器选择所述多个第二向量寄存器中对应于所述第二选择信号的第二向量寄存器;
所述多路复用器还包括控制端;
所述多路复用器的控制端与所述流水线控制单元耦接,且被配置为在操作中接收所述第一选择信号;以及
所述多路复用器被配置为使得经由所述多路复用器包括的多个输入端中对应于所述第一选择信号的输入端获得的数据从所述多路复用器的输出端输出。
11.根据权利要求10所述的矩阵乘法器,其中,所述多个第一向量寄存器被配置为分别存储所述第一矩阵包括的多个列向量;以及
所述多个第二向量寄存器被配置为分别存储所述第二矩阵包括的多个列向量。
12.根据权利要求11所述的矩阵乘法器,其中,所述流水线控制单元被配置为在操作中:
使得所述第一选择器选择所述第一向量寄存器组的第x个第一向量寄存器包括的多个第一向量寄存单元分别与与所述乘累加运算单元组的多个第一端耦接,其中,x为整数,且x大于等于1小于等于所述第一向量寄存器组包括的多个第一向量寄存器的数目;
允许所述多路复用器的对应于所述第二向量寄存器组中位于第x列的多个第二向量寄存单元的输入端与所述多路复用器的输出端电连接,并经由所述第二选择器顺次选择所述位于第x列的多个第二向量寄存单元与所述多路复用器的对应于所述第二向量寄存器组中位于第x列的多个第二向量寄存单元的输入端耦接,以使得所述位于第x列的多个第二向量寄存单元顺次与所述乘累加运算单元组的公共端耦接;
在经由所述第二选择器和所述多路复用器选择所述第二向量寄存器组的第y个第二向量寄存器的第x个第二向量寄存器单元与所述乘累加运算单元组的公共端耦接的同时,经由所述第二选择器选择第y个第三向量寄存器包括的多个第三向量寄存单元分别与所述乘累加运算单元组的多个第三端耦接,其中,y为整数,且y大于等于1小于等于所述第三向量寄存器组包括的多个第三向量寄存器的数目;以及
使得所述乘累加运算单元组通过计算获得多个所述累加和,并将多个所述累加和分别写入所述第y个第三向量寄存器的多个第三向量寄存单元中。
13.根据权利要求12所述的矩阵乘法器,其中,所述第二向量寄存器组包括的多个第二向量寄存器的数目等于所述第三向量寄存器组包括的多个第三向量寄存器的数目。
14.根据权利要求12所述的矩阵乘法器,其中,所述第二矩阵为列主序型矩阵。
15.根据权利要求3-14任一项所述的矩阵乘法器,其中,所述流水线控制单元包括第一计数器和第二计数器;以及
所述流水线控制单元还被配置为在操作中分别基于所述第一计数器的值和所述第二计数器的值输出所述第一选择信号和所述第二选择信号。
16.根据权利要求3-14任一项所述的矩阵乘法器,其中,所述流水线控制单元还被配置为使得所述第一选择信号和所述第二选择信号分别为外循环的选择信号和内循环的选择信号。
17.根据权利要求3-14任一项所述的矩阵乘法器,其中,所述流水线控制单元还被配置为接收矩阵乘法指令,且基于所述矩阵乘法指令生成控制包;以及
所述控制包包括用于所述第一矩阵的基地址寄存器的信息以及用于所述第二矩阵的基地址寄存器的信息。
18.根据权利要求17所述的矩阵乘法器,其中,所述流水线控制单元还被配置为经由所述第一选择器设置用于所述第一矩阵的基地址寄存器;以及
所述流水线控制单元还被配置为经由所述第一选择器和所述第二选择器之一设置用于所述第二矩阵的基地址寄存器。
19.根据权利要求17所述的矩阵乘法器,其中,所述多个第一向量寄存器的编号连续,所述多个第二向量寄存器的编号连续,以及所述多个第三向量寄存器的编号连续。
20.一种处理器,包括如权利要求1-19任一项所述的矩阵乘法器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011406153.8A CN112434256B (zh) | 2020-12-03 | 2020-12-03 | 矩阵乘法器和处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011406153.8A CN112434256B (zh) | 2020-12-03 | 2020-12-03 | 矩阵乘法器和处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112434256A CN112434256A (zh) | 2021-03-02 |
CN112434256B true CN112434256B (zh) | 2022-09-13 |
Family
ID=74692285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011406153.8A Active CN112434256B (zh) | 2020-12-03 | 2020-12-03 | 矩阵乘法器和处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112434256B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722669B (zh) * | 2021-11-03 | 2022-01-21 | 海光信息技术股份有限公司 | 数据处理方法、装置、设备及存储介质 |
CN116127261B (zh) * | 2023-04-19 | 2023-08-25 | 北京微核芯科技有限公司 | 处理器中矩阵乘累加方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101620524A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | 支持矩阵整体读写操作的矩阵寄存器文件 |
CN109144469A (zh) * | 2018-07-23 | 2019-01-04 | 上海亮牛半导体科技有限公司 | 流水线结构神经网络矩阵运算架构及方法 |
CN109716290A (zh) * | 2016-10-20 | 2019-05-03 | 英特尔公司 | 用于经融合的乘加的系统、装置和方法 |
CN110447010A (zh) * | 2017-05-17 | 2019-11-12 | 谷歌有限责任公司 | 在硬件中执行矩阵乘法 |
CN111353126A (zh) * | 2018-12-20 | 2020-06-30 | 卡雷公司 | 分块矩阵乘法运算系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5784306A (en) * | 1996-06-28 | 1998-07-21 | Cirrus Logic, Inc. | Parallel multiply accumulate array circuit |
CN104572011B (zh) * | 2014-12-22 | 2018-07-31 | 上海交通大学 | 基于fpga的通用矩阵定点乘法器及其计算方法 |
US10089078B2 (en) * | 2016-09-23 | 2018-10-02 | Stmicroelectronics S.R.L. | Circuit for performing a multiply-and-accumulate operation |
US10338919B2 (en) * | 2017-05-08 | 2019-07-02 | Nvidia Corporation | Generalized acceleration of matrix multiply accumulate operations |
BR112019022916A2 (pt) * | 2017-05-17 | 2020-05-26 | Google Llc | Unidade de multiplicação de matrizes de baixa latência |
US10552154B2 (en) * | 2017-09-29 | 2020-02-04 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
CN109871236A (zh) * | 2017-12-01 | 2019-06-11 | 超威半导体公司 | 具有低功率并行矩阵乘法流水线的流处理器 |
CN110659445B (zh) * | 2018-06-29 | 2022-12-30 | 龙芯中科技术股份有限公司 | 一种运算装置及其处理方法 |
CN111814093A (zh) * | 2019-04-12 | 2020-10-23 | 杭州中天微系统有限公司 | 一种乘累加指令的处理方法和处理装置 |
CN111079081B (zh) * | 2019-12-16 | 2021-02-12 | 海光信息技术股份有限公司 | 一种矩阵乘法器、数据处理方法、集成电路器件及处理器 |
-
2020
- 2020-12-03 CN CN202011406153.8A patent/CN112434256B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101620524A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | 支持矩阵整体读写操作的矩阵寄存器文件 |
CN109716290A (zh) * | 2016-10-20 | 2019-05-03 | 英特尔公司 | 用于经融合的乘加的系统、装置和方法 |
CN110447010A (zh) * | 2017-05-17 | 2019-11-12 | 谷歌有限责任公司 | 在硬件中执行矩阵乘法 |
CN109144469A (zh) * | 2018-07-23 | 2019-01-04 | 上海亮牛半导体科技有限公司 | 流水线结构神经网络矩阵运算架构及方法 |
CN111353126A (zh) * | 2018-12-20 | 2020-06-30 | 卡雷公司 | 分块矩阵乘法运算系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112434256A (zh) | 2021-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3779681B1 (en) | Accelerator for sparse-dense matrix multiplication | |
KR102276335B1 (ko) | 그래픽 프로세싱 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서 | |
CN109062608B (zh) | 用于独立数据上递归计算的向量化的读和写掩码更新指令 | |
US8412917B2 (en) | Data exchange and communication between execution units in a parallel processor | |
US8631224B2 (en) | SIMD dot product operations with overlapped operands | |
CN112434256B (zh) | 矩阵乘法器和处理器 | |
CN112149050A (zh) | 用于增强的矩阵乘法器架构的装置、方法和系统 | |
Soliman | Mat-core: A matrix core extension for general-purpose processors | |
Soliman et al. | Trident: a scalable architecture for scalar, vector, and matrix operations | |
Soliman | Mat-core: a decoupled matrix core extension for general-purpose processors | |
CN115910207A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40047526 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |