用于实现卷积运算的处理元件、装置和方法
技术领域
本发明涉及卷积神经网络计算的领域,具体而言,涉及一种用于实现卷积运算的处理元件、装置和方法。
背景技术
目前,处理深度神经网络(DNN)的硬件可以归纳为两类架构,一类为时间架构(SIMD/SIMT),另一类为空间架构(数据流处理)。然而,这两类架构的硬件在进行卷积运算时,存在着不能进行二维卷积运算、数据重用率不高等问题。
发明内容
本发明实施例提供了一种用于实现卷积运算的处理元件、装置和方法,以解决现有的处理深度神经网络的硬件架构不能进行二维卷积运算且数据重用率不高的问题。
根据本发明实施例的一个方面,提供了一种用于实现卷积运算的处理元件(PE),其特征在于,包括:第一缓冲器,被配置为存储输入数据以及与卷积运算对应的权值;移位单元,被配置为对输入数据执行移位操作,生成第一中间数据;多个操作单元,被配置为基于权值和第一中间数据执行二维卷积运算中的至少一部分运算,并生成输出数据。其中移位单元所执行的移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为第一边缘数据,从而形成待移位数据;以及对待移位数据进行移位操作,生成第一中间数据。
可选地,移位单元所执行的移位操作,还包括:将输入数据两侧的第二边缘数据发送给相邻的处理元件。
可选地,多个操作单元包括多个乘法累加单元、部分和加法器以及第二缓冲器。其中多个乘法累加单元被配置为根据权值对第一中间数据执行乘法和累加操作,并输出第二中间数据;以及部分和加法器被配置为迭代地将第二中间数据与存储于第二缓冲器中的相应的部分总和相加,并将每次迭代计算的部分总和作为输出数据的部分总和存储到第二缓冲器中。
根据本发明实施例的另一个方面,提供了一种用于实现卷积运算的装置,包括多个处理元件(PE)。其中处理元件包括:第一缓冲器,被配置为存储输入数据以及与卷积运算对应的权值;移位单元,被配置为对输入数据执行移位操作来生成第一中间数据;多个操作单元,被配置为基于权值和第一中间数据执行二维卷积运算中的至少一部分运算,并生成输出数据。其中移位单元所执行的移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为第一边缘数据,从而形成待移位数据;以及对待移位数据进行移位操作,生成第一中间数据。
可选地,移位单元所执行的移位操作,还包括:将输入数据两侧的第二边缘数据发送给相邻的处理元件。
可选地,多个操作单元包括多个乘法累加单元、部分和加法器以及第二缓冲器。其中,多个乘法累加单元被配置为根据权值对第一中间数据执行乘法和累加操作,并输出第二中间数据;部分和加法器被配置为迭代地将第二中间数据与存储于第二缓冲器中的相应的部分总和相加,并将每次迭代计算的部分总和作为输出数据的部分总和存储到第二缓冲器中。
可选地,第一缓冲器包括用于存储输入数据的输入数据缓冲器和用于存储与卷积运算对应的权值的权值数据缓冲器,其中装置还包括:第一存储器,被配置为存储从装置外输入的权值;第二存储器,被配置为存储从装置外输入的输入数据;第一DMA单元,被配置为将权值从第一存储器写入权值数据缓冲器;以及第二DMA单元,被配置为将第二存储器中的数据写入输入数据缓冲器。
可选地,装置还包括:第三DMA单元,被配置为从外部存储器将输入数据发送至第二存储器;第四DMA单元,被配置为从外部存储器将权值发送至第一存储器;第五DMA单元,被配置为将多个处理元件的第二缓冲器中的输出数据发送至第二存储器;以及第六DMA单元,被配置为将输出数据从第二存储器输出至外部存储器。
可选地,装置还包括控制单元以及第三存储器。其中第三存储器存储与装置的操作相关的程序;以及控制单元与第一DMA单元、第二DMA单元、第三DMA单元、第四DMA单元、第五DMA单元以及第六DMA单元连接,并且配置为执行以下操作:从第三存储器接收指令;执行与控制单元的操作相关的指令;以及将与第一DMA单元、第二DMA单元、第三DMA单元、第四DMA单元、第五DMA单元和/或第六DMA单元的操作相关的指令转发至第一DMA单元、第二DMA单元、第三DMA单元、第四DMA单元、第五DMA单元和/或第六DMA单元。
根据本发明实施例的另一个方面,提供了一种用于实行卷积运算的方法,包括:获取输入数据以及与卷积运算对应的权值;对输入数据执行移位操作,生成第一中间数据;基于权值和第一中间数据执行二维卷积运算中的至少一部分运算,并生成输出数据。其中,移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为第一边缘数据,从而形成待移位数据;以及对待移位数据进行移位操作,生成第一中间数据。
综上所述,在本发明中,处理元件(PE)具有能够从相邻的处理元件获取数据的移位单元,所述移位单元能将所获取的数据设置于输入数据的两侧作为第一边缘数据,从而形成待移位数据,所述移位单元还能对待移位数据进行移位操作,以生成第一中间数据,从而提高了数据重用率。所述处理元件还通过多个操作单元基于权值和第一中间数据执行二维卷积运算中的至少一部分运算,从而实现了在一个处理元件中进行完整的二维卷积运算的功能。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例提供的处理卷积神经网络硬件的时间体系结构的示意图;
图2是本发明实施例提供的矩阵乘法的示意图;
图3是本发明实施例提供的使用松散形式的拓普利兹矩阵乘法的示意图;
图4是本发明实施例提供的处理卷积神经网络硬件的空间体系结构的示意图;
图5是本发明实施例提供的权值固定的空间体系结构的示意图;
图6是本发明实施例提供的输出固定的空间体系结构的示意图;
图7是本发明实施例提供的无本地重用的空间体系结构的示意图;
图8A~图8C是本发明实施例提供的处理元件完成一维卷积的过程的示意图;
图9是本发明实施例提供的执行二维卷积运算的处理元件组的示意图;
图10是本发明实施例提供的一种用于实现卷积运算的处理元件的示意图;
图11是图10中的所述处理元件进行卷积运算的示意图;
图12是本发明实施例提供的一种用于实现卷积运算的装置的示意图;
图13是图12中的所述装置的一种数据流的示意图;
图14是图12中的所述装置的指令存储和发送流程的示意图;
图15是图12中的所述装置的另一种数据流的示意图;
图16是图12中的所述装置的数据存储器的切片方式的示意图;
图17是图12中的所述装置的输入数据和输出数据的存储方式的示意图;
图18是图12中的所述装置的对过宽的输入数据进行垂直切割的示意图;
图19是图12中的所述装置的对过高的输入数据进行水平切割的示意图;以及
图20是本发明实施例提供的一种用于实现卷积运算的方法的流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参考图1,如图1所示的处理卷积神经网络硬件的时间体系结构,通常使用诸如SIMD或SIMT技术来并行执行乘法累加运算(即MAC运算)。所有的ALU共享相同的控制和寄存器堆。在这些平台上,全连接层(FC层)和卷积层(CONV层)都通常被映射为矩阵乘法。
请参考图2,如图2所示的矩阵乘法是指行数为M行并且列数为通道宽度(CHW)的滤波器,与行数为通道宽度(CHW)并且列数为N列的输入fmap进行矩阵乘法,最后得到M行N列的输出fmap。
对于卷积层,可以使用松散形式的拓普利兹(Toeplitz)矩阵乘法。图3示出了具有2个输入fmap和2个输出fmap的卷积层。对于卷积层(CONV层),使用拓普利兹矩阵乘法的缺点是fmap矩阵中存在冗余数据,导致存储效率和数据传输带宽效率低下。
此外,快速傅里叶变换(FFT)也可用于减少乘法次数:首先将滤波器和输入fmap转换为“频域”,执行乘法运算,然后进行反向FFT运算,以获得“时域”的输出fmap。其他方法包括Strassen算法和Winograd算法。它们重新排列计算,使得乘法的次数可以从O(N3)减少到O(N2.807)。对于3×3的滤波器,乘法的次数可以减少2.25×。代价是降低数字稳定性,增加存储需求以及对于不同参数尺寸的专门处理。
请参考图4,如图4所示的处理卷积神经网络硬件的空间体系结构采用数据流(Dataflow)处理方式。在空间体系结构中,ALU形成一条数据处理链,从而能够在ALU间直接地传送数据。该空间体系结构中,每个ALU都有自己的控制逻辑与本地存储(寄存器堆)。其中,有本地存储的ALU被定义为处理元件(PE)。对于空间体系结构,硬件设计基于层次存储器中的低能耗内存,并增加数据重利用率(实质上,卷积是空间重用,这种重用可以获取空间的不变性),以此来减小能耗。另外,数据流(Dataflow)控制数据读、写及处理。总体上,空间体系结构基于层次存储器与数据流平衡I/O与运算问题,从而降低能耗并提升运算吞吐量。空间体系结构有四种类型的数据重用:权值固定、输出固定、无本地重用(NLR)以及行固定。
图5示出了权值固定的空间体系结构的示意图。在权值固定的处理方式中,首先将权值读入每个处理元件(PE)的寄存器堆(RF)中保持不变。然后将输入fmap以及部分和通过PE阵列以及全局缓冲器移动,从而尽可能重用PE中的权重。输入fmap被广播到所有PE,并且部分和穿过PE阵列而得到累积。
图6示出了输出固定的空间体系结构的示意图。其中,通过在PE阵列中流动输入数据,然后把权值数据广播到PE阵列,保持寄存器堆(RF)中的部分和的累加不变,从而最小化读写部分和的能耗。
图7示出了无本地重用的空间体系结构的示意图。其中PE阵列的RF中并不存储任何固定数据,相反,该情况下,所有数据的读写操作都是在全局缓冲器中完成。在这种情况下,PE阵列和全局缓冲器之间所有数据类型的流量将会增加。
在行固定的架构中,所有类型的数据(权值、输入fmap以及部分和)都存储在本地RF中,以便最大限度地发挥数据重复,并提高整体能效。
每个PE将处理一维卷积,聚合多个PE以完成二维卷积。其中图8A~图8C示出了PE完成一维卷积的过程。此外,参考图9所示,可以使用三个PE,每个PE运行一个一维卷积。部分和在三个PE上进一步垂直累积以产生第一输出行。为了生成第二行输出,我们使用另一列PE,其中三行输入激活向下移动一行,并使用相同的滤波器行执行三个一维卷积。添加额外的PE列,直到输出的所有行完成(即,PE列的数量等于输出行的数量)。在此体系结构中,每个滤波器行都在多个PE之间水平重用。输入激活的每行对角地在多个PE中重用。如图9所示,每行的部分和进一步在PE上垂直累积。
如上所述,在对图像进行卷积运算时,时间系统结构的硬件通常使用放宽形式的拓扑利兹(Toeplitz)矩阵乘法,但是其缺点是fmap矩阵中存在冗余数据,导致存储效率和数据传输带宽效率低下。尽管可以采用快速傅里叶变换登发来减少乘法次数,但是会降低数字稳定性,并且增加存储需求以及对于不同权值尺寸的专门处理。然而,基于空间系统结构的硬件利用CNN计算的空间相关性来避免内存读写瓶颈,但是,空间系统结构对数据的重用率依然不高,例如,行固定架构只能实现一维的卷积操作,即,只能用滤波器的权值矩阵中的一行与输入fmap矩阵中的一行进行卷积操作。如果要实现更加复杂的二维的卷积操作,则只能采用多个处理元件共同完成。因此,以上结构限制了处理器硬件最大限度地挖掘和利用硬件并行性,并且限制了处理器内的各种硬件操作存在时序不确定性的情况下最大程度去提高性能,从而进一步增加了硬件处理器的功耗。
针对上述问题,本发明实施例提供了一种用于实现卷积运算的处理元件(PE)来执行多个相关数据和权值流的计算操作,实现了最大程度的数据重用。并且,该处理元件可以实现在一个处理元件内完成完整的二维卷积运算。
请参考图10,用于实现卷积运算的处理元件PE,包括:第一缓冲器11(即,输入缓冲器),被配置为存储输入数据以及与输入数据对应的权值;移位单元12,被配置为对输入数据执行移位操作,生成第一中间数据;多个操作单元13,被配置为基于权值和第一中间数据执行卷积运算的至少一部分运算,并生成输出数据,其中移位单元12所执行的移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为边缘数据,从而形成待移位数据;以及对待移位数据进行移位操作,生成第一中间数据。
在对例如一个图像进行卷积运算时,通常采用多个PE,对于该图像的不同部分的图像数据分别进行卷积运算。其中,每个PE是一个数位宽度为m的SIMD处理器(或数位宽度为m的矢量处理器)。从而n个PE会链接在一起形成一个长度为n的一维PE阵列,因此数据(例如可以通过每个PE中的移位单元的操作)在这个一维PE阵列中往两个方向流动。此外,每个PE有自己的指令缓冲器IQ,指令解码和控制逻辑等。每个PE可以执行一个独立的卷积神经网络(CNN)计算。或者,多个相邻的PE也可以组合在一起以共同执行一个CNN计算。
图11示出了处理元件(PE)对输入数据所进行的移位操作以及后续卷积操作的示意图。
参考图11所示,处理元件(PE)所接收的输入数据为:
然后处理元件(PE)分别从相邻的处理元件获取数据,并且将所获取的数据设置于输入数据的两侧作为边缘数据,从而形成待移位数据:
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
40 |
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
其中,数据(8,24,40,56)和数据(0,16,32,48)是从相邻处理元件获取的数据,设置于输入数据两侧作为边缘数据。
然后移位单元进一步对该待移位数据进行移位,具体地,在第一个周期,用于计算的数据为:
在第二个周期对待移位数据进行左移,从而用于计算的数据为:
在第三个周期对待移位数据进行右移,从而用于计算的数据为:
依次类推,参考图11所示,在9个周期中以不同方向进行移位,从而获取用于计算的数据。
进而通过上述移位单元进行的移位操作,可以在各个处理元件PE内进行二维卷积操作。相对于需要采用多个处理元件PE才能实现卷积运算的空间体系结构(例如权值固定、输出固定、无本地重用(NLR)以及行固定)而言,本实施例提供的处理元件PE可以单独实现二维卷积运算,并且进一步提高了数据重用率。
进一步地,移位单元所执行的所述移位操作,还包括:将所述输入数据两侧的边缘数据发送给相邻的处理元件。从而,根据本实施例的处理元件PE在从相邻的处理元件PE获取数据的同时,也将自己的输入数据两侧的边缘数据发送给相邻的处理元件。例如,参考上面所述,处理元件PE所接收的输入数据为:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
39 |
38 |
37 |
36 |
35 |
34 |
33 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
从而处理元件也将数据(7,23,39,55)和数据(1,17,33,49)发送给相邻的处理元件PE。
在CNN计算期间,每个PE可以通过移位单元(shift/mux)从两个相邻的PE获取数据,同时也可以向两个相邻的PE提供数据。移位单元主要用于实现如下功能:i)从第一缓冲器接收数据;ii)从邻近PE接收数据;iii)将其边缘数据遣送给邻近的PE;iv)将所获取的数据设置于输入数据的两侧作为边缘数据,从而形成待移位数据,以及对待移位数据进行移位操作,上述移位操作包括右移或左移操作,生成第一中间数据;v)将第一中间数据提供给多个操作单元。
此外,除了向相邻PE“借入”数据之外,该PE还会将自己的边界数据“借”给其两个邻居PE。共享(或重叠)数据的数量取决于滤波权值的宽度,由以下公式推算出:每边共享的数据量=floor(Wfilter/2),其中,Wfilter是滤波权值的宽度。floor()是整数floor函数。举例说明:如果Wfilter=3,那么每边共享数据量为1。
从而,通过移位单元实现了对输入数据进行移位操作的目的,同时使得相邻,保证了PE中卷积运算的完整性。
具体地,以上面所述的例子为例,如果不从相邻PE获取数据,则PE所进行的卷积运算只能在PE本身的输入数据中进行(即该输入数据为7列),如下所示:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
39 |
38 |
37 |
36 |
35 |
34 |
33 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
在这种情况下,如果采用图11中所示的权重参数构成的滤波器进行移位操作以及卷积运算时,作为卷积运算的结果只能产生5列数据。因此,这就意味着作为该PE的卷积运算的输出结果,其第1列和最后1列数据为空或者需要补零。也就是说,这种情况下的二维卷积运算是不完整的。那么在这种情况下,当处理器使用多个PE并行地对更大数据(例如数据宽度更宽,需要多个PE并排进行卷积运算)进行卷积时,由于各个PE输出的数据都有数据为空的数据列或补零的数据列,这会造成处理器的卷积结果出现错误。
针对这种情况,本实施例的PE在进行操作前,先从相邻PE获取数据并且将获取的数据作为边缘数据,如下所示:
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
40 |
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
56 |
55 |
54 |
53 |
52 |
51 |
50 |
49 |
48 |
在这种情况下,如果采用图11中所示的权重参数构成的滤波器进行移位操作以及卷积运算时,作为卷积运算的结果会产生7列数据。因此,这就意味着作为该PE的卷积运算的输出结果,其第1列和最后1列数据不为空并且不需要补零。即,PE对输入数据进行了完整的卷积运算。那么在这种情况下,当处理器使用多个PE并行地对更大数据(例如数据宽度更宽,需要多个PE并排进行卷积运算)进行卷积时,由于各个PE的输出的数据都是完整的,从而使得处理器能够输出准确的卷积结果。
进一步地,多个操作单元包括多个乘法累加单元(MAC)131、部分和加法器(PSUM)132以及第二缓冲器133,其中多个乘法累加单元131,被配置为根据权值对第一中间数据执行乘法和累加操作,并输出第二中间数据;部分和加法器132,被配置为迭代地将所述第二中间数据与存储于第二缓冲器133中的相应的部分总和相加,并将每次迭代计算的部分总和作为所述输出数据的部分总和存储到所述第二缓冲器133中。
其中,参考图11所示,每个PE有m个MAC单元。在每个PE中,m个MAC的输入数据会链接在一起,形成一个长度为m的一维数据向量。n个PE就有n*m个MAC单元。来自n个PE的n个数据向量,每个长度为m,会链接在一起,形成一个长度为n*m的一维数据向量,这个长度为n*m的一维数据向量可以执行右移和左移操作。移位后的数据将会被馈送给n*m个MAC单元。在本实施例中,假设有32个PE,其中每个PE是一个7位宽的SIMD处理器,每个PE有7个MAC单元,则共有224个MAC。
此外,第一缓冲器11例如可以包括输入数据缓冲器和权值数据缓冲器。
参考图11所示,举例说明MAC单元的卷积计算过程。需要说明的是:虚线框内的斜体数据是从两个相邻PE获取的重叠(或共享)数据,上述共享数据置于输入数据的矩阵的左右两侧;3×3字母矩阵代表滤波器的权值,滤波器内权值存储于第一缓冲器11的权值数据缓冲器内(WBUF)内;黑色加粗数据代表7个MAC单元,每个数字标号对应相应的MAC单元;其他数据是从PE的输入数据缓冲器(IBUF)中获取的输入数据。
假设MAC单元采用3×3的滤波器,滤波器的滤波权值采用由输入数据缓冲器输入的权值,每个滤波器中有9个权值,则单个PE中的每个MAC单元执行9个乘法和累加操作,共需要9个周期来完成。
参考表1和表2,具体说明每个周期的计算过程:在周期1至周期3的前3个周期中,MAC对第一行输入数据(ci)和第一行滤波权值进行乘法和累加操作;在周期4至周期6的中间3个周期中,MAC对第二行输入数据(ci)和第二行滤波权值进行乘法和累加操作;以及在周期7至周期9的最后3个周期中,MAC对第三行输入数据(ci)和第三行滤波权值进行乘法和累加操作。经过9个周期的乘法和累加操作后,最终结果如表2所示。
表1.每个周期的计算结果
表2. 9个周期的累加计算结果
从而,通过多个乘法累加单元对移位单元反馈的第一中间数据执行CNN计算得到卷积计算结果(即:第二中间数据),进而部分和加法器将上述卷积计算结果与储存在第二缓冲器中的相应的部分和进行累加得到输出数据并存储在第二缓冲器中。从而通过上述操作,多个操作单元完成了对输入数据进行卷积和累加的计算并输出上述计算结果。
进一步地,第一缓冲器11包括权值数据缓冲器111和输入数据缓冲器112。其中输入数据缓冲器112配置为存储输入数据;以及权值数据缓冲器111配置为存储所述输入数据对应的权值。
从而,每个PE中包括三个本地缓冲器:输入数据缓冲器(IBUF)112、权值数据缓冲器(WBUF)111和第二缓冲器(即输出缓冲器,OBUF)113。上述三个本地缓冲器分别用于存储输入数据、与输入数据对应的权值和累加计算得到的部分和。
从而,综上所述,本实施例提供了一种实现卷积运算的处理元件(PE),其具有能够从相邻的处理元件获取数据的移位单元,从而通过从两个相邻的处理元件获取数据作为边缘数据从而形成待移位数据,并且对待移位数据进行移位等卷积运算操作,使得本公开中的PE能够利用提供的权值进行完整的卷积运算。相对于现有技术中的需要采用多个处理元件PE才能实现卷积运算的空间体系结构(例如权值固定、输出固定、无本地重用(NLR)以及行固定)而言,本实施例提供的处理元件PE可以单独实现二维卷积运算,并且进一步提高了数据重用率。
请参考图12,本发明实施例还提供了一种实现卷积运算的装置,该提供了一种灵活、可编程、高吞吐量平台来加速卷积神经网络和相关的计算。如图12所示,该装置包括:多个处理元件PE 200(包括PE0~PEn),其中处理元件PE包括:第一缓冲器11,被配置为存储输入数据以及与输入数据对应的权值;移位单元12,被配置为对输入数据执行移位操作来生成第一中间数据;多个操作单元13,被配置为基于权值和第一中间数据执行卷积运算至少一部分运算,并生成输出数据,其中移位单元13所执行的移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为边缘数据,从而形成待移位数据;以及对待移位数据进行移位操作,生成第一中间数据。由于处理元件PE的具体功能以及作用前面已经说明过,此处不再赘述。
进一步地,移位单元12所执行的移位操作,还包括:将输入数据两侧的边缘数据发送给相邻的处理元件。
进一步地,多个操作单元13包括多个乘法累加单元(MAC)131、部分和加法器(PSUM)132以及第二缓冲器133,其中多个乘法累加单元(MAC)131,被配置为根据权值对第一中间数据执行乘法和累加操作,并输出第二中间数据;部分和加法器132,被配置为迭代地将所述第二中间数据与存储于第二缓冲器中的相应的部分总和相加,并将每次迭代计算的部分总和作为所述输出数据的部分总和存储到所述第二缓冲器133中。
进一步地,第一缓冲器11包括用于存储输入数据的输入数据缓冲器112和用于存储与输入数据对应的权值的权值数据缓冲器111,其中装置还包括:第一存储器(即权值存储器WM)201,被配置为存储从装置外输入的权值;第二存储器(即数据存储器DM)202,被配置为存储输入数据;第一DMA单元(即,权值DMA或WDMA)203,被配置为将权值从第一存储器201写入第一缓冲器11的权值数据缓冲器111;以及第二DMA单元(即,输入数据DMA或IDMA)204,被配置为将输入数据从第二存储器202写入第一缓冲器11的输入数据缓冲器112。
其中,第二存储器202和第一存储器201为装置内部的SRAM存储器,第一DMA单元和第二DMA单元为可编程的功能单元(即,FU)。需要说明的是,“外部存储器”是指本实施例所述的装置外部的一些存储器,可以为片上SRAM或者片下DDR存储器。
可以理解,所述装置可以由多个松散耦合、协作、可编程数据流功能单元(FU)组成,例如上面所述的第一DMA单元203和第二DMA单元204均为可编程的功能单元。
这些FU并行执行多个相互依赖的数据流和数据计算操作。这些操作可以并行进行,只要这些操作之间的依赖关系不被违反即可。并且这些FU可以分别执行一个指令流。因此,在各种硬件操作的时序不确定性下,该装置可以最大限度地挖掘和利用并行性,因此该装置可以达到最佳性能。可以理解,该装置可以是处理器,也可以是其他电子器件。
进一步地,参考图12所示,装置还包括:第三DMA单元205(外部输入数据DMA,即EIDMA),被配置为从外部存储器将所述输入数据发送至所述第二存储器202;第四DMA单元206(外部权值DMA,即EWDMA),被配置为从外部存储器将所述权值发送至所述第一存储器201;第五DMA单元208(输出DMA,即ODMA),被配置为将所述多个处理元件的第二缓冲器133中的输出数据发送至所述第二存储器202;以及第六DMA单元207(外部输出数据DMA,即EODMA),被配置为将所述输出数据从所述第二存储器202输出至外部存储器。其中第二存储器202还进一步配置为存储所述第六DMA单元发送的输出数据。
其中,第三DMA单元205、第四DMA单元206、第五DMA单元208和第六DMA单元207为可编程的功能单元(FU)。
这些FU并行执行多个相互依赖的数据流和数据计算操作。这些操作可以并行进行,只要这些操作之间的依赖关系不被违反即可。并且这些FU可以分别执行一个指令流。因此,所述装置能最大限度地挖掘和利用硬件的并行性,并且在装置内的各种硬件操作存在时序不确定性的情况下最大程度去提高性能,从而进一步降低了硬件的功耗。
具体地,参见图13所示,在本实施例中,假设该处理器有32个PE,每个PE有7个MAC单元。因此该处理器有224个MAC。
每个PE是一个7位宽的SIMD处理器。每个PE有自己的指令缓冲器(IQ),指令解码和控制逻辑等。
每个PE可以执行一个独立的CNN计算。或者,多个相邻的PE也可以组合在一起以共同执行一个CNN计算。并且在CNN计算期间,每个PE可以:a)从两个相邻的PE获取数据;以及b)向两个相邻的PE提供数据。
在每个PE中,有三个本地缓冲器:i)IBUF(对应于输入数据缓冲器),用于存储输入数据ci;ii)WBUF(对应于权值数据缓冲器),用于存储权值;以及iii)OBUF(对应于第二缓冲器),用于存储部分和Psum。
在每个PE中,还包括移位/选择逻辑(Shift/Mux logic)。这个逻辑块执行以下功能:i)从IBUF接收数据;ii)从邻近PE接收数据;iii)将其边缘数据发送给邻近的PE;iv)对这些数据进行右移或左移操作;v)将移位之后的数据提供给7个MAC单元。
在每个PE中,还包括部分和加法器PSUM。这个部分和加法器将来自于MAC的CNN计算结果与存储在OBUF中的相应的部分和Psum进行累加。
具体的卷积计算的示例序列,参见图11所示。此外,下面所述的表3中示出了所述装置中各个功能单元(FU)的功能:
表3
此外,参见图12所示,可选地,装置还包括控制单元210以及第三存储器209。其中,第三存储器209存储与装置的操作相关的程序;控制单元210与第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208以及第六DMA单元207连接,并且配置为执行以下操作:从第三存储器209接收指令;执行与控制单元210的操作相关的指令;以及将与第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和/或第六DMA单元207的操作相关的指令转发至第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和/或第六DMA单元207。
此外,图14示出了控制单元210的指令存储和发送方案的流程示意图,参考图14所示,在本实施例中,所有可编程的FU程序都集中存储在第三存储器209中。这些程序包括发往控制单元210、32个PE和6个DMA单元(即:第一DMA单元203、第二DMA单元204、第三DMA单元205、第四DMA单元206、第五DMA单元208和第六DMA单元207)的指令。总共有八种指令类型。控制单元210指令存储和发送方案的具体流程如下:
首先,控制单元210从第三存储器209中读取这些指令并仅执行控制单元指令,然后通过总线cu_ibus向其他功能单元广播所有其他指令;
其次,每个可编程FU都有一个指令队列(IQ)。所有可编程的FU(CU除外)不断监视总线cu_ibus,并且只将属于自己的指令加载到它们各自的IQ里;
最后,这些FU从它们的IQ中获取指令并按顺序执行。
从而,多个可编程FU的程序可以共同组成一个完整、协调、一致的程序,进而在本实施例所述装置中实现CNN加速。
此外,图15示出了本公开实施例所述的实现卷积运算的装置中的六个数据流走向的示意图。参考图15所示,在本实施例所述的装置中有六个预定义的数据和权值流。在本实施例所述的装置的工作中,所有数据和权值都是通过这六个预定义的流通过处理器。
在这六个数据流中,四个是数据流(用实线表示),另外两个是权值流,用虚线表示。
(a)四个数据流
i)第一数据流3,存储在外部存储器中的输入数据是通过第三DMA单元205(EIDMA)流入第二存储器202(DM);
ii)第二数据流4,存储在第二存储器202(DM)中的输入数据是通过第二DMA单元204(IDMA)传输到所有PE中,这是种一对多的广播,即:从第二DMA单元204(IDMA)广播到所有需要它的PE中;
iii)第三数据流5,存储在各个处理元件PE的第二缓冲器133(OBUF)中的数据是通过第五DMA单元208(ODMA)传输到第二存储器202中,这是种同步传输操作,也就是说,所有PE以锁步方式将自己的输出数据同步写回第二存储器202,且在每个周期中最多可以将224个数据写回第二存储器202;
iv)第四数据流6,存储在第二存储器202(DM)中的输出数据通过第六DMA单元207(EODMA)传输到外部存储器。
需要说明的是,存储在第二存储器202(DM)中的数据可以来自两个可能的来源:(1)第五DMA单元208将输出数据从PE传输到第二存储器202;(2)第三DMA单元205将外部存储器的数据传输到第二存储器202。
并且,存储在DM中的数据有两个可能的目的地:(1)第六DMA单元207可将它们写回到外部存储器,作为下一层的输入数据;(2)第二DMA单元204可以将它们读回多个PE里,作为下一层的输入数据。
(a)两个权值流
i)第一权值流1,存储在外部存储器中的权值是通过第四DMA单元(EWDMA)流入第一存储器201(WM)。
ii)第二权值流2,存储在第一存储器201(WM)中的权值是通过第一DMA单元203(WDMA)流入PE中的第一缓冲器11的权值数据缓冲器111(WBUF)。
此外,需要说明的是:当FU将数据(或权值)传送给另一FU时,前者称为生产者FU或上游FU,后者称为消费者FU或下游FU。这两个FU被称为相关FU,或通信FU。在两个通信FU之间,它们之间将会放置一个存储缓冲器。例如,
i)第一存储器201是第四DMA单元206(生产者FU)和第一DMA单元203(消费者FU)之间的存储缓冲器;
ii)第二存储器202同时是以下相关FU之间的存储缓冲器
(1)第三DMA单元205(生产者FU)和第二DMA单元204(消费者FU),
(2)第五DMA单元208(生产者FU)和第六DMA单元207(消费者FU),
(3)第五DMA单元208(生产者FU)和第二DMA单元204(消费者FU)。
iii)在每个PE中,
(1)输入数据缓冲器112是第二存储器202(生产者FU)和处理元件的计算硬件(消费者FU)之间的存储缓冲器;
(2)第二缓冲器133是PE计算硬件(生产者FU)和第五DMA单元208(消费者FU)之间的存储缓冲器;
(3)权值数据缓冲器111是第一DMA203(生产者FU)和处理元件PE的计算硬件(消费者FU)之间的存储缓冲器。
表4提供了六个数据/权值流的详细信息:它们的起源地、目的地、负责该流的FU、可能的通信FU对以及这些FU对中所采用的同步协议的类型。
表4.六个数据/权值流的流向信息
下面进一步说明表4中所述的握手协议的具体规定。FU通常同时与其上游FU和其下游FU进行握手同步:
a)当FU相对于下游的FU运行速度过快时,它将停止。
b)当FU相对于其上游FU运行过慢时,它将会导致其上游FU停止。
例如,相对于32个PE中的任何一个PE,如果第二DMA单元204(IDMA)运行速度过快时,它将停止。同样,当第二DMA单元204(IDMA)相对于第三DMA单元205(EIDMA)运行速度过慢时,会导致EIDMA停止(假设IDMA依赖于EIDMA)。
此外,两个通信的FU可以使用以下两个同步协议之一来确保在它们之间传输的数据(或权值)的完整性:
a)硬件握手
在这个握手协议中,两个通信FU使用放置在它们之间的缓冲器的状态来执行握手。这些状态包括“缓冲器空”或“缓冲器满”等。这是为了防止生产者将任何数据写入已经满了的缓冲器,并防止消费者从已经空了的缓冲器读取数据等。
b)软件握手
在这个握手协议中,两个通信FU执行一对匹配的同步指令,即每个FU各执行一个同步指令。当生产者FU执行同步指令时,它为消费者FU建立一个同步屏障。当消费FU执行同步指令时,它必须确保其生产者FU已经执行了相应的同步指令。否则,消费者FU将停止,直到生产者FU已经到达同步点(即,生产者FU已经执行了相应的同步指令)。
FU可以使用两个不同的同步协议(硬件或软件握手)与其上游FU和其下游FU握手。通常,如果FU只具有单一的,明确的上游FU(或下游FU),它将使用硬件握手协议来与其上游FU(或下游FU)同步。相反,如果FU具有多个可能的上游FU(或下游FU),则硬件需要软件的协助来正确的与其上游FU(或下游FU)进行数据流交互。例如,第二DMA单元204(IDMA)有两个可能的上游FU(第五DMA单元208和第三DMA单元205),但只有一个唯一下游FU(PE)。因此,IDMA使用软件协议与第五DMA单元208和第三DMA单元205进行同步,但使用硬件协议来与所有PE进行同步。
此外,参考图16所示,第二存储器202,即数据存储器DM,是根据处理元件PE来组织的。其中数据存储器DM分为32个切片,每个DM切片有7个数据宽(即,每个DM切片的宽度为7)。因此,DM每行有224个数据(即,DM的宽度为224),与MAC总数匹配。每个DM切片被唯一映射到一个PE。这是个一对一的映射。DM中的每个数据被唯一地映射到一个MAC。这是个多对一的映射。
本实施例中将输入数据(ci)和输出数据(co)统称为特征图fmap,当fmap(ci或co)被映射到第二存储器202(即DM)时,根据fmap的宽度,它可能会跨越多个DM切片和多个PE。
假设fmap的尺寸是w*h,其中,w代表特征图的宽度,h代表特征图的高度。针对不同尺寸的fmap,将会选择不同的方式将fmap映射到DM和PE,具体方式如下:
(1)狭窄类fmap(即:w<=7),则fmap映射到一个PE(和一个DM片)。
(2)中等宽度类fmap(即:w>7且w<=224):
如果w能被7整除,则可以将多个PE组合起来一起来处理单个fmap。这组PE被称为一个PE组。该PE组将有ceiling(w/m)个PE,其中ceiling()是整数的ceiling函数,m为DM切片的宽度。fmap将会映射到上述PE组及其相应的DM片。
如果w不能被7整除,则将fmap右对齐至PE组的右边界。在这种情况下,在CNN计算期间,PE组的上部的(m–module(w/m))个MAC单元将不被使用。这里modulo()是整数modulo函数。
(3)宽类fmap,如果w>224,则fmap将会被垂直切割。也就是说,它会被垂直切割成多个垂直瓦片,每个瓦片的宽度等于或小于224。
图17显示了10块输入数据ci和17块输出数据co在DM中的存储方式。在这个例子中,ci数量为10,co数量为17,ci的尺寸为64x50,co的尺寸为64x50,其中处理一块输入数据ci所需要PE的数量(即DM切片的数量)为ci_gp_size=ceiling(64/7)=10,处理一块输出数据co所需要PE的数量(即DM片的数量)为co_gp_size=ceiling(64/7)=10。
所有输入数据ci在DM中以矩阵方式排布。我们称该矩阵为CI矩阵,或CIM。在这个矩阵里,每行ci的数量=floor(32/ci_gp_size)=3;对于10块ci,则CIM的尺寸为4行*3列;此矩阵最后一行只有一块ci。
所有输出数据co在DM中以矩阵方式排布。我们称该矩阵为CO矩阵,或COM。在这个矩阵里,每行输出数据co的数量=floor(32/co_gp_size)=3;对于17块输出数据co,CIOM的尺寸为6行*3列;此矩阵最后一行只有两块输出数据co。
第一缓冲器(IBUF)高度:64行。因此IBUF最多可以存储两行ci。
第二缓冲器(OBUF)高度:64行。因此OBUF最多可以存储和处理两行Psum(两行co)。
当COM的高度高于OBUF的高度时,COM里的输出数据co必须分多轮来处理。参考图16所示,COM行数=6行,COM列数=3列,OBUF高度=64,OBUF只能容纳:floor(64/30)=2行co,轮次数=ceiling(COM行数/2)=3轮。COM矩阵中共有六行co,但OBUF每次只能容得下两行co,因此卷积(CONV)计算必须分成三轮来处理:第一轮产生6块输出数据co,第二轮产生6块输出数据co,最后一轮产生5块输出数co。在每一轮处理过程中,所有的ci被逐个流入先进先出(FIFO)的第一缓冲器(IBUF)。反过来,位于IBUF首位的输入数据ci与第二缓冲器(OBUF)中的每个单独的部分和(Psum)进行卷积(CONV)计算。
如果IBUF可以存储p块输入数据ci,而OBUF可以存储q个部分和psum,那么在这两者之间,硬件可以执行pq次CONV计算,而不会产生任何发送到DM的数据流量。
此外,当fmap相对于某些硬件设计参数为太宽或太高时,它会被切割为更小的数据片(piece),以便能在本实施例所述的装置内可以进行处理。
当fmap(ci或co)的宽度大于nm(即224)时,fmap需要进行垂直切割。也就是说,fmap被垂直切割成多个垂直瓦片,然后分别逐个处理。
图18示出了一个过宽的输入数据ci(宽度为320)如何垂直切割的例子。参照图18所示,图中的fmap被分割成两个垂直瓦片,X和Y,宽度分别为224和98。然后分别逐个处理两次。X和Y边界有两列数据是两次处理共享的数据。这两个共享列在两轮计算中都会被使用。这个重叠列的宽度由CNN滤波器的宽度来决定。
当输出数据co的高度高于OBUF的高度时,输出数据co被水平切割成多个水平瓦片,并且先后逐一处理。两个相邻的瓦片之间有共享的行数据。这些共享行在CNN计算中会使用两次。图19示出了一块输出数据co高度为80的例子。参照图19所示,在这个示例处理器中,OBUF的高度是64,因此这个CO将会被水平分割成两个水平的瓦片,X和Y,高度分别为64和18。然后分别逐个处理。X和Y边界附近有两行数据是重叠(共享)的。这两个共享行数据正在两轮计算中都会用得到。这个重叠行的高度是由CNN滤波器的高度来决定的。
此外,当fmap宽度大于224且高度大于64时,fmap需要同时垂直和水平切砖。一个瓦片有可能与其四个相邻的瓦片有重叠的数据。共享列的宽度由CNN滤波器的宽度决定,而共享行的高度由CNN滤波器的高度决定。
图20示出了一种用于实行卷积运算的方法的流程示意图,该方法由所述的处理元件PE执行。参考图20所示,该方法包括:
S2002:获取输入数据以及与卷积运算对应的权值;
S2004:对输入数据执行移位操作,生成第一中间数据;
S2006:基于权值和第一中间数据执行二维卷积运算中的至少一部分运算,并生成输出数据。
其中,移位操作包括:从相邻的处理元件获取数据;将所获取的数据设置于输入数据的两侧作为第一边缘数据,从而形成待移位数据;以及对所述待移位数据进行移位操作,生成所述第一中间数据。
可选地,移位操作还包括:将输入数据两侧的第二边缘数据发送给相邻的处理元件。
可选地,执行二维卷积运算中的至少一部分运算的操作,包括:根据权值对第一中间数据执行乘法和累加操作,并输出第二中间数据;迭代地将第二中间数据与存储的相应的部分总和相加,并将每次迭代计算的部分总和作为所述输出数据的部分总和进行存储。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理元件中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。