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

用于乘法和累加操作的处理器单元的制作方法

2022-07-14 03:42:18 来源:中国专利 TAG:


1.本发明涉及数字计算机系统的领域,并且更具体地涉及用于执行一组一个或多个乘法和累加(“mac”)操作的处理器单元。


背景技术:

2.mac操作的计算通常用于许多算法,诸如深度神经网络的训练、图像处理和其他机器学习技术。例如,在深度神经网络的情况下,mac操作可以涉及激活和梯度。然而,用于计算mac操作的常规电子系统可能是资源密集的。特别地,需要用于执行这样的操作的能量高效和资源节约架构。


技术实现要素:

3.不同实施例提供了一种用于执行如独立权利要求的主题所描述的一个或多个mac操作的集合的处理器单元、方法、计算机程序产品和mac单元。在从属权利要求中描述了有利的实施方式。如果本发明的实施例不相互排斥,则它们可以彼此自由组合。
4.在一个方面中,本发明的实施例公开了一种用于乘法和累加(“mac”)操作的处理器单元。在一个实施例中,处理器单元可以包括用于执行mac操作集合的相应的mac操作子集的多个mac单元。在一个实施例中,多个mac单元中的每个mac单元可以包括相应的执行单元和相应的一写一读(“1w/1r”)寄存器文件。在一个实施例中,相应的1w/1r寄存器文件可具有至少一个累加器。在一个实施例中,处理器单元可以包括另一寄存器文件。在一个实施例中,每个mac单元的相应执行单元可被配置为通过计算从另一寄存器文件接收的值的集合的乘积并将所计算的乘积加到mac单元的至少一个累加器的内容来执行mac操作的集合的相应mac操作子集。在一个实施例中,每个mac单元可以被配置成在单个时钟周期中执行相应的mac操作子集。
5.在有利的实施例中,多个mac单元中的每个mac单元可以包括相关联的索引。因此,每个mac单元可以被配置为通过执行引用相关联的索引的处理器指令来执行相应的mac操作子集。
6.在有利的实施例中,相关联的索引可以包括每个mac单元的至少一个累加器的架构化的累加器寄存器索引。
7.在有利的实施例中,至少一个累加器可包括相应累加器元件,其中计算的乘积可被加到相应累加器元件的内容。在有利的实施例中,每个mac单元可以被配置为使用至少一个累加器的相应累加器元件执行mac操作的集合的相应mac操作子集。
8.在有利的实施例中,处理器单元可以包括分派/发布单元。在有利的实施例中,分派/发布单元可以被配置成处理多个处理器指令,使用相关联的索引来选择mac单元,以及将相应的处理器指令集发送到所选择的mac单元以用于执行mac操作的集合。在有利的实施例中,分派/发布单元可以在其中包括mac单元。
9.在有利的实施例中,相应的处理器指令集可以包括至少一个操作数。所述至少一
个操作数可指示所述至少一个累加器作为所述相应处理器指令集的源寄存器和目标寄存器。所述至少一个操作数还可将另一寄存器文件的至少一个另外的寄存器指示为包括数字集合。
10.在有利的实施例中,分派/发布单元可以被配置为根据单线程(“st”)模式分派多个处理器指令,使得选择的mac单元可以从单线程接收相应的处理器指令集。
11.在有利的实施例中,分派/发布单元可以被配置为根据双向同时多线程(“smt2”)模式分派多个处理器指令,使得选择的mac单元可以从两个线程中的任何一个线程接收相应的处理器指令集。
12.在有利的实施例中,分派/发布单元可以被配置为根据四路同时多线程(“smt4”)模式分派多个处理器指令,使得多个mac单元中的每个mac单元可以从相应的两个线程接收相应的处理器指令集。
13.在有利的实施例中,每个mac单元可以包括用于计算乘积的至少一个乘法器和用于执行计算的乘积的加法的至少一个加法器。
14.在有利的实施例中,处理器单元可以被配置为执行另外的mac操作集合,其中所有mac操作集合提供输出矩阵的所有元素。在有利的实施例中,输出矩阵可包括对输入矩阵的矩阵卷积的结果。
15.在一个方面,本发明的实施例公开了用于执行mac操作的方法和计算机程序产品。本发明可以包括在mac单元的乘法器处接收来自寄存器文件的值集合。本发明可包括使用所述乘法器计算所接收的值的集合的乘积。本发明可以包括:读取mac单元的累加器的当前内容。本发明可以包括使用mac单元的加法器计算累加器的所读取当前内容与所接收的值的集合的所计算的乘积之和。本发明可以包括,将计算的和写到mac单元的累加器。
16.一方面,本发明实施例公开了一种mac单元。在一个实施例中,mac单元可以包括执行单元和一写一读(“1w/1r”)端口化(ported)寄存器文件。在一个实施例中,1w/1r端口化寄存器文件可以包括至少一个累加器。在一个实施例中,mac单元的执行单元可被配置为通过计算乘积并将乘积加到mac单元的至少一个累加器的内容来执行mac操作。
17.在有利的实施例中,mac单元的执行单元可以被配置为使用相同的累加器用于累加多个mac操作中的每个mac操作的乘积来连续执行多个mac操作。
18.在有利的实施例中,mac单元可以包括多个累加器。在有利的实施例中,mac单元可以被配置成使用多个累加器中的对应累加器来并行地执行多个mac操作。
19.在有利的实施例中,mac单元的至少一个累加器可包括多个累加器元件。在有利的实施例中,mac单元可以包括多个乘法器和加法器。在有利的实施例中,mac单元可以被配置为使用多个累加器元件中的相应累加器元件和多个乘法器中的相应乘法器并行地执行多个mac操作。
20.本公开可以提供一种用于执行mac操作的能量高效和应用专用的处理器。处理器单元具有少量寄存器文件端口,其可优于具有较大量端口的架构。具体地,使用具有单个读端口和单个写端口的寄存器文件可以实现简化的硬件控制并降低能量消耗。与例如提供两个读端口和两个写端口来连接两个mac执行单元的2w/2r寄存器文件相比,1写端口/1读端口寄存器文件(“1w/1r”)的实现方式可能需要更少的接线、更小的占用面积、以及更少的功率需求。连通性降低可保持相同的应用速度,降低能量消耗,并允许处理器频率的增加。此
外,本主题可以防止在mac单元之间共享一个寄存器文件。可以设想,向每个mac单元提供其自己的寄存器文件可以加速mac操作,因为每个执行单元可以独立地和最佳地连接到其各自的寄存器文件。
21.本主题可以使得能够使用单指令多数据(“simd”)操作数执行mac操作作为基本算术运算。这可以提高处理器的效率,因为simd操作数可以被有效地存储在单独的寄存器文件中,使得它们可以在单个时钟周期中从寄存器文件被加载到mac单元中。
附图说明
22.从以下将结合附图阅读的对本发明的示范性实施例的详细描述中,本发明的这些和其他目的、特征和优点将变得显而易见。附图的各种特征不是按比例的,因为图示是为了便于本领域技术人员结合具体实施方式理解本发明而清楚起见。在附图中:
23.图1是示出根据至少一个实施例的处理器系统的示例性结构的框图;
24.图2a是示出根据至少一个实施例的mac操作的示例性矩阵操作的框图;
25.图2b是示出根据至少一个实施例的用于矩阵运算的元素的计算的累加器的框图;
26.图2c是示出根据至少一个实施例的示例性mac单元的框图;
27.图3是示出了根据至少一个实施例的在图1中所示的示例性mac单元的框图;
28.图4是示出了根据至少一个实施例的示例性处理器单元的框图;
29.图5a是示出根据至少一个实施例的示例性处理器单元的框图;
30.图5b是示出根据至少一个实施例的示例性处理器单元的框图;
31.图6a是示出根据至少一个实施例的用于执行一个或多个mac操作集合的示例性过程的操作流程图;
32.图6b是示出根据至少一个实施例的与图6a的mac操作相关联的示例性mac单元的框图;以及
33.图6c是示出根据至少一个实施例的与图6a的mac操作相关联的示例性mac单元的框图。
具体实施方式
34.本发明的不同实施例的描述将出于说明的目的而呈现,但并不旨在是详尽的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员将是显而易见的。这里使用的术语被选择来最好地解释实施例的原理、实际应用或对在市场中找到的技术的技术改进,或者使本领域普通技术人员能够理解。
35.根据一个实施例,mac单元中的每个mac单元与索引相关联,其中mac单元被配置为通过执行引用索引的处理器指令来执行mac操作。这可实现识别特定mac单元以通过读取指令的索引以最佳方式处理指令。这可以是最佳的,因为这样的读取无论如何都在处理器系统中执行以便识别指令的操作数(例如,可能不需要额外的操作来读取索引)。
36.mac单元中的每个mac单元可以被配置为执行mac操作的集合中的一个或多个mac操作的相应子集。将由mac单元执行的mac操作的子集可以例如计算矩阵c的一个或多个元素。例如,矩阵c可以由以下公式[1]定义:
[0037]cij
=∑
kakibjk
ꢀꢀ
[i]
[0038]
1.[0039]
在以上公式[1]中,对于给定值k,mac操作的子集可以包括乘积∑
kakibjk
之和。例如,如果a、b和c是4x4矩阵,mac操作的子集可以包括用于获得元素c11的4个mac操作a11*b11、a21*b12、a31*b13和a41*b14。可以由mac单元在一个时钟周期中执行的一个或多个mac操作的每一组可以通过执行处理器指令来执行。处理器指令可以例如由mac单元并行执行。例如,mac操作的集合包括要由一个mac单元执行的n个mac操作和要由另一mac单元执行的其他n个mac操作。两个mac单元可以被配置为连续地并行执行每对mac操作(例如,如果n=3,则可以连续地并行执行3对mac操作)。如果每个mac单元包括用于存储一个元素的单个累加器,则这可能尤其有利。累加器可以是寄存器。在另一实例中,累加器可包括多个字段或累加器元件(例如,m个元件),其中每一累加器元件可用以累加相应mac操作的结果。在这种情况下,mac单元可以被配置为在一个时钟周期中并行地执行m个mac操作。
[0040]
如果在每个mac单元中存在多于一个累加器,则可以有利地使用指令的流水线执行。根据一个实施例,mac单元中的每个mac单元被配置为在至少一个时钟周期中(例如,在多个时钟周期中)执行相应的mac操作。mac操作执行例如可以包括四个时钟周期以生成处理器指令的结果。处理器指令可以包括四个步骤,其中每个步骤有助于获得被处理的处理器指令的总体结果。在每个时钟周期中,可以使用不同的累加器寄存器来开始新的处理器指令。一旦指令的结果可用,在4个周期之后,第一指令所使用的累加器可再次被后续指令使用。根据一个实施例,在一个时钟周期中解码处理器指令。
[0041]
根据一个实施例,该索引是mac单元的累加器的架构化的累加器寄存器索引。这可以节省处理资源,因为相同的索引被用于索引累加器和包括该累加器的mac单元两者。这与需要mac单元和累加器的单独索引的另一个实现方式相反。
[0042]
根据一个实施例,处理器单元还包括分派和/或发布单元。分派和/或发布单元被配置为处理多个处理器指令,使用索引选择mac单元,并且将处理器指令发送到所选择的mac单元以用于执行mac操作的集合。这可以通过对现有分派和/或发布单元进行最小改变来实现本主题在现有系统中的无缝集成。
[0043]
根据一个实施例,每个处理器指令包括操作数,该操作数将累加器指示为指令的源和目标寄存器并指示另一寄存器文件的另外的寄存器,其包括要被相乘和累加的源数据。源数据包括数字。使用累加器作为源和目标寄存器使得能够节省对数据的访问的资源。这与使用两个单独的累加器(一个用于写入,一个用于读取数据)的mac单元相反,该mac单元可引入额外的等待时间和附加的源-目标依赖性跟踪逻辑。由于使用单个累加器的处理器单元中的降低的连接性(例如,通过将单个累加器适当地放置在执行单元附近),单个累加器可比访问单独的累加器快多倍地被访问。
[0044]
根据一个实施例,mac单元是分派和/或发布单元的一部分。与mac单元的单独实现方式相比,这可以节省芯片上的面积和功率。例如,在mac单元被实施为分派和/或发布单元的单独组件的情况下,它们可以占用更多的空间并且可以使用额外的电源。
[0045]
根据一个实施例,分派和/或发布单元被配置为根据单线程(“st”)模式分派多个处理器指令,使得mac单元接收单线程的处理器指令。
[0046]
例如,处理器单元可以在st模式下操作,使得一次仅可以执行或处理一个线程的mac操作。
[0047]
根据一个实施例,分派和/或发布单元被配置成用于根据双向同时多线程(“smt2”)模式来分派该多处理器指令,从而使得这些mac单元接收两个线程中的任一线程的处理器指令。
[0048]
根据一个实施例,分派和/或发布单元被配置成用于根据四路同时多线程(“smt4”)模式分派该多处理器指令,从而使得这些mac单元中的每个mac单元从相应的两个线程接收处理器指令。
[0049]
这些实施例可以实现本主题与现有的线程使能系统的无缝集成。
[0050]
根据一个实施例,处理器单元被配置为执行另外的mac操作集合,其中所有mac操作集合提供输出矩阵的所有元素。输出矩阵是对输入矩阵的矩阵卷积的结果。例如,输入矩阵可表示图像的像素。内核可以用于与存储在输入矩阵中的像素数据执行卷积。内核进行例如边缘检测,并且对输入矩阵的与内核相同大小的子矩阵进行操作。输出矩阵是在输入矩阵位置处与内核大小匹配的子矩阵的卷积结果。
[0051]
参考图1,描述了示出根据一种实施方式的处理器系统101的结构的框图。
[0052]
处理器系统101可以使能存储用于对所存储的数据执行操作的数据。根据一个实施例,可以采用处理器系统101的高速缓存103的一个或多个级来缓存存储器数据,以便改进处理器性能。高速缓存103可以包括保存可能使用的存储器数据的高速缓存行的高速缓冲器。例如,典型的高速缓存行可以包括64、128或256字节的存储器数据。根据一个实施例,高速缓存103可以被配置为高速缓存诸如主存储器存储装置105的较高分级存储装置的数据。
[0053]
根据一个实施例,处理器系统101可以进一步包括寄存器文件119,其包括寄存器120a-n。寄存器120a-n可例如包括通用寄存器,每个寄存器包括用于存储由在处理器系统101中执行的指令处理的数据项的特定数量的位。
[0054]
根据一个实施例,指令可以由编译器提供。例如,程序的源代码可以被编译成在与处理器系统101相关联的指令集架构(“isa”)中定义的一系列机器可执行指令。isa可以包括根据本公开的至少一个实施例定义的至少一个处理器指令。isa的指令可被提供以处理存储在存储器105中和/或处理器系统101的寄存器文件119的寄存器120a-n中的数据。根据一个实施例,当处理器系统101开始执行可执行指令时,这些机器可执行指令可以被放置以便被顺序地执行。
[0055]
根据一个实施例,指令获取/解码单元109可用于获取放置的指令。例如,指令获取/解码单元109可在上下文切换之后获取下一顺序指令、分支获取指令的目标指令或程序的第一指令。所获取指令可由指令获取/解码单元109解码。
[0056]
根据一个实施例,可以将解码的指令传递到分派/发布单元111。分派/发布单元111可以在一个或多个发布队列112中存放指令,其中指令可以等待它们的源操作数和处理器系统101的适当mac单元113变得可用。例如,mac单元113中的每个mac单元113可以与发布队列112相关联,使得将由mac单元113执行的指令可以在与mac单元113相关联的发布队列112中排队。分派/发布单元111可以基于被分配给发布队列的mac单元113的索引将指令存放在发布队列112中。该索引可以是指令的一部分。也就是说,通过从指令中读取索引,分派/发布单元111可以知道(例如,确定)哪个mac单元113可以执行该指令。mac单元113中的每个mac单元113可以被配置为执行可能不被其他mac单元113执行的一种相应类型的指令。
在一个实施例中,指令的类型可以由与指令相关联的寄存器来定义。
[0057]
在常规方法中,每个执行单元可以被实现为执行每个指令(例如,任何指令可以转到任何执行单元)。然而,与本公开的操作相比,常规方法在处理资源方面可能更昂贵。
[0058]
根据一个实施例,每个发布队列112可以包括窗口逻辑,该窗口逻辑可以负责监测队列中的指令之间的依赖性以及向相应的mac单元113发布指令。窗口逻辑可以包括唤醒逻辑和选择逻辑。唤醒逻辑可以负责调用在发布队列112中等待以使源操作数变得可用的指令。一旦指令的所有源操作数可用,就可以标记指令准备好执行。选择逻辑可负责从就绪指令池中选择用于执行的指令。如果指令的所有源操作数可用,则该指令可就绪。然后,可以使用加载/存储单元117从存储器105和/或寄存器加载指令的操作数值。
[0059]
mac单元113通常可以从分派/发布单元111接收关于指令的信息并且可以根据指令的操作代码对操作数执行操作。根据本公开,从寄存器向mac单元113提供操作数。执行结果在存储时可以存储在存储器105和/或寄存器119中。根据一个实施例,mac单元113中的每个mac单元113可以包括至少一个乘法器和至少一个加法器。如果mac单元113包括多于一个乘法器,则每个乘法器可以与mac单元113的累加器的相应累加器元件相关联。mac单元113的每个乘法器可被配置为执行两个数字的相乘,并且加法器可被配置为将乘积与和乘法器相关联的累加器的内容或与和乘法器相关联的累加器元件的内容相加。mac单元113可以被配置为在至少一个时钟周期中执行mac操作。在一个示例中,mac单元113可以包括x个乘法器,所述x个乘法器可以使得mac单元113能够在至少一个时钟周期中执行x个mac操作。
[0060]
根据一个实施例,程序计数器(指令计数器)107可以保持跟踪待执行的当前指令的地址。例如,诸如(z/architecture和所有基于ibm的商标和标志是国际商业机器公司和/或其子公司的商标或注册商标)的处理器中的程序计数器107可以包括64位,并且可以被截断为31或24位以支持先前的寻址限制。程序计数器107通常可包含在计算机的程序状态字(“psw”)中,使得其在上下文切换期间持续。在一个实施例中,程序计数器可增加等于当前指令的字节数的量。
[0061]
处理器系统101可以被配置为执行指令的流水线执行。例如,处理器系统101的每个mac单元113可以使用四周期时延流水线式执行,从而使得每个指令可以采用mac单元113四个时钟周期来产生mac操作的结果。为此,在mac单元113处的指令的执行可以分解成四个过程,其中四个过程之一可以包括乘法过程,并且四个过程中的另一个可以包括mac单元的累加过程。
[0062]
根据一种实施方式,处理器系统101可被配置为在st模式、smt2模式或smt4模式下操作。在st模式中,来自一个线程的mac操作可由mac单元113一次执行或处理。例如,在st模式中,mac单元113中的每一个可被配置为使得mac单元113从一个特定线程(例如,t0)接收指令。在smt2模式中,mac单元113可从两个线程中的任一者接收指令。例如,在smt2模式中,mac单元113中的每一者可被配置为使得mac单元113从线程t0和/或线程t1接收指令。在smt4模式中,mac单元113中的每个mac单元113可以从所有四个线程(例如,t0、t1、t2和t3)接收处理器指令,或者mac单元113可以以拆分模式操作以接收两个线程。例如,在拆分模式中,如果处理器系统101包括两个mac单元113,则一个mac单元113可以被配置成用于处理来自线程t0和/或线程t2的指令,并且另一个mac单元113可以被配置成用于处理来自线程t1和/或线程t3的指令。
[0063]
因此,处理器系统101可以使用mac单元113来处理来自一个或多个程序的指令。例如,程序的源代码可实现一个或多个mac操作。mac操作可以包括将两个数字相乘并且将相乘的结果与累加值相加。至少一个mac操作可以由mac单元113通过执行isa的相应处理器指令来执行。
[0064]
现在参考图2a,描述了示出根据至少一个实施例的mac操作的示例性矩阵操作的框图。
[0065]
根据一种实施方式,图2a的矩阵运算可被称为矩阵相乘与累加(“mma”)运算。矩阵运算可以将输入矩阵201与输入矩阵203相乘,并且累加结果可以包括所得矩阵205。如果矩阵201包括m乘k矩阵并且矩阵203包括k乘n矩阵,则所得矩阵205可以包括m乘n矩阵。因此,所得矩阵205的每个元素可以通过k个mac运算获得。如图2a所示,输入矩阵201可包括4x4矩阵,并且输入矩阵203可包括4x4矩阵。根据一种实施方式,矩阵运算可以不限于图2a中所示的作为实例提供的维度。
[0066]
一个或多个累加器可用于计算mac操作和存储所得矩阵205的元素。累加器可具有指示累加器的大小的累加器大小,例如512位。累加器可包括多个累加器元件或字段。累加器元件可具有可小于累加器大小的累加器元件大小,例如,累加器元件大小可为32位。累加器的每个累加器元件可以具有或占据累加器的相应数量的位,例如,第一累加器元件可以占据累加器的位0至31,第二累加器元件可以占据位32至63并且第十六累加器元件可以占据位480至511。在一个实施例中,累加器元件尺寸可以被定义为所得矩阵205的元件的尺寸。这可为有利的,因为累加器可被配置为包含与所得矩阵205中的元素数目一样多的累加器元件。这可以使得能够将所得矩阵205的所有元素存储在一个累加器中。
[0067]
现在参见图2b,描绘了根据至少一个实施例的用于矩阵运算的元素的计算的累加器的框图。另外参考图2c,描述了示出根据至少一个实施例的示例性mac单元的框图。
[0068]
根据一个实施例,图2b-2c指示可以使用具有一个累加器223、一个加法器222和16个乘法器221的一个mac单元来计算所得矩阵205的元素。如图2b所示,所得矩阵205的每个元素可存储在单个累加器acc(0)的相应累加器元件中。累加器acc(0)的累加器元件在图2b中可称为accj(0),其中,j=1,

