CN111582467B - 人工智能加速器和电子设备 - Google Patents
人工智能加速器和电子设备 Download PDFInfo
- Publication number
- CN111582467B CN111582467B CN202010407202.3A CN202010407202A CN111582467B CN 111582467 B CN111582467 B CN 111582467B CN 202010407202 A CN202010407202 A CN 202010407202A CN 111582467 B CN111582467 B CN 111582467B
- Authority
- CN
- China
- Prior art keywords
- data
- input
- processing unit
- array
- unit
- 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
- 238000013473 artificial intelligence Methods 0.000 title claims abstract description 17
- 238000012545 processing Methods 0.000 claims abstract description 256
- 239000011159 matrix material Substances 0.000 claims abstract description 123
- 230000008707 rearrangement Effects 0.000 claims abstract description 79
- 230000009466 transformation Effects 0.000 claims abstract description 50
- 238000000034 method Methods 0.000 claims description 31
- 230000008569 process Effects 0.000 claims description 22
- 230000010349 pulsation Effects 0.000 claims description 20
- 239000003054 catalyst Substances 0.000 claims 1
- 238000004364 calculation method Methods 0.000 description 21
- 238000003672 processing method Methods 0.000 description 12
- 238000004590 computer program Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000003491 array Methods 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 5
- 238000013527 convolutional neural network Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Multi Processors (AREA)
Abstract
本公开实施例提供一种人工智能加速器和电子设备,其中,人工智能加速器可以包括至少一个处理模块,每一个处理模块包括第一脉动阵列、数据重排单元和第二脉动阵列;第一脉动阵列用于:将接收的初始数据与第一脉动阵列中存储的变换参数进行矩阵乘运算,得到中间数据;数据重排单元用于:对第一脉动阵列输出的中间数据进行数据重排处理,得到重排数据;第二脉动阵列,用于:将数据重排单元输出的重排数据与第二脉动阵列中存储的变换参数进行矩阵乘运算,得到变换结果。
Description
技术领域
本公开涉及机器学习技术,具体涉及一种人工智能加速器和电子设备。
背景技术
当前,卷积神经网络在人工智能应用中被广泛使用,卷积神经网络的高精度也带来了大量的计算复杂度。学术界和工业界提出了各种用于加速卷积神经网络计算的加速器。为了能够减少卷积运算时的计算量,Winograd算法被应用于卷积运算中,Winograd算法可以降低卷积运算的复杂度,减少乘法计算次数。目前,在通过人工智能加速器实现上述Winograd变换时,处理效率有待提高。
发明内容
有鉴于此,本公开实施例至少提供一种人工智能加速器和电子设备。
第一方面,提供一种人工智能加速器,包括:
至少一个处理模块,每一个所述处理模块包括第一脉动阵列、数据重排单元和第二脉动阵列,其中,所述第一脉动阵列的输出端连接所述数据重排单元的输入端,所述数据重排单元的输出端连接所述第二脉动阵列的输入端:
所述第一脉动阵列,用于:将接收的初始数据与所述第一脉动阵列中存储的变换参数进行矩阵乘运算,得到中间数据;
数据重排单元,用于:对所述第一脉动阵列输出的所述中间数据进行数据重排处理,得到重排数据;
所述第二脉动阵列,用于:将所述数据重排单元输出的重排数据与所述第二脉动阵列中存储的所述变换参数进行矩阵乘运算,得到变换结果。
在一些例子中,所述数据重排单元包括:数据重排电路。
在一些例子中,所述数据重排单元,用于将来自所述第一脉动阵列的各个输出列中的多个中间数据,传输至所述第二脉动阵列的同一输入行;其中,所述多个中间数据在各自所属的输出列中的输出排位相同。
在一些例子中,所述第一脉动阵列包括:至少一个第一处理单元和至少一个第二处理单元;所述第一处理单元设置有旁路,所述旁路连接所述第一处理单元的输出端与所述第二处理单元的输入端;所述第一处理单元,用于通过所述旁路将所述第一处理单元接收到的第一输入数据传输至所述第二处理单元的输入端,其中,所述第一处理单元和所述第二处理单元位于不同行。
在一些例子中,所述第一脉动阵列包括:至少一个第一处理单元和至少一个第二处理单元;所述第一处理单元设置有旁路,所述旁路连接所述第一处理单元的输出端与所述第二处理单元的输入端;所述第一处理单元,用于通过所述旁路将所述第一处理单元接收到的第一输入数据传输至所述第二处理单元的输入端,其中,所述第一处理单元和所述第二处理单元位于不同行。
在一些例子中,所述第一处理单元,还用于:将所述第一输入数据输入到所述第一处理单元相邻的第三处理单元,所述第三处理单元与所述第一处理单元位于同一行;和/或,将所述第一处理单元基于所述第一输入数据得到的第一处理数据传输至所述第一处理单元相邻的第四处理单元,所述第四处理单元与所述第一处理单元位于同一列。
在一些例子中,所述第一处理单元位于所述第一处理单元所在行的第P列,所述第二处理单元位于所述第二处理单元所在行的第1列;所述P的数值使得所述第一处理单元将所述第一初始数据中的所述第一输入数据传输至所述第二处理单元的第二时钟周期与第三时钟周期满足所述第一脉动阵列的输入时钟要求,其中,所述第一初始数据与第二初始数据复用所述第一输入数据,所述第三时钟周期为所述第二初始数据中的第三输入数据进入所述第一脉动阵列的时钟周期。
在一些例子中,所述至少一个处理模块包括第一处理模块和第二处理模块,且所述加速器还包括:复用阵列;所述复用阵列,用于接收第三输入数据,并通过将所述第三输入数据与存储的所述变换参数进行矩阵乘运算后得到变换结果;其中,所述第三输入数据是基于所述第一处理模块的第一脉动阵列输出的中间数据中的至少一部分和所述第二处理模块的第一脉动阵列输出的中间数据中的至少一部分得到的。
在一些例子中,所述复用阵列包括至少一个第一输入单元和至少一个第二输入单元;所述至少一个第一输入单元,与所述第一处理模块中的第一数据重排单元的输出端连接,用于接收所述第一数据重排单元输出的重排数据的一部分;所述至少一个第二输入单元,与所述第二处理模块中的第二数据重排单元的输出端连接,用于接收所述第二数据重排单元输出的重排数据的一部分。
在一些例子中,所述加速器,还包括:复用选择器和第三数据重排单元;所述复用选择器,其输入端分别连接第一处理模块的第一脉动阵列的输出端、以及第二处理模块的第一脉动阵列的输出端;其输出端连接所述第三数据重排单元的输入端;所述复用选择器用于接收所述第一处理模块输出的中间数据中的至少一部分和所述第二处理模块输出的中间数据中的至少一部分,并将接收到的数据输出至所述第三数据重排单元;所述第三数据重排单元,用于将所述复用选择器输出的数据进行重排处理后输入至所述复用阵列。
第二方面,提供一种电子设备,包括本公开任一实施例的人工智能加速器。
本公开实施例提供的人工智能加速器和电子设备,通过设置分别执行不同数据处理阶段的第一脉动阵列和第二脉动阵列,并将这两个阵列按照数据处理的阶段顺序依次连接起来,使得这两个脉动阵列能够流水化执行数据的处理,避免了数据阻塞,从而提高了对各个初始数据的处理效率。
附图说明
为了更清楚地说明本公开一个或多个实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开一个或多个实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1a示出了本公开至少一个实施例提供的第一方向的小矩阵拆分示意图;
图1b示出了本公开至少一个实施例提供的第二方向的小矩阵拆分示意图;
图2示出了本公开至少一个实施例提供的一种加速器结构示意图;
图3示出了本公开至少一个实施例提供的一种数据重排的原理示意图;
图4示出了本公开至少一个实施例提供的一种旁路设置示意图;
图5示出了本公开至少一个实施例提供的一种两个相邻矩阵的示意图;
图6a至图6f示出了本公开至少一个实施例提供的一种数据输入阵列的输入过程示意图;
图7示出了本公开至少一个实施例提供的另一种旁路设置示意图;
图8示出了本公开至少一个实施例提供的横向数据复用示意图;
图9示出了本公开至少一个实施例提供的一种复用阵列的设置示意图;
图10是图9的扩展结构示意图;
图11示出了本公开至少一个实施例提供的另一种复用阵列的设置示意图;
图12示出了本公开至少一个实施例提供的一种数据处理方法的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本公开一个或多个实施例中的技术方案,下面将结合本公开一个或多个实施例中的附图,对本公开一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
在卷积神经网络的实际计算过程中,由于输入矩阵的规模往往很大,通常会将输入矩阵拆分为多个小矩阵,再对每个小矩阵使用Winograd加速算法进行处理。Winograd算法可以有多种不同的计算规模,假设Winograd算法的计算规模是F(2×2,3×3),则可以将输入矩阵在第一方向(可以称为纵向)和第二方向(可以称为横向)分别拆为多个大小为4×4的小矩阵。为了便于理解,下面对技术方案的描述均假设Winograd算法以F(2×2,3×3)进行分块计算,但本公开实施例不限于此。
例如,图1a中示出了在第一方向上拆分得到的两个相邻的4×4的小矩阵11和小矩阵12(其他小矩阵未示出),本公开实施例的描述中将每个小矩阵都称为“初始矩阵”。这些初始矩阵后续要输入或被读取到加速器中,由加速器对每个初始矩阵进行Winograd变换。可以看到,在相邻的两个初始矩阵之间,存在两行的数据复用。例如,初始矩阵11的后两行同时也作为初始矩阵12的前两行,将分别作为初始矩阵11和初始矩阵12的一部分由加速器进行Winograd变换。
例如,图1b中示出了在第二方向上拆分得到的两个相邻的4×4的初始矩阵13和初始矩阵14(其他小矩阵未示出),同样可以看到,该第二方向上拆分得到的两个相邻的初始矩阵之间也存在数据复用,这些复用数据将被加速器读取两次进行Winograd变换。
而不论是第一方向还是第二方向,上述将输入矩阵拆分得到的每个初始矩阵,都要输入到加速器中进行Winograd变换。该Winograd变换的基本形式是C=ATBA,其中B为变换前的初始矩阵,A为常数矩阵,C为变换后的矩阵。本公开实施例将说明如何通过脉动阵列对每个初始矩阵进行Winograd变换。
本公开实施例中,将上述的Winograd变换拆分成如下两个阶段:令D=BTA,C=DTA,可以将D矩阵的计算和C矩阵的计算分别称为Winograd变换的第一阶段和第二阶段。
应理解,本公开实施例中的加速器可以为GPU、TPU、FPGA、ASIC或其他类型的AI加速器,本公开实施例对此不做限定。
请继续参见图2所示的例子,本公开实施例用于执行上述两阶段的Winograd变换的结构可以包括:第一脉动阵列21、第二脉动阵列22和数据重排单元。其中,如下的描述中,该数据重排单元以数据重排电路23为例进行说明,但可以理解的是,数据重排单元也可以实现为电路以外的其他形式,例如通过软件实现或者其他类型的硬件结构实现。其中,常数矩阵A已经预先存储在第一脉动阵列21和第二脉动阵列22中,该常数矩阵A也可以称为是存储在第一脉动阵列中的用于进行Winograd变换的变换参数。
如图2所示,上述的第一脉动阵列21的输出端连接数据重排电路23的输入端,所述数据重排电路23的输出端连接第二脉动阵列22的输入端。
第一脉动阵列21用于进行Winograd变换的第一阶段的计算,可以接收初始矩阵的转置BT,该BT可以称为第一脉动阵列21接收的初始数据。如图2所示,该BT可以由第一脉动阵列的左侧输入阵列,并通过该第一脉动阵列21中的各个处理单元(Processing elements,PE,图2标示了其中一个PE)对初始矩阵进行处理,进行矩阵乘运算,例如计算D=BTA后输出D矩阵。本公开实施例可以将D矩阵称为“中间数据”。该D矩阵可以由第一脉动阵列的下方输出阵列。
该中间数据D输入数据重排电路23,经过数据重排电路23的数据重排处理后输出,直接输入进与数据重排电路23连接的第二脉动阵列22。本公开实施例可以将数据重排电路23重排处理后得到的数据称为“重排数据”DT。如图2所示,该重排数据DT可以由第二脉动阵列的上方输入阵列。
第二脉动阵列22的各个处理单元对重排数据DT进行处理,将该重排数据与第二脉动阵列22中存储的变换参数A进行矩阵乘运算,得到C=DTA,输出C矩阵,该C矩阵即Winograd变换后的变换结果。该C矩阵可以由第二脉动阵列的左侧输出阵列。
请继续参见图2所示,第一脉动阵列21、第二脉动阵列22和数据重排电路23的结构配合,可以实现对各个初始矩阵的Winograd变换的流水化计算。例如,以图1a中的两个初始数据11和12为例,可以将初始数据11的转置作为初始数据输入图2中的第一脉动阵列21后,就依次按照上述的处理步骤,由第一脉动阵列21输出D矩阵,数据重排电路23重排后由第二脉动阵列22对DT处理,输出C矩阵。同时,初始数据12在时序上可以紧随初始数据11输入第一脉动阵列21(只要第一脉动阵列处理初始数据11的资源空闲出来),呈现一个流水处理的状态。比如,有可能会出现第二脉动阵列22正在对初始数据11进行第二阶段的Winograd变换,同时,第一脉动阵列21正在对初始数据12进行第一阶段的Winograd变换。由此可见,本公开实施例的人工智能加速器,通过设置分别执行Winograd变换的两个阶段的第一脉动阵列和第二脉动阵列,并将这两个脉动阵列设置成流水处理的连接关系,使得该加速器能够对Winograd变换的数据处理形成流水线,避免了数据阻塞,从而显著提高了对各个初始矩阵进行Winograd变换的处理效率。
图2所示的第一脉动阵列21、第二脉动阵列22和数据重排电路23的整体结构可以称为一个Winograd变换的处理模块。人工智能加速器上可以包括至少一个这样的处理模块。
其中,数据重排电路23负责将第一脉动阵列21输出的D矩阵进行重排处理后得到DT矩阵,请结合图3来看该数据重排电路23的处理。如图3所示,数据重排电路23可以将第一脉动阵列21中的各个输出列中的多个中间数据,传输至第二脉动阵列22的同一输入行,其中,该多个中间数据在各自所属的输出列中的输出排位相同,例如,都位于各自所属的输出列中的第二个位置,但本公开实施例对此不做限定。
举例来说,中间数据a1、a2和a3都是由第一脉动阵列21的第一列(也可以称为第一输出列)输出,并且时序上来看,a1在该第一列中的输出排位是第一位,即在该第一列中a1是第一个输出的中间数据;a2在第一列的输出排位是第二位,a3在第一列的输出排位是第三位。中间数据b1、b2由第一脉动阵列21的第二列(同理,也可以称为第二输出列,后续不再说明,用于输出中间数据的各个列都可以称为输出列)输出,并且时序上来看,b1在第二列中的输出排位是第一位,b2在第二列中的输出排位是第二位。同理,c1是由第一脉动阵列21的第三列输出,并且是首个输出的中间数据。
如上,中间数据a1、b1、c1分别由不同列输出,且这三个数据对应同一输出排位,即都是“第一位”,则在输入第二脉动阵列22时,输入至第二脉动阵列22的同一行(也可以称为输入行),如图3所示,a1、b1、c1以同一输入行输入第二脉动阵列22。并且,还可以看到,b1比a1延时一个时钟周期输出第一脉动阵列21,也比a1延时一个时钟周期输入第二脉动阵列22。其他中间数据的重排输入同理,不再详述。
可选的,数据重排电路23内部可以实现为多个数据选择器的结构。以其中一个数据选择器来说,该数据选择器可以包括四个输入端和一个输出端,其中,四个输入端分别用于接收第一脉动阵列21的四列的输出中间数据,并由这四列输出的中间数据中选择数据由输出端输出。例如,该数据选择器可以选择中间数据a1、b1、c1,并通过输出端将这些数据a1、b1、c1输出至第二脉动阵列22的某一输入行。同理,另一个数据选择器可以用于选择中间数据a2、b2,并通过输出端将中间数据a2、b2依次输出至第二脉动阵列22的另一输入行。
如上所述的,两个相邻的初始矩阵存在数据复用,例如,图1a所示的初始数据11和初始数据12,当初始数据11输入脉动阵列进行Winograd变换时,其中的两个数据复用行要由存储空间读取这两行的矩阵数据输入阵列,而当初始数据12输入脉动阵列时,又要重新从存储空间读取这两行的矩阵数据,这样重复数据的读取会增加功耗开销。基于此,本公开的另一个实施例提供了对第一脉动阵列的结构改进,以减少这部分功耗开销,减少脉动阵列的输入数据量。
仍以图1a中的初始数据11和初始数据12为例,这两个相邻的初始矩阵存在两行的数据复用,这种情况下,请参见图4所示,可以将第一脉动阵列的第三行和第四行作为接收初始数据的输入行。即第一脉动阵列的第一行和第二行不再直接接收从存储空间读取的初始数据。
其中,本公开实施例的描述中,可以将第一脉动阵列中用于接收复用的数据的那两行处理单元,称为两个数据复用行。同时,还在第一脉动阵列的两个数据复用行中设置了旁路。示例性的,如图4所示,可以在第二列(由负责接收数据的输入PE起始的第二列)的输出端处设置旁路,该旁路可以将第二列的PE连接至第一脉动阵列的前两行PE。具体的,请参见图4所示,可以通过旁路将PE1的输出端连接至PE2的输入端,将PE3的输出端连接至PE4的输入端。该旁路可以将数据复用行接收的初始数据传输至所述第一脉动阵列的前两行。
其中,可以将图4中的上述PE1称为第一处理单元,将PE2称为第二处理单元,通过旁路可以将该第一处理单元接收的第一输入数据传输至第二处理单元的输入端,该第一输入数据可以是由PE1的输入端输入PE1的数据。
此外,由图4还可以看到,第一处理单元和第二处理单元位于第一脉动阵列的不同行。上述图4的旁路设置只是一个示例,实际实施中并不局限于图4所示的结构,例如,第一脉动阵列中包括至少一个第一处理单元和至少一个第二处理单元,其中,设置旁路连接某个第一处理单元的输出端和第二处理单元的输入端,该第一处理单元和第二处理单元位于阵列中的不同行。这种旁路结构设置就可以实现第一脉动阵列中不同行的PE之间的数据传输,至于这种不同行的数据传输具体应用于何种场景可以根据实际需求确定,例如,将这种不同行PE间的数据传输用于数据复用场景中的复用数据之间的传输,可以减少复用数据的重复读取。再者,具体的第一处理单元和第二处理单元在阵列中的所处位置、以及旁路的设置位置和数量等,都可以根据实际实施情况进行变通,并不局限于图4所示的示例性结构。本公开实施例仅以图4为例进行说明。
具体的,以图4中的PE1为例,说明该PE1接收到初始数据中的第一输入数据后的处理过程,可以包括:
一方面,在第一时钟周期(cycle-1)接收初始数据中的第一输入数据,并对所述第一输入数据进行处理,得到第一处理数据。
另一方面,在第一时钟周期之后的第二时钟周期(cycle-2),PE1将第一输入数据通过旁路输出至PE2的输入端,由PE2对该第一输入数据进行处理,得到第二处理数据。同时,PE1还将该第一输入数据输入到与PE1相邻的PE,比如,与PE1同一行且位于PE1右侧的PE(可以称为第三处理单元)。
再一方面,PE1还可以将基于所述第一输入数据得到的第一处理数据传输至PE1同一列相邻的PE3(可以称为第四处理单元)。
由上述可以看到,第一脉动阵列中的各个PE在接收到输入数据时,都可以既对该输入数据进行处理,将处理得到的处理数据继续传输,还可以将原始的输入数据传输至同行下一个PE以及旁路传输至不同行的PE。
需要说明的是,数据复用行接收的矩阵数据是要进行数据复用的数据,比如,初始数据11的后两行数据。但是,对于首个输入的初始矩阵来说,该首个初始矩阵中的前两行矩阵数据尽管不会复用,也要由该数据复用行接收,并通过旁路上传到前两行。不过,该首个初始矩阵中的前两行矩阵数据在数据复用行中的各个PE不会参与中间数据D的输出处理,比如,数据复用行的PE不会对这些数据进行计算处理,或者即使计算也不会参与到后续中间数据D的计算,比如不会将计算得到的处理数据向下传输到同列的下一个PE。
图5示例了相邻输入的初始数据11和初始数据12,如下通过图6a至图6f图示一下这两个矩阵输入第一脉动阵列时的部分主要时钟周期的输入状态。其中,在对矩阵输入第一脉动阵列的过程描述中将主要说明输入数据是如何通过旁路在不同行的PE间传输,而对于PE对输入数据进行的数据处理将不再说明。
其中,通过图6a至图6c可以看到,先通过第一脉动阵列的两个输入行接收初始数据11的前两行的矩阵数据,该矩阵数据由旁路传输至第一脉动阵列的前两行。尽管该前两行的矩阵数据在第一脉动阵列的数据复用行传输,但处理单元可以不将其参与进D矩阵的输出处理。
图6d开始,初始数据11的后两行数据开始输入,并且可以看到,后两行数据与前两行数据的输入满足了相邻行延时一个时钟周期的要求,当B1,0到达第一脉动阵列第二行的第二个PE时,B2,0开始输入第一脉动阵列第三行的第一个PE。由图6e也可以看到,初始数据11的各行输入满足相邻行的延时要求,比如B0,0、B1,0、B2,0、B3,0之间是依次延时一个cycle输入脉动阵列。
图6f显示了初始数据12已经开始输入,并且,由该图6f可以看到,初始数据12输入时,只需要输入后两行的矩阵数据即可,前两行的矩阵数据由于是与初始数据11复用,已经在初始数据11的后两行矩阵数据的输入过程中,同时通过旁路上传到第一脉动阵列的前两行了。可见,初始数据12的输入避免了对B2,0和B3,0起始的两行数据的重复读取和输入,降低了功耗开销。
需要说明的是,图4至图6f都是以Winograd算法的计算规模是F(2×2,3×3)为例,实际实施中,Winograd算法还可以采用F(4×4,3×3)、F(6×6,3×3)等不同的规模。在其他的F规模的情况下,第一脉动阵列的用于接收矩阵数据输入的输入行与数据复用行的行数可以不相同,并且,旁路的设置也不一定是在第一脉动阵列的第二列,可以有多种变通结构。
例如,当Winograd算法采用F(4×4,3×3)的计算规模时,初始矩阵和第一脉动阵列都是6*6的矩阵,并且相邻的两个初始矩阵之间存在两行的数据复用。这种情况下,请参见图7所示,可以将第一脉动阵列的第三行至第六行作为用于接收初始矩阵的矩阵数据的四个输入行,并且在该四个输入行中的后两行(即对应的数据复用行)中设置了旁路。可选的,可以在第四列设置旁路,以通过旁路将数据复用行接收的矩阵数据传输至第一脉动阵列的前两行。
其他的F规模的情况不再列举。通过上述例子可以看到,当相邻的两个初始矩阵之间存在N行的数据复用时,并且,初始矩阵和第一脉动阵列均为M*M的矩阵的情况下,可以将第一脉动阵列的第N+1行至第M行作为用于接收初始矩阵的矩阵数据的输入行。该多个输入行中至少包括N个数据复用行,比如,图7所示的四个输入行的后两行即两个数据复用行(后两行即时序上后输入第一脉动阵列的两行)。
在旁路的设置上,旁路可以设置在第一脉动阵列的数据复用行的某一列,比如将第一处理单元设置在其所在行的第P列,而通过旁路连接的第二处理单元可以位于该第二处理单元所在行的第1列。示例性的,在图7中该P的数值等于四。本公开实施例不对P的数值进行限制,可以有多种选择的设置方式,只要该旁路设置的位置满足如下条件即可:所述P的数值使得第一处理单元将第一初始数据中的第一输入数据传输至第二处理单元的第二时钟周期与第三时钟周期满足第一脉动阵列的输入时钟要求,其中,所述第一初始数据与第二初始数据复用所述第一输入数据,所述第三时钟周期为所述第二初始数据中的第三输入数据进入所述第一脉动阵列的时钟周期。
例如,仍以图4至图6f的图示为例,PE3是其中一个第一处理单元,PE4是其中一个第二处理单元,第一初始数据可以是图5中的初始数据11,第二初始数据可以是图5中的初始数据12。复用的第一输入数据可以包括B3,0,第二初始数据中的第三输入数据例如可以包括B4,0。当初始数据11向第一脉动阵列中输入时,假设在第二时钟周期cycle-2中PE3将B3,0传输至PE4,那么,在下一个第三时钟周期cycle-3中,B3,0传输至PE4同行相邻的下一个PE,同时,B4,0开始进入脉动阵列,即B4,0进入到第一脉动阵列的第三行第一个PE。总而言之,当第一初始数据的第三行和第四行的矩阵数据通过旁路传输至第一脉动阵列的第一行和第二行时,具体是第四行的第一个矩阵数据通过旁路传输至第二行的第一个PE时,下一个时钟周期内则第二初始数据中第三行的第一个矩阵数据输入至第一脉动阵列的第三行第一个PE,从而保证了第二初始数据的各行输入数据的延时要求,即由第一行至第四行的各相邻行延时一个时钟周期输入,具体为B2,0/B3,0/B4,0/B5,0分别作为各行的首个数据依次延时一个cycle输入。
其中需要说明的是,在本公开实施例的第一脉动阵列设置旁路以后,数据复用行的矩阵数据仍然跟随时钟周期在阵列行中的各个PE间传输、流动和处理,只是会同时通过旁路向上传输至不同行的另一个PE。例如,以图6F为例,矩阵数据B2,3会沿着第一脉动阵列的第三行的各个PE由左到右的流动传输,并在PE中进行计算处理,比如,在某一个时钟周期,B2,3会由第三行的第二个PE向前传输至第三个PE,同样会被这两个PE处理计算。同时,由于第二个PE的输出端设置了旁路,该矩阵数据B2,3会在该时钟周期内同时沿旁路传输至第一行的第一个PE。因此,该一个时钟周期内同时做了两件事,一方面,B2,3由第三行的第二个PE向前传输至第三个PE,另一方面,B2,3沿旁路传输至第一行的第一个PE。
如上的图4至图7,通过在第一脉动阵列中对应的数据复用行设置旁路,使得第一脉动阵列在处理存在N行的数据复用的两个相邻矩阵时,可以通过旁路将上一矩阵中需要复用的数据上传至阵列的前N行,并作为下一矩阵的输入数据,从而无需重复从缓存读取该复用数据,减少了数据输入量,降低了重复数据读取的功耗开销,并且提高了数据处理效率。此外,还可以看到,第一脉动阵列、第二脉动阵列和数据重排电路构成的处理模块可以对某个初始数据进行Winograd变换的流水线处理时,其中,负责接收输入的初始数据的第一脉动阵列中设置了旁路,以通过旁路可以实现减少复用数据的重复读取,而第二脉动阵列中可以不设置旁路,采用通常结构的脉动阵列即可。
在另一个例子中,当初始矩阵和第一脉动阵列均为M*M的矩阵,两个相邻的初始矩阵之间存在N行的数据复用,并且N等于M的1/2时,本公开实施例通过设置复用阵列和至少两个处理模块相配合的结构,使得第一脉动阵列能够接收两个相互间不存在数据重复的相邻初始数据。
请参见图8所示,图8示例一个8*8的输入矩阵,并且在F(2×2,3×3)的计算规模下,将该输入矩阵可以拆分成多个4*4的初始矩阵。例如初始矩阵81/82/83,其中可以看到,初始矩阵83分别与初始矩阵81和初始矩阵82之间存在两行的数据复用。如下描述中,可以将初始矩阵81称为第一初始矩阵,将初始矩阵82称为第二初始矩阵,将初始矩阵83称为第三初始矩阵。
本公开实施例的人工智能加速器中设置了复用阵列,该复用阵列可以与加速器中的第一处理模块和第二处理模块连接,用于接收第三输入数据,并通过将所述第三输入数据与存储的变换参数(例如,常数矩阵A)进行矩阵乘运算后得到变换结果。其中,所述第三输入数据是基于第一处理模块的第一脉动阵列输出的中间数据中的至少一部分和所述第二处理模块的第一脉动阵列输出的中间数据中的至少一部分得到的。
也就是说,要由两个处理模块输出的中间数据中各自选择一部分数据共同得到复用阵列的输入数据,该复用阵列的输入数据可以称为第三输入数据。该复用阵列与前面描述的第二脉动阵列具有相同的结构和功能,同样可以是存储有常数矩阵A,并通过与第三输入数据运算得到winograd的变换结果。
如下示例两种可选的复用阵列与第一处理模块、第二处理模块的连接结构。
请继续参见图9,以上述的第一至第三初始矩阵为例,本公开实施例提供了复用结构来处理上述三个矩阵。如图9所示,该复用结构包括:第一处理模块91、第二处理模块92、复用选择器93、第三数据重排单元94和复用阵列95。
其中,每一个处理模块都包括图2所述的第一脉动阵列、数据重排电路和第二脉动阵列,第一处理模块和第二处理模块的第一脉动阵列的输出端均连接至复用选择器93的输入端,复用选择器93的输出端连接第三数据重排单元94的输入端,该第三数据重排单元94也可以是一个数据重排电路。该复用阵列95是一个第二脉动阵列,用于执行Winograd变换的第二阶段,复用阵列的输入端连接第三数据重排单元94的输出端。
本实施例中,第一处理模块91对第一初始矩阵进行Winograd变换,第二处理模块92对第二初始矩阵进行Winograd变换,这两个矩阵间不存在数据重复。请继续参见图9,第一处理模块91的第一脉动阵列输出的中间数据、以及第二处理模块92的第一脉动阵列输出的中间数据都输入复用选择器93,由复用选择器93各自选择其中一部分数据输出至第三数据重排单元94。第三数据重排单元94对接收的数据进行重排处理后输入至复用阵列95。
具体的,复用选择器93的处理原理如下:如图8所示,假设第一初始矩阵T1是由B1和B2组成,T1=[B1,B2];第二初始矩阵T2是由B3和B4组成,T2=[B3,B4];第三初始矩阵T3是由B2和B3组成,T3=[B2,B3]。那么,各个初始矩阵的第一阶段的Winograd变换应是如下这样:
同理,
可以看到,D3可以由D1和D2的一部分计算结果组成。基于此,在第一初始矩阵和第二初始矩阵分别进行完第一阶段的计算后,两个处理模块分别产生中间数据。而复用阵列的输入数据可以由这两个处理模块的中间数据各选择一部分构成,不需要直接进行计算,第一处理模块和第二处理模块的中间数据的各自一部分中间数据共同构成复用阵列的输入。例如,在上述分析中,D3由B2A和B3A组成,分布于D1的下半矩阵和D2的上半矩阵。D1和D2计算同时执行,所以D3第二阶段的输入先由D2提供,后由D1提供,整个过程可以流水执行不会被阻塞。
因此,复用选择器93可以包括:两个输入端、一个输出端和选择信号端;
所述两个输入端,用于分别接收第一处理模块的第一脉动阵列输出的中间数据、以及第二处理模块的第一脉动阵列输出的中间数据;
所述选择信号端,用于接收数据选择信号,并根据该数据选择信号由上述两个处理模块输出的中间数据中各自选择一部分数据,由输出端输出。
复用选择器的输出端连接第三数据重排单元,由第三数据重排单元进行重排处理后输出至复用阵列,复用阵列对输入数据处理得到输出的变换结果;所述变换结果对应第三初始矩阵。
由上述可以看到,第三初始矩阵不需要再进行第一阶段的Winograd变换,而是由第一初始矩阵和第二初始矩阵对应输出的中间数据的至少一部分组合就得到了对应第三初始矩阵的第一阶段的中间数据,只需要一个复用阵列对该中间数据进行第二阶段的Winograd变换即可。
由此可见,该方式通过设置复用阵列,使得横向复用的多个矩阵中的部分矩阵不需要再执行第一阶段的Winograd变换,避免了重复计算,显著节省了计算资源的消耗,降低了硬件规模和计算成本,并且提升了数据处理效率;该复用阵列的结构的可扩展性也较高,可以在加速器中扩展设置多个复用阵列。
此外,图9只示例了一个复用结构,实际实施中,当输入矩阵在某一方向的拆分的初始矩阵数量较多时,比如图8的初始矩阵数量多于三个,可以设置更多的复用结构,每一个复用结构用于根据两个相邻且不存在数据重复的初始矩阵同时获得三个初始矩阵的计算结果,其中包括该两个相邻初始矩阵的中间初始矩阵。
例如,图10示例了一个多复用结构的例子,在图9所示的基础上,又扩展了一个处理模块以及一个复用阵列,该扩展的处理模块和复用阵列可以与图9中的第二处理模块92一起构成另一个复用结构。该新增的复用结构可以通过两个处理模块对初始矩阵82和初始矩阵84进行处理,并通过初始矩阵82和初始矩阵84的第一阶段处理结果组合得到对应初始矩阵85的第一阶段处理结果,再通过复用阵列得到对应该初始矩阵85的Winograd变换结果。如上,图10所示的扩展结构在处理初始矩阵时,可以直接处理相互间没有数据重复的矩阵即可,例如,初始矩阵81、初始矩阵82和初始矩阵84,相应省去了对初始矩阵83和85的第一阶段的Winograd变换,提高了数据处理效率,降低了硬件成本。
此外,在人工智能加速器中,通过脉动阵列对输入矩阵进行Winograd变换的计算时,该脉动阵列中可以包括类似图2所示的处理模块的结构,这种结构可以用于对输入的相邻初始矩阵间存在数据复用的情况进行Winograd变换的计算;该脉动阵列中还可以包括类似图9所示的复用结构,该复用结构可以用于对输入的相邻初始矩阵间不存在数据复用的情况进行Winograd变换的计算。
当然可选的,人工智能加速器中也可以只包括上述图2或图9的其中一种阵列结构,或者,同时包括上述图2或图9的阵列结构。
图11还示例了另一种复用阵列的设置结构,如图11所示,复用阵列1101可以包括至少一个第一输入单元和至少一个第二输入单元。例如,图中的PE5和PE6可以称为第一输入单元,PE7和PE8可以称为第二输入单元。
其中,所述至少一个第一输入单元,与第一处理模块1102中的第一数据重排单元的输出端连接,用于接收第一数据重排单元输出的重排数据的一部分。比如,第一数据重排单元输出的重排数据中,对应输入第二脉动阵列1104的左边两列的重排数据,可以通过PE5和PE6输入复用阵列,作为输入该复用阵列1101的一部分数据。
所述至少一个第二输入单元,与所述第二处理模块1103中的第二数据重排单元的输出端连接,用于接收所述第二数据重排单元输出的重排数据的一部分。比如,第二数据重排单元输出的重排数据中,对应输入第三脉动阵列1105右边两列的重排数据,可以通过PE7和PE8输入复用阵列,作为输入该复用阵列1101的另一部分数据。
这种结构是将复用阵列的输入单元与两个处理模块的数据重排单元的输出端直接连接,并接收数据重排单元的输出数据,结构简单成本低。同样的,图11所示的结构也可以如图10那样做成多复用的结构,不再详述。
此外,本公开实施例还提供一种电子设备,该电子设备中可以包括本公开任一实施例所述的人工智能加速器。例如,该电子设备可以是手机等智能终端,或者也可以是具有摄像头并可以进行图像处理的其他设备。示例性的,当该电子设备获取到采集的图像时,可以对图像进行处理,处理过程就可以采用本公开实施例的人工智能加速器来执行计算任务,该人工智能加速器可以辅助提高计算任务的处理效率。
此外,本公开实施例还提供了图12所示的数据处理方法,该处理方法应用于人工智能加速器,所述加速器包括至少一个处理模块,每个所述处理模块包括:第一脉动阵列、数据重排单元和第二脉动阵列。该数据处理方法的详细流程可以结合参见以上对本公开的人工智能加速器的任一实施例的描述,在上面加速器的实施例中已经详细描述,这里将不再赘述。
如图12所示,该数据处理方法可以包括:
在步骤1200中,所述第一脉动阵列接收初始数据,通过与所述第一脉动阵列中存储的变换参数数据进行矩阵乘运算,得到中间数据。
例如,所述的变换参数可以是固定存储在第一脉动阵列中的常数矩阵。
在步骤1202中,通过数据重排单元对所述第一脉动阵列输出的中间数据进行数据重排处理,得到重排数据。
例如,通过数据重排单元可以将来自第一脉动阵列的各个输出列中的多个中间数据,输入第二脉动阵列的同一输入行。其中,所述多个中间数据在各自所属的输出列中的输出排位相同。比如,第一脉动阵列的各个输出列中第一位输出的中间数据,输入至第二脉动阵列的同一行中。
在步骤1204中,第二脉动阵列将所述数据重排单元输出的重排数据与所述第二脉动阵列中存储的所述变换参数数据进行矩阵乘运算,得到变换结果。
本实施例的数据处理方法,通过分别由第一脉动阵列和第二脉动阵列进行不同阶段的数据处理,使得对数据的处理可以流水线执行,提高数据处理效率。
在一个例子中,所述第一脉动阵列接收初始数据的过程中,可以包括如下处理:第一脉动阵列可以包括至少一个第一处理单元和至少一个第二处理单元,其中,所述第一处理单元和所述第二处理单元位于不同行,且所述第一处理单元设置有旁路。第一脉动阵列可以通过该旁路将第一处理单元的输入数据传输至所述第二处理单元的输入端。
该旁路的设置可以是:通过第一处理单元所在行的第P列设置的旁路,将所述第一处理单元的输入数据传输至所述第二处理单元的输入端,所述第二处理单元位于所述第二处理单元所在行的第1列;其中,所述P的数值设置满足:使得所述输入数据所在的初始数据中各输入行之间在输入至第一脉动阵列时满足脉动阵列的输入时钟要求;其中,所述输入数据所在的初始数据中,所述输入数据由所述第二处理单元输入第一脉动阵列。
具体的,该数据处理方法还可以包括:第一处理单元在第一时钟周期接收所述初始数据中的第一输入数据时,还可以对所述第一输入数据进行处理,得到第一处理数据。并且第一处理单元可以在第一时钟周期之后的第二时钟周期通过所述旁路将第一处理数据输出至第二处理单元,由第二处理单元对该第一输入数据进行处理,得到第二处理数据。
在一个例子中,该数据处理方法还可以包括:所述第一处理单元在所述第二时钟周期将所述第一输入数据输入到所述第一处理单元相邻的第三处理单元,所述第三处理单元与所述第一处理单元位于同一行。和/或,所述第一处理单元在所述第二时钟周期将所述第一中间数据传输至所述第一处理单元相邻的第四处理单元,所述第四处理单元与所述第一处理单元位于同一列。
如上,该数据处理方法通过由第一脉动阵列中设置的旁路,执行不同行的PE之间的数据传输,可以实现对存在数据复用的两个相邻矩阵之间通过旁路进行复用数据的传输,从而减少重复数据读取,不仅可以降低数据读取的功耗开销,而且进一步提高了数据处理效率。
在又一个例子中,该加速器中还包括复用阵列,所述至少一个处理模块包括第一处理模块和第二处理模块。该数据处理方法还包括:
所述复用阵列接收输入数据,所述输入数据是由所述第一处理模块的第一脉动阵列输出的中间数据和所述第二处理模块的第一脉动阵列输出的中间数据中各自选择部分数据得到;并通过将所述输入数据与存储的所述变换参数数据进行矩阵乘运算后得到所述变换结果。
在一个例子中,所述复用阵列的输入端包括至少一个第一输入单元和至少一个第二输入单元;所述复用阵列接收输入数据,包括:所述复用阵列通过至少一个第一输入单元,接收第一处理模块中的第一数据重排单元发送的多个重排数据,所述多个重排数据是第一数据重排单元对第一处理模块的第一脉动阵列输出的部分中间数据重排处理得到;并通过至少一个第二输入单元,接收第二处理模块中的第二数据重排单元发送的多个重排数据,所述多个重排数据是第二数据重排单元对第二处理模块的第一脉动阵列输出的部分中间数据进行重排处理得到。
在一个例子中,所述加速器,还包括:复用选择器和第三数据重排单元;所述复用阵列接收输入数据,包括:所述复用选择器接收第一处理模块输出的中间数据和所述第二处理模块输出的中间数据,并选择数据输出至所述第三数据重排单元;所述复用阵列接收所述第三数据重排单元对所述复用选择器输出的选择数据重排处理后得到的输入数据。
如上,该数据处理方法通过由第一处理模块和第二处理模块的中间数据共同形成复用阵列的输入数据,使得能够减少对数据的重复读取以及重复计算,降低计算资源的消耗,提高数据处理效率。
本领域技术人员应明白,本公开一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本公开一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本公开一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开实施例还提供一种计算机可读存储介质,该存储介质上可以存储有计算机程序,所述程序被处理器执行时实现本公开任一实施例描述的用于文字识别的神经网络的训练方法的步骤,和/或,实现本公开任一实施例描述的文字识别方法的步骤。
其中,本公开实施例所述的“和/或”表示至少具有两者中的其中一个,例如,“多和/或B”包括三种方案:多、B、以及“多和B”。
本公开中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本公开特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的行为或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本公开中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本公开中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本公开中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本公开中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPG多(现场可编程门阵列)或多SIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PD多)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本公开包含许多具体实施细节,但是这些不应被解释为限制任何公开的范围或所要求保护的范围,而是主要用于描述特定公开的具体实施例的特征。本公开内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本公开一个或多个实施例的较佳实施例而已,并不用以限制本公开一个或多个实施例,凡在本公开一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开一个或多个实施例保护的范围之内。
Claims (11)
1.一种人工智能加速器,其特征在于,包括:
至少一个处理模块,每一个所述处理模块包括第一脉动阵列、数据重排单元和第二脉动阵列,其中,所述第一脉动阵列的输出端连接所述数据重排单元的输入端,所述数据重排单元的输出端连接所述第二脉动阵列的输入端:
所述第一脉动阵列,用于:将接收的初始数据与所述第一脉动阵列中存储的变换参数进行矩阵乘运算,得到中间数据;
数据重排单元,用于:对所述第一脉动阵列输出的所述中间数据进行数据重排处理,得到重排数据;
所述第二脉动阵列,用于:将所述数据重排单元输出的重排数据与所述第二脉动阵列中存储的所述变换参数进行矩阵乘运算,得到变换结果。
2.根据权利要求1所述的加速器,其特征在于,所述数据重排单元包括:数据重排电路。
3.根据权利要求1所述的加速器,其特征在于,
所述数据重排单元,用于将来自所述第一脉动阵列的各个输出列中的多个中间数据,传输至所述第二脉动阵列的同一输入行;其中,所述多个中间数据在各自所属的输出列中的输出排位相同。
4.根据权利要求1所述的加速器,其特征在于,所述第一脉动阵列包括:至少一个第一处理单元和至少一个第二处理单元;
所述第一处理单元设置有旁路,所述旁路连接所述第一处理单元的输出端与所述第二处理单元的输入端;
所述第一处理单元,用于通过所述旁路将所述第一处理单元接收到的第一输入数据传输至所述第二处理单元的输入端,其中,所述第一处理单元和所述第二处理单元位于不同行。
5.根据权利要求4所述的加速器,其特征在于,
所述第一处理单元,用于:在第一时钟周期接收所述初始数据中的第一输入数据,并对所述第一输入数据进行处理,得到第一处理数据;
所述第二处理单元,用于在所述第一时钟周期之后的第二时钟周期接收所述第一处理单元通过所述旁路输出的所述第一输入数据,并对所述第一输入数据进行处理,得到第二处理数据。
6.根据权利要求4所述的加速器,其特征在于,
所述第一处理单元,还用于:
将所述第一输入数据输入到所述第一处理单元相邻的第三处理单元,所述第三处理单元与所述第一处理单元位于同一行;和/或
将所述第一处理单元基于所述第一输入数据得到的第一处理数据传输至所述第一处理单元相邻的第四处理单元,所述第四处理单元与所述第一处理单元位于同一列。
7.根据权利要求4所述的加速器,其特征在于,
所述第一处理单元位于所述第一处理单元所在行的第P列,所述第二处理单元位于所述第二处理单元所在行的第1列;
所述P的数值使得所述第一处理单元将第一初始数据中的所述第一输入数据传输至所述第二处理单元的第二时钟周期与第三时钟周期满足所述第一脉动阵列的输入时钟要求,其中,所述第一初始数据与第二初始数据复用所述第一输入数据,所述第三时钟周期为所述第二初始数据中的第三输入数据进入所述第一脉动阵列的时钟周期。
8.根据权利要求1至7中任一项所述的加速器,其特征在于,所述至少一个处理模块包括第一处理模块和第二处理模块,且所述加速器还包括:复用阵列;
所述复用阵列,用于接收第三输入数据,并通过将所述第三输入数据与存储的所述变换参数进行矩阵乘运算后得到变换结果;其中,所述第三输入数据是基于所述第一处理模块的第一脉动阵列输出的中间数据中的至少一部分和所述第二处理模块的第一脉动阵列输出的中间数据中的至少一部分得到的。
9.根据权利要求8所述的加速器,其特征在于,所述复用阵列包括至少一个第一输入单元和至少一个第二输入单元;
所述至少一个第一输入单元,与所述第一处理模块中的第一数据重排单元的输出端连接,用于接收所述第一数据重排单元输出的重排数据的一部分;
所述至少一个第二输入单元,与所述第二处理模块中的第二数据重排单元的输出端连接,用于接收所述第二数据重排单元输出的重排数据的一部分。
10.根据权利要求8所述的加速器,其特征在于,
所述加速器,还包括:复用选择器和第三数据重排单元;
所述复用选择器,其输入端分别连接第一处理模块的第一脉动阵列的输出端、以及第二处理模块的第一脉动阵列的输出端;其输出端连接所述第三数据重排单元的输入端;
所述复用选择器用于接收所述第一处理模块输出的中间数据中的至少一部分和所述第二处理模块输出的中间数据中的至少一部分,并将接收到的数据输出至所述第三数据重排单元;
所述第三数据重排单元,用于将所述复用选择器输出的数据进行重排处理后输入至所述复用阵列。
11.一种电子设备,其特征在于,包括:权利要求1至10任一所述的人工智能加速器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010407202.3A CN111582467B (zh) | 2020-05-14 | 2020-05-14 | 人工智能加速器和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010407202.3A CN111582467B (zh) | 2020-05-14 | 2020-05-14 | 人工智能加速器和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111582467A CN111582467A (zh) | 2020-08-25 |
CN111582467B true CN111582467B (zh) | 2023-12-22 |
Family
ID=72124992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010407202.3A Active CN111582467B (zh) | 2020-05-14 | 2020-05-14 | 人工智能加速器和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111582467B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112966729B (zh) * | 2021-02-26 | 2023-01-31 | 成都商汤科技有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN112991142B (zh) * | 2021-03-31 | 2023-06-16 | 腾讯科技(深圳)有限公司 | 图像数据的矩阵运算方法、装置、设备及存储介质 |
CN114489496B (zh) * | 2022-01-14 | 2024-05-21 | 南京邮电大学 | 基于fpga人工智能加速器的数据存储和传输方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063822A (zh) * | 2018-07-19 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种计算方法及计算装置 |
CN110210615A (zh) * | 2019-07-08 | 2019-09-06 | 深圳芯英科技有限公司 | 一种用于执行神经网络计算的脉动阵列系统 |
CN210295181U (zh) * | 2019-07-08 | 2020-04-10 | 深圳芯英科技有限公司 | 一种用于执行神经网络计算的脉动阵列系统及处理设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102555057B1 (ko) * | 2018-05-09 | 2023-07-12 | 에스케이하이닉스 주식회사 | 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템 |
-
2020
- 2020-05-14 CN CN202010407202.3A patent/CN111582467B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063822A (zh) * | 2018-07-19 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种计算方法及计算装置 |
CN110210615A (zh) * | 2019-07-08 | 2019-09-06 | 深圳芯英科技有限公司 | 一种用于执行神经网络计算的脉动阵列系统 |
CN210295181U (zh) * | 2019-07-08 | 2020-04-10 | 深圳芯英科技有限公司 | 一种用于执行神经网络计算的脉动阵列系统及处理设备 |
Non-Patent Citations (1)
Title |
---|
郑文佳 ; 王春鸿 ; 姜文汉 ; 李梅 ; 唐端午 ; .自适应光学波前控制算法的脉动阵列结构.数据采集与处理.2008,(04),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111582467A (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111582467B (zh) | 人工智能加速器和电子设备 | |
CN109886400B (zh) | 基于卷积核拆分的卷积神经网络硬件加速器系统及其计算方法 | |
CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
US11487845B2 (en) | Convolutional operation device with dimensional conversion | |
CN110674927A (zh) | 一种用于脉动阵列结构的数据重组方法 | |
US20230036414A1 (en) | Neural network acceleration circuit and method | |
CN111506343A (zh) | 一种基于脉动阵列硬件架构的深度学习卷积运算实现方法 | |
CN110673824B (zh) | 矩阵向量乘电路以及循环神经网络硬件加速器 | |
CN113807509A (zh) | 神经网络加速装置、方法和通信设备 | |
WO2003043236A1 (en) | Array processing for linear system solutions | |
CN112395549A (zh) | 一种用于矩阵乘法密集型算法的可重构矩阵乘法加速系统 | |
CN113255898B (zh) | 基于Winograd算法的卷积神经网络硬件加速器及计算方法 | |
CN114219699B (zh) | 匹配代价处理方法及电路和代价聚合处理方法 | |
JP2014186461A (ja) | 演算処理装置及び演算処理方法 | |
Nguyen-Thanh et al. | Energy efficient techniques using FFT for deep convolutional neural networks | |
CN115310037A (zh) | 矩阵乘法计算单元、加速单元、计算系统和相关方法 | |
US6735167B1 (en) | Orthogonal transform processor | |
CN111222090B (zh) | 卷积计算模块、神经网络处理器、芯片和电子设备 | |
CN113792868A (zh) | 神经网络计算模块、方法和通信设备 | |
CN116882455A (zh) | 一种Pointwise卷积计算装置与方法 | |
CN112561943B (zh) | 一种基于脉动阵列卷积运算数据复用的图像处理方法 | |
CN117851743B (zh) | 运算电路、处理器、集成电路系统、电子组件及设备 | |
CN116974510A (zh) | 数据流式处理电路、电路模组、电子芯片、方法和装置 | |
Liu et al. | Multiphase systolic algorithms for spectral decomposition | |
KR100444729B1 (ko) | 레딕스-8 단일 경로 지연 전달 구조의 고속 퓨리에 변환장치 및 그 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |