一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

运算方法、处理器及相关产品与流程

2021-10-23 01:37:00 来源:中国专利 TAG:相关产品 运算 公开信息 器及 方法


1.本公开涉及信息处理技术领域,尤其涉及一种运算方法、处理器及相关产品。


背景技术:

2.在人工智能技术领域,神经网络算法是最近非常流行的一种机器学习算法,在各种领域中都取得了非常好的效果,比如图像识别,语音识别,自然语言处理等。随着神经网络算法的发展,算法的复杂度也越来越高,为了提高识别度,模型的规模也在逐渐增大。用gpu和cpu处理起这些大规模的模型,要花费大量的计算时间,并且耗电量很大。


技术实现要素:

3.有鉴于此,本公开提出了一种基于处理元件矩阵的矩阵乘的运算方法、处理器及相关产品。
4.根据本公开的一方面,提供了一种基于处理元件矩阵的矩阵乘的运算方法,应用于处理器,所述处理器包括两个以上处理元件,所述两个以上处理元件以二维矩阵排列,处理元件包括至少一个寄存器,所述方法实现对第一矩阵和第二矩阵的矩阵乘法运算,所述方法包括:
5.对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,p为m、k、n三者中的最大值;
6.将所述第三矩阵和所述第四矩阵以行列对齐的方式加载到处理元件的寄存器中,加载后第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中;
7.对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
8.根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积。
9.在一种可能的实现方式中,对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵,包括:
10.控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵;
11.将第三矩阵整体向左滚动一次、将第四矩阵整体向上滚动一次,或者,将第三矩阵整体向右滚动一次、将第四矩阵整体向下滚动一次,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵,重复p-1次得到第二元素乘积矩阵。
12.在一种可能的实现方式中,根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积,包括:
13.将第一元素乘积矩阵和第二元素乘积矩阵求和得到第五矩阵,根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行处理得到第一矩阵和第二矩阵的乘积。
14.根据本公开的另一方面,提供了一种处理器,所述处理器包括两个以上处理元件,
所述两个以上处理元件以二维矩阵排列,处理元件包括至少一个寄存器,所述处理器用于对第一矩阵和第二矩阵的矩阵乘法运算,所述处理器还包括控制器,所述控制器用于对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中,第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中,第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,p为m、k、n三者中的最大值;
15.所述控制器用于对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
16.所述控制器用于根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积。
17.根据本公开的另一方面,提供了一种基于处理元件矩阵的矩阵乘的运算装置,包括:上述处理器。
18.根据本公开的另一方面,提供了一种非易失性计算机可读存储介质,其上存储有计算机程序指令,其中,所述计算机程序指令被处理器执行时实现上述方法。
19.根据本公开的另一方面,提供了一种人工智能芯片,所述芯片包括如上所述的处理器。
20.根据本公开的另一方面,提供了一种电子设备,包括如上所述的人工智能芯片。
21.根据本公开上述各实施方式的矩阵乘的运算方法、处理器及相关产品,进行矩阵乘法运算时不需要反复读取数据,减少读取内存的次数,降低带宽压力,运算效率高。且对于任意规模的输入矩阵,都可以通过预处理的方式对输入矩阵进行变换,然后进行运算,可以得到矩阵乘法的运算结果。
22.根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
23.包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
24.图1示出根据本公开一实施例的处理器的示意图。
25.图2a和图2b分别示出了不同的划分矩阵的方式的示例。
26.图3示出根据本公开一实施例的运算方法的流程图。
27.图4示出根据本公开一实施例的分块的示意图。
28.图5示出根据本公开实施例的板卡的结构框图。
具体实施方式
29.以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
30.在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
31.另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
32.矩阵运算在利用人工智能对信息进行处理的过程中占据比较大的计算量,并且现有的处理器在处理矩阵运算的过程中把矩阵运算拆解成乘法运算和加法运算逐步运算,需要频繁的从内存中读取数据,运算的效率很低。
33.相关技术中,对于输入矩阵规模比较大的矩阵乘法,为了提高矩阵运算的效率,通常采用多级流水线的方式实现运算的过程,但多级流水线由于每一级对输入数据中的一部分进行处理,因此,需要频繁的从内存中读取数据,频繁访问内存导致对带宽的要求较高。
34.为了解决上述技术问题,本公开提供了一种运算方法以及执行该运算方法的处理器。处理器可以包括多个处理元件,在一些实施方式中,多个处理元件可以以二维矩阵的形式排列以更好的适应矩阵运算。
35.图1示出根据本公开一实施例的处理器的示意图。如图1所示,处理器包括多个处理元件pe(processing element)以二维矩阵的形式排列,每个处理元件与相邻的处理元件之间连接,每个pe中可以设置有至少一个寄存器(register)(图中未示出)。在运算过程中,处理器可以将矩阵的元素加载到各个pe对应的寄存器中,处理器可以控制pe可以对pe内设置的寄存器存储的元素进行运算。
36.处理器还可以包括控制器和存储器,其中,控制器和存储器都与多个处理元件连接,且控制器可以连接存储器。所述控制器用于从存储器中加载输入数据到处理元件的寄存器中,并控制处理元件对输入数据进行处理,比如说,存储器中可以存储有第一矩阵和第二矩阵(或者左乘矩阵和右乘矩阵),处理器用于对第一矩阵和第二矩阵执行矩阵乘法运算,因此,控制器可以将第一矩阵和第二矩阵加载到处理元件的寄存器中,并控制处理元件执行矩阵乘法运算。
37.在一种可能的实现方式中,存储器中还可以存储有可执行程序,可执行程序中可以包括指令,执行指令可以实现对第一矩阵和第二矩阵的矩阵乘法运算。控制器中可以设置有加载器、译码器等,其中,加载器可以用于将存储器中的输入数据加载到处理元件的寄存器中,译码器可以根据加载后输入数据的存储地址对可执行程序中访问数据的指令进行译码,比如说,对于访问数据的指令,通过译码获得输入数据在寄存器中存储的地址赋值给访问数据的指令,并将译码后的指令发送给处理元件,由处理元件执行指令,从而实现对数据的处理,比如说实现对第一矩阵和第二矩阵的矩阵乘法运算。
38.在一种可能的实现方式中,存储器可以为片上缓存,控制器可以将片外闪存上的可执行程序以及输入数据(例如,输入矩阵,包括左乘矩阵和右乘矩阵)加载到上述存储器(片上缓存)中,再进行之后的矩阵乘法运算的过程。
39.在一种可能的实现方式中,控制器也可以直接从片外内存上加载输入矩阵以及可执行程序到处理元件的寄存器中,本公开对此不作限定。
40.pe中还可以包括运算器以完成指定的运算,以矩阵运算为例,pe中可以包括例如乘法器、加法器等,各个pe中的具体结构可以相同,也可以存在不同,本公开对此不作限定。pe中还可以包括其他类型的运算器,以适应各种不同的运算过程,本公开对pe包括的运算器的数量和类型不作限定。
41.在一种可能的实现方式中,处理器(控制器)还可以对输入数据进行预处理得到与预处理后的输入数据,将预处理后的输入数据加载到处理元件的寄存器中,控制处理元件对预处理后的输入数据进行运算。
42.乘法操作的输入矩阵可以包括左乘矩阵和右乘矩阵,其中,左乘矩阵可以是指位于乘号左边的矩阵,右乘矩阵可以是指位于乘号右边的矩阵。
43.由于处理器中pe的数量以及排列方式是已知的,因此,在加载数据并计算之前,控制器可以先根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块。对于分块后的每一块矩阵进行运算得到第一中间结果,控制器可以控制处理元件根据第一中间结果计算输入矩阵的乘积。
44.其中,处理元件的排列可以是指处理元件的行数和列数,输入矩阵的行秩、列秩可以是指左乘矩阵以及右乘矩阵的行数和列数。
45.根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块可以是指:控制器可以判断输入矩阵的行数是否大于处理元件的行数、列数是否大于处理元件的列数,根据判断的结果确定是否对输入矩阵进行分块。
46.如果输入矩阵中的两个矩阵的行数都不大于处理元件的行数、且列数都不大于处理元件的列数,则控制器可以不对输入矩阵进行分块。
47.如果输入矩阵中的任意一个矩阵的行数大于处理元件的行数、或者列数大于处理元件的列数,则控制器可以对输入矩阵进行分块。
48.举例来说,假设处理元件组成的阵列为m
×
n的矩阵,可以表示为pe
mn
,假设一个输入矩阵为m
×
n的矩阵,可以表示为a
mn
,另一个输入矩阵为n
×
k的矩阵,可以表示为b
nk
。如果控制器判断矩阵a
mn
的行数m不大于处理元件的行数m、且列数n不大于处理元件的列数n,而且,b
nk
的行数n不大于处理元件的行数m、且列数k不大于处理元件的列数n,则控制器可以不对输入矩阵进行分块。
49.如果矩阵a
mn
的行数m大于处理元件的行数m、或者列数n大于处理元件的列数n,或者矩阵b
nk
的行数n大于处理元件的行数m、或列数k大于处理元件的列数n,则控制器可以对输入矩阵进行分块。
50.如果要对输入矩阵进行分块,那么假设对左乘矩阵分块后可以得到两个以上第一矩阵,对右乘矩阵分块后可以得到两个以上第二矩阵。
51.对于分块的情况:若左乘矩阵的列数不大于处理元件的列数、右乘矩阵的行数不大于处理元件的行数,左乘矩阵的行数大于处理元件的行数,则控制器可以确定对输入矩阵中的左乘矩阵进行分块,右乘矩阵的列数大于处理元件的列数,则控制器可以确定对右乘矩阵进行分块;若要对左乘矩阵进行分块,控制器可以根据处理元件的排列对左乘矩阵的行进行拆分,若要对右乘矩阵进行分块,控制器可以根据处理元件的排列对右乘矩阵的列进行拆分。
52.若输入矩阵中的左乘矩阵的列数大于处理元件的列数、或者右乘矩阵的行数大于处理元件的行数,则控制器可以对输入矩阵中的两个矩阵都进行分块,由于为了使得分块后的矩阵可以进行矩阵乘法运算,只要对左乘矩阵的列进行拆分、就必须对右乘矩阵的行进行拆分,因此不管是左乘矩阵的列数大于处理元件的列数还是右乘矩阵的行数大于处理元件的行数,控制器都需要对两个矩阵进行分块;若要对输入矩阵中的两个矩阵都进行分
块,控制器可以根据处理元件的排列以及输入矩阵的行秩和列秩对左乘矩阵列方向和右乘矩阵行方向以相同的方式进行分块。
53.举例来说,假设处理元件组成2
×
2的阵列为pe
22
,左乘矩阵为a
32
,右乘矩阵为b
22
,那么可以将左乘矩阵a
32
拆分为矩阵a
12
、矩阵a
22
分别与右乘矩阵b
22
相乘。若左乘矩阵为a
22
、右乘矩阵为b
23
,那么可以将右乘矩阵b
23
拆分为矩阵b
21
、矩阵b
22