,16。所得矩阵205的元素c11可存储在具有累加器acc(0)的位0至31的累加器元件acc1(0)中,c21可存储在具有累加器acc(0)的位32至63的累加器元件acc2(0)中,c31可存储在具有累加器acc(0)的位64至95的累加器元件acc3(0)中,c41可存储在具有累加器acc(0)的位96至127的累加器元件acc4(0)中,以此类推。因此,16乘以32位元素的存储可以导致使用累加器223的512位的全宽度。
[0069]
在计算所得矩阵205的元素之前,累加器acc(0)的每个累加器元件accj(0)可以用初始值进行初始化(或存储)。该初始值可以例如是零。在另一示例中,元素accj(0)可以由其他值(诸如矩阵元素的预先计算的部分)初始化(例如,为了获得c11,累加器元素acc1(0)可以用值a11*b11初始化)。在另一例子中,初始化可由与mac操作指令不同的第一指令执行,这样乘法结果可存储在累加器acc(0)的累加器元件中,而无需使用累加器acc(0)作为输入。图2b中的示例使用矩阵201的k维作为用于计算外积的编程环的最外环。mma操作可从另一寄存器文件加载矩阵201的列和矩阵203的行一次作为操作数,以便计算其外积,并且将该外积的结果累加为所得矩阵205中的元素。之后,可以不再使用该矩阵201的列和矩阵203的行。
[0070]
例如,为了获得所得矩阵205的16个元素c11至c44中的每个元素,可以使用相应的累加器元件执行四个mac操作。如图2b所示,为了获得元素c11,mac操作210.1、211.1、212.1和213.1可以使用累加器元素acc1(0)的内容来执行。
[0071]
已知所得矩阵的结构及mma操作的性质,mac单元可被配置为最佳方式执行mma操作。例如,mma操作可拆分成mac操作的集合,使得每个mac操作的集合可由mac单元在一个时钟周期中执行。根据图2a的实例并且如图2b所示,矩阵操作可以涉及四组mac操作210.1-16、211.1-16、212.1-16和213.1-16,每组mac操作可以由图2c的mac单元在一个时钟周期中处理。每个mac操作涉及乘法运算以及将乘法运算的结果与相应累加器元件的内容相加。可通过发出相应指令(诸如,例如,基于整数的ger指令)来执行四个mac操作集合中的每一集合的执行。由mac操作集合中的每一mac操作使用的累加器元件可在ger指令中指示。例如,由mac操作集合中的每一mac操作使用的累加器元件可由ger指令类型来确定(例如,ger指令可具有不同类型,其中每一类型可用于不同数目的mac操作)。ger指令名称确定操作数以及512位累加器中的累加器元件和数据类型的数目。
[0072]
在该16个mac操作的集合的第一mac操作中,可以执行乘积a11*b11,并且可以将乘积的结果加到具有累加器acc(0)的位0至31的第一累加器元件acc1(0)的内容(其可以是零)。因此,在第一mac操作之后,第一累加器元件acc1(0)可以包含乘积a11*b11。在这16个mac操作的集合的第二mac操作中,执行乘积a11*b21,并将乘积的结果加到累加器acc(0)的第二累加器元件acc2(0)的内容,该内容可以为零。因此,在执行这16个mac操作210.1-210.16的集合之后,累加器acc(0)的每个元素accj(0)可包括如图2b所示的所得矩阵的相应元素的中间值。在完成这16个mac操作210.1-210.16的集合之后,mac单元可以执行16个mac操作211.1-211.16的另一集合。可以执行该重复,直到执行了mac操作的所有集合。图2b示出了由mac操作的集合的非流水线执行得到的累加器acc(0)的每个累加器元件accj(0)的内容的演变。
[0073]
然而,为了执行多个矩阵操作(例如,类似于图2a的矩阵操作),mac操作的流水线执行可以是有利的。例如,在四个矩阵操作的情况下,其中每个矩阵操作包括如图2a的矩阵操作所描述的四个mac操作集合,16个mac操作集合的执行可以如下进行。
[0074]
在四周期流水线执行的情况下,可以在四个步骤中执行每个mac操作。因此,16个mac操作集合中的每个集合可以在四个时钟周期中执行。例如,mac操作的集合中的每个mac操作的第一步骤可以由mac单元在一个相同的时钟周期中执行(例如,mac操作的集合中的所有第一步骤可以在一个相同的时钟周期中执行)。mac操作的集合中的每个mac操作的第二步骤可以由mac单元在另一个相同的时钟周期中执行。mac操作的集合中的每个mac操作的第三步骤可以由mac单元在另一个相同的时钟周期中执行。mac操作的集合中的每个mac操作的第四步骤可以由mac单元在另一个相同的时钟周期中执行。流水线式执行使得能够在同一时钟周期内执行mac操作的不同集合的不同步骤。
[0075]
四个矩阵运算的四个所得矩阵中的每个所得矩阵的元素分别存储在累加器acc(0)、acc(1)、acc(2)和acc(3)中。
[0076]
图2a至图2c中提供的实例示出了作为输入源的4
×
32位元素的mac计算:src1和src2。然而,构想了其他元素宽度(诸如,例如,8x16位或16x8位)可通过使32位宽的累加器元件中的两对16位相乘并相加或对四对8位进行mac操作以在四周期执行期间计算32位宽
的累加器字段而以类似的方式来处理。以类似的方式,累加器元素大小可以小于或大于32位,以及存储到acc寄存器中的元素的数量。图2c示出了4x4实现方式的细节,其中4x32位操作数a(例如,表示一列)和4x32位操作数b(例如,表示一行)作为输入,并且在存储16个32位结果的输出处示出了512位累加器。图2b示出了通过外部相乘计算算法的操作。然而,矩阵运算可不限于这些外积计算算法。可以使用其他算法,包括内积或点积算法。
[0077]
现在参考图3,描述了示出根据至少一个实施例的mac单元的框图。根据一种实施方式,图3的mac单元可描述mac单元113。
[0078]
根据一个实施例,mac单元113可以包括执行单元301和寄存器文件303。执行单元301从寄存器文件303读取累加器数据(acc(i)数据),并将累加器数据写入寄存器文件303。寄存器文件303可包括一个或多个累加器。在一个实施例中,寄存器文件303的每个累加器可包括架构化的累加器寄存器索引i,使得每个累加器可被称为acc(i)。所述索引可为整数,其可包含偶数或奇数。架构化的累加器acc(i)可被重命名,使得存储累加器acc(i)的寄存器文件条目不同于寄存器文件条目数字。分派/发布单元111的逻辑可跟踪包含累加器acc(i)的状态的寄存器文件条目数字。
[0079]
寄存器文件303可以包括1w/1r端口化寄存器文件。寄存器文件303可以是有利的,因为与例如2w/2r寄存器文件相比,它可能需要更少的布线、更少的面积以及更少的功率需求。
[0080]
mac单元113可以被配置为从分派/发布单元111的各个发布队列接收处理器指令以便执行mac操作。处理器指令可以例如被命名为“ger”并且可以被定义如下:geracc(i)

