具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上所述,传统方案只能实现固定结果尺寸和形状的矩阵乘法单元,效率低下。
为了解决上述问题,本公开提供了一种用于矩阵计算的方法及装置。
图1示出了根据本公开的实施例的用于矩阵计算的装置100的示意框图。如图1所示,装置100包括多个计算单元110-11至110-QP(统称为110)。
关于计算单元110,其可用于执行矩阵乘法运算。计算单元110可以包括多个点积计算单元111和与多个点积计算单元111相耦接的存储单元112。
关于点积计算单元111,其可用于计算各包括K个元素的两个向量之间的点积。多个点积计算单元111可以被布置成A行B列的第三阵列,以便实现包括A行K列个元素的矩阵和包括K行B列个元素的矩阵之间的乘法运算,也就是AxBxK矩阵乘法运算。
关于存储单元112,其可以被配置成存储包括A行K列个元素的矩阵、包括K行B列个元素的矩阵以及这两个矩阵相乘的结果。
由此,装置100可以实现Q*P个AxBxK矩阵乘法运算。
如图1所示,多个计算单元110可以被布置成Q行P列的第一阵列120,其中Q和P大于1。在第一阵列120中,横向相邻和纵向相邻的计算单元110之间可以配置有数据通道,例如横向的数据通道130和纵向的数据通道140。
除了实现Q*P个AxBxK矩阵乘法运算之外,第一阵列120可以被配置用于第一模式的矩阵乘法运算。第一模式的矩阵乘法运算可以实现Q*A行P*K列的第一矩阵和P*K行B*Q列的第二矩阵之间的乘法运算,也就是1个QxPxAxBxK矩阵乘法运算。由此,本公开的用于矩阵计算的装置能够动态配置实现多种尺寸(例如AxBxK, QxPxAxBxK)的矩阵乘法运算。
Q*A行P*K列的第一矩阵可以被划分成Q行P列个第一子矩阵,每个第一子矩阵包括A行K列个元素。P*K行B*Q列的第二矩阵可以被划分成P行Q列个第二子矩阵,每个第二子矩阵包括K行B列个元素。
每个计算单元110中的存储单元112可以被配置成存储第一子矩阵、对应第二子矩阵以及第一矩阵和第二矩阵相乘的结果中的部分结果。例如,第一阵列120中第i行第j列的计算单元110-ij中的存储单元112可以被配置成存储第i行第j列的第一子矩阵、第j列第i行的第二子矩阵以及作为第一矩阵和第二矩阵相乘的结果的输出矩阵(例如包括Q*A行B*Q列个元素)中第i行第j列的输出子矩阵(例如包括A行B列个元素)。
由此,实现数据在各个计算单元中进行分布式存储,降低局部的乘法器密度,减少局部散热密度,有利于散热。此外,分布式存储还避免了单个尺寸存储池,有利于装置的物理设计布局。
在一些实施例中,第一阵列120中预定对角方向相邻的计算单元110之间可以配置有数据通道。如图1所述,第一阵列120中45度对角方向向量的计算单元110之间配置有预定对角方向的数据通道150。第一模式的矩阵乘法运算还可以实现Q*A行P*K列的第一矩阵的转置和P*K行B*Q列的第二矩阵之间的乘法运算,以及Q*A行P*K列的第一矩阵和P*K行B*Q列的第二矩阵的转置之间的乘法运算。
在一些实施例中,如图2所示,第一阵列220可以被划分为具有相同大小的多个区域230-11至230-MN(统称为230)。每个区域230可以包括至少四个计算单元210-11至210-RS(统称为210)。至少四个计算单元210可以被布置成R行S列的第二阵列240,其中R和S大于1(M*R=Q,N*S=P)。由此,能够在多个区域实现相同尺寸的矩阵乘法运算。在另一些实施例中,第一阵列220可以被划分为具有不同大小的多个区域。例如,对于包括6行6列计算单元210的第一阵列220而言,可以划分为包括2行2列计算单元210的5个区域和包括4行4列计算单元210的1个区域。由此,能够在不同区域实现不同尺寸的矩阵乘法运算。
第二阵列240可以被配置用于第二模式的矩阵乘法运算。第二模式的矩阵乘法运算可以实现R*A行S*K列的第一矩阵和S*K行B*R列的第二矩阵之间的乘法运算、R*A行S*K列的第一矩阵的转置(S*K行R*A列)和S*K行B*R列的第二矩阵之间的乘法运算以及R*A行S*K列的第一矩阵和S*K行B*R列的第二矩阵的转置(B*R行S*K列)之间的乘法运算。
第一阵列220所划分的多个区域可以均用于实现第二模式的矩阵乘法运算,从而实现多个(例如M*N个)RxSxAxBxK矩阵乘法运算或者多个不同尺寸的矩阵乘法运算。也可以将其中至少一个区域用于实现第二模式的矩阵乘法运算,而将其他区域中的每个计算单元实现AxBxK矩阵乘法运算,也就是RxSxAxBxK矩阵乘法运算(或者其他尺寸矩阵乘法运算)与AxBxK矩阵乘法运算的混合。
由此,本公开的用于矩阵计算的装置能够动态配置实现多种尺寸(例如AxBxK,RxSxAxBxK,QxPxAxBxK)的矩阵乘法运算以及不同尺寸矩阵乘法运算的混合(例如,RxSxAxBxK与AxBxK矩阵乘法运算的混合)。
下面结合图3-16描述第一矩阵和第二矩阵均无转置的矩阵乘法运算的过程。
图3示出了根据本公开的实施例的用于矩阵计算的方法300的示意图。第一阵列120可以被配置成响应于第一模式,执行方法300。第二阵列240可以被配置成响应于第二模式,执行方法300。应当理解的是,方法300还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框302,经由阵列中每一行的至少两个计算单元110,按行顺序获取第一矩阵中对应行的至少两个第一子矩阵。
具体来说,经由阵列中第i行的至少两个计算单元110,在第i周期获取第一矩阵中第i行的至少两个第一子矩阵。
在框304,经由横向的数据通道130传输对应行的至少两个第一子矩阵。
具体来说,经由横向的数据通道130向左侧传输第i行的至少两个第一子矩阵,至阵列中第i行第1列的计算单元,随后经由横向的数据通道从阵列中第i行第1列的计算单元向右侧传输第i行的至少两个第一子矩阵,以用于第一矩阵和第二矩阵之间的矩阵乘法运算。
在框306,经由阵列中每一列的至少两个计算单元110,按列顺序获取第二矩阵中对应列的至少两个第二子矩阵。
具体来说,经由阵列中第j列的至少两个计算单元,在第j周期获取第二矩阵中第j列的至少两个第二子矩阵。
在框308,经由纵向的数据通道140传输对应列的至少两个第二子矩阵,以用于第一矩阵和第二矩阵之间的矩阵乘法运算,第二子矩阵中元素的行数与第一子矩阵中元素的列数相同。
具体来说,经由纵向的数据通道向上侧传输第j列的至少两个第二子矩阵,至阵列中第1行第j列的计算单元,随后经由纵向的数据通道从阵列中第1行第j列的计算单元向下侧传输第j列的至少两个第二子矩阵,以用于第一矩阵和第二矩阵之间的矩阵乘法运算。
此外,还可以经由阵列中第i行第j列的计算单元,执行以下步骤:经由横向的数据通道130从左侧接收第i行的至少两个第一子矩阵;经由纵向的数据通道140从上侧接收第j列的至少两个第二子矩阵;对至少两个第一子矩阵和至少两个第二子矩阵进行对应相乘,以生成至少两个第一中间子矩阵;以及将至少两个第一中间子矩阵累加,以生成第一输出矩阵中第i行第j列的第一输出子矩阵,第一输出矩阵为第一矩阵和第二矩阵相乘的结果。
应当理解,这里的阵列可以为第一阵列120,也可以为第二阵列240。阵列为第一阵列120时,第一矩阵和第二矩阵的大小与第一阵列120相对应,阵列为第二阵列240时,第一矩阵和第二矩阵的大小与第二阵列240相对应。
由此,通过阵列中至少两行至少两列的计算单元按行顺序获取和传输第一矩阵中的多个第一子矩阵,以及按列顺序获取和传输第二矩阵中的多个第二子矩阵,以实现多个第一子矩阵和多个第二子矩阵在各个计算单元进行对应相乘,从而实现第一矩阵和第二矩阵的乘法运算。
下面以Q=P=4,A=B=8为例说明Q*A行P*K列(也就是32行4K列)的第一矩阵W和P*K行B*Q列(也就是4K行32列)的第二矩阵X之间的乘法运算。应当理解,这只是为了举例说明,Q、P、A和B的其他取值也是可能的,本公开的范围在此不受限制。还应当理解,虽然以第一阵列为例进行说明,但是对于第二阵列也是适用的。
如图4所示,32行4K列的第一矩阵410可以划分成4行4列个第一子矩阵w11-w44,每个第一子矩阵包括8行K列个元素。4K行32列的第二矩阵420可以划分成4行4列个第二子矩阵x11-x44,每个第二子矩阵包括K行8列个元素。作为第一矩阵和第二矩阵相乘的结果的第一输出矩阵430可以划分成4行4列个第一输出子矩阵y11-y44,其中可以通过第i行的4个第一子矩阵与第j列的4个第二子矩阵对应相乘生成4个第一中间子矩阵,再将这4个第一中间子矩阵相加来生成第i行第j列的第一输出子矩阵yij,例如y11=w11*x11+w12*x21+w13*x31+w14*x41。
如图5所示,第一阵列510可以包括4行4列个计算单元PE-11至PE-44,每个计算单元可用于实现8x8xK矩阵乘法运算。为了实现32行4K列的第一矩阵和4K行32列的第二矩阵之间的乘法运算,可以将第一矩阵中的各个第一子矩阵w11-w41按照左侧的序列进入第一阵列410进行计算,将第二矩阵中的各个第二子矩阵x11-x44按照上侧的序列进入第一阵列510进行计算。例如,对于计算单元PE11而言,w11和x11首先进入PE11进行矩阵相乘,得到w11*x11,随后,w12和x21进入PE11进行矩阵相乘,得到w12*x21,与之前的结果w11*x11累加得到w12*x21+w11*x11,接着w13和x31进入PE11进行矩阵相乘,得到w13*x31,与之前的结果累加得到w13*x31+w12*x21+w11*x11,然后w14和x41进入PE11进行矩阵相乘,得到w14*x41,与之前的结果累积得到w14*x41+w13*x31+w12*x21+w11*x11,作为第1行第1列的第一输出子矩阵。一般而言,第一阵列510中第i行第j列的计算单元PEij依次接收第i行的4个第一子矩阵,以及依次接收第j列的4个第二子矩阵,并基于第i行的4个第一子矩阵和第j列的4个第二子矩阵,计算第i行第j列的第一输出子矩阵。
下面详细说明为了实现按照将第一子矩阵w11-w44和第二子矩阵x11-x44按照上述序列进行计算的数据传输过程。
在第1周期,如图6所示,第一阵列中第1行的4个计算单元PE11-PE14获取第一矩阵中第1行的4个第一子矩阵w11-w14。第一阵列中第1列的4个计算单元PE11-PE41获取第二矩阵中第1列的4个第二子矩阵x11-x41。
在第2周期,如图7所示,第一阵列中第2行的4个计算单元PE21-PE24获取第一矩阵中第2行的4个第一子矩阵w21-w24。第一阵列中第2列的4个计算单元PE12-PE42获取第二矩阵中第2列的4个第二子矩阵x12-x42。
计算单元PE11对第一子矩阵w11和第二子矩阵x11进行矩阵相乘(如图6中PE11右侧所示),以生成第一中间子矩阵w11*x11。此外,计算单元PE11经由横向数据通道向右侧传输第一子矩阵w11,以及经由纵向数据通道向下侧传输第二子矩阵x11(未示出)。
第1行中的另外3个计算单元PE12-PE14分别经由横向数据通道向左侧传输第1行的另外3个第一子矩阵w12-w14。第1列中的另外3个计算单元PE21-PE41分别经由纵向数据通道向上侧传输第1列的另外3个第二子矩阵x21-x41。
在第3周期,如图8所示,第一阵列中第3行的4个计算单元PE31-PE34获取第一矩阵中第3行的4个第一子矩阵w31-w34。第一阵列中第3列的4个计算单元PE13-PE43获取第二矩阵中第3列的4个第二子矩阵x13-x43。
计算单元PE11将第一子矩阵w12和第二子矩阵x21相乘,以生成第一中间子矩阵w12*x21,并与先前的结果累加,得到w11*x11+w12*x21。此外,计算单元PE11经由横向数据通道向右侧传输第一子矩阵w12,以及经由纵向数据通道向下侧传输第二子矩阵x21(未示出)。
计算单元PE12将第一子矩阵w11和第二子矩阵x12相乘,以生成第一中间子矩阵w11*x12。此外,计算单元PE12经由横向数据通道向右侧传输第一子矩阵w11,以及经由纵向数据通道向下侧传输第二子矩阵x12(未示出)。
计算单元PE21将第一子矩阵w21和第二子矩阵x11相乘,以生成第一中间子矩阵w21*x11。此外,计算单元PE21经由横向数据通道向右侧传输第一子矩阵w21,以及经由纵向数据通道向下侧传输第二子矩阵x11(未示出)。
第1行中的2个计算单元PE12-PE13分别经由横向数据通道向左侧传输第一子矩阵w13和w14。第1列中的2个计算单元PE21-PE31分别经由纵向数据通道向上侧传输第二子矩阵x31和x41。第2行中的3个计算单元PE22-PE24分别经由横向数据通道向左侧传输第一子矩阵w22、w23和w24。第2列的3个计算单元PE22-PE42分别经由纵向数据通道向上侧传输第二子矩阵x22、x32和x42。
在第4周期,如图9所示,第一阵列中第4行的4个计算单元PE41-PE44获取第一矩阵中第4行的4个第一子矩阵w41-w44。第一阵列中第4列的4个计算单元PE14-PE44获取第二矩阵中第4列的4个第二子矩阵x14-x44。
计算单元PE11将第一子矩阵w13和第二子矩阵x31相乘,以生成第一中间子矩阵w13*x31,并与先前结果累加,得到w11*x11+w12*x21+w13*x31。此外,计算单元PE11经由横向数据通道向右侧传输第一子矩阵w13,以及经由纵向数据通道向下侧传输第二子矩阵x31(未示出)。
计算单元PE12将第一子矩阵w12和第二子矩阵x22相乘,以生成第一中间子矩阵w12*x22,并与先前结果累加,得到w11*x12+ w12*x22。此外,计算单元PE12经由横向数据通道向右侧传输第一子矩阵w12,以及经由纵向数据通道向下侧传输第二子矩阵x22(未示出)。
计算单元PE21将第一子矩阵w22和第二子矩阵x21相乘,以生成第一中间子矩阵w22*x21,并与先前结果累加,得到w21*x11+ w22*x21。此外,计算单元PE21经由横向数据通道向右侧传输第一子矩阵w22,以及经由纵向数据通道向下侧传输第二子矩阵x21(未示出)。
计算单元PE13将第一子矩阵w11和第二子矩阵x13相乘,以生成第一中间子矩阵w11*x13。此外,计算单元PE13经由横向数据通道向右侧传输第一子矩阵w11,以及经由纵向数据通道向下侧传输第二子矩阵x13(未示出)。
计算单元PE31将第一子矩阵w31和第二子矩阵x11相乘,以生成第一中间子矩阵w31*x11。此外,计算单元PE31经由横向数据通道向右侧传输第一子矩阵w31,以及经由纵向数据通道向下侧传输第二子矩阵x11(未示出)。
计算单元PE22将第一子矩阵w21和第二子矩阵x12相乘,以生成第一中间子矩阵w21*x12。此外,计算单元PE22经由横向数据通道向右侧传输第一子矩阵w21,以及经由纵向数据通道向下侧传输第二子矩阵x12(未示出)。
计算单元PE12经由横向数据通道向左侧传输第一子矩阵w14。计算单元PE21经由纵向数据通道向上侧传输第二子矩阵x41。第2行中的2个计算单元PE22-PE23分别经由横向数据通道向左侧传输第一子矩阵w23和w24。第2列的2个计算单元PE22-PE32分别经由纵向数据通道向上侧传输第二子矩阵x32和x42。第3行中的3个计算单元PE32-PE34分别经由横向数据通道向左侧传输第一子矩阵w32、w33和w34。第3列中的3个计算单元PE24-PE44分别经由纵向数据通道向上侧传输第二子矩阵x23、x33和x43。
在第5周期,如图10所示,计算单元PE11将第一子矩阵w14和第二子矩阵x41相乘,以生成第一中间子矩阵w14*x41,并与先前结果累加,得到w11*x11+w12*x21+w13*x31+w14*x41,也就是第1行第1列的第一输出子矩阵。此外,计算单元PE11经由横向数据通道向右侧传输第一子矩阵w14,以及经由纵向数据通道向下侧传输第二子矩阵x41(未示出)。
计算单元PE12将第一子矩阵w13和第二子矩阵x32相乘,以生成第一中间子矩阵w13*x32,并与先前结果累加,得到w11*x12+ w12*x22+w13*x32。此外,计算单元PE12经由横向数据通道向右侧传输第一子矩阵w13,以及经由纵向数据通道向下侧传输第二子矩阵x32(未示出)。
计算单元PE21将第一子矩阵w23和第二子矩阵x31相乘,以生成第一中间子矩阵w23*x31,并与先前结果累加,得到w21*x11+ w22*x21+w23*x31。此外,计算单元PE21经由横向数据通道向右侧传输第一子矩阵w23,以及经由纵向数据通道向下侧传输第二子矩阵x31(未示出)。
计算单元PE13将第一子矩阵w12和第二子矩阵x23相乘,以生成第一中间子矩阵w12*x23,并与先前结果累加,得到w11*x13+ w12*x23。此外,计算单元PE13经由横向数据通道向右侧传输第一子矩阵w12,以及经由纵向数据通道向下侧传输第二子矩阵x23(未示出)。
计算单元PE31将第一子矩阵w32和第二子矩阵x21相乘,以生成第一中间子矩阵w32*x21,并与先前结果累加,得到w31*x11+w32*x21。此外,计算单元PE31经由横向数据通道向右侧传输第一子矩阵w32,以及经由纵向数据通道向下侧传输第二子矩阵x21(未示出)。
计算单元PE22将第一子矩阵w22和第二子矩阵x22相乘,以生成第一中间子矩阵w22*x22,并与先前结果累加,得到w21*x12+ w22*x22。此外,计算单元PE22经由横向数据通道向右侧传输第一子矩阵w22,以及经由纵向数据通道向下侧传输第二子矩阵x22(未示出)。
计算单元PE14将第一子矩阵w11和第二子矩阵x14相乘,以生成第一中间子矩阵w11*x14。此外,计算单元PE14经由纵向数据通道向下侧传输第二子矩阵x14(未示出)。
计算单元PE23将第一子矩阵w21和第二子矩阵x13相乘,以生成第一中间子矩阵w21*x13。此外,计算单元PE23经由横向数据通道向右侧传输第一子矩阵w21,以及经由纵向数据通道向下侧传输第二子矩阵x13(未示出)。
计算单元PE32将第一子矩阵w31和第二子矩阵x12相乘,以生成第一中间子矩阵w31*x12。此外,计算单元PE32经由横向数据通道向右侧传输第一子矩阵w31,以及经由纵向数据通道向下侧传输第二子矩阵x12(未示出)。
计算单元PE41将第一子矩阵w41和第二子矩阵x11相乘,以生成第一中间子矩阵w41*x11。此外,计算单元PE41经由横向数据通道向右侧传输第一子矩阵w41。
计算单元PE22经由横向数据通道向左侧传输第一子矩阵w24,以及经由纵向数据通道向上侧传输第二子矩阵x42。第3行中的2个计算单元PE32-PE33分别经由横向数据通道向左侧传输第一子矩阵w33和w34。第3列的2个计算单元PE23-PE33分别经由纵向数据通道向上侧传输第二子矩阵x33和x43。第4行中的3个计算单元PE42-PE44分别经由横向数据通道向左侧传输第一子矩阵w42、w43和w44。第4列中的3个计算单元PE24-PE44分别经由纵向数据通道向上侧传输第二子矩阵x24、x34和x44。
在第6周期,如图11所示,计算单元PE12将第一子矩阵w14和第二子矩阵x42相乘,以生成第一中间子矩阵w14*x42,并与先前结果累加,得到w11*x12+ w12*x22+w13*x32+w14*x42,作为第1行第2列的第一输出子矩阵。此外,计算单元PE12经由横向数据通道向右侧传输第一子矩阵w14,以及经由纵向数据通道向下侧传输第二子矩阵x42(未示出)。
计算单元PE21将第一子矩阵w24和第二子矩阵x41相乘,以生成第一中间子矩阵w24*x41,并与先前结果累加,得到w21*x11+ w22*x21+w23*x31+ w24*x41,作为第2行第1列的第一输出子矩阵。此外,计算单元PE21经由横向数据通道向右侧传输第一子矩阵w24,以及经由纵向数据通道向下侧传输第二子矩阵x41(未示出)。
计算单元PE13将第一子矩阵w13和第二子矩阵x33相乘,以生成第一中间子矩阵w13*x33,并与先前结果累加,得到w11*x13+ w12*x23+ w13*x33。此外,计算单元PE13经由横向数据通道向右侧传输第一子矩阵w13,以及经由纵向数据通道向下侧传输第二子矩阵x33(未示出)。
计算单元PE31将第一子矩阵w33和第二子矩阵x31相乘,以生成第一中间子矩阵w33*x31,并与先前结果累加,得到w31*x11+w32*x21+w33*x31。此外,计算单元PE31经由横向数据通道向右侧传输第一子矩阵w33,以及经由纵向数据通道向下侧传输第二子矩阵x31(未示出)。
计算单元PE22将第一子矩阵w23和第二子矩阵x32相乘,以生成第一中间子矩阵w23*x32,并与先前结果累加,得到w21*x12+ w22*x22+ w23*x32。此外,计算单元PE22经由横向数据通道向右侧传输第一子矩阵w23,以及经由纵向数据通道向下侧传输第二子矩阵x32(未示出)。
计算单元PE14将第一子矩阵w12和第二子矩阵x24相乘,以生成第一中间子矩阵w12*x24,并与先前结果累加,得到w11*x14+ w12*x24。此外,计算单元PE14经由纵向数据通道向下侧传输第二子矩阵x24(未示出)。
计算单元PE23将第一子矩阵w22和第二子矩阵x23相乘,以生成第一中间子矩阵w22*x23 ,并与先前结果累加,得到w21*x13+ w22*x23。此外,计算单元PE23经由横向数据通道向右侧传输第一子矩阵w22,以及经由纵向数据通道向下侧传输第二子矩阵x23(未示出)。
计算单元PE32将第一子矩阵w32和第二子矩阵x22相乘,以生成第一中间子矩阵w32*x22,并与先前结果累加,得到w31*x12+ w32*x22。此外,计算单元PE32经由横向数据通道向右侧传输第一子矩阵w32,以及经由纵向数据通道向下侧传输第二子矩阵x22(未示出)。
计算单元PE41将第一子矩阵w42和第二子矩阵x21相乘,以生成第一中间子矩阵w42*x21,并与先前结果累加,得到w41*x11+w42*x21。此外,计算单元PE41经由横向数据通道向右侧传输第一子矩阵w42。
计算单元PE24将第一子矩阵w21和第二子矩阵x14相乘,以生成第一中间子矩阵w21*x14。此外,计算单元PE24经由纵向数据通道向下侧传输第二子矩阵x14(未示出)。
计算单元PE42将第一子矩阵w41和第二子矩阵x12相乘,以生成第一中间子矩阵w41*x12。此外,计算单元PE42经由横向数据通道向右侧传输第一子矩阵w41(未示出)。
计算单元PE33将第一子矩阵w31和第二子矩阵x13相乘,以生成第一中间子矩阵w31*x13。此外,计算单元PE33经由横向数据通道向右侧传输第一子矩阵w31,以及经由纵向数据通道向下侧传输第二子矩阵x13(未示出)。
计算单元PE32经由横向数据通道向左侧传输第一子矩阵w34。计算单元PE23经由纵向数据通道向上侧传输第二子矩阵x43。第4行中的2个计算单元PE42-PE43分别经由横向数据通道向左侧传输第一子矩阵w43和w44。第4列中的2个计算单元PE24-PE34分别经由纵向数据通道向上侧传输第二子矩阵x34和x44。
在第7周期,如图12所示,计算单元PE13将第一子矩阵w14和第二子矩阵x43相乘,以生成第一中间子矩阵w14*x43,并与先前结果累加,得到w11*x13+w12*x23+ w13*x33+w14*x43,作为第1行第3列的第一输出子矩阵。此外,计算单元PE13经由横向数据通道向右侧传输第一子矩阵w14,以及经由纵向数据通道向下侧传输第二子矩阵x43(未示出)。
计算单元PE31将第一子矩阵w34和第二子矩阵x41相乘,以生成第一中间子矩阵w34*x41,并与先前结果累加,得到w31*x11+w32*x21+w33*x31+w34*x41,作为第3行第1列的第一输出子矩阵。此外,计算单元PE31经由横向数据通道向右侧传输第一子矩阵w34,以及经由纵向数据通道向下侧传输第二子矩阵x41(未示出)。
计算单元PE22将第一子矩阵w24和第二子矩阵x42相乘,以生成第一中间子矩阵w24*x42,并与先前结果累加,得到w21*x12+ w22*x22+ w23*x32+w24*x42,作为第2行第2列的第一输出子矩阵。此外,计算单元PE22经由横向数据通道向右侧传输第一子矩阵w24,以及经由纵向数据通道向下侧传输第二子矩阵x42(未示出)。
计算单元PE14将第一子矩阵w13和第二子矩阵x34相乘,以生成第一中间子矩阵w13*x34,并与先前结果累加,得到w11*x14+ w12*x24+w13*x34。此外,计算单元PE14经由纵向数据通道向下侧传输第二子矩阵x34(未示出)。
计算单元PE23将第一子矩阵w23和第二子矩阵x33相乘,以生成第一中间子矩阵w23*x33,并与先前结果累加,得到w21*x13+ w22*x23+ w23*x33。此外,计算单元PE23经由横向数据通道向右侧传输第一子矩阵w23,以及经由纵向数据通道向下侧传输第二子矩阵x33(未示出)。
计算单元PE32将第一子矩阵w33和第二子矩阵x32相乘,以生成第一中间子矩阵w33*x32,并与先前结果累加,得到w31*x12+ w32*x22+ w33*x32。此外,计算单元PE32经由横向数据通道向右侧传输第一子矩阵w33,以及经由纵向数据通道向下侧传输第二子矩阵x32(未示出)。
计算单元PE41将第一子矩阵w43和第二子矩阵x31相乘,以生成第一中间子矩阵w43*x31,并与先前结果累加,得到w41*x11+w42*x21+w43*x31。此外,计算单元PE41经由横向数据通道向右侧传输第一子矩阵w43。
计算单元PE24将第一子矩阵w22和第二子矩阵x24相乘,以生成第一中间子矩阵w22*x24,并与先前结果累加,得到w21*x14 +w22*x24。此外,计算单元PE24经由纵向数据通道向下侧传输第二子矩阵x24。
计算单元PE33将第一子矩阵w32和第二子矩阵x23相乘,以生成第一中间子矩阵w32*x23,并先前结果累加,得到w31*x13+w32*x23。此外,计算单元PE43经由横向数据通道向右侧传输第一子矩阵w32,以及经由纵向数据通道向下侧传输第二子矩阵x23。
计算单元PE42将第一子矩阵w42和第二子矩阵x22相乘,以生成第一中间子矩阵w42*x22,并与先前结果累加,得到w41*x12+w42*x22。此外,计算单元PE42经由横向数据通道向右侧传输第一子矩阵w42。
计算单元PE34将第一子矩阵w31和第二子矩阵x14相乘,以生成第一中间子矩阵w31*x14。此外,计算单元PE34经由纵向数据通道向下侧传输第二子矩阵x14。
计算单元PE43将第一子矩阵w41和第二子矩阵x13相乘,以生成第一中间子矩阵w41*x13。此外,计算单元PE43经由横向数据通道向右侧传输第一子矩阵w41。
计算单元PE42经由横向数据通道向左侧传输第一子矩阵w44。计算单元PE24经由纵向数据通道向上侧传输第二子矩阵x44。
在第8周期,如图13所示,计算单元PE14将第一子矩阵w14和第二子矩阵x44相乘,以生成第一中间子矩阵w14*x44,并先前结果累加,得到w11*x14+ w12*x24+w13*x34+w14*x44,作为第1行第4列的第一输出子矩阵。此外,计算单元PE14经由纵向数据通道向下侧传输第二子矩阵x44(未示出)。
计算单元PE23将第一子矩阵w24和第二子矩阵x43相乘,以生成第一中间子矩阵w24*x43,并与先前结果累加,得到w21*x13+ w22*x23+w23*x33+w24*x43,作为第2行第3列的第一输出子矩阵。此外,计算单元PE23经由横向数据通道向右侧传输第一子矩阵w24,以及经由纵向数据通道向下侧传输第二子矩阵x43(未示出)。
计算单元PE32将第一子矩阵w34和第二子矩阵x42相乘,以生成第一中间子矩阵w34*x42,并与先前结果累加,得到w31*x12+ w32*x22+ w33*x32+w34*x42,作为第3行第2列的第一输出子矩阵。此外,计算单元PE32经由横向数据通道向右侧传输第一子矩阵w34,以及经由纵向数据通道向下侧传输第二子矩阵x42(未示出)。
计算单元PE41将第一子矩阵w44和第二子矩阵x41相乘,以生成第一中间子矩阵w44*x41,并与先前结果累加,得到w41*x11+w42*x21+w43*x31+w44*x41,作为第4行第1列的第一输出子矩阵。此外,计算单元PE41经由横向数据通道向右侧传输第一子矩阵w44。
计算单元PE24将第一子矩阵w23和第二子矩阵x34相乘,以生成第一中间子矩阵w23*x34,并与先前结果累加,得到w21*x14 +w22*x24+w23*x34。此外,计算单元PE24经由纵向数据通道向下侧传输第二子矩阵x34。
计算单元PE33将第一子矩阵w33和第二子矩阵x33相乘,以生成第一中间子矩阵w33*x33,并与先前结果累加,得到w31*x13+w32*x23+w33*x33。此外,计算单元PE33经由横向数据通道向右侧传输第一子矩阵w33,以及经由纵向数据通道向下侧传输第二子矩阵x33。
计算单元PE42将第一子矩阵w43和第二子矩阵x32相乘,以生成第一中间子矩阵w43*x32,并与先前结果累加,得到w41*x12+w42*x22+w43*x32。此外,计算单元PE42经由横向数据通道向右侧传输第一子矩阵w43。
计算单元PE34将第一子矩阵w32和第二子矩阵x24相乘,以生成第一中间子矩阵w32*x24,并与先前结果累加,得到w31*x14+w32*x24。此外,计算单元PE34经由纵向数据通道向下侧传输第二子矩阵x24。
计算单元PE43将第一子矩阵w42和第二子矩阵x23相乘,以生成第一中间子矩阵w42*x23,并与先前结果累加,得到w41*x13+w42*x23。此外,计算单元PE43经由横向数据通道向右侧传输第一子矩阵w42。
计算单元PE44将第一子矩阵w41和第二子矩阵x14相乘,以生成第一中间子矩阵w41*x14。
在第9周期,如图14所示,计算单元PE24将第一子矩阵w24和第二子矩阵x44相乘,以生成第一中间子矩阵w24*x44,并与先前结果累加,得到w21*x14 +w22*x24+w23*x34+w24*x44,作为第2行第4列的第一输出子矩阵。此外,计算单元PE24经由纵向数据通道向下侧传输第二子矩阵x44。
计算单元PE33将第一子矩阵w34和第二子矩阵x43相乘,以生成第一中间子矩阵w34*x43,并与先前结果累加,得到w31*x13+w32*x23+w33*x33+w34*x43,作为第3行第3列的第一输出子矩阵。此外,计算单元PE33经由横向数据通道向右侧传输第一子矩阵w34,以及经由纵向数据通道向下侧传输第二子矩阵x43。
计算单元PE42将第一子矩阵w44和第二子矩阵x42相乘,以生成第一中间子矩阵w44*x42,并与先前结果累加,得到w41*x12+w42*x22+w43*x32+w44*x42,作为第4行第2列的第一输出子矩阵。此外,计算单元PE42经由横向数据通道向右侧传输第一子矩阵w44。
计算单元PE34将第一子矩阵w33和第二子矩阵x34相乘,以生成第一中间子矩阵w33*x34,并与先前结果累加,得到w31*x14+w32*x24+w33*x34。此外,计算单元PE34经由纵向数据通道向下侧传输第二子矩阵x34。
计算单元PE43将第一子矩阵w43和第二子矩阵x33相乘,以生成第一中间子矩阵w43*x33,并与先前结果累加,得到w41*x13+w42*x23+ w43*x33。此外,计算单元PE43经由横向数据通道向右侧传输第一子矩阵w43。
计算单元PE44将第一子矩阵w42和第二子矩阵x24相乘,以生成第一中间子矩阵w42*x24,并与先前结果累加,得到w41*x14+w42*x24。
在第10周期,如图15所示,计算单元PE34将第一子矩阵w34和第二子矩阵x44相乘,以生成第一中间子矩阵w34*x44, 并与先前结果累加,得到w31*x14+w32*x24+w33*x34+w34*x44,作为第3行第4列的第一输出子矩阵。此外,计算单元PE34经由纵向数据通道向下侧传输第二子矩阵x44。
计算单元PE43将第一子矩阵w44和第二子矩阵x43相乘,以生成第一中间子矩阵w44*x43,并与先前结果累加,得到 w41*x13+w42*x23+ w43*x33+ w44*x43,作为第4行第3列的第一输出子矩阵。此外,计算单元PE43经由横向数据通道向右侧传输第一子矩阵w44。
计算单元PE44将第一子矩阵w43和第二子矩阵x34相乘,以生成第一中间子矩阵w43*x34,并与先前结果累加,得到w41*x14+w42*x24+ w43*x34。
在第11周期,如图16所示,计算单元PE44将第一子矩阵w44和第二子矩阵x44相乘,以生成第一中间子矩阵w44*x44,并与先前结果累加,得到w41*x14+w42*x24+ w43*x34+w44*x44,作为第4行第4列的第一输出子矩阵。
至此,得到4行4列个第一输出子矩阵,也就得到了作为第一矩阵和第二矩阵相乘的结果的第一输出矩阵。
下面结合图17-图34描述第一矩阵的转置(也称为左矩阵转置)与第二矩阵相乘的矩阵乘法运算的过程。
图17示出了根据本公开的实施例的用于矩阵计算的方法1700的示意图。第一阵列120可以被配置成响应于第一模式,执行方法1700。第二阵列240可以被配置成响应于第二模式,执行方法1700。应当理解的是,方法1700还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框1702处,经由阵列中每一行的至少两个计算单元,按行逆序获取第一矩阵中对应行的至少两个第一子矩阵的转置。
具体来说,经由阵列中第i行的至少两个计算单元,在第Q-i+1周期获取第一矩阵中第i行的至少两个第一子矩阵的转置,Q为阵列中计算单元的行数。
在框1704处,经由横向和预定对角方向的数据通道传输第一矩阵中对应行的至少两个第一子矩阵的转置,以用于第一矩阵的转置和第二矩阵之间的矩阵乘法运算。
下文结合图18详细描述用于经由横向和预定对角方向的数据通道传输第一矩阵中对应行的至少两个第一子矩阵的转置的方法。
在框1706处,经由阵列中每一列的至少两个计算单元,按列顺序获取第二矩阵中对应列的至少两个第二子矩阵。
具体来说,经由阵列中第j列的至少两个计算单元,在第Q-1+j周期获取第二矩阵中第j列的至少两个第二子矩阵。
在框1708处,经由纵向的数据通道传输第二矩阵中对应列的至少两个第二子矩阵,以用于第一矩阵的转置和第二矩阵之间的矩阵乘法运算,第二子矩阵中元素的行数与第一子矩阵的转置中元素的列数相同。
具体来说,经由纵向的数据通道向上侧传输第j列的至少两个第二子矩阵,至阵列中第1行第j列的计算单元。
随后,经由纵向的数据通道从阵列中第1行第j列的计算单元向下侧传输第j列的至少两个第二子矩阵,以用于第一矩阵的转置和第二矩阵之间的矩阵乘法运算。
在一些实施例中,还可以经由阵列中第i行第j列的计算单元,执行以下步骤:经由横向的数据通道从左侧接收第i列的至少两个第一子矩阵的转置;经由纵向的数据通道从上侧接收第j列的至少两个第二子矩阵;对至少两个第一子矩阵的转置和至少两个第二子矩阵进行对应相乘,以生成至少两个第二中间子矩阵;以及将至少两个第二中间子矩阵累加,以生成第二输出矩阵中第i行第j列的第二输出子矩阵,第二输出矩阵为第一矩阵的转置和第二矩阵相乘的结果。
由此,通过阵列中至少两行至少两列的计算单元按行逆序获取和传输第一矩阵中的多个第一子矩阵的转置,以及按列顺序获取和传输第二矩阵中的多个第二子矩阵,以实现多个第一子矩阵的转置和多个第二子矩阵在各个计算单元进行对应相乘,从而实现第一矩阵的转置和第二矩阵的乘法运算。
图18示出了根据本公开的实施例的用于经由横向和预定对角方向的数据通道传输第一矩阵中对应行的至少两个第一子矩阵的转置的方法1800的示意图。应当理解的是,方法1800还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框1802,经由预定对角方向和横向的数据通道,将第一矩阵中第i行的至少两个第一子矩阵的转置经由2i-2个周期传输到阵列中第1行的至少两个计算单元。
具体来说,经由预定对角方向的数据通道,将第一矩阵中第i行第1列的第一子矩阵的转置传输到阵列中第1行第i列的计算单元。随后,经由横向的数据通道,将第一矩阵中第i行第1列的第一子矩阵的转置从阵列中第1行第i列的计算单元传输到第1行第1列的计算单元。
对于第一矩阵中第i行非第1列的至少一个第一子矩阵的转置,迭代执行以下步骤,直至第一矩阵中第i行非第1列的至少一个第一子矩阵的转置到达阵列中第1行非第1列的至少一个计算单元:经由横向的数据通道,将第i行非第1列的至少一个第一子矩阵的转置从阵列中当前行当前列的计算单元传输到阵列中相同行前一列的计算单元;以及经由预定对角方向的数据通道,将第i行非第1列的至少一个第一子矩阵的转置从阵列中相同行前一列的计算单元传输到阵列中前一行相同列的计算单元。也就是按照Z型将第一矩阵中第i行非第1列的至少一个第一子矩阵的转置传输到阵列中第1行非第1列的至少一个计算单元。
在框1804,经由预定对角方向的数据通道,将第一矩阵中第i行的至少两个第一子矩阵的转置从阵列中第1行的至少两个计算单元传输到阵列中第1列的至少两个计算单元。
在框1806,经由横向的数据通道从阵列中第1列的至少两个计算单元向右侧传输第一矩阵中第i行的至少两个第一子矩阵的转置,以用于第一矩阵的转置和第二矩阵之间的矩阵乘法运算。
由此,使得第一子矩阵的转置能够按照与第二子矩阵相匹配的序列进入阵列进行计算,从而实现第一矩阵的转置与第二矩阵之间的矩阵乘法运算。
下面以Q=P=4,A=B=8为例说明Q*A行P*K列(也就是32行4K列)的第一矩阵W的转置(4K行32列)和P*K行B*Q列(也就是4K行32列)的第二矩阵dY之间的乘法运算。应当理解,这只是为了举例说明,Q、P、A和B的其他取值也是可能的,本公开的范围在此不受限制。还应当理解,虽然以第一阵列为例进行说明,但是对于第二阵列也是适用的。
参照图4,32行4K列的第一矩阵410可以划分成4行4列个第一子矩阵w11-w44,每个第一子矩阵包括8行K列个元素。如图19所示,第一矩阵410经过转置可以得到4K行32列的转置矩阵1910,第一矩阵310的转置1910可以划分成4行4列个第一子矩阵w11-w44的转置w11t-w44t。
4K行32列的第二矩阵1920可以划分成4行4列个第二子矩阵dY11-dY44,每个第二子矩阵包括K行8列个元素。
作为第一矩阵的转置1910和第二矩阵相乘的结果的第二输出矩阵1930可以划分成4行4列个第二输出子矩阵dX11-dX44,其中可以通过第一矩阵410中第i列的4个第一子矩阵w1i-w4i的转置w1it-w4it与第j列的4个第二子矩阵dY1j-dY4j对应相乘生成4个第二中间子矩阵,再将这4个第二中间子矩阵相加来生成第i行第j列的第二输出子矩阵dXij,例如dX=w11t*dY11+w21t* dY 21+w31t* dY 31+w41t* dY 41。
如图20所示,第一阵列2010可以包括4行4列个计算单元PE-11至PE-44,每个计算单元可用于实现8x8xK矩阵乘法运算。为了实现32行4K列的第一矩阵410的转置1910(4K行32列)和4K行32列的第二矩阵之间的乘法运算,可以将第一矩阵410中的各个第一子矩阵w11-w41经过转置的结果w11t-w44t按照左侧的序列进入第一阵列2010进行计算,将第二矩阵中的各个第二子矩阵x11-x44按照上侧的序列进入第一阵列2010进行计算。例如,对于计算单元PE11而言,w11t和x11首先进入PE11进行矩阵相乘,得到w11t*x11,随后,w21t和x21进入PE11进行矩阵相乘,得到w21t*x21,与之前的结果w11t*x11累加得到w21t*x21+w11t*x11,接着w31t和x31进入PE11进行矩阵相乘,得到w31t*x31,与之前的结果累加得到w31t*x31+ w21t*x21+w11t*x11,然后w41t和x41进入PE11进行矩阵相乘,得到w41t*x41,与之前的结果累积得到w41t*x41+w31t*x31+ w21t*x21+w11t*x11,作为第1行第1列的第二输出子矩阵。一般而言,第一阵列2010中第i行第j列的计算单元PEij依次接收第一矩阵410中第i列的4个第一子矩阵w1i-w4i经过转置的结果w1it-w4it,以及依次接收第j列的4个第二子矩阵,并基于第一矩阵410中第i列的4个第一子矩阵w1i-w4i经过转置的结果w1it-w4it和第j列的4个第二子矩阵,计算第i行第j列的第二输出子矩阵。
下面详细说明为了实现按照将第一子矩阵w11-w44的转置w11t-w44t和第二子矩阵x11-x44按照上述序列进行计算的数据传输过程。
在第1周期,如图21所示,第一阵列中第4行的4个计算单元PE41-PE44获取第一矩阵中第4行的4个第一子矩阵w41-w44的转置w41t-w44t。
在第2周期,如图22所示,第一阵列中第3行的4个计算单元PE31-PE34获取第一矩阵中第3行的4个第一子矩阵w31-w34的转置w31t-w34t。
第一阵列中第4行第1列的计算单元PE41经由预定对角方向的数据通道向第3行第2列的计算单元PE32传输第一子矩阵w41的转置w41t。第一阵列中第4行另外3个计算单元PE42-PE44经由横向的数据通道向左侧传输3个第一子矩阵w42-w44的转置w42t-w44t。
在第3周期,如图23所示,第一阵列中第2行的4个计算单元PE21-PE24获取第一矩阵中第2行的4个第一子矩阵w21-w24的转置w21t-w24t。
第一阵列中第3行第1列的计算单元PE31经由预定对角方向的数据通道向第2行第2列的计算单元PE22传输第一子矩阵w31的转置w31t。第一阵列中第3行另外3个计算单元PE32-PE34经由横向的数据通道向左侧传输3个第一子矩阵w32-w34的转置w32t-w34t。第一阵列中第3行第2列的计算单元PE32经由预定对角方向的数据通道向第2行第3列的计算单元PE23传输第一子矩阵w41的转置w41t。
第一阵列中第4行的3个计算单元PE41-PE43经由预定对角方向的数据通道向第3行的3个计算单元PE32-PE34传输3个第一子矩阵w42-w44的转置w42t-w44t。
在第4周期,如图24所示,第一阵列中第1行的4个计算单元PE11-PE14获取第一矩阵中第1行的4个第一子矩阵w11-w14的转置w11t-w14t。
第一阵列中第2行第1列的计算单元PE21经由预定对角方向的数据通道向第1行第2列的计算单元PE12传输第一子矩阵w21的转置w21t。第一阵列中第2行另外3个计算单元PE22-PE24经由横向的数据通道向左侧传输3个第一子矩阵w22-w24的转置w22t-w24t。第一阵列中第2行第2列的计算单元PE22经由预定对角方向的数据通道向第1行第3列的计算单元PE13传输第一子矩阵w31的转置w31t。第一阵列中第2行第3列的计算单元PE23经由预定对角方向的数据通道向第1行第4列的计算单元PE14传输第一子矩阵w41的转置w41t。
第一阵列中第3行的3个计算单元PE31-PE33经由预定对角方向的数据通道向第2行的3个计算单元PE22-PE24传输3个第一子矩阵w32-w34的转置w32t-w34t。第一阵列中第3行的3个计算单元PE32-PE34经由横向的数据通道向左侧传输3个第一子矩阵w42-w44的转置w42t-w44t。
第一阵列中第1列的4个计算单元PE11-PE41获取第二矩阵中第1列的4个第二子矩阵dY11-dY41。
在第5周期,如图25所示,第一阵列中第1行第1列的计算单元PE11将第一子矩阵w11的转置w11t与第二子矩阵dY11相乘,以生成第二中间子矩阵w11t*dY11,将第一子矩阵w11的转置w11t经由横向的数据通道向右侧传输到PE12,将第二子矩阵dY11经由纵向的数据通道向下侧传输到PE21。第一阵列中第1行另外3个计算单元PE12-PE14经由预定对角方向的数据通道向第一阵列中第2行的3个计算单元PE21-PE23传输3个第一子矩阵w12-w14的转置w12t-w14t。计算单元PE12-PE14还经由横向的数据通道向左侧传输3个第一子矩阵w21-w41的转置w21t-w41t。
第一阵列中第2行的3个计算单元PE21-PE23经由预定对角方向的数据通道向第1行的3个计算单元PE12-PE14传输3个第一子矩阵w22-w24的转置w22t-w24t。第一阵列中第2行的3个计算单元PE22-PE24经由横向的数据通道向左侧传输3个第一子矩阵w32-w34的转置w32t-w34t。
第一阵列中第3行的3个计算单元PE31-PE33经由预定对角方向的数据通道向第2行的3个计算单元PE22-PE24传输3个第一子矩阵w42-w44的转置w42t-w44t。
第一阵列中第1列的3个计算单元PE21-PE41经由纵向的数据通道向上侧传输第二矩阵中第1列的3个第二子矩阵dY21-dY41。
第一阵列中第2列的4个计算单元PE12-PE42获取第二矩阵中第2列的4个第二子矩阵dY12-dY42。
在第6周期,如图26所示,第一阵列中第1行第1列的计算单元PE11将第一子矩阵w21的转置w21t与第二子矩阵dY21相乘,以生成第二中间子矩阵w21t*dY21,并且与先前结果累加,以生成w11t*dY11+w21t*dY21。PE11还将第一子矩阵w21的转置w21t经由横向的数据通道向右侧传输到PE12,将第二子矩阵dY21经由纵向的数据通道向下侧传输到PE21。第一阵列中第1行另外3个计算单元PE12-PE14经由预定对角方向的数据通道向第一阵列中第2行的3个计算单元PE21-PE23传输3个第一子矩阵w22-w24的转置w22t-w24t。计算单元PE12-PE13还经由横向的数据通道向左侧传输2个第一子矩阵w31-w41的转置w31t-w41t。计算单元PE12将第一子矩阵w11的转置w11t与第二子矩阵dY12相乘,以生成第二中间子矩阵w11t*dY12,以及经由横向的数据通道向右侧传输第一子矩阵w11的转置w11t到PE13,经由纵向的数据通道将第二子矩阵dY12向下侧传输到PE22。
第一阵列中第2行的3个计算单元PE21-PE23经由预定对角方向的数据通道向第1行的3个计算单元PE12-PE14传输3个第一子矩阵w32-w34的转置w32t-w34t。第一阵列中第2行的3个计算单元PE22-PE24经由横向的数据通道向左侧传输3个第一子矩阵w42-w44的转置w42t-w44t。计算单元PE21将第一子矩阵w12的转置w12t与第二子矩阵dY11相乘,以生成第二中间子矩阵w12t*dY11,以及经由横向的数据通道向右侧传输第一子矩阵w12的转置w12t到PE22,经由纵向的数据通道向下侧传输第二子矩阵dY11到PE31。PE22和PE23经由预定对角方向的数据通道向第3行的2个计算单元PE31和PE32传输2个第一子矩阵w13-w14的转置w13t-w14t。
第一阵列中第1列的2个计算单元PE21-PE31经由纵向的数据通道向上侧传输第二矩阵中第1列的2个第二子矩阵dY31-dY41。
第一阵列中第2列的3个计算单元PE22-PE42经由纵向的数据通道向上侧传输第二矩阵中第2列的3个第二子矩阵dY22-dY42。
第一阵列中第3列的4个计算单元PE13-PE43获取第二矩阵中第3列的4个第二子矩阵dY13-dY43。
在第7周期,如图27所示,第一阵列中第1行第1列的计算单元PE11将第一子矩阵w31的转置w31t与第二子矩阵dY31相乘,以生成第二中间子矩阵w31t*dY31,并且与先前结果累加,以生成w11t*dY11+w21t*dY21+ w31t*dY31。PE11还将第一子矩阵w31的转置w31t经由横向的数据通道向右侧传输到PE12,将第二子矩阵dY31经由纵向的数据通道向下侧传输到PE21。第一阵列中第1行另外3个计算单元PE12-PE14经由预定对角方向的数据通道向第一阵列中第2行的3个计算单元PE21-PE23传输3个第一子矩阵w32-w34的转置w32t-w34t。计算单元PE12还经由横向的数据通道向左侧传输第一子矩阵w41的转置w41t。计算单元PE12将第一子矩阵w21的转置w21t与第二子矩阵dY22相乘,以生成第二中间子矩阵w21*dY22,并与先前结果累加,以得到w11t*dY12+ w21*dY22,以及经由横向的数据通道向右侧传输第一子矩阵w21的转置w21t到PE13,经由纵向的数据通道将第二子矩阵dY22向下侧传输到PE22。计算单元PE13将第一子矩阵w11的转置w11t与第二子矩阵dY13相乘,以生成第二中间子矩阵w11t*dY13,经由横向的数据通道向右侧传输第一子矩阵w11的转置w11t到PE14,经由纵向的数据通道将第二子矩阵dY13向下侧传输到PE23。
第一阵列中第2行的3个计算单元PE21-PE23经由预定对角方向的数据通道向第1行的3个计算单元PE12-PE14传输3个第一子矩阵w42-w44的转置w42t-w44t。计算单元PE21将第一子矩阵w22的转置w22t与第二子矩阵dY21相乘,以生成第二中间子矩阵w22t*dY21,并与先前结果累加,以得到w12t*dY11+w22t*dY21,以及经由横向的数据通道向右侧传输第一子矩阵w22的转置w22t到PE22,经由纵向的数据通道向下侧传输第二子矩阵dY21到PE31。PE22和PE23经由预定对角方向的数据通道向第3行的2个计算单元PE31和PE32传输2个第一子矩阵w23-w24的转置w23t-w24t。PE22将第一子矩阵w12的转置w12t与第二子矩阵dY12相乘,以生成第二中间子矩阵w12t*dY12,并且经由横向的数据通道将第一子矩阵w12的转置w12t向右侧传输到PE23,经由纵向的数据通道将第二子矩阵dY12向下侧传输到PE32。
第一阵列中第3行的计算单元PE31将第一子矩阵w13的转置w13t与第二子矩阵dY11相乘,以生成第二中间子矩阵w13t*dY11,并且经由横向的数据通道向右侧传输第一子矩阵w13的转置w13t到PE32,经由纵向的数据通道向下侧传输第二子矩阵dY11到PE41。计算单元PE32将第一子矩阵w14的转置w14t经由预定对角方向的数据通道传输到第一阵列中第4行第1列的PE41。
第一阵列中第1列的计算单元PE21经由纵向的数据通道向上侧传输第二矩阵中第1列的第二子矩阵dY41。
第一阵列中第2列的2个计算单元PE22-PE32经由纵向的数据通道向上侧传输第二矩阵中第2列的2个第二子矩阵dY32-dY42。
第一阵列中第3列的3个计算单元PE23-PE43经由纵向的数据通道向上侧传输第二矩阵中第3列的3个第二子矩阵dY23-dY43。
第一阵列中第4列的4个计算单元PE14-PE44获取第二矩阵中第4列的4个第二子矩阵dY14-dY44。
在第8周期,如图28所示,第一阵列中第1行第1列的计算单元PE11将第一子矩阵w41的转置w41t与第二子矩阵dY41相乘,以生成第二中间子矩阵w41t*dY41,并且与先前结果累加,以生成w11t*dY11+w21t*dY21+ w31t*dY31 +w41t*dY41,作为第二输出矩阵中第1行第1列的第二输出子矩阵。PE11还将第一子矩阵w41的转置w41t经由横向的数据通道向右侧传输到PE12,将第二子矩阵dY41经由纵向的数据通道向下侧传输到PE21。第一阵列中第1行另外3个计算单元PE12-PE14经由预定对角方向的数据通道向第一阵列中第2行的3个计算单元PE21-PE23传输3个第一子矩阵w42-w44的转置w42t-w44t。计算单元PE12将第一子矩阵w31的转置w31t与第二子矩阵dY32相乘,以生成第二中间子矩阵w31*dY32,并与先前结果累加,以得到w11t*dY12+ w21*dY22+w31*dY32,以及经由横向的数据通道向右侧传输第一子矩阵w31的转置w31t到PE13,经由纵向的数据通道将第二子矩阵dY32向下侧传输到PE22。计算单元PE13将第一子矩阵w21的转置w21t与第二子矩阵dY23相乘,以生成第二中间子矩阵w21t*dY23,并与先前结果累加,以得到w11t*dY13 +w21t*dY23,经由横向的数据通道向右侧传输第一子矩阵w21的转置w21t到PE14,经由纵向的数据通道将第二子矩阵dY23向下侧传输到PE23。计算单元PE14将第一子矩阵w11的转置w11t与第二子矩阵dY14相乘,以生成第二中间子矩阵w11t*dY14,并且经由纵向的数据通道向下侧传输第二子矩阵dY14到PE24。
计算单元PE21将第一子矩阵w32的转置w32t与第二子矩阵dY31相乘,以生成第二中间子矩阵w32t*dY31,并与先前结果累加,以得到w12t*dY11+w22t*dY21+ w32t*dY31,以及经由横向的数据通道向右侧传输第一子矩阵w32的转置w32t到PE22,经由纵向的数据通道向下侧传输第二子矩阵dY31到PE31。PE22和PE23经由预定对角方向的数据通道向第3行的2个计算单元PE31和PE32传输2个第一子矩阵w33-w34的转置w33t-w34t。PE22将第一子矩阵w22的转置w22t与第二子矩阵dY22相乘,以生成第二中间子矩阵w22t*dY22,并与先前结果累加,得到w12t*dY12 +w22t*dY22,并且经由横向的数据通道将第一子矩阵w22的转置w22t向右侧传输到PE23,经由纵向的数据通道将第二子矩阵dY22向下侧传输到PE32。PE23将第一子矩阵w12的转置w12t与第二子矩阵dY13相乘,以生成第二中间子矩阵w12t*dY13,并且经由纵向的数据通道向下侧传输第二子矩阵dY13到PE33。
第一阵列中第3行的计算单元PE31将第一子矩阵w23的转置w23t与第二子矩阵dY21相乘,以生成第二中间子矩阵w23t*dY21,并与先前结果累加,得到w13t*dY11+ w23t*dY21,并且经由横向的数据通道向右侧传输第一子矩阵w23的转置w23t到PE32,经由纵向的数据通道向下侧传输第二子矩阵dY21到PE41。计算单元PE32将第一子矩阵w24的转置w24t经由预定对角方向的数据通道传输到第一阵列中第4行第1列的PE41。PE32将第一子矩阵w13的转置w13t与第二子矩阵dY12相乘,以生成第二中间子矩阵w13t*dY12,并且经由横向的数据通道向右侧传输第一子矩阵w13的转置w13t到PE33,经由纵向的数据通道向下侧传输第二子矩阵dY12到PE42。
第一阵列中第4行的计算单元PE41将第一子矩阵w14的转置w14t与第二子矩阵dY11相乘,以生成第二中间子矩阵w14t*dY11,并且经由横向的数据通道向右侧传输第一子矩阵w14的转置w14t到PE42。
第一阵列中第2列的计算单元PE22经由纵向的数据通道向上侧传输第二矩阵中第2列的第二子矩阵dY42。
第一阵列中第3列的2个计算单元PE23-PE33经由纵向的数据通道向上侧传输第二矩阵中第3列的2个第二子矩阵dY33-dY43。
第一阵列中第4列的3个计算单元PE24-PE44经由纵向的数据通道向上侧传输第二矩阵中第4列的3个第二子矩阵dY24-dY44。
在第9周期,如图29所示,计算单元PE12将第一子矩阵w41的转置w41t与第二子矩阵dY42相乘,以生成第二中间子矩阵w41*dY42,并与先前结果累加,以得到w11t*dY12+w21*dY22+w31*dY32 +w41*dY42,作为第1行第2列的第二输出子矩阵,以及经由横向的数据通道向右侧传输第一子矩阵w41的转置w41t到PE13,经由纵向的数据通道将第二子矩阵dY42向下侧传输到PE22。计算单元PE13将第一子矩阵w31的转置w31t与第二子矩阵dY33相乘,以生成第二中间子矩阵w31t*dY33,并与先前结果累加,以得到w11t*dY13 +w21t*dY23+w31t*dY33,经由横向的数据通道向右侧传输第一子矩阵w31的转置w31t到PE14,经由纵向的数据通道将第二子矩阵dY33向下侧传输到PE23。计算单元PE14将第一子矩阵w21的转置w21t与第二子矩阵dY24相乘,以生成第二中间子矩阵w21t*dY24,并与先前结果累加,得到w11t*dY14+w21t*dY24,并且经由纵向的数据通道向下侧传输第二子矩阵dY24到PE 24。
计算单元PE21将第一子矩阵w42的转置w42t与第二子矩阵dY41相乘,以生成第二中间子矩阵w42t*dY41,并与先前结果累加,以得到w12t*dY11+w22t*dY21+ w32t*dY31+w42t*dY41,作为第2行第1列的第二输出子矩阵,以及经由横向的数据通道向右侧传输第一子矩阵w42的转置w42t到PE22,经由纵向的数据通道向下侧传输第二子矩阵dY41到PE31。PE22和PE23经由预定对角方向的数据通道向第3行的2个计算单元PE31和PE32传输2个第一子矩阵w43-w44的转置w43t-w44t。PE22将第一子矩阵w32的转置w32t与第二子矩阵dY32相乘,以生成第二中间子矩阵w32t*dY32,并与先前结果累加,得到w12t*dY12 +w22t*dY22+w32t*dY32,并且经由横向的数据通道将第一子矩阵w32的转置w32t向右侧传输到PE23,经由纵向的数据通道将第二子矩阵dY32向下侧传输到PE32。PE23将第一子矩阵w22的转置w22t与第二子矩阵dY23相乘,以生成第二中间子矩阵w22t*dY23,并与先前结果累加,得到w12t*dY13+w22t*dY23,以及经由横向的数据通道向右侧传输第一子矩阵w22的转置w22t到PE24,经由纵向的数据通道向下侧传输第二子矩阵dY23到PE33。PE24将第一子矩阵w12的转置w12t与第二子矩阵dY14相乘,以生成第二中间子矩阵w12t*dY14,并且经由纵向的数据通道向下侧传输第二子矩阵dY14到PE34。
第一阵列中第3行的计算单元PE31将第一子矩阵w33的转置w33t与第二子矩阵dY31相乘,以生成第二中间子矩阵w33t*dY31,并与先前结果累加,得到w13t*dY11+ w23t*dY21+ w33t*dY31,并且经由横向的数据通道向右侧传输第一子矩阵w33的转置w33t到PE32,经由纵向的数据通道向下侧传输第二子矩阵dY31到PE41。计算单元PE32将第一子矩阵w34的转置w34t经由预定对角方向的数据通道传输到第一阵列中第4行第1列的PE41。PE32将第一子矩阵w23的转置w23t与第二子矩阵dY22相乘,以生成第二中间子矩阵w23t*dY22,并与先前结果累加,得到w13t*dY12+w23t*dY22,并且经由横向的数据通道向右侧传输第一子矩阵w23的转置w23t到PE33,经由纵向的数据通道向下侧传输第二子矩阵dY22到PE42。PE33将第一子矩阵w13的转置w13t与第二子矩阵dY13相乘,以生成第二中间子矩阵w13t*dY13,并且经由横向的数据通道向右侧传输第一子矩阵w13的转置w13t到PE34,经由纵向的数据通道向下侧传输第二子矩阵dY13到PE43。
第一阵列中第4行的计算单元PE41将第一子矩阵w24的转置w24t与第二子矩阵dY21相乘,以生成第二中间子矩阵w24t*dY21,并与先前结果累加得到w14t*dY11 +w24t*dY21,并且经由横向的数据通道向右侧传输第一子矩阵w24的转置w24t到PE42。第一阵列中第4行的计算单元PE42将第一子矩阵w14的转置w14t与第二子矩阵dY12相乘,以生成第二中间子矩阵w14t*dY12,并且经由横向的数据通道向右侧传输第一子矩阵w14的转置w14t到PE43。
第一阵列中第3列的计算单元PE23经由纵向的数据通道向上侧传输第二矩阵中第3列的第二子矩阵dY43。
第一阵列中第4列的2个计算单元PE24-PE34经由纵向的数据通道向上侧传输第二矩阵中第4列的2个第二子矩阵dY34-dY44。
在第10周期,如图30所示,计算单元PE13将第一子矩阵w41的转置w41t与第二子矩阵dY43相乘,以生成第二中间子矩阵w41t*dY43,并与先前结果累加,以得到w11t*dY13 +w21t*dY23+ w31t*dY33+ w41t*dY43,作为第1行第3列的第二输出子矩阵,经由横向的数据通道向右侧传输第一子矩阵w41的转置w41t到PE14,经由纵向的数据通道将第二子矩阵dY43向下侧传输到PE23。计算单元PE14将第一子矩阵w31的转置w31t与第二子矩阵dY34相乘,以生成第二中间子矩阵w31t*dY34,并与先前结果累加,得到w11t*dY14+w21t*dY24+w31t*dY34,并且经由纵向的数据通道向下侧传输第二子矩阵dY34到PE 24。
PE22将第一子矩阵w42的转置w42t与第二子矩阵dY42相乘,以生成第二中间子矩阵w42t*dY42,并与先前结果累加,得到w12t*dY12 +w22t*dY22+w32t*dY32 +w42t*dY42,作为第2行第2列的第二输出子矩阵,并且经由横向的数据通道将第一子矩阵w42的转置w42t向右侧传输到PE23,经由纵向的数据通道将第二子矩阵dY42向下侧传输到PE32。PE23将第一子矩阵w32的转置w32t与第二子矩阵dY33相乘,以生成第二中间子矩阵w32t*dY33,并与先前结果累加,得到w12t*dY13+w22t*dY23+ w32t*dY33,以及经由横向的数据通道向右侧传输第一子矩阵w32的转置w32t到PE24,经由纵向的数据通道向下侧传输第二子矩阵dY33到PE33。PE24将第一子矩阵w22的转置w22t与第二子矩阵dY24相乘,以生成第二中间子矩阵w22t*dY24,并且与先前结果累加得到w12t*dY14+ w22t*dY24,并且经由纵向的数据通道向下侧传输第二子矩阵dY24到PE34。
第一阵列中第3行的计算单元PE31将第一子矩阵w43的转置w43t与第二子矩阵dY41相乘,以生成第二中间子矩阵w43t*dY41,并与先前结果累加,得到w13t*dY11+ w23t*dY21+ w33t*dY31+ w43t*dY41,作为第3行第1列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w43的转置w43t到PE32,经由纵向的数据通道向下侧传输第二子矩阵dY41到PE41。计算单元PE32将第一子矩阵w44的转置w44t经由预定对角方向的数据通道传输到第一阵列中第4行第1列的PE41。PE32将第一子矩阵w33的转置w33t与第二子矩阵dY32相乘,以生成第二中间子矩阵w33t*dY32,并与先前结果累加,得到w13t*dY12+w23t*dY22+ w33t*dY32,并且经由横向的数据通道向右侧传输第一子矩阵w33的转置w33t到PE33,经由纵向的数据通道向下侧传输第二子矩阵dY32到PE42。PE33将第一子矩阵w23的转置w23t与第二子矩阵dY23相乘,以生成第二中间子矩阵w23t*dY23,并与先前结果累加,得到w13t*dY13+ w23t*dY23,并且经由横向的数据通道向右侧传输第一子矩阵w23的转置w23t到PE34,经由纵向的数据通道向下侧传输第二子矩阵dY23到PE43。PE34将第一子矩阵w13的转置w13t与第二子矩阵dY14相乘,以生成第二中间子矩阵w13t*dY14,并且经由纵向的数据通道向下侧传输第二子矩阵dY14到PE44。
第一阵列中第4行的计算单元PE41将第一子矩阵w34的转置w34t与第二子矩阵dY31相乘,以生成第二中间子矩阵w34t*dY31,并与先前结果累加得到w14t*dY11 +w24t*dY21+ w34t*dY31,并且经由横向的数据通道向右侧传输第一子矩阵w34的转置w34t到PE42。第一阵列中第4行的计算单元PE42将第一子矩阵w24的转置w24t与第二子矩阵dY22相乘,以生成第二中间子矩阵w24t*dY22,并且与先前结果累加得到w14t*dY12+w24t*dY22,并且经由横向的数据通道向右侧传输第一子矩阵w24的转置w24t到PE43。PE43将第一子矩阵w14的转置w14t与第二子矩阵dY13相乘,以生成第二中间子矩阵w14t*dY13,并且经由横向的数据通道向右侧传输第一子矩阵w14的转置w14t到PE44。
第一阵列中第4列的计算单元PE24经由纵向的数据通道向上侧传输第二矩阵中第4列的第二子矩阵dY44。
在第11周期,如图31所示,计算单元PE14将第一子矩阵w41的转置w41t与第二子矩阵dY44相乘,以生成第二中间子矩阵w41t*dY44,并与先前结果累加,得到w11t*dY14+w21t*dY24+ w31t*dY34 +w41t*dY44,作为第1行第4列的第二输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵dY44到PE 24。
PE23将第一子矩阵w42的转置w42t与第二子矩阵dY43相乘,以生成第二中间子矩阵w42t*dY43,并与先前结果累加,得到w12t*dY13+w22t*dY23+ w32t*dY33 +w42t*dY43,作为第2行第3列的第二输出子矩阵,以及经由横向的数据通道向右侧传输第一子矩阵w42的转置w42t到PE24,经由纵向的数据通道向下侧传输第二子矩阵dY43到PE33。PE24将第一子矩阵w32的转置w32t与第二子矩阵dY34相乘,以生成第二中间子矩阵w32t*dY34,并且与先前结果累加得到w12t*dY14+ w22t*dY24+ w32t*dY34,并且经由纵向的数据通道向下侧传输第二子矩阵dY34到PE34。
PE32将第一子矩阵w43的转置w43t与第二子矩阵dY42相乘,以生成第二中间子矩阵w43t*dY42,并与先前结果累加,得到w13t*dY12+w23t*dY22+ w33t*dY32 +w43t*dY42,作为第3行第2列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w43的转置w43t到PE33,经由纵向的数据通道向下侧传输第二子矩阵dY42到PE42。PE33将第一子矩阵w33的转置w33t与第二子矩阵dY33相乘,以生成第二中间子矩阵w33t*dY33,并与先前结果累加,得到w13t*dY13+ w23t*dY23+ w33t*dY33,并且经由横向的数据通道向右侧传输第一子矩阵w33的转置w33t到PE34,经由纵向的数据通道向下侧传输第二子矩阵dY33到PE43。PE34将第一子矩阵w23的转置w23t与第二子矩阵dY24相乘,以生成第二中间子矩阵w23t*dY24,并与先前结果累加得到w13t*dY14 +w23t*dY24,并且经由纵向的数据通道向下侧传输第二子矩阵dY24到PE44。
第一阵列中第4行的计算单元PE41将第一子矩阵w44的转置w44t与第二子矩阵dY41相乘,以生成第二中间子矩阵w44t*dY41,并与先前结果累加得到w14t*dY11+w24t*dY21+w34t*dY31 +w44t*dY41,作为第4行第1列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w44的转置w44t到PE42。第一阵列中第4行的计算单元PE42将第一子矩阵w34的转置w34t与第二子矩阵dY32相乘,以生成第二中间子矩阵w34t*dY32,并且与先前结果累加得到w14t*dY12+w24t*dY22+ w34t*dY32,并且经由横向的数据通道向右侧传输第一子矩阵w34的转置w34t到PE43。PE43将第一子矩阵w24的转置w24t与第二子矩阵dY23相乘,以生成第二中间子矩阵w24t*dY23,并且与先前结果累加得到w14t*dY13+w24t*dY23,并且经由横向的数据通道向右侧传输第一子矩阵w24的转置w24t到PE44。PE44将第一子矩阵w14的转置w14t与第二子矩阵dY14相乘,以生成第二中间子矩阵w14t*dY14。
在第12周期,如图32所示,PE24将第一子矩阵w42的转置w42t与第二子矩阵dY44相乘,以生成第二中间子矩阵w42t*dY44,并且与先前结果累加得到w12t*dY14+ w22t*dY24+w32t*dY34 +w42t*dY44,作为第2行第4列的第二输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵dY44到PE34。
PE33将第一子矩阵w43的转置w43t与第二子矩阵dY43相乘,以生成第二中间子矩阵w43t*dY43,并与先前结果累加,得到w13t*dY13+ w23t*dY23+ w33t*dY33 +w43t*dY43,作为第3行第3列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w43的转置w43t到PE34,经由纵向的数据通道向下侧传输第二子矩阵dY43到PE43。PE34将第一子矩阵w33的转置w33t与第二子矩阵dY34相乘,以生成第二中间子矩阵w33t*dY34,并与先前结果累加得到w13t*dY14 +w23t*dY24 +w33t*dY34,并且经由纵向的数据通道向下侧传输第二子矩阵dY34到PE44。
计算单元PE42将第一子矩阵w44的转置w44t与第二子矩阵dY42相乘,以生成第二中间子矩阵w44t*dY42,并且与先前结果累加得到w14t*dY12+w24t*dY22+ w34t*dY32+w44t*dY42,作为第4行第2列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w44的转置w44t到PE43。PE43将第一子矩阵w34的转置w34t与第二子矩阵dY33相乘,以生成第二中间子矩阵w34t*dY33,并且与先前结果累加得到w14t*dY13+w24t*dY23 +w34t*dY33,并且经由横向的数据通道向右侧传输第一子矩阵w34的转置w34t到PE44。PE44将第一子矩阵w24的转置w24t与第二子矩阵dY24相乘,以生成第二中间子矩阵w24t*dY24,并且与先前结果累加得到w14t*dY14 +w24t*dY24。
在第13周期,如图33所示,PE34将第一子矩阵w43的转置w43t与第二子矩阵dY44相乘,以生成第二中间子矩阵w43t*dY44,并与先前结果累加得到w13t*dY14 +w23t*dY24 +w33t*dY34 +w43t*dY44,作为第3行第4列的第二输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵dY44到PE44。
PE43将第一子矩阵w44的转置w44t与第二子矩阵dY43相乘,以生成第二中间子矩阵w44t*dY43,并且与先前结果累加得到w14t*dY13+w24t*dY23 +w34t*dY33+ w44t*dY43,作为第4行第3列的第二输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵w44的转置w44t到PE44。PE44将第一子矩阵w34的转置w34t与第二子矩阵dY34相乘,以生成第二中间子矩阵w34t*dY34,并且与先前结果累加得到w14t*dY14 +w24t*dY24 +w34t*dY34。
在第14周期,如图34所示,PE44将第一子矩阵w44的转置w44t与第二子矩阵dY44相乘,以生成第二中间子矩阵w44t*dY44,并且与先前结果累加得到w14t*dY14 +w24t*dY24 +w34t*dY34 +w44t*dY44,作为第4行第4列的第二输出子矩阵。
至此,得到4行4列个第二输出子矩阵,也就得到了作为第一矩阵的转置和第二矩阵相乘的结果的第二输出矩阵。
下面结合图35-52描述第一模式中第一矩阵与第二矩阵的转置(也称为右矩阵转置)相乘的矩阵乘法运算的过程。
图35示出了根据本公开的实施例的用于矩阵计算的方法3500的示意图。第一阵列120可以被配置成响应于第一模式,执行方法3500。第二阵列240可以被配置成响应于第二模式,执行方法3500。应当理解的是,方法3500还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框3502,经由阵列中每一列的至少两个计算单元,按列逆序获取第二矩阵中对应列的至少两个第二子矩阵的转置。
具体来说,经由阵列中第j列的至少两个计算单元,在第P-j+1周期获取第二矩阵中第j列的至少两个第二子矩阵的转置,P为阵列中计算单元的列数。
在框3504,经由纵向和预定对角方向的数据通道传输第二矩阵中对应列的至少两个第二子矩阵的转置,以用于第一矩阵和第二矩阵的转置之间的矩阵乘法运算。
下文结合图36详细描述用于经由纵向和预定对角方向的数据通道传输第二矩阵中对应列的至少两个第二子矩阵的转置的方法。
在框3506,经由阵列中每一行的至少两个计算单元110,按行顺序获取第一矩阵中对应行的至少两个第一子矩阵。
经由阵列中第i行的至少两个计算单元,在第P-1+i周期获取第一矩阵中第i行的至少两个第一子矩阵。
在框3508,经由横向的数据通道130传输第一矩阵中对应行的至少两个第一子矩阵,以用于第一矩阵和第二矩阵的转置之间的矩阵乘法运算,第二子矩阵的转置中元素的行数与第一子矩中元素的列数相同。
具体来说,经由横向的数据通道向左侧传输第i行的至少两个第一子矩阵,至阵列中第i行第1列的计算单元。
经由横向的数据通道从阵列中第i行第1列的计算单元向右侧传输第i行的至少两个第一子矩阵,以用于第一矩阵和第二矩阵的转置之间的矩阵乘法运算。
在一些实施例中,还可以经由所述阵列中第i行第j列的计算单元,执行以下步骤:经由横向的数据通道从左侧接收第i行的至少两个第一子矩阵;经由纵向的数据通道从上侧接收第j行的至少两个第二子矩阵的转置;对至少两个第一子矩阵和至少两个第二子矩阵的转置进行对应相乘,以生成至少两个第三中间子矩阵;以及将至少两个第三中间子矩阵累加,以生成第三输出矩阵中第i行第j列的第三输出子矩阵,第三输出矩阵为第一矩阵和第二矩阵的转置相乘的结果。
由此,通过阵列中至少两行至少两列的计算单元按列逆序获取和传输第二矩阵中的多个第二子矩阵的转置,以及按行顺序获取和传输第一矩阵中的多个第一子矩阵,以实现多个第一子矩阵和多个第二子矩阵的转置在各个计算单元进行对应相乘,从而实现第一矩阵和第二矩阵的转置的乘法运算。
图36示出了根据本公开的实施例的用于经由纵向和预定对角方向的数据通道传输第二矩阵中对应列的至少两个第二子矩阵的转置的方法3600的示意图。应当理解的是,方法3600还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框3602,经由预定对角方向和纵向的数据通道,将第二矩阵中第j列的至少两个第二子矩阵的转置经由2j-2个周期传输到阵列中第1列的至少两个计算单元。
具体来说,对于第二矩阵中第j列第1行的第二子矩阵的转置,经由预定对角方向的数据通道,将第二矩阵中第j列第1行的第二子矩阵的转置传输到阵列中第1列第j行的计算单元。随后,经由纵向的数据通道,将第二矩阵中第j列第1行的第二子矩阵的转置从阵列中第1列第j行的计算单元传输到第1列第1行的计算单元。
对于第二矩阵中第j列非第1行的至少一个第二子矩阵的转置,迭代执行以下步骤,直至第二矩阵中第j列非第1行的至少一个第二子矩阵的转置到达阵列中第1列非第1行的至少一个计算单元:经由纵向的数据通道,将第j列非第1行的至少一个第二子矩阵的转置从阵列中当前列当前行的计算单元传输到阵列中相同列前一行的计算单元;以及经由预定对角方向的数据通道,将第j列非第1行的至少一个第二子矩阵的转置从阵列中相同列前一行的计算单元传输到阵列中前一列相同行的计算单元。也就是,按照N型将第二矩阵中第j列非第1行的至少一个第二子矩阵的转置传输到阵列中第1列非第1行的至少一个计算单元。
在框3604,经由预定对角方向的数据通道,将第二矩阵中第j列的至少两个第二子矩阵的转置从阵列中第1列的至少两个计算单元传输到阵列中第1行的至少两个计算单元。
在框3606,经由纵向的数据通道从阵列中第1行的至少两个计算单元向下侧传输第二矩阵中第j列的至少两个第二子矩阵的转置,以用于第一矩阵和第二矩阵的转置之间的矩阵乘法运算。
由此,使得第二子矩阵的转置能够按照与第一子矩阵相匹配的序列进入阵列进行计算,从而实现第一矩阵与第二矩阵的转置之间的矩阵乘法运算。
下面以Q=P=4,A=B=8为例说明Q*A行P*K列(也就是32行4K列)的第一矩阵dY和P*K行B*Q列(也就是4K行32列)的第二矩阵X的转置(32行4K列)之间的乘法运算。应当理解,这只是为了举例说明,Q、P、A和B的其他取值也是可能的,本公开的范围在此不受限制。还应当理解,虽然以第一阵列为例进行说明,但是对于第二阵列也是适用的。
参照图4, 4K行32列的第一矩阵420可以划分成4行4列个第一子矩阵x11-x44,每个第一子矩阵包括K行8列个元素。如图37所示,第二矩阵420经过转置可以得到32行4K列的转置矩阵3720,第二矩阵420的转置3720可以划分成4行4列个第二子矩阵x11-x44的转置x11t-x44t。
32行4K列的第一矩阵3710可以划分成4行4列个第一子矩阵dY11-dY44,每个第一子矩阵包括8行K列个元素。
作为第一矩阵和第二矩阵的转置3720相乘的结果的第三输出矩阵3730可以划分成4行4列个第三输出子矩阵dW11-dW44,其中可以通过第一矩阵3710中第i行的4个第一子矩阵dYi1-dYi4w1it-w4it与第j行的4个第二子矩阵xj1-xj4的转置xj1t-xj4t对应相乘生成4个第三中间子矩阵,再将这4个第三中间子矩阵相加来生成第i行第j列的第三输出子矩阵dWij,例如dW11=dY11*x11t+dY12*x 12t+dY13* x13t+dY14* x14t。
如图38所示,第一阵列3810可以包括4行4列个计算单元PE-11至PE-44,每个计算单元可用于实现8x8xK矩阵乘法运算。为了实现32行4K列的第一矩阵3710和4K行32列的第二矩阵的转置3720(32行4K列)之间的乘法运算,可以将第一矩阵3710中的各个第一子矩阵dY11-dY44按照左侧的序列进入第一阵列3810进行计算,将第二矩阵中的各个第二子矩阵x11-x44的转置x11t-x44t按照上侧的序列进入第一阵列3810进行计算。例如,对于计算单元PE11而言,dY11和x11t首先进入PE11进行矩阵相乘,得到dY11t*x11t,随后,dY12和x12t进入PE11进行矩阵相乘,得到dY12*x12t,与之前的结果dY11t*x11t累加得到dY12*x12t+dY11t*x11t,接着dY13和x13t进入PE11进行矩阵相乘,得到dY13*x13t,与之前的结果累加得到dY13*x13t+dY12*x12t+dY11t*x11t,然后dY14和x14t进入PE11进行矩阵相乘,得到dY14*x14t,与之前的结果累积得到dY14*x14t+dY13*x13t+dY12*x12t+dY11t*x11t,作为第1行第1列的第三输出子矩阵。一般而言,第一阵列3810中第i行第j列的计算单元PEij依次接收第一矩阵3710中第i行的4个第一子矩阵dYi1-dYi4,以及依次接收第二矩阵3720中第j行的4个第二子矩阵xj1-xj4经过转置的结果xj1t-xj4t,并基于第一矩阵3710中第i行的4个第一子矩阵dYi1-dYi4和第二矩阵3720中第j行的4个第二子矩阵xj1-xj4经过转置的结果xj1t-xj4t,计算第i行第j列的第三输出子矩阵。
下面详细说明为了实现按照将第一子矩阵dY11-dY44和第二子矩阵x11-x44的转置x11t-x44t按照上述序列进行计算的数据传输过程。
在第1周期,如图39所示,第一阵列中第4列的4个计算单元PE14-PE44获取第二矩阵中第4列的4个第二子矩阵x14-x44的转置x14t-x44t。
在第2周期,如图40所示,第一阵列中第3列的4个计算单元PE13-PE43获取第二矩阵中第3列的4个第二子矩阵x13-x43的转置x13t-x43t。
第一阵列中第4列第1行的计算单元PE14经由预定对角方向的数据通道向第3列第2行的计算单元PE23传输第二子矩阵x14的转置x14t。第一阵列中第4列另外3个计算单元PE24-PE44经由纵向的数据通道向上侧传输3个第二子矩阵x24-x44的转置x24t-x44t。
在第3周期,如图41所示,第一阵列中第2列的4个计算单元PE12-PE42获取第二矩阵中第2列的4个第二子矩阵x12-x42的转置x12t-x42t。
第一阵列中第3列第1行的计算单元PE13经由预定对角方向的数据通道向第2行第2列的计算单元PE22传输第二子矩阵x13的转置x13t。第一阵列中第3列另外3个计算单元PE23-PE43经由纵向的数据通道向上侧传输3个第二子矩阵x23-x43的转置x23t-x43t。第一阵列中第3列第2行的计算单元PE23经由预定对角方向的数据通道向第2列第3行的计算单元PE32传输第二子矩阵x14的转置x14t。
第一阵列中第4列的3个计算单元PE14-PE34经由预定对角方向的数据通道向第3列的3个计算单元PE23-PE43传输3个第二子矩阵x24-x44的转置x24t-x44t。
在第4周期,如图42所示,第一阵列中第1列的4个计算单元PE11-PE41获取第二矩阵中第1列的4个第二子矩阵x11-x41的转置x11t-x41t。
第一阵列中第2列第1行的计算单元PE12经由预定对角方向的数据通道向第1列第2行的计算单元PE21传输第二子矩阵x12的转置x12t。第一阵列中第2列另外3个计算单元PE22-PE42经由纵向的数据通道向上侧传输3个第二子矩阵x22-x42的转置x22t-x42t。第一阵列中第2列第2行的计算单元PE22经由预定对角方向的数据通道向第1列第3行的计算单元PE31传输第二子矩阵x13的转置x13t。第一阵列中第2列第3行的计算单元PE32经由预定对角方向的数据通道向第1列第4行的计算单元PE41传输第二子矩阵x14的转置x14t。
第一阵列中第3列的3个计算单元PE13-PE33经由预定对角方向的数据通道向第2列的3个计算单元PE22-PE42传输3个第二子矩阵x23-x43的转置x23t-x43t。第一阵列中第3列的3个计算单元PE23-PE43经由纵向的数据通道向上侧传输3个第二子矩阵x24-x44的转置x24t-x44t。
第一阵列中第1行的4个计算单元PE11-PE14获取第一矩阵中第1行的4个第一子矩阵dY11-dY14。
在第5周期,如图43所示,第一阵列中第1列第1行的计算单元PE11将第一子矩阵dY11与第二子矩阵x11的转置x11t相乘,以生成第三中间子矩阵dY11 *x11t,将第二子矩阵x11的转置x11t经由纵向的数据通道向下侧传输到PE21,将第一子矩阵dY11经由横向的数据通道向右侧传输到PE12。第一阵列中第1列另外3个计算单元PE2-1PE41经由预定对角方向的数据通道向第一阵列中第2列的3个计算单元PE12-PE32传输3个第二子矩阵x21-x41的转置x21t-x41t。计算单元PE21-PE41还经由纵向的数据通道向上侧传输3个第二子矩阵x12-x14的转置x12t-x14t。
第一阵列中第2列的3个计算单元PE12-PE32经由预定对角方向的数据通道向第1列的3个计算单元PE21-PE41传输3个第二子矩阵x22-x42的转置x22t-x42t。第一阵列中第2列的3个计算单元PE22-PE42经由纵向的数据通道向上侧传输3个第二子矩阵x23-x43的转置x23t-x43t。
第一阵列中第3列的3个计算单元PE13-PE33经由预定对角方向的数据通道向第2列的3个计算单元PE22-PE42传输3个第二子矩阵x24-x44的转置x24t-x44t。
第一阵列中第1行的3个计算单元PE12-PE14经由横向的数据通道向左侧传输第一矩阵中第1行的3个第一子矩阵dY12-dY14。
第一阵列中第2行的4个计算单元PE21-PE24获取第一矩阵中第2行的4个第一子矩阵dY21-dY24。
在第6周期,如图44所示,第一阵列中第1列第1行的计算单元PE11将第一子矩阵dY12与第二子矩阵x12的转置x12t相乘,以生成第三中间子矩阵dY12*x12t,并且与先前结果累加,以生成dY11*x11t+dY12*x12t。PE11还将第二子矩阵x12的转置x12t经由纵向的数据通道向下侧传输到PE21,将第一子矩阵dY12经由横向的数据通道向右侧传输到PE12。第一阵列中第1列另外3个计算单元PE21-PE41经由预定对角方向的数据通道向第一阵列中第2列的3个计算单元PE12-PE32传输3个第二子矩阵x22-x42的转置x22t-x42t。计算单元PE21-PE31还经由纵向的数据通道向上侧传输2个第二子矩阵x13-x14的转置x13t-x14t。计算单元PE21将第一子矩阵dY21与第二子矩阵x11的转置x11t相乘,以生成第三中间子矩阵dY21*x11t,以及经由纵向的数据通道向下侧传输第二子矩阵x11的转置x11t到PE31,经由横向的数据通道将第一子矩阵dY21向由侧传输到PE22。
第一阵列中第2列的3个计算单元PE12-PE32经由预定对角方向的数据通道向第1列的3个计算单元PE21-PE41传输3个第二子矩阵x23-x43的转置x23t-x43t。第一阵列中第2列的3个计算单元PE22-PE42经由纵向的数据通道向上侧传输3个第二子矩阵x24-x44的转置x24t-x44t。计算单元PE12将第一子矩阵dY11与第二子矩阵x21的转置x21t相乘,以生成第三中间子矩阵dY11*x21t,以及经由纵向的数据通道向下侧传输第二子矩阵x21的转置x21t到PE22,经由横向的数据通道向右侧传输第一子矩阵dY11到PE13。PE22和PE32经由预定对角方向的数据通道向第3列的2个计算单元PE13和PE23传输2个第二子矩阵x31-x41的转置x31t-x41t。
第一阵列中第1行的2个计算单元PE12-PE13经由横向的数据通道向左侧传输第一矩阵中第1行的2个第二子矩阵dY13-dY14。
第一阵列中第2行的3个计算单元PE22-PE24经由横向的数据通道向左侧传输第一矩阵中第2行的3个第二子矩阵dY22-dY24。
第一阵列中第3行的4个计算单元PE31-PE34获取第二矩阵中第3行的4个第二子矩阵dY31-dY34。
在第7周期,如图45所示,第一阵列中第1列第1行的计算单元PE11将第一子矩阵与第二子矩阵x13的转置x13t相乘,以生成第三中间子矩阵dY13*x13t,并且与先前结果累加,以生成dY11*x11t+dY12*x12t+dY13*x13t。PE11还将第二子矩阵x13的转置x13t经由纵向的数据通道向下侧传输到PE21,将第一子矩阵dY13经由横向的数据通道向右侧传输到PE12。第一阵列中第1列另外3个计算单元PE21-PE41经由预定对角方向的数据通道向第一阵列中第2列的3个计算单元PE12-PE32传输3个第二子矩阵x23-x43的转置x23t-x43t。计算单元PE21还经由纵向的数据通道向上侧传输第二子矩阵x14的转置x14t。计算单元PE21将第一子矩阵dY22与第二子矩阵x12的转置x12t相乘,以生成第三中间子矩阵dY22*x12t,并与先前结果累加,以得到dY21*x11t +dY22*x12t,以及经由纵向的数据通道向下侧传输第二子矩阵x12的转置x12t到PE31,经由横向的数据通道将第一子矩阵dY22向右侧传输到PE22。计算单元PE31将第一子矩阵dY31与第二子矩阵x11的转置x11t相乘,以生成第三中间子矩阵dY31*x11t,经由纵向的数据通道向下侧传输第二子矩阵x11的转置x11t到PE41,经由横向的数据通道将第一子矩阵dY31向右侧传输到PE32。
第一阵列中第2列的3个计算单元PE12-PE32经由预定对角方向的数据通道向第1列的3个计算单元PE21-PE41传输3个第二子矩阵x24-x44的转置x24t-x44t。计算单元PE12将第一子矩阵dY12与第二子矩阵x22的转置x22t相乘,以生成第三中间子矩阵dY12*x22t,并与先前结果累加,以得到dY11*x21t +dY12*x22t,以及经由纵向的数据通道向下侧传输第二子矩阵x22的转置x22t到PE22,经由横向的数据通道向右侧传输第一子矩阵dY12到PE13。PE22和PE32经由预定对角方向的数据通道向第3列的2个计算单元PE13和PE23传输2个第二子矩阵x32-x42的转置x32t-x42t。PE22将第一子矩阵dY21与第二子矩阵x21的转置x21t相乘,以生成第三中间子矩阵dY21*x21t,并且经由纵向的数据通道将第二子矩阵x21的转置x21t向下侧传输到PE32,经由横向的数据通道将第一子矩阵dY21向右侧传输到PE23。
第一阵列中第3列的计算单元PE13将第一子矩阵dY11与第二子矩阵x31的转置x31t相乘,以生成第三中间子矩阵dY11*x31t,并且经由纵向的数据通道向下侧传输第二子矩阵x31的转置x31t到PE23,经由横向的数据通道向右侧传输第一子矩阵dY11到PE14。计算单元PE23将第二子矩阵x41的转置x41t经由预定对角方向的数据通道传输到第一阵列中第4列第1行的PE14。
第一阵列中第1行的计算单元PE12经由横向的数据通道向左侧传输第一矩阵中第1行的第一子矩阵dY14。
第一阵列中第2行的2个计算单元PE22-PE23经由横向的数据通道向左侧传输第一矩阵中第2行的2个第一子矩阵dY23-dY24。
第一阵列中第3行的3个计算单元PE32-PE34经由横向的数据通道向左侧传输第一矩阵中第3行的3个第一子矩阵dY32-dY34。
第一阵列中第4行的4个计算单元PE41-PE44获取第一矩阵中第4行的4个第一子矩阵dY41-dY44。
在第8周期,如图46所示,第一阵列中第1列第1行的计算单元PE11将第一子矩阵dY14与第二子矩阵x14的转置x14t相乘,以生成第三中间子矩阵dY14*x14t,并且与先前结果累加,以生成dY11*x11t+dY12*x12t+ dY13*x13t+dY14*x14t,作为第三输出矩阵中第1行第1列的第三输出子矩阵。PE11还将第二子矩阵x14的转置x14t经由纵向的数据通道向下侧传输到PE21,将第一子矩阵dY14经由横向的数据通道向右侧传输到PE12。第一阵列中第1列另外3个计算单元PE21-PE41经由预定对角方向的数据通道向第一阵列中第2列的3个计算单元PE12-PE32传输3个第二子矩阵x24-w44的转置x24t-w44t。计算单元PE21将第一子矩阵dY23与第二子矩阵x13的转置x13t相乘,以生成第三中间子矩阵dY23*x13t,并与先前结果累加,以得到dY21*x11t+ dY22*x12t+dY23*x13t,以及经由纵向的数据通道向下侧传输第二子矩阵x13的转置x13t到PE31,经由横向的数据通道将第一子矩阵dY23向右侧传输到PE22。计算单元PE31将第一子矩阵dY32与第二子矩阵x12的转置x12t相乘,以生成第三中间子矩阵dY32*x12t,并与先前结果累加,以得到dY31*x11t+dY32*x12t,经由纵向的数据通道向下侧传输第二子矩阵x12的转置x12t到PE41,经由横向的数据通道将第一子矩阵dY32向右侧传输到PE32。计算单元PE41将第一子矩阵dY41与第二子矩阵x11的转置x11t相乘,以生成第二中间子矩阵dY41*x11t,并且经由横向的数据通道向右侧传输第一子矩阵dY41到PE42。
计算单元PE12将第一子矩阵dY13与第二子矩阵x23的转置x23t相乘,以生成第三中间子矩阵dY13*x23t,并与先前结果累加,以得到dY11*x21t+dY12*x22t+ dY13*x23t,以及经由纵向的数据通道向下侧传输第二子矩阵x23的转置x23t到PE22,经由横向的数据通道向右侧传输第一子矩阵dY13到PE13。PE22和PE32经由预定对角方向的数据通道向第3列的2个计算单元PE13和PE23传输2个第二子矩阵x33-x43的转置x33t-x43t。PE22将第一子矩阵dY22与第二子矩阵x22的转置x22t相乘,以生成第三中间子矩阵dY22 *x22t,并与先前结果累加,得到dY21 *x21t+dY22 *x22t,并且经由纵向的数据通道将第二子矩阵x22的转置x22t向下侧传输到PE32,经由横向的数据通道将第一子矩阵dY22向右侧传输到PE23。PE32将第一子矩阵dY31与第二子矩阵x21的转置x21t相乘,以生成第三中间子矩阵dY31*x21t,并且经由横向的数据通道向右侧传输第一子矩阵dY31到PE33,经由纵向的数据通道向下侧传输第二子矩阵x21的转置x21t到PE42。
第一阵列中第3列的计算单元PE13将第一子矩阵dY12与第二子矩阵x32的转置x32t相乘,以生成第三中间子矩阵dY12*w32t,并与先前结果累加,得到dY11*w31t+ dY12*w32t,并且经由纵向的数据通道向下侧传输第二子矩阵x32的转置x32t到PE23,经由横向的数据通道向右侧传输第一子矩阵dY12到PE14。计算单元PE23将第二子矩阵x42的转置x42t经由预定对角方向的数据通道传输到第一阵列中第4列第1行的PE14。PE23将第一子矩阵dY21与第二子矩阵x31的转置x31t相乘,以生成第三中间子矩阵dY21*x31t,并且经由纵向的数据通道向下侧传输第二子矩阵x31的转置x31t到PE33,经由横向的数据通道向右侧传输第一子矩阵dY21到PE24。
第一阵列中第4列的计算单元PE14将第一子矩阵dY11与第二子矩阵x41的转置x41t相乘,以生成第三中间子矩阵dY11*x41t,并且经由纵向的数据通道向下侧传输第二子矩阵x41的转置x41t到PE24。
第一阵列中第2行的计算单元PE22经由横向的数据通道向左侧传输第一矩阵中第2行的第一子矩阵dY24。
第一阵列中第3行的2个计算单元PE32-PE33经由横向的数据通道向左侧传输第一矩阵中第3行的2个第一子矩阵dY33-dY34。
第一阵列中第4行的3个计算单元PE42-PE44经由横向的数据通道向左侧传输第一矩阵中第4行的3个第一子矩阵dY42-dY44。
在第9周期,如图47所示,计算单元PE21将第一子矩阵dY24与第二子矩阵x14的转置x14t相乘,以生成第三中间子矩阵dY24*x14t,并与先前结果累加,以得到dY21*x11t+dY22*x12t+dY23*x13t+dY24*x14t,作为第1列第2行的第三输出子矩阵,以及经由纵向的数据通道向下侧传输第二子矩阵x14的转置x14t到PE31,经由横向的数据通道将第一子矩阵dY24向右侧传输到PE22。计算单元PE31将第一子矩阵dY33与第二子矩阵x13的转置x13t相乘,以生成第三中间子矩阵dY33*x13t,并与先前结果累加,以得到dY31*x11t +dY32*x12t+dY33*x13t,经由纵向的数据通道向下侧传输第二子矩阵x13的转置x13t到PE41,经由横向的数据通道将第一子矩阵dY33向右侧传输到PE32。计算单元PE41将第一子矩阵dY42与第二子矩阵x12的转置x12t相乘,以生成第三中间子矩阵dY42*x12t,并与先前结果累加,得到dY41*x11t+dY42*x12t,并且经由横向的数据通道向右侧传输第一子矩阵dY42到PE 42。
计算单元PE12将第一子矩阵dY14与第二子矩阵x24的转置x24t相乘,以生成第三中间子矩阵dY14*x24t,并与先前结果累加,以得到dY11*x21t+dY12*x22t+ dY13*x23t+dY14*x24t,作为第2列第1行的第三输出子矩阵,以及经由纵向的数据通道向下侧传输第二子矩阵x24的转置x24t到PE22,经由横向的数据通道向右侧传输第一子矩阵dY14到PE13。PE22和PE32经由预定对角方向的数据通道向第3列的2个计算单元PE13和PE23传输2个第二子矩阵x34-x44的转置x34t-x44t。PE22将第一子矩阵dY23与第二子矩阵x23的转置x23t相乘,以生成第三中间子矩阵dY23*x23t,并与先前结果累加,得到dY21*x21t +dY22*x22t+dY23*x23t,并且经由纵向的数据通道将第二子矩阵x23的转置x23t向下侧传输到PE32,经由横向的数据通道将第一子矩阵dY23向右侧传输到PE23。PE32将第一子矩阵dY32与第二子矩阵x22的转置x22t相乘,以生成第三中间子矩阵dY32*x22t,并与先前结果累加,得到dY31*x21t+dY32*x22t,以及经由纵着的数据通道向下侧传输第二子矩阵x22的转置x22t到PE42,经由横向的数据通道向右侧传输第一子矩阵dY32到PE33。PE42将第一子矩阵dY41与第二子矩阵x21的转置x21t相乘,以生成第三中间子矩阵dY41*x21t,并且经由横向的数据通道向右侧传输第一子矩阵dY41到PE43。
第一阵列中第3列的计算单元PE13将第一子矩阵dY13与第二子矩阵x33的转置x33t相乘,以生成第三中间子矩阵dY13*x33t并与先前结果累加,得到dY11*x31t+ dY12*x32t+ dY13*x33t,并且经由纵向的数据通道向下侧传输第二子矩阵x33的转置x33t到PE23,经由横向的数据通道向右侧传输第一子矩阵dY13到PE14。计算单元PE23将第二子矩阵x43的转置x43t经由预定对角方向的数据通道传输到第一阵列中第4列第1行的PE14。PE23将第一子矩阵dY22与第二子矩阵x32的转置x32t相乘,以生成第三中间子矩阵dY22*x32t,并与先前结果累加,得到dY21*x31t+dY22*x32t,并且经由纵向的数据通道向下侧传输第二子矩阵x32的转置x32t到PE33,经由横向的数据通道向右侧传输第一子矩阵dY22到PE24。PE33将第一子矩阵dY31与第二子矩阵x31的转置x31t相乘,以生成第三中间子矩阵dY31*x31t,并且经由纵向的数据通道向下侧传输第二子矩阵x31的转置x31t到PE43,经由横向的数据通道向右侧传输第一子矩阵dY31到PE34。
第一阵列中第4列的计算单元PE14将第二子矩阵x42的转置x42t与第一子矩阵dY12相乘,以生成第三中间子矩阵dY12*x42t,并与先前结果累加得到dY11*x41t +dY12*x42t,并且经由纵向的数据通道向下侧传输第二子矩阵x42的转置x42t到PE24。第一阵列中第4列的计算单元PE24将第一子矩阵dY21与第二子矩阵x41的转置x41t相乘,以生成第三中间子矩阵dY21*x41t,并且经由纵向的数据通道向下侧传输第二子矩阵x41的转置x41t到PE34。
第一阵列中第3行的计算单元PE32经由横向的数据通道向左侧传输第一矩阵中第3行的第一子矩阵dY34。
第一阵列中第4行的2个计算单元PE42-PE43经由横向的数据通道向左侧传输第一矩阵中第4行的2个第一子矩阵dY43-dY44。
在第10周期,如图48所示,计算单元PE31将第一子矩阵dY34与第二子矩阵x14的转置x14t相乘,以生成第三中间子矩阵dY34*x14t,并与先前结果累加,以得到dY31*x11t+dY32*x12t+ dY33*x13t+ dY34*x14t,作为第1列第3行的第三输出子矩阵,经由纵向的数据通道向下侧传输第二子矩阵x14的转置x14t到PE41,经由横向的数据通道将第一子矩阵dY34向右侧传输到PE32。计算单元PE41将第一子矩阵dY43与第二子矩阵x13的转置x13t相乘,以生成第三中间子矩阵dY43*x13t,并与先前结果累加,得到dY41*x11t+dY42*x12t+dY43*x13t,并且经由横向的数据通道向右侧传输第一子矩阵dY43到PE 42。
PE22将第一子矩阵dY24与第二子矩阵x24的转置x24t相乘,以生成第三中间子矩阵dY24*x24t,并与先前结果累加,得到dY21*x21t+dY22*x22t+dY23*x23t+dY24*x24t,作为第2列第2行的第三输出子矩阵,并且经由纵向的数据通道将第二子矩阵x24的转置x24t向下侧传输到PE32,经由横向的数据通道将第一子矩阵dY24向右侧传输到PE23。PE32将第一子矩阵dY33与第二子矩阵x23的转置x23t相乘,以生成第三中间子矩阵dY33*x23t,并与先前结果累加,得到dY31*x21t+dY32*x22t+ dY33*x23t,以及经由纵向的数据通道向下侧传输第二子矩阵x23的转置x23t到PE42,经由横向的数据通道向右侧传输第一子矩阵dY33到PE33。PE42将第一子矩阵dY42与第二子矩阵x22的转置x22t相乘,以生成第三中间子矩阵dY42*x22t,并且与先前结果累加得到dY41*x21t+ dY42*x22t,并且经由横向的数据通道向右侧传输第一子矩阵dY42到PE43。
第一阵列中第3列的计算单元PE13将第一子矩阵dY14与第二子矩阵x34的转置x34t相乘,以生成第三中间子矩阵dY14*x34t,并与先前结果累加,得到dY11*x31t+ dY12*x32t+dY13*x33t+ dY14*x34t,作为第3列第1行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x34的转置x34t到PE23,经由横向的数据通道向右侧传输第一子矩阵dY14到PE14。计算单元PE23将第二子矩阵x44的转置x44t经由预定对角方向的数据通道传输到第一阵列中第4列第1行的PE14。PE23将第一子矩阵dY23与第二子矩阵x33的转置x33t相乘,以生成第三中间子矩阵dY23*x33t,并与先前结果累加,得到dY21*x31t+dY22*x32t+ dY23*x33t,并且经由纵向的数据通道向下侧传输第二子矩阵x33的转置x33t到PE33,经由横向的数据通道向右侧传输第一子矩阵dY23到PE24。PE33将第一子矩阵dY32与第二子矩阵x32的转置x32t相乘,以生成第三中间子矩阵dY32*x32t,并与先前结果累加,得到dY31*x31t+ dY32*x32t,并且经由纵向的数据通道向下侧传输第二子矩阵x32的转置x32t到PE43,经由横向的数据通道向右侧传输第一子矩阵dY32到PE34。PE43将第一子矩阵dY41与第二子矩阵x31的转置x31t相乘,以生成第三中间子矩阵dY41*x31t,并且经由横向的数据通道向右侧传输第一子矩阵dY41到PE44。
第一阵列中第4列的计算单元PE14将第二子矩阵x43的转置x43t与第一子矩阵dY13相乘,以生成第三中间子矩阵dY13*x43t,并与先前结果累加得到dY11*x41t +dY12*x42t+ dY13*x43t,并且经由纵向的数据通道向下侧传输第二子矩阵x43的转置x43t到PE24。第一阵列中第4列的计算单元PE24将第一子矩阵dY22与第二子矩阵x42的转置x42t相乘,以生成第三中间子矩阵dY22*x42t,并且与先前结果累加得到dY21*x41t+dY22*x42t,并且经由纵向的数据通道向下侧传输第二子矩阵x42的转置x42t到PE34。PE34将第一子矩阵dY31与第二子矩阵x41的转置x41t相乘,以生成第三中间子矩阵dY31*x41t,并且经由纵向的数据通道向下侧传输第二子矩阵x41的转置x41t到PE44。
第一阵列中第4行的计算单元PE42经由横向的数据通道向左侧传输第一矩阵中第4行的第一子矩阵dY44。
在第11周期,如图49所示,计算单元PE41将第一子矩阵dY44与第二子矩阵x14的转置x14t相乘,以生成第三中间子矩阵dY44*x14t,并与先前结果累加,得到dY41*x11t+dY42*x12t+ dY43*x13t +dY44*x14t,作为第1列第4行的第三输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵dY44到PE 42。
PE32将第一子矩阵dY34与第二子矩阵x24的转置x24t与相乘,以生成第三中间子矩阵dY34*x24t,并与先前结果累加,得到dY31*x21t+dY32*x22t+ dY33*x23t+dY34*x24t,作为第2列第3行的第三输出子矩阵,以及经由纵向的数据通道向下侧传输第二子矩阵x24的转置x24t到PE42,经由横向的数据通道向右侧传输第一子矩阵dY34到PE33。PE42将第一子矩阵dY43与第二子矩阵x23的转置x23t相乘,以生成第三中间子矩阵dY43*x23t,并且与先前结果累加得到dY41*x21t+ dY42*x22t+ dY43*x23t,并且经由横向的数据通道向右侧传输第一子矩阵dY43到PE43。
PE23将第一子矩阵dY24与第二子矩阵x34的转置x34t相乘,以生成第三中间子矩阵dY24*x34t,并与先前结果累加,得到dY21*x31t+dY22*x32t+ dY23*x33t+dY24*x34t,作为第3列第2行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x34的转置x34t到PE33,经由横向的数据通道向右侧传输第一子矩阵dY24到PE24。PE33将第一子矩阵dY33与第二子矩阵x33的转置x33t相乘,以生成第三中间子矩阵dY33 *x33t,并与先前结果累加,得到dY31*x31t+dY32 *x32t+dY33 *x33t,并且经由纵向的数据通道向下侧传输第二子矩阵x33的转置x33t到PE43,经由横向的数据通道向右侧传输第一子矩阵dY33到PE34。PE43将第一子矩阵dY42与第二子矩阵x32的转置x32t相乘,以生成第三中间子矩阵dY42*x32t,并与先前结果累加得到dY41*x31t+dY42*x32t,并且经由横向的数据通道向右侧传输第一子矩阵dY42到PE44。
第一阵列中第4列的计算单元PE14将第一子矩阵dY14与第二子矩阵x44的转置x44t相乘,以生成第三中间子矩阵dY14*x44t,并与先前结果累加得到dY11*x41t+dY12*x42t+dY13*x43t+dY14*x44t,作为第4列第1行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x44的转置x44t到PE24。第一阵列中第4列的计算单元PE24将第一子矩阵dY23与第二子矩阵x43的转置x43t相乘,以生成第三中间子矩阵dY23*x43t,并且与先前结果累加得到dY21*x41t+dY22*x42t+dY23*x43t,并且经由纵向的数据通道向下侧传输第二子矩阵x43的转置x43t到PE34。PE34将第一子矩阵dY32与第二子矩阵x42的转置x42t相乘,以生成第三中间子矩阵dY32*x42t,并且与先前结果累加得到dY31*x41t+dY32*x42t,并且经由纵向的数据通道向下侧传输第二子矩阵x42的转置x42t到PE44。PE44将第一子矩阵dY41与第二子矩阵x41的转置x41t相乘,以生成第三中间子矩阵dY41*x41t。
在第12周期,如图50所示,PE42将第一子矩阵dY44与第二子矩阵x24的转置x24t相乘,以生成第三中间子矩阵dY44*x24t,并且与先前结果累加得到dY41*x21t+dY42*x22t +dY43*x23t+dY44*x24t,作为第2列第4行的第三输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵dY44到PE43。
PE33将第一子矩阵dY34与第二子矩阵x34的转置x34t相乘,以生成第三中间子矩阵dY34*x34t,并与先前结果累加,得到dY31*x31t+ dY32*x32t+ dY33*x33t +dY34*x34t,作为第3列第3行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x34的转置x34t到PE43,经由横向的数据通道向右侧传输第一子矩阵dY34到PE34。PE43将第一子矩阵dY43与第二子矩阵x33的转置x33t相乘,以生成第三中间子矩阵dY43*x33t,并与先前结果累加得到dY41*x31t +dY42*x32t +dY43*x33t,并且经由横向的数据通道向右侧传输第一子矩阵dY43到PE44。
计算单元PE24将第一子矩阵dY24与第二子矩阵x44的转置x44t相乘,以生成第三中间子矩阵dY24*x44t,并且与先前结果累加得到dY21*x41t+dY22*x42t+ dY23*x43t+dY24*x44t,作为第4列第2行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x44的转置x44t到PE34。PE34将第一子矩阵dY33与第二子矩阵x43的转置x43t相乘,以生成第二中间子矩阵dY33*x43t,并且与先前结果累加得到dY31*x41t+dY32*x42t +dY33*x43t,并且经由纵向的数据通道向下侧传输第二子矩阵x43的转置x43t到PE44。PE44将第一子矩阵dY42与第二子矩阵x42的转置x42t相乘,以生成第三中间子矩阵dY42*x42t,并且与先前结果累加得到dY41*x41t+dY42*x42t。
在第13周期,如图51所示,PE43将第一子矩阵dY44与第二子矩阵x34的转置x34t相乘,以生成第三中间子矩阵dY44*x34t,并与先前结果累加得到dY41*x31t+dY42*x32t +dY43*x33t +dY44*x34t,作为第3列第4行的第三输出子矩阵,并且经由横向的数据通道向右侧传输第一子矩阵dY44到PE44。
PE34将第一子矩阵dY34与第二子矩阵x44的转置x44t相乘,以生成第二中间子矩阵dY34*x44t,并且与先前结果累加得到dY31*x41t+dY32*x42t +dY33*x43t+ dY34*x44t,作为第4列第3行的第三输出子矩阵,并且经由纵向的数据通道向下侧传输第二子矩阵x44的转置x44t到PE44。PE44将第二子矩阵x43的转置x43t与第一子矩阵dY43相乘,以生成第三中间子矩阵dY43*x43t,并且与先前结果累加得到dY41*x41t +dY42*x42t+dY43*x43t。
在第14周期,如图52所示,PE44将第一子矩阵dY44与第二子矩阵x44的转置x44t相乘,以生成第三中间子矩阵dY44 *x44t,并且与先前结果累加得到dY41 *x41t+dY42*x42t+dY43 *x43t+dY44 *x44t,作为第4列第4行的第三输出子矩阵。
至此,得到4行4列个第三输出子矩阵,也就得到了作为第一矩阵和第二矩阵的转置相乘的结果的第三输出矩阵。
本文中以上描述的方法和装置的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。
本公开的以上描述用于使本领域的任何普通技术人员能够实现或使用本公开。对于本领域普通技术人员来说,本公开的各种修改都是显而易见的,并且本文定义的一般性原理也可以在不脱离本公开的精神和保护范围的情况下应用于其它变形。因此,本公开并不限于本文所述的实例和设计,而是与本文公开的原理和新颖性特性的最广范围相一致。