54.对于要对输入矩阵中的两个矩阵都进行分块的情况,控制器可以在左乘矩阵的列方向上和右乘矩阵的行方向上以相同的方式进行分块,其中,所述相同的方式划分指的是划分后所得的第一矩阵的列数和对应的第二矩阵的行数是相同的,以保证能正常完成矩阵运算。
55.根据处理元件的排列以及输入矩阵的行秩和列秩对左乘矩阵列方向和右乘矩阵行方向以相同的方式进行分块,分块后得到的第一矩阵和第二矩阵都需要满足不需要再进行分块的条件,也就是说,第一矩阵和第二矩阵的行数都不大于处理元件的行数、且列数都不大于处理元件的列数。
56.在一种可能的实现方式中,可以按照划分出的第一矩阵或者第二矩阵的行秩和列秩尽量接近处理元件的行数和列数的方式进行划分,这样可以提高运算的效率,缩短运算时间。也就是说,假设处理元件为4
×
4的阵列,那么可以先按照划分出的矩阵为4
×
4的方式进行划分,这样可以最大效率的利用处理元件,提高运算效率。
57.举例来说,假设处理元件为2
×
2的阵列,输入矩阵一个为2
×
4矩阵、一个为4
×
3矩阵。划分的方式可以有很多种,图2a和图2b分别示出了多种不同的划分方式,矩阵a
24
在列方向和矩阵b
43
在行方向以相同的方式进行分块。图2a是划分的一个示例,矩阵a
24
在列方向划分为两部分,每一部分包括两列,矩阵b
43
在行方向划分为两部分,每一部分包括两行,包括图2a中(1)和(2)两种情况;图2b是划分的另一个示例,矩阵a
24
在列方向划分为三部分,其中一部分包括两列、另外两部分都包括一列,矩阵b
43
在行方向划分为三部分,其中一部分包括两行、另外两部分都包括一行。以上处理元件的排列以及输入矩阵的划分方式仅仅是本公开的一个示例,不以任何方式限制本公开。
58.对于左乘矩阵的行方向和右乘矩阵的列方向的划分方式,本公开不作具体的限定,只要划分后的矩阵都满足不需要再进行分块的条件即可。
59.对于不分块的情况,或者分块后的第一矩阵和第二矩阵,图3示出根据本公开一实施例的运算方法的流程图。对于不分块的情况,控制器也可以直接把左乘矩阵作为第一矩阵、右乘矩阵作为第二矩阵。图3所示的方法可以由处理器中的控制器执行或者控制器控制处理元件执行,如图3所示,本公开提供的运算方法可以包括以下步骤:
60.步骤s31,对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中,第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中。
61.其中,第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,max(m,k,n)表示取m、k、n中的最大值;
62.步骤s32,对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
63.步骤s33,根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得
到第一矩阵和第二矩阵的乘积。
64.对于步骤s31中的预处理,步骤s32中的不同滚动方式对应不同的预处理方式。预处理可以包括:第一预处理和第二预处理,第一预处理可以是指对第一矩阵和第二矩阵进行扩充,第二预处理可以是指对扩充后的矩阵中的元素进行滚动。
65.对于第一预处理的过程,控制器可以采用0对第一矩阵和第二矩阵进行扩充,具体地,假设第一矩阵为m
×
k、第二矩阵为k
×
n,控制器可以确定m、k、n三者中的最大值p,然后用0在第一矩阵和第二矩阵的下侧和/或右侧扩充形成p
×
p矩阵。
66.对于第二预处理的过程,在步骤s32中采用不同的滚动方式所对应的第二预处理的过程也是不同的。在一种可能的实现方式中,步骤s32可以包括以下过程:
67.步骤s321,控制器控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵;
68.步骤s322,控制器重复(p-1)次以下过程:将第三矩阵整体向左滚动一步、将第四矩阵整体向上滚动一步,或者,将第三矩阵整体向右滚动一步、将第四矩阵整体向下滚动一步,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵。
69.也就是说,控制器在对第三矩阵和第四矩阵进行滚动之前,可以控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵。之后,控制器可重复以下过程p-1次:将第三矩阵整体向左滚动一步、将第四矩阵整体向上滚动一步,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵;或者重复以下过程p-1次:将第三矩阵整体向右滚动一步、将第四矩阵整体向下滚动一步,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵。也就是说,执行完步骤s322后,控制器可以控制处理元件计算得到p-1个第二元素乘积矩阵。
70.对于步骤s322中每次将第三矩阵整体向左滚动一步、将第四矩阵整体向上滚动一步的过程,对应的第二预处理的过程可以为“将扩充后的第一矩阵的第i行向左滚动i步,将扩充后的第二矩阵的第j列向上滚动j步,其中i、j为自然数,且0≤i≤p-1,0≤j≤p-1”,而对于步骤s322中每次将第三矩阵整体向右滚动一步、将第四矩阵整体向下滚动一步的过程,对应的第二预处理的过程可以为“将扩充后的第一矩阵的第i行向左滚动i步、再整体向右滚动1步,将扩充后的第二矩阵的第j列向上滚动j步、再整体向下滚动1步”,或者说“将扩充后的第一矩阵的第i行向左滚动i-1步,将扩充后的第二矩阵的第j列向上滚动j-1步”。
71.在一种可能的实现方式中,可以在存储有矩阵的元素的处理元件之间形成闭环,由于相邻的处理元件之间是连接在一起的,因此控制器可以根据矩阵的维度确定成环的方式,比如说,如果要在列方向滚动,那么,存储有矩阵的元素的第一行处理元件和最后一行处理元件连接起来,在滚动的过程中,如果向上滚动,那么矩阵的第一行元素从原来存储的位置滚动到最后一行元素存储的位置。若要在行方向上滚动,那么,存储有矩阵的元素的第一列处理元件和最后一列处理元件连接起来,在滚动的过程中,如果向左滚动,那么矩阵的第一列元素从原来存储的位置滚动到最后一列元素存储的位置。上述的处理元件与处理元件的连接可以是指虚拟的连接,也就是说,并没有实际的连接线路,而是控制器记录了对应的处理器,在滚动的过程中形成闭环即可。
72.在一种可能的实现方式中,对第一矩阵和第二矩阵的预处理还可以包括加载过程,加载过程可以是在第一预处理和第二预处理之前执行,也可以是在第一预处理和第二
预处理之后执行。也就是说,在本公开的实施方式中,也可以先将第一矩阵和第二矩阵加载到处理元件的寄存器中,然后对第一矩阵和第二矩阵进行第一预处理和第二预处理的过程得到第三矩阵和第四矩阵,也可以在控制器外完成对第一矩阵和第二矩阵的第一预处理和第二预处理后得到第三矩阵和第四矩阵,再将第三矩阵和第四矩阵加载到处理元件的寄存器中,本公开对此不作限定。
73.需要说明的是,以上步骤s321、s322中的滚动和计算的过程以及对应的预处理过程仅仅是本公开的一个示例,本公开不限于此。
74.在一种可能的实现方式中,步骤s33可以包括:将第一元素乘积矩阵和多个第二元素乘积矩阵求和得到第五矩阵,根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行处理得到矩阵乘积。
75.其中,对于步骤s33中的根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行的处理,可以根据第一预处理的过程对第五矩阵进行处理,比如说,在第一矩阵和第二矩阵的右侧和下侧添加元素0形成p
×
p矩阵,这样,对第五矩阵的后处理可以是在第五矩阵的右侧和下侧反扩充,例如,将第五矩阵右侧和下侧的元素0去掉形成m
×
n矩阵。
76.根据本公开上述实施方式的矩阵乘的运算方法,进行矩阵乘法运算时不需要拆解运算、不需要反复读取数据,减少读取内存的次数,降低带宽压力,运算效率高。且对于任意规模的输入矩阵,都可以通过预处理的方式对输入矩阵进行变换,然后进行运算,可以得到矩阵乘法的运算结果。
77.应用示例
78.举例来说,假设第一矩阵为第二矩阵为由于第一矩阵为2
×
2、第二矩阵为2
×
3,也就是说m=2,k=2,n=3,因此,p可以为最大值3。
79.对于步骤s31,可以先将第一矩阵和第二矩阵加载到处理元件的寄存器中,之后执行第一预处理的过程:将第一矩阵扩充为将第二矩阵扩充为
80.在一种可能的实现方式中,加载时可以将第一矩阵和第二矩阵的第一行、第一列元素加载到同一个处理元件的寄存器中。例如,可以将第一矩阵加载到处理元件的第一组寄存器reg0中,将第二矩阵加载到处理元件的第二组寄存器reg1中。其中,reg0中的每一个框可以表示不同处理元件中的寄存器,reg1中的每一个框可以表示不同处理元件中的寄存器。a
11
和b
11
存储在同一个处理元件的寄存器中。这里的第一组寄存器或第二组寄存器可以是指物理上划分为不同层的一层寄存器,也可以是逻辑上划分的一组寄存器,本公开对此不作限定。
81.[0082][0083]
控制器还可以在行方向或者列方向连接处理元件形成闭环,比如说可以在列方向连接存储扩充后的第一矩阵和第二矩阵的第一行元素的处理元件和最后一行元素的处理元件,形成环,在环内的数据可以进行流动以实现矩阵在列方向上的滚动。或者也可以在行方向连接存储扩充后的第一矩阵和第二矩阵的第一列元素的处理元件和最后一列元素的处理元件,形成环,在环内的数据可以进行流动以实现矩阵在行方向上的滚动。
[0084]
以上述示例来说,可以连接pe
11
与pe
31
形成闭环、连接pe
12
和pe
32
形成闭环、连接pe
13
和pe
33
形成闭环。这样,当数据在环内进行流动时,如果是向上流动,那么第一行的数据将流动到第三行,第二行的数据将流动到第一行,第三行的数据将流动到第二行;如果是向下流动,那么第一行的数据将流动到第二行,第二行的数据将流动到第三行,第三行的数据将流动到第一行。
[0085]
还可以连接pe
11
和pe
13
形成闭环、连接pe
21
和pe
23
形成闭环、连接pe
31
和pe
33
形成闭环。这样,当数据在环内进行流动时,如果是向左流动,那么第一列的数据将流动到第三列,第二列的数据将流动到第一列,第三列的数据将流动到第二列;如果是向右流动,那么第一列的数据将流动到第二列,第二列的数据将流动到第三列,第三列的数据将流动到第一列。
[0086]
第二预处理的过程:在一个示例中(示例1),对于矩阵a
33
来说,控制器不需要对第0行滚动,控制第1行的元素依次向左滚动1步、第2行的元素依次向左滚动2步得到的第三矩阵如下:
[0087][0088]
对于矩阵b
33
来说,控制器不需要对第0列滚动,控制第1列的元素依次向上滚动1步,第2列的元素依次向上滚动2步得到的第四矩阵如下:
[0089][0090]
对于第二预处理的过程:在另一个示例(示例2)中,对于矩阵a
33
来说,控制器不需要对第0行滚动,控制第1行的元素依次向左滚动1步,第2行的元素依次向左滚动2步,再控制矩阵中的元素整体向右滚动1步得到的第三矩阵(或者说,控制器控制第0行向右滚动1步,控制第1行元素不滚动,控制第2行元素向左滚动1步)如下:
a
22
b
21
0a
21
b
13
000
[0101]
对于步骤s32,仍然以示例1为例,将第三矩阵整体向左滚动一步可以得到
[0102][0103]
将第四矩阵整体向上滚动一步可以得到
[0104][0105]
控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵,第二元素乘积矩阵可以如下所示,
[0106]
a
12
b
21
0a
11
b
13
0a
21
b
12
a
22
b
23
000
[0107]
p为3,p-1为2,因此,还需要对第三矩阵整体向左滚动一步,将第四矩阵整体向上滚动一步,
[0108][0109][0110]
控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵,
[0111]
0a
11
b
12
a
12
b
23
a
21
b
11
a
22
b
22
0000
[0112]
对于步骤s33,将第一元素乘积矩阵和多个第二元素乘积矩阵求和得到第五矩阵,
[0113]
a
11
b
11
a
12
b
21
a
11
b
12
a
12
b
22
a
11
b
13
a
12
b
23
a
21
b
11
a
22
b
21
a
21
b
12
a
22
b
22
a
21
b
13
a
22
b
23
000
[0114]
对第五矩阵进行反扩充处理(将下侧的元素0去掉)可以得到矩阵乘积。
[0115]
a
11
b
11
a
12
b
21
a
11
b
12
a
12
b
22
a
11
b
13
a
12
b
23
a
21
b
11
a
22
b
21
a
21
b
12
a
22
b
22
a
21
b
13
a
22
b
23
[0116]
在一种可能的实现方式中,对于上述过程中计算得到的第一元素乘积矩阵和多个第二元素乘积矩阵,可以暂存在临时缓存器中。或者,也可以将第一元素乘积矩阵和多个第二元素乘积矩阵存储在处理元件的寄存器中,比如说,存储在reg2、reg3、reg4(处理元件的其他组寄存器)中,每个处理元件可以对相应寄存器内存储的元素进行相加实现第一元素乘积矩阵和多个第二元素乘积矩阵求和的过程。需要说明的是,以上仅仅是本公开的一些计算第五矩阵的示例,不以任何方式限制本公开。
[0117]
根据本公开上述各实施方式的矩阵乘的运算方法,更适用于以阵列排布的处理元件组成的处理器,运算效率高。且对于满足处理元件的排列的任意规模的输入矩阵,都可以通过预处理的方式对输入矩阵进行变换,然后进行运算,可以得到矩阵乘法的运算结果。并且,相比于相关技术中的矩阵乘运算可以减少访存次数,降低带宽压力,提高运算的效率。
[0118]
对于不进行分块的情况,根据上述示例可以直接得到矩阵乘的结果。对于需要进行分块的情况,对于分块后的第一矩阵和第二矩阵,按照矩阵乘的规则将第一矩阵和对应的第二矩阵相乘得到的结果作为第一中间结果,也就是说可以将分块后得到的第一矩阵和第二矩阵作为矩阵的一个元素执行矩阵乘法的运算过程得到第一中间结果,根据第一中间结果进行计算可以得到所述输入矩阵的乘积。
[0119]
图4示出根据本公开一实施例的分块的示意图。如图4所示,将矩阵d和e按照以上所述的方式进行分块得到第一矩阵d
11
、d
12
、d
21
、d
22
,以及第二矩阵e
11
、e
12
、e
21
、e
22
。可以将第一矩阵和第二矩阵作为矩阵的一个元素执行矩阵乘法的运算过程,例如,矩阵d第一行乘以矩阵e第一列为f
11
=d
11
×
e
11
d
12
×
e
21
,矩阵d第一行乘以矩阵e第二列为f
12
=d
11
×
e
12
d
12
×
e
22
,矩阵d第二行乘以矩阵e第一列为f
21
=d
21
×
e
11
d
22
×
e
21
,矩阵d第二行乘以矩阵e第二列为f
22
=d
21
×
e
12
d
22
×
e
22
。也就是说,为了得到最终的矩阵乘法的运算结果,需要先得到第一中间结果:
[0120]
d
11
×
e
11
,d
12
×
e
21
,d
11
×
e
12
,d
12
×
e
22