acc(i)、向量标量寄存器(“vsr”)(j)、vsr(k)。处理器指令ger可包含将累加器acc(i)指示为处理器指令的源和目标寄存器且指示寄存器文件119的另一源寄存器vsr(j)、vsr(k)的操作数。源寄存器vsr(j)、vsr(k)可包括要相乘的数字。如图3所示,执行单元301可以从寄存器文件119中读取要相乘的值/数字304和305,并且从寄存器文件303中读取累加器acc(i)的内容(称为src0),以执行mac操作。mac操作的结果(称为tgt)可以存储在累加器acc(i)中。因此,寄存器文件303的每个累加器acc(i)可使mac单元113执行相应的一组一个或多个mac操作,以使该组mac操作的结果值累加在累加器acc(i)中。
[0081]
根据图2a的示例,mac单元113可被配置为使用累加器acc(0)执行四组16个mac操作以获得所得矩阵205的元素c11...c44。为此,执行单元301可包括多个乘法器,累加器acc(0)可包括多个元件,如参照图2c所述。
[0082]
为了计算整体所得矩阵205,可以在mac单元接收四个处理器指令流,每个处理器指令执行一组16个mac操作以获得c11

c44。流的每个处理器指令参考mac单元的累加器acc(0),以及累加器acc(0)的哪个累加器元件接收乘法的哪个结果。对于流的每一处理器指令,mac单元可执行16个mac操作,且将结果累加到处理器指令中引用的累加器元件的相应内容。例如,除其他乘积之外,处理器指令可以计算乘积a11*b11并且将乘积加到对应的累加器元件acc1(0),之后是计算至少a21*b12并且将乘积加到对应的累加器等的另一指令。
[0083]
每个mac操作的执行步骤可以由mac单元113在一个时钟周期中或者在多个时钟周期中通过流水线化实现方式来执行。
[0084]
现在参考图4,描述了示出根据至少一个实施例的处理器单元400的框图。
[0085]
处理器单元400可以包括两个mac单元413a和413b。mac单元413a可以包括执行单元401a和寄存器文件403a。执行单元401a可以从寄存器文件403a中读取数据并且可以将数据写入寄存器文件403a中。寄存器文件403a可以包括一个或多个累加器。寄存器文件403a的每个累加器可包括架构化的累加器寄存器索引奇数,使得每个累加器可被称为acc(奇数)。索引奇数可以是奇数数字。mac单元413b可以包括执行单元401b和寄存器文件403b。执行单元401b可以从寄存器文件403b中读取数据并且可以将数据写入寄存器文件403b中。寄存器文件403b可包括一个或多个累加器。寄存器文件403b的每个累加器可包括架构化的累加器寄存器索引偶数,使得每个累加器可被称为acc(偶数)。索引偶数可以是偶数数字。寄存器文件403a和403b中的每个寄存器文件可以是1w/1r端口化寄存器文件。mac单元413a-b中的每个可被配置为如参考图3的mac单元113所描述的进行操作。
[0086]
在一个实施例中,处理器单元400还可以包括寄存器文件419,寄存器文件419可以提供将要与mac单元413a和413b中的每一个相乘的数字。
[0087]
根据一个实施例,mac单元中的每一个可以与相应的索引相关联。例如,mac单元413a可与奇数索引相关联,mac单元413b可与偶数索引相关联。每个mac单元可以从相应的发布队列接收其自身的指令(例如,向处理器单元400发布指令的分派和/或发布单元可以包括两个发布队列,一个发布队列用于奇数索引指令,另一个发布队列用于偶数索引指令)。在另一实施例中,分派和/或发布单元可以包括具有至少两个发布端口的单个发布队列。在该实施例中,一个发布端口可被配置为向偶数mac单元413b发布偶数索引指令,而另一个发布端口可被配置为向奇数mac单元413a发布奇数索引指令。然而,本公开不限于这些实现方式。
[0088]
例如,mac单元413a包括四个累加器acc(1)、acc(3)、acc(5)和acc(7),并且mac单元413b包括四个累加器acc(0)、acc(2)、acc(4)和acc(6)。mac单元413a-b中的每个可接收相应的处理器指令,如参考图3所述。处理器指令可引用对应于接收指令的mac单元的索引。因而,处理器单元400可通过mac单元413a-b并行执行两个处理器指令。
[0089]
处理器单元400可以被配置为执行指令的流水线执行。例如,假定在处理器单元400处接收八个处理器指令(例如,作为指令流,ger(0)、ger(2)、ger(3)、ger(1)、ger(5)、ger(6)、ger(7)和ger(4),其中参看图4的ger(i)使用累加器acc(i)作为源src0和目标tgt,且执行ger(i)指令的等待时间为四个周期)。每一指令ger具有偶数或奇数索引。在此情况下,指令ger(0)、ger(2)、ger(4)和ger(6)可在与mac单元413b相关联的发布队列中,且指令ger(1)、ger(3)、ger(5)和ger(7)可在与mac单元413a相关联的发布队列中。如果存在可仅包括一个元件的一个单一累加器,那么ger(i)可启用执行一个mac操作的四个步骤中的一个步骤。如果存在一个累加器中的m个累加器元件可包括m个元件,那么ger(i)可启用执行m个mac操作中的每一mac操作的一个相同步骤。在四个流水线执行示例的等待时间之后,可以如下逐个周期地执行指令流:
[0090]
周期c:ger(0),ger(3)
[0091]
c 1:ger(2),ger(1)
[0092]
c 2:ger(4),ger(5)
[0093]
c 3:ger(6),ger(7)
[0094]
c 4:ger(0),ger(3)