[0121]
d
21
×
e
11
,d
22
×
e
21
,d
21
×
e
12
,d
22
×
e
22

[0122]
得到第一中间结果的过程可以通过将对应的第一矩阵和第二矩阵分别按照步骤s31-s34的过程进行运算得到。
[0123]
通过对输入矩阵进行分块,并针对分块后的矩阵分别进行本公开的矩阵乘法运算得到第一中间结果,根据第一中间结果可以计算得到输入矩阵的乘积。根据本公开上述实施方式的运算方法,对于任何维度的矩阵都可以快速的实现矩阵相乘的过程。且相比于相关技术通过多级流水线实现运算的过程,可以减少访存次数,降低带宽压力,提高运算的效率。
[0124]
示例3
[0125]
假设处理元件为2
×
2的阵列,以图2a中第(1)种分块的方式为例说明分块计算得到第一中间结果,并根据第一中间结果计算输入矩阵的乘积的过程。
[0126]
a
11
为a
12
为b
11
为b
21
为b
12
为b
22

[0127]
那么a
11
×
b
11
根据步骤s31-s33的计算过程为:
[0128]
对于步骤s31,由于矩阵a
11
和矩阵a
12
都是2
×
2的矩阵,因此,不需要进行扩充。第二预处理过程可以为,对于矩阵a
11
来说,控制器不需要对第0行滚动,控制第1行的元素依次向左滚动1步得到的第三矩阵如下:
[0129][0130]
对于a
12
来说,控制器不需要对第0列滚动,控制第1列的元素依次向上滚动1步得到的第四矩阵如下:
[0131][0132]
第三矩阵和第四矩阵对应位置的元素存储在同一个处理元件的寄存器中。例如,第三矩阵存储在处理元件的第一组寄存器reg0中,第四矩阵存储在处理元件的第二组寄存器reg1中。元素a
11
、元素b
11
存储的位置可以是指处理元件pe
11
中的寄存器,元素a
12
、元素b
22
存储的位置可以是指处理元件pe
12
中的寄存器,元素a
22
、元素b
21
存储的位置可以是指处理元件pe
21
中的寄存器。
[0133][0134][0135]
控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵,第一元素乘积矩阵可以如下所示,
[0136]
a
11
b
11
a
12
b
22
a
22
b
21
a
21
b
12
[0137]
对于步骤s32,仍然以示例1为例,将第三矩阵整体向左滚动一步可以得到
[0138][0139]
将第四矩阵整体向上滚动一步可以得到
[0140][0141]
控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵,第
二元素乘积矩阵可以如下所示,
[0142]
a
12
b
21
a
11
b
12
a
21
b
11
a
22
b
22
[0143]
p为2,p-1为1,因此,可以结束滚动的过程。
[0144]
对于步骤s33,将第一元素乘积矩阵和第二元素乘积矩阵求和得到第五矩阵,
[0145]
a
11
b
11
a
12
b
21
a
12
b
22
a
11
b
12
a
22
b
21
a
21
b
11
a
21
b
12
a
22
b
22
[0146]
由于没有对第一矩阵和第二矩阵进行扩充,因此,也不需要进行反向扩充的过程,因此,以上结果就是a
11
×
b
11
的第一中间结果。
[0147]
对于a
12
×
b
21
,a
11
×
b
12
,a
12
×
b
22
都可以采用步骤s31-s33的过程得到第一中间结果,然后根据第一中间结果计算输入矩阵的乘积,计算过程为:
[0148]
c
11
=a
11
×
b
11
a
12
×
b
21
[0149]
c
12
=a
11
×
b
12
a
12
×
b
22