[0095]
在时钟周期c期间,指令ger(0)和ger(3)发布到mac单元413b和413a且接下来分别由mac单元413b和413a执行。在下一周期c 1中,指令ger(2)和ger(1)被发布到mac单元413b和413a且接下来分别由mac单元413b和413a执行。在下一周期c 2中,指令ger(4)和ger(5)被发布到mac单元413b和413a且接下来分别由mac单元413b和413a执行。在接下来的周期c 3中,指令ger(6)和ger(7)被发布以接下来分别由mac单元413b和413a执行。处理器单元400可以实现可比得上或优于现有系统的吞吐量。在周期c 4中,ger(0)和ger(3)指令执行已完成,因此可在c 4周期中发布新ger(0)和ger(3)指令以进行累加器acc(0)和acc(3)的外部乘法计算。周期c中的ger(0)可执行mac操作的第一步骤,且周期c 4中的ger(0)可执行所述同一mac操作的第二步骤。
[0096]
在另一实例中,指令流可仅包括偶数索引的指令ger(0)、ger(2)、ger(4)和ger(6)。即,仅一个发布队列包括要执行的指令。在这种情况下,仅一个mac单元可用于执行如下指令流:
[0097]
周期cc:ger(0),无
[0098]
cc 1:ger(2),无
[0099]
cc 2:ger(4),无
[0100]
cc 3:ger(6),无
[0101]
在时钟周期cc期间,指令ger(0)被发布到mac单元413b且接下来由mac单元413b执行,而mac单元413a不执行任何指令。在下一周期cc 1中,指令ger(2)被发布到mac单元413b且接下来由mac单元413b执行,而mac单元413a未执行任何指令。在下一周期cc 2中,指令ger(6)被发布到mac单元413b且接下来由mac单元413b执行,而mac单元413a未执行任何指令。在下一周期cc 3中,指令ger(6)被发布到mac单元413b且接下来由mac单元413b执行,而mac单元413a未执行任何指令。不使用410a执行单元可能不会影响总体吞吐量,因为有4个acc在使用,如果一条指令完成acc结果计算需要4个周期的延迟,则总体吞吐量可能不会高于4条指令。
[0102]
现在参考图5a,描述了示出根据至少一个实施例的处理器单元500的分派逻辑的框图。还参考图5b,描述了示出根据至少一个实施例的处理器单元500的发布逻辑的框图。处理器单元500可以包括分派/发布单元511和mac单元413a和413b,如参考图4所述。
[0103]
如图5a所示,分派/发布单元511可以被配置为接收获取和解码的指令。所接收的指令可引用具有给定索引i的累加器acc(i)。分派和/或发布单元511包括逻辑电路514。逻辑电路514可以被配置为基于索引i确定分派/发布单元511的发布队列(“isq”)412a和412b中的哪一个将接收到该指令。可替代地,如图5b所示,处理器单元500可以包括逻辑电路514的公共发布队列端口,并且组合的发布队列412a-b发布逻辑可以被配置为基于使用中的累加器acc(i)的索引i将各个指令发布到mac单元413a-b的偶数或奇数端口中。
[0104]
现在参考图6a,描述了示出根据至少一个实施例的用于执行一个或多个mac操作的集合的示例性过程的操作流程图。另外参考图6b-6c,描绘了根据至少一个实施例的与图6a的mac操作相关联的mac单元的框图。
[0105]
为了简化以下描述,图6a-6c中的mac操作的集合可包括(但不限于)用于确定等于a11*b11 a21*b12的矩阵元素的mac操作。
[0106]
为了能够执行mac操作的集合,可以生成两个指令的流,其中每个指令可以使得能
够执行mac操作的集合的mac操作。
[0107]
在601,初始化累加器。根据一个实施例,mac单元613的累加器可被初始化为零。累加器可以是1w/1r寄存器文件的一部分。
[0108]
然后在602,接收指令。根据一个实施例,在602可以接收流的第一指令。第一指令可引用两个vsr寄存器作为源寄存器。第一指令可进一步引用累加器作为第一指令的源寄存器和目标寄存器。第一指令可例如使用ger指令如下定义:geracc(i)

acc(i),vsr(j),vsr(k)。如图6b中所示,vsr寄存器vsr(j)和vsr(k)包括要相乘的值a11和b11,并且累加器存储初始值。值a11和b11可例如通过用于使得能够执行第一指令的加载/存储单元117存储在寄存器文件119的vsr寄存器中。
[0109]
然后在603,将这些值相乘。根据一个实施例,可以在mac单元613的乘法器处接收值a11和b11。乘法器可以在603将值a11和b11相乘并且将相乘的结果a11*b11提供给mac单元613的加法器。
[0110]
然后在604,将乘法的结果加到累加器。根据一种实施方式,加法器可读取累加器acc的当前内容,如图6b所示,该当前内容可为零。在步骤604中,加法器将累加器acc的内容与乘法a11和b11的结果相加。
[0111]
然后在605,写入结果。根据一个实施例,可以在605处将相加的结果(例如,a11*b11)写入到累加器。这可导致第一指令被执行和完成。
[0112]
可通过针对流的第二指令重复602至605(如上文所描述)来处理流的下一指令。图6c示出了用于执行第二指令的mac单元613的状态。vsr寄存器vsr(j)和vsr(k)可包括要相乘的值a21和b12,累加器可存储值a11*b11。第二指令可例如具有与第一指令相同的语法。可重复602至605直到流的所有指令被处理。
[0113]
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的各方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0114]
本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质(一个或多个介质)。
[0115]
计算机可读存储介质可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字通用盘(dvd)、记忆棒、软盘、诸如穿孔卡之类的机械编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
[0116]
本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部
计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0117]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或者以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c 等)和过程程序设计语言(诸如“c”程序设计语言、python程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(lan)或广域网(wan))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
[0118]
这些计算机可读程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
[0119]
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
[0120]
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,连续示出的两个方框实际上可以作为一个步骤完成,同时、基本上同时、以部分或完全时间上重叠的方式执行,或者方框有时可以以相反的顺序执行,这取决于所涉及的功能。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
再多了解一些

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

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

相关文献