[0150]
以上就是根据本公开各实施方式的矩阵乘的运算方法,根据以上过程,可以采用分块的方式计算得到输入矩阵的乘积。因此,根据本公开的矩阵乘的运算方法可以实现任意大小规模的矩阵运算。
[0151]
本公开还提供了一种处理器。图1所示为处理器的一个示例,处理器可以包括两个以上处理元件,两个以上处理元件以二维矩阵排列,每个处理元件包括至少一个寄存器,所述处理器用于实现对第一矩阵和第二矩阵的矩阵乘法运算。
[0152]
所述处理器还包括控制器,所述控制器用于对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中,第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中,第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,p为m、k、n三者中的最大值;
[0153]
所述控制器用于对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
[0154]
所述控制器用于根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积。
[0155]
在一种可能的实现方式中,所述控制器还用于控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵;
[0156]
所述控制器重复p-1次以下过程:将第三矩阵整体向左滚动一次、将第四矩阵整体向上滚动一次,或者,将第三矩阵整体向右滚动一次、将第四矩阵整体向下滚动一次,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵。
[0157]
在一种可能的实现方式中,所述控制器用于将第一元素乘积矩阵和第二元素乘积矩阵求和得到第五矩阵,根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行处理得到第一矩阵和第二矩阵的乘积。
[0158]
在一种可能的实现方式中,所述控制器对第一矩阵和第二矩阵的预处理包括:第一预处理和第二预处理,
[0159]
其中,其中,所述第一预处理指:采用0扩充第一矩阵和第二矩阵的右侧和/或下侧得到p
×
p矩阵;
[0160]
所述第二预处理指:对扩充后的p
×
p矩阵中的元素进行滚动。
[0161]
在一种可能的实现方式中,对于将第三矩阵整体向左滚动、将第四矩阵整体向上滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i步,将扩充后的第二矩阵的第j列向上滚动j步,其中i、j为自然数,且0≤i≤p-1,0≤j≤p-1。
[0162]
在一种可能的实现方式中,对于将第三矩阵整体向右滚动、将第四矩阵整体向下滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i-1步,将扩充后的第二矩阵的第j列向上滚动j-1步。
[0163]
在一种可能的实现方式中,所述控制器还用于根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块,其中,输入矩阵包括左乘矩阵和右乘矩阵;
[0164]
若要对左乘矩阵进行分块,控制器根据处理元件的排列对左乘矩阵的行进行拆分,若要对右乘矩阵进行分块,控制器根据处理元件的排列对右乘矩阵的列进行拆分;
[0165]
若要对输入矩阵中的两个矩阵都进行分块,控制器根据处理元件的排列以及输入矩阵的行秩和列秩对左乘矩阵列方向和右乘矩阵行方向以相同的方式进行分块;
[0166]
对左乘矩阵分块后得到两个以上所述第一矩阵,对右乘矩阵分块后得到两个以上所述第二矩阵,或者,对左乘矩阵分块后得到两个以上所述第二矩阵,对右乘矩阵分块后得到两个以上所述第一矩阵。
[0167]
在一种可能的实现方式中,若左乘矩阵的列数不大于处理元件的列数、右乘矩阵的行数不大于处理元件的行数,左乘矩阵的行数大于处理元件的行数则控制器确定对左乘矩阵进行分块,右乘矩阵的列数大于处理元件的列数,则控制器确定对右乘矩阵进行分块;
[0168]
若输入矩阵中的左乘矩阵的列数大于处理元件的列数、或者右乘矩阵的行数大于处理元件的行数,则所述控制器对输入矩阵中的两个矩阵都进行分块。
[0169]
在一种可能的实现方式中,所述控制器还用于按照矩阵乘的规则,根据所述第一矩阵和第二矩阵的乘积计算所述左乘矩阵和所述右乘矩阵的乘积。
[0170]
对于本实施例的处理器执行矩阵乘法运算的详细过程可参见上文的方法部分,不再赘述。
[0171]
本公开实施例还提出一种人工智能芯片,所述芯片包括如上所述的处理器。本公开实施例还提出一种运算装置,包括如上所述的处理器。
[0172]
在一种可能的实现方式中,还公开了一种板卡,其包括存储器件、接口装置和控制器件以及上述人工智能芯片;其中,所述人工智能芯片与所述存储器件、所述控制器件以及所述接口装置分别连接;所述存储器件,用于存储数据;所述接口装置,用于实现所述人工智能芯片与外部设备之间的数据传输;所述控制器件,用于对所述人工智能芯片的状态进行监控。
[0173]
图5示出根据本公开实施例的板卡的结构框图,参阅图5,上述板卡除了包括上述芯片389以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件390、接口装置391和控制器件392;
[0174]
所述存储器件390与所述人工智能芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元393。每一组所述存储单元与所述人工智能芯片通过总线连接。可以理解,每一组所述存储单元可以是ddr sdram(英文:double data rate sdram,双倍速率同步动态随机存储器)。
[0175]
ddr不需要提高时钟频率就能加倍提高sdram的速度。ddr允许在时钟脉冲的上升沿和下降沿读出数据。ddr的速度是标准sdram的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个ddr4颗粒(芯片)。在一个实施例中,所述人工智能芯片内部可以包括4个72位ddr4控制器,上述72位ddr4控制器中64bit用于传输数据,8bit用于ecc校验。
[0176]
在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。ddr在一个时钟周期内可以传输两次数据。在所述芯片中设置控制ddr的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
[0177]
所述接口装置与所述人工智能芯片电连接。所述接口装置用于实现所述人工智能芯片与外部设备(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准pcie接口。比如,待处理的数据由服务器通过标准pcie接口传递至所述芯片,实现数据转移。在另一个实施例中,所述接口装置还可以是其他的接口,本公开并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述人工智能芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
[0178]
所述控制器件与所述人工智能芯片电连接。所述控制器件用于对所述人工智能芯片的状态进行监控。具体的,所述人工智能芯片与所述控制器件可以通过spi接口电连接。所述控制器件可以包括单片机(micro controller unit,mcu)。如所述人工智能芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述人工智能芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述人工智能芯片中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
[0179]
本公开实施例还提出一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。计算机可读存储介质可以是非易失性计算机可读存储介质。
[0180]
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0181]
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c 等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机
或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0182]
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0183]
这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0184]
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0185]
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0186]
依据以下条款可更好地理解前述内容:
[0187]
条款a1.一种基于处理元件矩阵的矩阵乘的运算方法,应用于处理器,所述处理器包括两个以上处理元件,所述两个以上处理元件以二维矩阵排列,处理元件包括至少一个寄存器,所述方法实现对第一矩阵和第二矩阵的矩阵乘法运算,所述方法包括:
[0188]
对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中,第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中,第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,p为m、k、n三者中的最大值;
[0189]
对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
[0190]
根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩
阵和第二矩阵的乘积。
[0191]
条款a2.根据条款a1所述的方法,对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵,包括:
[0192]
控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵;
[0193]
重复p-1次以下过程:将第三矩阵整体向左滚动一次、将第四矩阵整体向上滚动一次,或者,将第三矩阵整体向右滚动一次、将第四矩阵整体向下滚动一次,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵。
[0194]
条款a3.根据条款a2所述的方法,根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积,包括:
[0195]
将第一元素乘积矩阵和第二元素乘积矩阵求和得到第五矩阵,根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行处理得到第一矩阵和第二矩阵的乘积。
[0196]
条款a4.根据条款a1所述的方法,所述对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,包括:包括第一预处理和第二预处理,
[0197]
其中,所述第一预处理指:采用0扩充第一矩阵和第二矩阵的右侧和/或下侧得到p
×
p矩阵;
[0198]
所述第二预处理指:对扩充后的p
×
p矩阵中的元素进行滚动。
[0199]
条款a5.根据条款a4所述的方法,
[0200]
对于将第三矩阵整体向左滚动、将第四矩阵整体向上滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i步,将扩充后的第二矩阵的第j列向上滚动j步,其中i、j为自然数,且0≤i≤p-1,0≤j≤p-1。
[0201]
条款a6.根据条款a4所述的方法,
[0202]
对于将第三矩阵整体向右滚动、将第四矩阵整体向下滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i-1步,将扩充后的第二矩阵的第j列向上滚动j-1步。
[0203]
条款a7.根据条款a1-a6任意一项所述的方法,所述方法还包括:
[0204]
根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块,其中,输入矩阵包括左乘矩阵和右乘矩阵;
[0205]
若要对左乘矩阵进行分块,根据处理元件的排列对左乘矩阵的行进行拆分,若要对右乘矩阵进行分块,根据处理元件的排列对右乘矩阵的列进行拆分;
[0206]
若要对输入矩阵中的两个矩阵都进行分块,根据处理元件的排列以及输入矩阵的行秩和列秩对左乘矩阵列方向和右乘矩阵行方向以相同的方式进行分块;
[0207]
对左乘矩阵分块后得到两个以上所述第一矩阵,对右乘矩阵分块后得到两个以上所述第二矩阵,或者,对左乘矩阵分块后得到两个以上所述第二矩阵,对右乘矩阵分块后得到两个以上所述第一矩阵。
[0208]
条款a8.根据条款a7所述的方法,根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块,包括:
[0209]
若左乘矩阵的列数不大于处理元件的列数、右乘矩阵的行数不大于处理元件的行数,左乘矩阵的行数大于处理元件的行数则确定对左乘矩阵进行分块,右乘矩阵的列数大于处理元件的列数则确定对右乘矩阵进行分块;
[0210]
若输入矩阵中的左乘矩阵的列数大于处理元件的列数、或者右乘矩阵的行数大于处理元件的行数,则对输入矩阵中的两个矩阵都进行分块。
[0211]
条款a9.根据条款a7所述的方法,所述方法还包括:按照矩阵乘的规则,根据第一矩阵和第二矩阵的乘积计算所述左乘矩阵和所述右乘矩阵的乘积。
[0212]
条款a10.一种处理器,所述处理器包括两个以上处理元件,所述两个以上处理元件以二维矩阵排列,处理元件包括至少一个寄存器,所述处理器用于对第一矩阵和第二矩阵的矩阵乘法运算,所述处理器还包括控制器,所述控制器用于对第一矩阵和第二矩阵进行预处理得到第三矩阵和第四矩阵,其中,第三矩阵和第四矩阵对应位置的元素存储在同一处理元件的寄存器中,第三矩阵和第四矩阵都为p
×
p矩阵,p=max(m,k,n),m表示第一矩阵的行秩,n表示第二矩阵的列秩,第一矩阵的列秩和第二矩阵的行秩为k,p为m、k、n三者中的最大值;
[0213]
所述控制器用于对第三矩阵和第四矩阵在行方向或者列方向进行滚动,控制处理元件对相应的寄存器内的元素进行乘法运算得到元素乘积矩阵;
[0214]
所述控制器用于根据对第一矩阵和第二矩阵预处理的方式对元素乘积矩阵进行处理得到第一矩阵和第二矩阵的乘积。
[0215]
条款a11.根据条款a10所述的处理器,所述控制器还用于控制处理元件对相应的寄存器内的元素进行乘法运算得到第一元素乘积矩阵;
[0216]
所述控制器重复p-1次将第三矩阵整体向左滚动一次、将第四矩阵整体向上滚动一次,或者,将第三矩阵整体向右滚动一次、将第四矩阵整体向下滚动一次,控制处理元件对相应的寄存器内的元素进行乘法运算得到第二元素乘积矩阵。
[0217]
条款a12.根据条款a11所述的处理器,所述控制器用于将第一元素乘积矩阵和第二元素乘积矩阵求和得到第五矩阵,根据对第一矩阵和第二矩阵预处理的方式对第五矩阵进行处理得到第一矩阵和第二矩阵的乘积。
[0218]
条款a13.根据条款a10所述的处理器,所述控制器对第一矩阵和第二矩阵的预处理包括:第一预处理和第二预处理,
[0219]
其中,其中,所述第一预处理指:采用0扩充第一矩阵和第二矩阵的右侧和/或下侧得到p
×
p矩阵;
[0220]
所述第二预处理指:对扩充后的p
×
p矩阵中的元素进行滚动。
[0221]
条款a14.根据条款a13所述的处理器,对于将第三矩阵整体向左滚动、将第四矩阵整体向上滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i步,将扩充后的第二矩阵的第j列向上滚动j步,其中i、j为自然数,且0≤i≤p-1,0≤j≤p-1。
[0222]
条款a15.根据条款a13所述的处理器,对于将第三矩阵整体向右滚动、将第四矩阵整体向下滚动的方式,对应的第二预处理的过程为:将扩充后的第一矩阵的第i行向左滚动i-1步,将扩充后的第二矩阵的第j列向上滚动j-1步。
[0223]
条款a16.根据条款a10-a15任意一项所述的处理器,
[0224]
所述控制器还用于根据处理元件的排列以及输入矩阵的行秩以及列秩确定是否对输入矩阵进行分块,其中,输入矩阵包括左乘矩阵和右乘矩阵;
[0225]
若要对左乘矩阵进行分块,控制器根据处理元件的排列对左乘矩阵的行进行拆
分,若要对右乘矩阵进行分块,控制器根据处理元件的排列对右乘矩阵的列进行拆分;
[0226]
若要对输入矩阵中的两个矩阵都进行分块,控制器根据处理元件的排列以及输入矩阵的行秩和列秩对左乘矩阵列方向和右乘矩阵行方向以相同的方式进行分块;
[0227]
对左乘矩阵分块后得到两个以上所述第一矩阵,对右乘矩阵分块后得到两个以上所述第二矩阵,或者,对左乘矩阵分块后得到两个以上所述第二矩阵,对右乘矩阵分块后得到两个以上所述第一矩阵。
[0228]
条款a17.根据条款a16所述的处理器,若左乘矩阵的列数不大于处理元件的列数、右乘矩阵的行数不大于处理元件的行数,左乘矩阵的行数大于处理元件的行数则控制器确定对左乘矩阵进行分块,右乘矩阵的列数大于处理元件的列数,则控制器确定对右乘矩阵进行分块;
[0229]
若输入矩阵中的左乘矩阵的列数大于处理元件的列数、或者右乘矩阵的行数大于处理元件的行数,则所述控制器对输入矩阵中的两个矩阵都进行分块。
[0230]
条款a18.根据条款a16所述的处理器,所述控制器还用于按照矩阵乘的规则,根据所述第一矩阵和第二矩阵的乘积计算所述左乘矩阵和所述右乘矩阵的乘积。
[0231]
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