具有旁路优化、可变网格架构和融合矢量操作的协处理器的制作方法

文档序号:26841018发布日期:2021-10-08 22:43阅读:92来源:国知局
具有旁路优化、可变网格架构和融合矢量操作的协处理器的制作方法

1.本文所述的实施方案涉及协处理器,并且更具体地讲,涉及协处理器中的微架构优化。
2.相关技术描述
3.处理器是许多数字系统的关键部件,通常确定在系统中可以实现多少性能和/或功率效率。在一些情况下,由处理器实现的指令集的子集可在协处理器中实现,该协处理器在执行指令的子集时可以比处理器具有更高的性能和/或更有效。另选地,可使用通用处理器将无法实现的专用硬件将指令添加到被专门设计成由协处理器执行的指令集。
4.协处理器实现(或微架构)可包括有助于协处理器的性能和/或功率效率的各种优化。由于协处理器的专用性质,这些优化可不同于通常在处理器中实现的那些优化。


技术实现要素:

5.在一个实施方案中,协处理器可包括一个或多个优化。例如,协处理器的一个实施方案可包括旁路指示,该旁路指示识别不由给定处理器指令使用并因此可被旁路的执行电路。可在执行期间禁用对应电路,从而阻止在该电路的输出将不用于该指令时进行评估。在另一个实施方案中,协处理器可按行和列实现处理元件的网格,其中给定协处理器指令可指定操作,该操作致使至多所有处理元件对输入操作数的矢量进行操作以产生结果。协处理器的实现(例如,与不同处理器实现(诸如高性能相比于低功率)一起使用)可实现处理元件的一部分。协处理器控制电路可被设计为与完整网格或局部网格一起操作,从而在局部网格情况中重发指令以执行请求的操作。在又一个实施方案中,协处理器可能能够使矢量模式操作融合(其使用一行处理元件来产生矢量结果,而不是用于矩阵模式操作的矩阵结果),在一些实施方案中,这可在执行矢量模式操作时提高效率。各种实施方案可采用上述特征中的一个或多个特征的任何组合。
附图说明
6.下面的详细描述参照附图,现在对这些附图进行简要说明。
7.图1是示出处理器和协处理器的一个实施方案的框图。
8.图2是示出协处理器的一个实施方案的更详细框图。
9.图3是示出对于矩阵模式指令而言数据向处理元件的分布的一个实施方案的框图。
10.图4是示出对于一个或多个矢量模式指令而言数据向处理元件的分布的一个实施方案的框图。
11.图5是图1和图2所示的执行电路的一个实施方案的更详细框图。
12.图6是图1和图2所示的执行电路的另一个实施方案的更详细框图。
13.图7是图1和图2所示的执行电路的又一个实施方案的更详细框图。
14.图8是示出图5至图7所示的执行电路的一个实施方案的z存储器冒险的框图。
15.图9是示出图5至图7所示的执行电路的另一个实施方案的z存储器冒险的框图。
16.图10是示出用于z存储器加载/存储操作的协处理器的一个实施方案的操作的流程图。
17.图11是协处理器的另一个实施方案的更详细框图。
18.图12是处理元件的一个实施方案的更详细框图。
19.图13是示出解码指令并检测旁路的一个实施方案的流程图。
20.图14是示出执行操作并实现旁路的一个实施方案的流程图。
21.图15是尺寸减小的执行电路的各种实施方案的框图。
22.图16是与一个实施方案的发布控制电路相对应的状态机。
23.图17是示出操作融合的一个实施方案的流程图。
24.图18是包括处理器和协处理器的系统的一个实施方案的框图。
25.图19是计算机可访问存储介质的一个实施方案的框图。
26.尽管本公开中所述的实施方案可受各种修改形式和另选形式的影响,但其具体实施方案在附图中以举例的方式示出并将在本文中详细描述。然而,应当理解,附图和对其的具体实施方式不旨在将实施方案限制为所公开的特定形式,而相反,本发明旨在涵盖落入所附权利要求书的实质和范围内的所有修改、等同物和另选方案。本文所使用的标题仅用于组织目的,并不旨在用于限制说明书的范围。如在整个本技术中所使用的那样,以允许的意义(即,意味着具有可能性)而非强制的意义(即,意味着必须)使用“可能”一词。类似地,字词“包括”、“包含”意味着“包括但不限于”。如本文所用,术语“第一”、“第二”等充当其之后的名词的标签,并且不暗指任何类型的排序(例如,空间的、时间的、逻辑的等),除非有明确指出。
27.在本公开内,不同实体(其可被不同地称为“单元”、“电路”、其他部件等等)可被描述或声称成“被配置为”执行一个或多个任务或操作。此表达方式—被配置为[执行一个或多个任务]的[实体]—在本文中用于指代结构(即,物理的事物,诸如电子电路)。更具体地,此表达方式用于指示此结构被布置成在操作期间执行一个或多个任务。结构可被描述成“被配置为”执行某个任务,即使该结构当前并非正被操作亦如此。“被配置为生成输出时钟信号的时钟电路”旨在涵盖例如在操作期间执行该功能的电路,即使所涉及的电路当前并非正被使用(例如该电路并未连接到电源)。因此,被描述或表述成“被配置为”执行某个任务的实体是指物理的事物,诸如设备、电路、存储可执行以实施该任务的程序指令的存储器等。该短语在本文中不被用于指代无形的事物。通常,形成与“被配置为”对应的结构的电路可包括硬件电路。硬件电路可包括以下项的任意组合:组合式逻辑电路、时钟存储设备(诸如触发器、寄存器、锁存器等)、有限状态机、存储器(诸如静态随机存取存储器或嵌入式动态随机存取存储器)、定制设计电路、模拟电路、可编程逻辑阵列等。类似地,为了描述方便,可将各种单元/电路/部件描述为执行一个或多个任务。此类描述应当被解释为包括短语“被配置为”。
[0028]
术语“被配置为”并不旨在表示“可被配置为”。例如,未经编程的fpga不会被认为是“被配置为”执行某个特定功能,虽然其可能“可被配置为”执行该功能。在适当编程之后,fpga然后可被配置为执行该功能。
[0029]
在实施方案中,可通过以硬件描述语言(hdl)诸如verilog或vhdl对电路的描述进
行编码来实现根据本公开的硬件电路。可针对为给定集成电路制造技术设计的单元库来合成hdl描述,并可出于定时、功率和其他原因而被修改,以获得可被传输到工厂以生成掩模并最终产生集成电路的最终的设计数据库。一些硬件电路或其部分也可在示意图编辑器中被定制设计并与合成电路一起被捕获到集成电路设计中。该集成电路可包括晶体管并还可包括其他电路元件(例如,无源元件,诸如电容器、电阻器、电感器等),以及晶体管和电路元件之间的互连件。一些实施方案可实现耦接在一起的多个集成电路,以实现硬件电路,和/或可在一些实施方案中使用离散元件。另选地,hdl设计可被合成为可编程逻辑阵列诸如现场可编程门阵列(fpga)并且可在fpga中实现。
[0030]
如本文所用,术语“基于”或“取决于”用于描述影响确定的一个或多个因素。此术语不排除可能有附加因素可影响确定。也就是说,确定可仅基于指定的因素或基于所指定的因素及其他未指定的因素。考虑短语“基于b确定a”。此短语指定b是用于确定a的因素或者b影响a的确定。此短语并不排除a的确定也可基于某个其他因素诸如c。这个短语还旨在涵盖a仅基于b来确定的实施方案。如本文所用,短语“基于”与短语“至少部分地基于”是同义的。
[0031]
本说明书包括对各种实施方案的参考,以指示本公开并非旨在提及一个特定具体实施,而是提及落入包括所附权利要求书的本公开的实质内的一系列实施方案。特定特征、结构或特性可以与本公开一致的任何合适的方式被组合。
[0032]
本说明书可使用字词“一个”或“一种”来指代元件,或使用词语“该”来指代元件。这些字词并非旨在意味着仅存在元件的一个实例。在各种实施方案中可存在多于一个。因此,除非明确地描述为仅一个,否则“一个”、“一种”和“所述”应解释为意味着“一个或多个”。
[0033]
本说明书可将各种部件、单元、电路等描述为耦接的。在一些实施方案中,如果部件、单元、电路等电耦接(例如,直接连接或通过一个或多个其他电路间接连接)和/或通信耦接,则这些部件、单元、电路等可耦接。
具体实施方式
[0034]
现在转向图1,示出了包括cpu处理器12、协处理器10和二级(l2)高速缓存14的装置的一个实施方案的框图。在例示的实施方案中,cpu处理器12耦接到l2高速缓存14和协处理器10。在一些实施方案中,协处理器10也可耦接到l2高速缓存14,以及/或者可耦接到cpu处理器12中的数据高速缓存(dcache)(图1中未示出)。协处理器10可包括彼此耦接的指令缓冲器22、x存储器24、y存储器26、z存储器28、执行电路30和存储器访问接口32。在一些实施方案中,如果电路电耦接(例如,直接连接或通过一个或多个其他电路间接连接)和/或通信耦接,则电路可耦接。
[0035]
协处理器10可被配置为执行一个或多个计算操作以及一个或多个协处理器加载/存储操作。协处理器10可采用指令集,该指令集可以是由cpu处理器12实现的指令集的子集。cpu处理器12可以识别由协处理器10实现的指令,并且可以将这些指令传送到协处理器10。可使用用于将协处理器指令从处理器12传输到协处理器10的任何机制。例如,图1示出了cpu处理器12与协处理器10之间的通信路径。例如,如果协处理器10在物理上靠近cpu处理器12,则该路径可以是专用通信路径。该通信路径可与其他通信共享。例如,基于分组的
通信系统可用于将存储器请求传输到系统存储器并将指令传输到协处理器10。在一个特定实施方案中,可通过l2高速缓存14将协处理器指令传送到协处理器12。在一个实施方案中,可将指令捆绑并传输到协处理器12。例如,可由处理器12将高速缓存操作、高速缓存逐出等传输到l2高速缓存14,因此可存在传输数据的操作和高速缓存行的接口。在一个实施方案中,可使用相同接口通过l2高速缓存14将指令束传输到协处理器10。
[0036]
在一个实施方案中,由在协处理器10中实现的指令指定的计算操作可对输入操作数的矢量执行。例如,实施方案从x存储器24和y存储器26接收操作数的矢量。执行电路30可包括处理元件(电路)的阵列或网格以执行这些操作。每个电路可接收来自x存储器24的元素矢量中的一个或多个元素矢量和来自y存储器26的元素矢量中的一个或多个元素矢量,并且可评估对矢量元素的操作。在一个实施方案中,操作的结果可与z存储器28中的对应位置中的当前值一起累加,以用于写回到z存储器28中的对应位置。在一个实施方案中,协处理器10所执行的指令可具有矢量模式和矩阵模式。在矢量模式下,针对y的对应矢量元素来评估x的每个矢量元素,从而产生结果矢量。在矩阵模式下,在一个实施方案中,可计算输入矢量操作数的外积。在又一个实施方案中,可在矩阵模式下支持各种矩阵操作,并且可在矩阵模式下使用y的每个矢量元素对x的每个矢量元素进行操作。
[0037]
基于阵列中的给定处理元件的位置,存在处理元件可响应于协处理器指令而更新的z存储器28的子集。即,每个处理元件产生指令的总体结果的一部分。在所有处理元件(或处理元件的子集(如果指令指定比所有处理元件少的处理元件来执行操作))上产生的结果是该指令的结果,并且将该结果写入到z存储器中的位置,这些位置以规则图案分散在z存储器的地址空间上,该规则图案取决于该指令和该指令的操作数大小。可响应于指令而更新至多所有z存储器28,但每个处理元件更新z存储器28的限制部分(并且该处理元件可以是执行电路30中可更新该限制部分的唯一处理元件)。该指令可为该结果指定z存储器地址,并且该地址识别该限制部分内的更新的位置。
[0038]
在一个实施方案中,z存储器28可因此与执行电路30的处理元件一起在物理上分布于集成电路的协处理器10所占据的区域上。因此,图1中的描绘可以是协处理器10的逻辑图,并且物理实现可包括使z存储器28与处理元件一起分布。在一些实施方案中,在物理上分布z存储器28可提供各种有益效果。例如,与单独地实现z存储器28的情况相比,将z存储器28连接到执行电路30中的处理元件的布线可相对较短且紧凑。这可节省所消耗的面积以及读取和写入z存储器28时的功率。
[0039]
在一个实施方案中,协处理器10可支持各种数据类型和数据大小(或精度)。例如,可支持浮点和整数数据类型。浮点数据类型可包括16位、32位和64位精度。整数数据类型可包括8位和16位精度,并且可支持符号和无符号整数两者。其他实施方案可包括上述精度的子集、附加精度或上述精度和附加精度的子集(例如,更大或更小的精度)。在一个实施方案中,可在输入操作数上支持8位和16位精度,并且对于对那些操作数进行操作的结果而言,可支持32位累加。
[0040]
在一个实施方案中,协处理器加载操作可将矢量从系统存储器(图1中未示出)传输到x存储器24、y存储器26或z存储器28。协处理器存储操作可将矢量从x存储器24和y存储器26写入系统存储器。z存储器28可使用提取指令写入存储器以将结果移动到x存储器24和/或y存储器26,然后将结果从x存储器24和/或y存储器26存储到系统存储器。另选地,还
可支持将z存储器28存储到主存储器的存储指令。系统存储器可由随机存取存储器(ram)形成,诸如各种类型的动态ram(dram)或静态ram(sram)。可包括存储器控制器以接口连接到系统存储器。在一个实施方案中,协处理器10可以是与cpu处理器12一致的高速缓存。在一个实施方案中,协处理器10可访问l2高速缓存14,并且l2高速缓存14可确保与cpu处理器12高速缓存的高速缓存一致性。在另一个另选方案中,协处理器10可有权访问存储器系统,存储器系统中的一致点可确保访问的一致性。在另一个另选方案中,协处理器10可有权访问cpu高速缓存。在又一个实施方案中,协处理器10可具有一个或多个高速缓存(根据需要,其可被虚拟寻址或被物理寻址)。如果未提供l2高速缓存14并且未提供对cpu高速缓存的访问,则可使用协处理器高速缓存。另选地,协处理器10可具有高速缓存以及针对那些高速缓存中的丢失而对l2高速缓存14进行访问。在各种实施方案中,可使用用于访问存储器并确保一致性的任何机制。
[0041]
在一个实施方案中,cpu处理器12可负责获取由cpu处理器12和协处理器10执行的指令。在一个实施方案中,当协处理器指令不再是推测性的时,可由cpu处理器12向协处理器10发布协处理器指令。通常,如果知道指令要完成执行而没有异常/中断,则指令或操作可以是非推测性的。因此,一旦前面的指令(按程序顺序)已经被处理到已知先前指令不会导致cpu处理器12中的异常/推测性刷新且还知道指令自身不会导致异常/推测性刷新,则指令就可以是非推测性的。基于cpu处理器12实现的指令集架构,可能已知一些指令不会导致异常,并且也不会导致推测性刷新。一旦已经确定其他先前指令无异常且无刷新,此类指令就也是无异常且无刷新的。
[0042]
可提供指令缓冲器22以允许协处理器10在其他指令被执行时将指令排队。在一个实施方案中,指令缓冲器22可为先进先出缓冲器(fifo)。也就是说,可按程序顺序处理指令。其他实施方案可实现其他类型的缓冲器、用于不同类型的指令(例如,加载/存储指令与计算指令)的多个缓冲器,并且/或者可允许指令的不按顺序处理。
[0043]
x存储器24和y存储器26可各自被配置为存储输入操作数的至少一个矢量。类似地,z存储器28可被配置为存储由来自x存储器24的操作数的矢量和来自y存储器26的操作数的矢量生成的至少一个计算结果。该结果可以是该结果大小(例如,16位元素、32位元素或64位元素)的结果矩阵。另选地,该结果可以是矢量,具体取决于该指令。在一些实施方案中,x存储器24和y存储器26可被配置为存储多个矢量,并且/或者z存储器28可被配置为存储多个结果矩阵/矢量。每个矢量/矩阵可被存储在存储器中不同的存储体中,并且用于给定指令的操作数可由存储体编号来标识。更一般地,存储器24、26和28中的每个条目可通过寄存器地址(例如,寄存器号)寻址,因此存储器中的条目可被视为寄存器,类似于cpu处理器12中的整数或浮点寄存器(尽管在存储容量方面通常显著大于此类寄存器)。以另一种方式查看,存储器24、26和28中的每一者可使用引用到特定存储器的地址作为条目来寻址(例如,每个存储器24、26和28可具有其自己的地址空间)。例如,x存储器24中的给定条目的给定地址可具有与y存储器26中的第二给定条目的第二给定地址相同的数值。因为它们在给定指令中被编码为x存储器地址或y存储器地址,所以协处理器10可从正确存储器选择待读取/写入的正确条目。
[0044]
执行电路30可被配置为执行计算操作,如先前所提及的。存储器访问接口32可被配置为执行协处理器加载/存储操作。协处理器10可从指令缓冲器22向存储器访问接口32
提供协处理器加载/存储操作,该存储器访问接口可包括用于加载/存储操作的队列和用于选择加载/存储操作以供执行的控制逻辑。协处理器加载/存储操作的地址可与来自cpu处理器12的操作一起提供。在一个实施方案中,cpu处理器12可由加载/存储操作的一个或多个地址操作数生成虚拟地址,并且可通过存储器管理单元(例如,转换后备缓冲器(tlb)和/或相关硬件)将虚拟地址转换为物理地址。在另一个实施方案中,协处理器10可包括tlb和/或其他mmu硬件,并且cpu处理器12可提供可由协处理器10转换的虚拟地址。在此类实施方案中,还可将cpu处理器12所执行的tlb管理指令传输到协处理器10,以将协处理器10tlb与cpu处理器12tlb一致地管理。然而,对于协处理器存储操作,直到先前的计算操作已经完成,来自存储器24、26和28中的一者的源数据才可用。协处理器加载操作在被提供给存储器访问接口32时通常可准备好执行,但对于较新的协处理器加载/存储操作可能具有排序约束。存储器访问接口32可被配置为解决排序约束并将存储器操作传输到l2高速缓存14。
[0045]
在一个实施方案中,l2高速缓存14可被配置为检查协处理器加载/存储操作的高速缓存命中,并且还可确定由协处理器加载/存储操作访问的数据(或其一部分)是否在cpu处理器12中的数据高速缓存中。l2高速缓存14可包括cpu处理器数据高速缓存,因此l2高速缓存14中的高速缓存行的标签可指示高速缓存行是否在数据高速缓存中。另选地,l2高速缓存14可包括用于数据高速缓存的一组标签,并且可跟踪这组标签中哪些高速缓存块在数据高速缓存中。如果数据在数据高速缓存中,则l2高速缓存14可生成使数据高速缓存行无效的操作(并且如果数据被修改,则获取数据)。该操作可被称为“后窥探”操作。另外,l2高速缓存14可检测协处理器加载/存储操作的高速缓存丢失,并且可从另一个低级高速缓存或主存储器获取丢失的高速缓存行以完成请求。
[0046]
高速缓存行可以是高速缓存中的分配/解除分配单元。也就是说,高速缓存行内的数据可作为一个单元在高速缓存中分配/解除分配。高速缓存行的大小可变化(例如,32字节、64字节、128字节,或者更大或更小的高速缓存行)。不同高速缓存可具有不同高速缓存行大小(例如,在一个实施方案中,cpu处理器12中的数据高速缓存可具有比l2高速缓存14更小的高速缓存行大小)。每个高速缓存可具有任何期望的容量、高速缓存行大小和配置。l2高速缓存14可以是高速缓存分级结构中的任何级别(例如,cpu处理器12的最后一级高速缓存(llc),或cpu处理器12/协处理器10与主存储器系统之间的任何中间高速缓存级别)。cpu高速缓存与l2高速缓存14之间可存在更多级别的高速缓存,并且/或者l2高速缓存14与主存储器之间可存在附加级别的高速缓存。
[0047]
需注意,在一个实施方案中,协处理器10可以简化形式示出,并且可包括图1中未示出的附加部件。例如,协处理器10可包括流水线,以解码协处理器操作、对操作数执行寄存器重命名、使用大于架构化大小的x存储器24和y存储器26的物理存储器大小,以及不按顺序地执行计算操作。协处理器10的任何具体实施可用于各种实施方案中。
[0048]
需注意,在一些实施方案中,协处理器10可由多个cpu处理器12共享。例如,协处理器10可为每个cpu处理器12在x存储器24、y存储器26和z存储器28中保持单独的上下文。另选地,当不同cpu处理器12向协处理器10发布协处理器操作时,可在协处理器10中交换上下文。
[0049]
图2是协处理器10的一个实施方案的更详细框图。在例示的实施方案中,协处理器10包括指令缓冲器22、解码单元34、存储器访问接口32、操作(op)队列38、数据缓冲器40和
执行电路30。执行电路30包括被布置为行和列的网格的处理元件(pe)42阵列。指令缓冲器22被耦接以接收待由协处理器10执行的指令,并且耦接到解码单元34。解码单元34耦接到操作队列38,该操作队列进一步耦接到数据缓冲器40。数据缓冲器40耦接到执行电路30。操作队列38包括调度器电路36。数据缓冲器40耦接到存储器访问接口32,并且存储器访问接口32和数据缓冲器40两者耦接到l2高速缓存14。
[0050]
通常,协处理器10可被配置为接收指令缓冲器22中的指令。解码单元34可将这些指令解码成一个或多个操作(op)以供执行。这些操作可包括在执行电路30中执行的计算操作以及(经由l2高速缓存14)将数据从存储器读取到数据缓冲器40中并且将数据从数据缓冲器40存储到存储器的存储器操作。在一个实施方案中,数据缓冲器40可以是执行电路30所执行的计算操作的操作数的源,并且结果可被存储在执行电路30内的分布式z存储器28(图2中未示出)中。即,数据缓冲器40可包括x存储器24和y存储器26的存储装置。可由解码单元34使用寄存器重命名技术将来自x存储器24和y存储器26的条目重命名为数据缓冲器40中的各种条目。在该实施方案中,可不对z存储器28进行重命名。
[0051]
如先前所提及的,协处理器10可被设计为执行指令,这些指令指定操作数的矢量以及要对操作数执行的计算(算术/逻辑单元(alu))操作。例如,可支持各种类型的相乘/累加操作。可对操作数的矢量并行执行这些乘法。因此,执行电路30包括处理元件(pe)42阵列。pe 42阵列可包括水平方向(行)和垂直方向(列),如图2所示。每个pe 42可从操作的一个或多个输入矢量元素接收操作数,并且可对操作数执行指定的计算操作以产生结果。一些操作可指定结果矢量,并且pe 42的子集可用于此类操作。其他操作可指定结果阵列(或矩阵)。例如,在一个实施方案中,对输入操作数的矢量的相乘

累加操作可产生矢量的外积。对于此类实施方案而言,可在矩阵模式下执行其他相乘

累加操作。至多所有pe 42可用于矩阵模式操作。然而,在一些情况下,甚至结果阵列也可能不使用所有pe 42。例如,在一些情况下,可能并不使用输入操作数的所有矢量。
[0052]
在一个实施方案中,对于矩阵操作而言,可将来自y存储器26的操作数的矢量作为“列”提供给执行电路30,并且可将来自x存储器24的操作数的矢量作为“行”提供给执行电路30。因此,可将来自x存储器24的给定矢量元素供应给pe 42的列,并且可将来自y存储器26的给定矢量元素供应给pe 42的行以进行矩阵操作。由于支持不同操作数大小,因此供应给给定pe 42的矢量元素的数量取决于指令的操作数大小。例如,如果执行电路30在一行或一列中具有n个pe 42,则每个pe 42可接收来自条目的数据的1/n。数据中的操作数的数量以及因此对于给定指令而言pe 42所执行的操作的数量可取决于指令的操作数大小。在一个实施方案中,最大操作数大小可以是来自条目的数据的1/n(例如,每个pe 42可对最大操作数大小的一个操作数进行操作)。操作数大小按2的幂变化,因此每个pe 42可对第二大操作数大小的两个操作数、第三大操作数大小的四个操作数等进行操作。
[0053]
解码单元34可对这些指令进行解码以生成操作队列38的操作,并且可确定可由给定操作使用的pe 42。如先前所提及的,矢量操作可使用pe42的一行。矩阵操作可使用pe 42的所有行和列。然而,两种类型的指令均可支持掩蔽(如发送到协处理器10的指令中所指定的)。对于矢量操作而言,可存在单个掩模,该单个掩模确定哪些矢量元素在源矢量中为活动的。对于矩阵操作而言,每个操作可存在水平掩模和垂直掩模。水平掩模可指示如图2所示的水平方向上的可评估给定操作的pe 42,并且垂直掩模可指示如图2所示的垂直方向上
的可评估给定操作的pe 42。因此,水平掩模可识别哪些x矢量元素是活动的,并且垂直掩模可指示哪些y矢量元素是活动的。这两个掩模的相交处可确定哪些pe 42将评估何时执行该操作。例如,每个掩模可包括给定方向上的每个pe 42的位。该位可被设定为指示pe 42将评估该操作并且清除以指示pe 42将不会评估该操作。因此,例如,8
×
8的pe 42阵列可包括8位的水平掩模和8位的垂直掩模。在另一个实施方案中,给定pe元件可对至少一些操作数大小的多个输入矢量元素进行操作。对于此类实施方案而言,可为每个元素定义掩模。在各种实施方案中,可支持掩模的任何组合。
[0054]
基于这些掩模、操作的操作数大小和操作的类型/模式(矢量或矩阵),可为每个操作(图2中的操作队列38中的每个操作队列条目中的hazardmask)生成一个或多个冒险掩模值。冒险掩模值可以是由该操作更新的z存储器28的部分的指示,并且可用于确保调度器36在调度操作时遵守操作之间的写后读和读/写后写依赖性。pe 42可实现流水线,可在该流水线的终点处更新z存储器28。因此,当确保依赖操作在前一操作写入条目之后读取z存储器28时,可清除写后读依赖性。对于相乘

累加操作而言,可在累加操作开始时读取z存储器28并且可在累加操作结束时写入该z存储器。因此,一旦确保依赖操作不会在前一操作到达累加流水线的终点之前到达累加流水线的起点,就可清除该依赖性。读/写后写依赖性可在前一操作发布时清除,这是由于前一操作将在依赖操作到达写入阶段之前到达读取阶段和写入阶段。
[0055]
除了冒险掩模值和操作本身之外,每个条目还可存储识别由该指令更新的z存储器条目的目的地id。在一些实施方案中,目的地id仅用于矢量操作,以确定z的哪一行被更新。在其他实施方案中,目的地id用于矢量操作和矩阵操作两者。各种实施方案将在下文进行更详细的描述。
[0056]
操作队列38存储这些操作,直到这些操作可由执行电路30执行(如由调度器电路36确定)。图2中示出了两个示例性操作队列条目,但其他实施方案中可支持任何数量的条目。每个条目可包括操作、与z存储器28相对应的目的地id以及分别与x存储器24和y存储器26相对应的源id。源id可以是重命名寄存器id,并且可由解码单元34中的重命名硬件保持重命名寄存器至架构化x和y存储器条目的映射。通常,在x存储器24或y存储器26是写入(例如,加载指令、从z提取的指令,或在一些实施方案中,各种其他移动指令)的目的地时分配新的重命名。另外,为每个操作示出了hazardmask数据。各种其他信息可被存储在每个操作队列条目中以用于如各种实施方案中所期望的其他目的,被示出为每个条目中的状态字段。在一个实施方案中,操作队列条目中的hazardmask数据和新解码的操作的对应数据可用于在将新解码的操作写入操作队列38时生成新解码的操作的一个或多个依赖性矢量。依赖性矢量可包括每个操作队列条目的位,从而指示该操作是否因z存储器冒险而依赖于该操作队列条目中的操作。这些操作可等待例如其源操作数准备好并等待依赖性矢量清除,并且之后可由调度器电路36选择以便发布到执行电路30。其他条件也可控制发布,例如较旧的操作可比较新的操作更有利于发布等。调度器电路36可负责确定哪些操作可用于发布并且调度这些操作以便发布。
[0057]
发布的操作可从数据缓冲器40读取其源操作数并且前进到执行电路30中的pe 42以便执行。pe 42可执行指定的操作,从而生成结果并且将结果写入在pe 42处实现的本地z存储器位置。
[0058]
存储器访问接口32可包括存储器操作队列46和存储器调度器电路44。与调度器电路36类似,存储器调度器电路44可等待存储器操作的源操作数准备好并且发布存储器操作。存储器调度器电路44可确保至相同地址的存储器操作按程序顺序发布(例如,使用依赖性矢量或基于比较由存储器操作访问的地址的其他机制)。源操作数可以是用于存储存储器操作的存储数据。加载存储器操作可不具有特定源操作数,这是由于在该实施方案中存储器地址由cpu处理器12提供。然而,仍可基于地址依赖性(如果有的话)来调度加载存储器操作。这些存储操作可从数据缓冲器40读取其源操作数,该数据缓冲器可将数据连同来自存储器访问接口32的存储器操作/地址一起传输到l2高速缓存14。对于加载操作而言,l2高速缓存14可将数据提供给数据缓冲器40(以及要写入该数据的地址,存储器访问接口32可在传输加载操作时将该地址传输到l2高速缓存14)。加载操作数据到数据缓冲器40的写入也可被传送到操作队列38/解码单元34,以指示那些存储器位置中的源数据现已可用。
[0059]
pe 42的8
×
8网格的示例用于以下实施方案中。作为另外的示例,操作数的x和y矢量可以是64字节的数据。即,x存储器24和y存储器26中可用作操作数的条目可为64字节。在各种实施方案中,x存储器24和y存储器26可实现任何数量的条目。其他实施方案可使用更大或更小的条目。该示例还可包括8字节(64位)的最大结果大小(对于给定pe 42而言)。因此,来自pe阵列的最大总结果可为512字节。在另一个实施方案中,给定pe 42的最大结果大小可为16字节(128位),并且最大总结果可为1024字节。在一个具体实施中,一些指令可通过多次传递经过pe阵列来执行并且可通过多次传递来生成来自每个pe 42的至多64字节的结果。z存储器28可以是512字节的倍数,以允许将多个结果存储在其中。在一个示例中,z存储器28可具有4096字节(4千字节)。因此,给定pe 42可能能够更新z存储器28中的八个64位(8字节)位置。因此在每个pe 42处实现的z存储器28的部分可以是八个64字节条目。根据给定指令的操作数大小,这些条目可被不同地寻址,如下文将更详细地解释。需注意,其他实施方案可改变pe 42的网格的大小和配置、操作数大小、x、y和z存储器的量等。
[0060]
图3是示出8
×
8pe 42的网格以及对于矩阵模式指令而言数据的分布的框图。在图3中,x操作数跨网格的顶部示出,并且被表示为操作数元素x0至x7。在该实施方案中,x0至x7中的每一者可以是64字节x操作数中的8字节。即,基于其在网格内的位置,给定pe 42可从x操作数接收x0至x7元素中的一者。更具体地,如图3所示的pe 42的给定列可接收相同的x元素。类似地,y操作数沿着图3中的网格的左边缘示出,并且被表示为y0至y8,其中y0至y7中的每一者可以是64字节y操作数中的8字节。例如,根据指令的操作数大小,8字节操作数元素可以是单个8字节矢量元素、两个4字节矢量元素或四个2字节矢量元素。
[0061]
图4是示出8
×
8pe 42的网格以及对于矢量模式指令而言数据的分布的框图。更具体地,在一个实施方案中,当两个矢量指令使用网格的不同行(例如,目标z存储器位置位于网格的不同行中)时,协处理器10同时支持这两个矢量指令的发布。因此,可将两组x和y操作数路由到pe42。更具体地,pe 42的每列可接收用于每个操作的x和y操作数元素(例如,图4中的pe的最左列的用于一个矢量操作的x0和y0以及用于另一个矢量操作的x0'和y0')。
[0062]
图5至图7示出了执行电路30的各种实施方案。在例示的实施方案中,可将pe阵列分成具有各种配置的pe组,如下文更详细地讨论。也可实现其他实施方案;例示的实施方案并非意在是穷尽的。例如,给定pe组中的pe 42的数量、pe组内的pe 42的布置以及执行电路30中的pe组的数量可改变。
[0063]
图5是执行电路30的一个实施方案的更详细框图。在例示的实施方案中,执行电路30包括一组pe组50以及耦接到pe组50的第一控制电路52。
[0064]
pe组50中的一个pe组50在图5中以分解图示出,并且其他pe组50可为类似的。更具体地,每个pe组50可如分解的pe组50中所示的那样配置。在分解图中,pe组50包括pe 42阵列。pe 42阵列可实现形成执行电路30的pe 42总体阵列的一部分。在例示的实施方案中,每个pe组50包括pe 42的4
×
4阵列,因此在该实施方案中,pe 42的总体阵列是8
×
8,八行乘八列,总共有64个pe。每个pe组50可包括第二控制电路54,该第二控制电路耦接到该pe组50中的pe 42。
[0065]
pe 42中的一个pe 42在图5中以分解图示出,并且其他pe 42可为类似的。更具体地,pe 42中的每个pe 42可如分解的pe 42中所示的那样配置。在该分解图中,pe 42包括alu电路58、本地z存储器60和第三控制电路56。alu电路58通常可包括执行alu操作的电路,该alu操作可由为协处理器10定义的指令来指定。在一个实施方案中,协处理器10支持融合乘加(或相乘

累加)操作,因此alu电路58包括乘法器62和加法器64。可将x和y操作数提供给乘法器62,该乘法器可使这些操作数相乘。加法器64可接收乘法结果和z操作数,该z操作数可以是本地z存储器60的条目中的一个条目的内容。加法器64可使乘法结果和z操作数相加以产生结果。可将该结果写回到从其读取z操作数的z存储器60条目。因此,通过多个指令,可在z存储器60的条目中累加多个乘法的结果。一些实施方案可支持使用附加指令仅执行仅乘法或仅执行加法。更进一步地,其他实施方案可支持其他alu操作,诸如逻辑操作(“与”、“或”、“非”等)、移位操作、旋转操作等。此类实施方案可为此类指令采用附加alu电路58。
[0066]
控制电路52、54和56可各自实现各种控制操作以实现执行电路30中的指令的总体执行。例如,控制电路52可负责为控制计时以及x和y操作数到pe组50的复用/数据路由。例如,矩阵指令可将相同x操作数元素提供给给定列中的每个pe 42,并且将相同y操作数元素提供给给定行中的每个pe 42,如图3所示。另一方面,矢量指令将不同y操作数元素和不同x操作数元素提供给正执行矢量操作(例如,将相同x和y操作数元素供应给图4所示的每个列)的给定行中的每个pe 42。控制电路52可提供该控制以路由用于每个指令的正确操作数元素。在一个实施方案中,可从给定x或y条目内的任何字节偏移开始读取x和y操作数元素(并且可按各种偏移从给定条目和下一条目读取其余操作数)。控制电路52可负责使第一操作数与pe 42的第一行或第一列对齐并且使其余操作数对齐。另选地,该对齐可由数据缓冲器40中或数据缓冲器40与执行电路30之间的电路管理。
[0067]
控制电路54可负责控制pe组50中的哪些pe 42是活动的。例如,如先前所提及的,一些实施方案可支持用于给定指令的输入矢量元素的掩蔽,作为向协处理器10发布的指令本身的一部分。在此类实施方案中,可由控制电路54处理这些掩模以致使各种pe 42为活动的(执行用于该指令的指定操作并且针对未被掩蔽的输入矢量元素来更新本地z存储器60中的一个或多个目标z条目)或不活动的(不执行操作,并且不针对被掩蔽的输入矢量元素来更新本地z存储器60)。
[0068]
控制电路56可负责控制alu电路58的流水线以及本地z存储器60的读取和写入。本地z存储器60包括给定pe 42能够更新的z存储器位置。即,通过可提供给协处理器10的任何指令编码,z存储器60包括将由给定pe 42更新的位置。此外,任何其他pe 42可能都不能够
更新本地z存储器60中的位置。
[0069]
在图5中,以虚线形式示出了附加z存储器60。在一个实施方案中,协处理器10可支持多个上下文。本地z存储器60可具有用于每个上下文的位置。因此,例如,可存在如图5所示的两个上下文。然而,其他实施方案可支持超过两个上下文。向协处理器10发布的给定指令可包括上下文id以在用于给定指令的上下文之间进行选择。冒险也可考虑该上下文(例如,可能未在不同上下文中的指令之间检测到冒险)。在一个实施方案中,每个可共享协处理器10的处理器可存在一个上下文。
[0070]
除了将数据供应给加法器64并且从加法器64接收数据之外,pe 42还可提供数据输出(例如,图5中指向右侧的箭头)。可将数据输出提供回到数据缓冲器40以写入提取指令的结果(该提取指令将数据从z存储器28移动到x存储器24或y存储器26)。数据输出还可用于存储z指令,该存储z指令将数据从z存储器28写入主存储器。在一个实施方案中,解码单元34可将加载z和存储z指令解码成两个操作:使数据在存储器与暂存寄存器之间移动的加载/存储操作,以及使数据在暂存寄存器与z存储器之间移动的移动操作。从本地z存储器60到数据缓冲器40的输出可支持数据从z存储器到暂存寄存器的移动。下文将相对于图10提供附加的细节。
[0071]
图6是示出执行电路30的另一个实施方案的框图。在该实施方案中,pe阵列可由pe组66的列以及控制电路52形成。pe组66中的一个pe组66在图6中以分解图示出,并且其他pe组66可为类似的。更具体地,每个pe组66可如分解的pe组66中所示的那样配置。图6中针对一个pe组66示出了pe 42的两列,因此四个pe组66提供了pe 42的8
×
8网格。对于每个pe组66而言,也包括控制电路54。
[0072]
pe 42中的一个pe 42在图6中以分解图示出,并且其他pe 42可为类似的。更具体地,pe 42中的每个pe 42可如分解的pe 42中所示的那样配置。pe 42可与图5所示的pe 42相同,并且上文针对图5和pe 42的讨论也适用于图6。
[0073]
图7是执行电路30的又一个实施方案的框图。在该实施方案中,pe阵列可由pe组68的行以及控制电路52形成。pe组68中的一个pe组68在图7中以分解图示出,并且其他pe组68可为类似的。更具体地,每个pe组68可如分解的pe组68中所示的那样配置。图7中针对一个pe组68示出了pe 42的两行,因此四个pe组68提供了pe 42的8
×
8网格。每个pe组68中也包括控制电路54。
[0074]
pe 42中的一个pe 42在图7中以分解图示出,并且其他pe 42可为类似的。更具体地,pe 42中的每个pe 42可如分解的pe 42中所示的那样配置。pe 42可与图5所示的pe 42相同,并且上文针对图5和pe 42的讨论也适用于图7。
[0075]
pe组50、66或68在一定程度上可为独立的,这是由于z存储器位于每个pe 42的本地并且控制电路也分布到pe组和pe。因此,pe组50、66或68可以以一定灵活性物理地布置在集成电路上,从而总体上可便于协处理器10的实现。例如,可在pe组50、66或68之间创建空间以减轻至pe组的布线拥塞。可使pe组50、66或68旋转或以其他方式取向以适配在可用空间中等。
[0076]
基于图3和图4,pe组50、66和68可具有不同布线要求。例如,给定pe组50对于矩阵模式而言可接收32字节的x操作数元素和32字节的y操作数元素,并且对于矢量模式而言可接收2组32字节的x操作数元素和2组32字节的y操作数元素。因此,对于pe组50而言,最坏情
况下的布线要求是用于x操作数元素的512根导线(矢量模式,2
×
32
×
8)以及用于y操作数元素的512根导线(矢量模式2
×
32
×
8)。给定pe组66对于矩阵模式而言可接收16字节的x操作数元素和64字节的y操作数元素,并且对于矢量模式而言可接收2组16字节的x操作数元素和2组16字节的y操作数元素。因此,peg组66的最坏情况下的布线要求是用于x操作数元素的256根导线(矢量模式,2
×
16
×
8)以及用于y操作数元素的512根导线(矩阵模式,64
×
8)。给定pe组68对于矩阵模式而言可接收64字节的x操作数元素和16字节的y操作数元素,并且对于矢量模式而言可接收2组64字节的x操作数元素和2组64字节的y操作数元素。因此,peg组68的最坏情况下的布线要求是用于x操作数元素的1024根导线(矢量模式,2
×
64
×
8)以及用于y操作数元素的1024根导线(矩阵模式,2
×
64
×
8)。
[0077]
除了基于布线要求的变化之外,支持尺寸减小的网格的实施方案(例如,如下文针对图15至图17所描述)还可在完成矢量模式指令或矩阵模式指令所需的传递数量方面具有折衷。因此,不同实施方案可选择将不同形式用于pe组,从而权衡给定实现所期望的各种优点和成本。
[0078]
图8是协处理器10的z存储器冒险的一个实施方案的框图。在例示的实施方案中,z存储器28被寻址为64行数据,因此给定协处理器指令可包括6位目的地标识符(图2中的destid)。对于4千字节z存储器28而言,每行可包括64字节的数据。由于存在8行8个pe 42,因此每个pe 42可包括八行z存储器28,并且可包括该行的8个字节,从该行的开始偏移包括pe 42在内的列数。
[0079]
根据操作数大小,给定矩阵指令可读取和/或更新z存储器28的可变数量的行,因为操作的数量随操作数大小减小而增加。即,x存储器24和y存储器26的给定条目可包括足够的存储空间以将协处理器10所支持的最大大小的操作数提供给一列或一行中的每个pe 42(例如,在一个实施方案中,8个操作数)。因此,可在执行具有最大操作数大小的指令时产生64个结果。第二大操作数大小是最大操作数大小的一半(这是由于操作数大小以2的幂来关联)。因此,在x和y存储器中的相同空间中提供两倍的操作数。由于x中的每个操作数乘以y中的每个操作数,因此可执行四倍的操作,从而产生四倍的结果。调整更小大小的结果之后,消耗两倍的空间来写入结果(并且也供应值以用于累加)。类似地,第三大操作数大小是最大操作数大小的四分之一并且产生16倍的结果,从而占据该空间的四倍等。矢量操作读取/写入z存储器28的一行。加载/存储指令影响一行或loadzi/storezi指令的2个相邻行。指令集还可支持提取指令,该提取指令将数据从z存储器28移动到x存储器24或y存储器26。在一个实施方案中,提取到x的指令允许z的一行移动到x的一行,并且因此影响一行。提取到y的指令可具有操作数大小并且可提取多行,这与类似大小的alu操作类似。在一个实施方案中,相乘

累加操作可以是64位、32位或16位的浮点值(fp 64、fp 32或fp 16)或者16位的整数值(mac 16)。
[0080]
指令集可指定z存储器28的为累加操作数读取并由各种大小的结果写入的条目以规则图案在z存储器28中分开,如表70中间一列中所示。即,64位操作数大小每八行更新一次,32位操作数大小每四行更新一次,16位操作数大小每两行更新一次。在一个实施方案中,指令集还支持具有32位累加的16位操作数大小,其更新z存储器28的每一行。要更新的行基于destid。即,第一结果所更新的行由destid指定,要更新的下一行是destid+更新之间的行数等。因此,根据所更新的行数,仅需要对目的地id的一部分考虑冒险。如果每八行
更新一次,则destid的三个最低有效位识别由该指令读取/更新的行。如果每四行更新一次,则destid的两个最低有效位识别所读取/更新的行等。因此,如表的最开始四行中的hazardmask列中所示,可生成具有最高有效位中的0和最低有效位中的1(或者如果读取/更新每一行,则全为0)的掩模。当读取/更新单个行时,整个destid用于冒险(全为1的hazardmask),并且当更新两个相邻行时,destid的最低有效位不用于冒险(表70的最后三行)。
[0081]
解码单元34可在解码指令时为每个指令生成hazardmask,并且可将hazardmask与该指令一起写入操作队列38。另外,正被写入的指令的hazardmask以及已经处于操作队列38中的指令的hazardmask可用于比较正被写入的指令的destid和操作队列38中的指令的destid以检测冒险。更具体地,正被写入的指令的hazardmask可与队列中的给定指令的hazardmask进行逻辑“与”运算,并且对应掩模可用于掩蔽已被写入的指令的destid和给定指令的destid。可比较掩蔽的destid的相等性以检测冒险,即正被写入的指令对给定指令的依赖性(公式72)。可针对队列中的每个指令和正被写入的指令来评估公式72以产生用于正被写入的指令的z冒险依赖性矢量。调度器电路36可阻止正被写入的指令的调度,直到z冒险依赖性矢量中的设定位所识别的指令已被发布并且在足够远处清除流水线以清除该冒险。对于读/写后写冒险而言,前一指令的发布足以清除该冒险。对于写后读冒险而言,前一指令需要已前进至少一定数量的周期,这些周期存在于流水线中的用于累加的z存储器读取(例如,在一个实施方案中,相加流水线的第一阶段)与写入z存储器的阶段(例如,在一个实施方案中,相加流水线的最后阶段)之间。
[0082]
图9是协处理器10的z存储器冒险的另一个实施方案的框图。在例示的实施方案中,z存储器28被寻址为行数和每行的存储体数量(这取决于z操作数大小)。除了使用16位x/y操作数但32位累加的指令(在这种情况下,z操作数大小可为32位)之外,z操作数大小可与x/y操作数大小相同。在图9中,表74示出了各种元素大小。在该实施方案中,还支持8位元素大小。当元素大小减小时,z存储器28的行数增加并且存储体数量减少。因此,64位元素大小被寻址为具有8个存储体/行的8行;32位元素大小被寻址为4个存储体/行的16行;16位元素大小被寻址为2个存储体/行的32行,并且8位元素大小被寻址为每行具有一个存储体的64行。
[0083]
在物理上,z存储器28不会因寻址模式不同而变化。相反,存储体映射到现有z存储器28的交替条目。因此,对于本地z存储器60而言,8个存储体映射到z存储器60的8个条目并且可根据该指令所指定的存储体编号来写入单个条目(例如,destid可以是存储体编号或者可包括存储体编号)。对于四存储体情况而言,最开始的四个条目映射到四个存储体,并且最后四个条目重复该映射(例如,条目4是存储体0,条目5是存储体1等)。因此该指令可根据存储体编号来写入两个本地z存储器条目。对于双存储体情况而言,存储体映射到交替条目并且可根据存储体编号来写入四个条目。对于单存储体情况而言,可写入本地z存储器60的所有条目。
[0084]
因此用于图9的实施方案的hazardmask可包括两个掩模:识别由该指令写入的z存储器60条目的zrowmask,以及识别执行电路30中的pe 42的哪些行对于该指令是活动的perowmask。
[0085]
可基于z操作数大小(其指示该掩模中的1的数量)来生成zrowmask。存储体编号指
示该掩模中的1的位置。因此,如表74的zrowmask列中所示,zrowmask可具有默认值,并且可基于为该指令指定的存储体编号(在该实施方案中,0至存储体数量

1)来右移。在该实施方案中,存储体编号可以是destid。因此,例如,用于存储体1的zrowmask对于64位操作数大小而言可为01000000、对于32位操作数大小而言可为01000100、对于16位操作数大小而言可为01010101以及对于8位操作数大小而言可为11111111。对于8位操作数大小而言,读取/写入所有条目,并且因此不存在移位。
[0086]
对于矩阵操作而言,所有行都可为活动的,因此perowmask可全为1,并且对于矢量操作(更新一行)而言,perowmask对于活动的行可具有单个设定位。在图9中的表74下面示出了每种情况的perowmask(附图标号78)。在一个实施方案中,用于协处理器10的指令还可经由掩模来指定pe的活动行和列。在一个实施方案中,可基于指令的行掩模来调整perowmask以使该冒险更准确。然而,其他实施方案不需要考虑行掩模,因为该冒险将在没有行掩模的情况下创建准确结果(但可使一些指令延迟长于所需时间)。
[0087]
公式76示出了基于正被写入操作队列38的指令和已经处于操作队列38中的给定指令的zrowmask和perowmask的冒险检测。如果perowmask具有至少一个公共设定位并且zrowmask具有至少一个公共设定位,则可检测到冒险。这可通过以下方式表示:对相应掩模进行逻辑“与”运算,并且对结果进行逐位逻辑“或”运算以检测结果中的至少一个设定位。与上文针对图8的讨论一样,如果公式76的结果是冒险,则可在正被写入的指令的依赖性矢量中设定与给定指令相对应的位。针对正被写入的指令和已经处于操作队列38中的每个指令来评估公式76可用于生成依赖性矢量,如先前所讨论。
[0088]
现在转向图10,示出了一个实施方案的流程图,该流程图示出了加载和存储指令对z存储器28的处理。由于z存储器28分布到pe 42(如先前所述),因此以z存储器28为目标的加载/存储指令可发布到执行电路30,这不同于以x存储器24和y存储器26为目标的加载/存储指令(其使用数据缓冲器40来完成)。在一个实施方案中,解码单元34可检测加载/存储到z存储器的指令并且可将它们解码成两个操作:使数据在暂存寄存器与主存储器之间移动的加载/存储操作(这由存储器访问接口32执行),以及使数据在暂存寄存器与z存储器28之间移动的移动操作(这由pe 42执行)。暂存寄存器可以是这样的寄存器,其在逻辑上与x存储器24和y存储器26分开,但可被重命名到数据缓冲器40中的条目,作为x存储器24和y存储器26的补充。为协处理器10写入指令的程序员可不指定暂存寄存器,从这个意义上说,暂存寄存器可不为架构化的。然而,可由协处理器10硬件使用暂存寄存器。
[0089]
更具体地,如果解码单元34解码加载z指令(决策框80,“是”分支),则解码单元34可生成具有与来自cpu处理器12的加载z指令一起提供的存储器地址以及由解码单元34分配为目的地的暂存寄存器的加载操作,之后是使用与加载z指令一起提供的目的地id将数据从暂存寄存器移动到z寄存器28的移动操作(框82)。与重命名x和y存储器条目类似,可将暂存寄存器重命名到数据缓冲器40中的可用条目。解码单元34可将加载操作发送到存储器访问接口32中的存储器操作队列46(框84),并且可将移动操作发送到操作队列38(框86)。存储器访问接口34可按与其他加载操作类似的方式执行该加载操作,从而在l2高速缓存14中未存储该数据时访问l2高速缓存14并且允许l2高速缓存14获得该数据。可将l2高速缓存14返回的数据写入数据缓冲器40中的被分配为暂存寄存器的重命名的条目。响应于该写入,可将数据缓冲器条目标记为有效的,这可允许发布移动操作。移动操作可从暂存寄存器
读取该数据,并且将该数据写入目标z存储器位置。
[0090]
如果解码单元34解码存储z指令(决策框88,“是”分支),则解码单元34可生成使用与加载z指令一起提供的目的地id将数据从z寄存器28移动到由解码单元34分配的暂存寄存器的移动操作(框90),之后是具有与来自cpu处理器12的存储z指令一起提供的存储器地址和作为源的暂存寄存器的存储操作。与重命名x和y存储器条目类似,可将暂存寄存器重命名到数据缓冲器40中的可用条目。解码单元34可将存储操作发送到存储器访问接口32中的存储器操作队列46(框92),并且可将移动操作发送到操作队列38(框94)。可在任何z冒险已清除时执行移动操作,并且可从pe 42输出该数据并将该数据写入数据缓冲器40。响应于该写入,可将数据缓冲器条目标记为有效的,这可允许发布存储操作(假设满足任何存储器排序约束)。存储操作可从暂存寄存器读取该数据,并且例如通过以下方式将该数据写入目标主存储器位置:将该数据传输到l2高速缓存14并且允许l2高速缓存14在本地和/或向主存储器完成该写入,这取决于受影响的高速缓存行是否在l2高速缓存14中缓存以及基于l2高速缓存14的设计。如果该指令不是加载或存储z指令,则解码单元34可正常地解码该操作(框96)。
[0091]
现在转向图11,示出了协处理器10的另一个实施方案。图11的实施方案通常可类似于图2的实施方案,并且针对图2的讨论通常可适用于图11。图11突出显示了操作队列38的操作队列条目中的不同数据,因此可组合图2和图11的实施方案。更具体地,操作队列条目在图11中包括旁路字段。hazardmask字段可以是每个条目中的状态的一部分。在图2中,旁路字段可以是状态的一部分。
[0092]
在一些情况下,对于某个操作而言,可旁路一个或多个流水线阶段。例如,就相乘

累加操作而言,一些指令可仅指定乘法,而不累加结果。此类操作可能在流水线的相乘阶段中(而不是在累加(相加)阶段中)是活动的。其他指令可仅指定累加(相加)操作,因此这些指令可能在相乘阶段中是不活动的,而可能在累加阶段中是活动的。其他指令(例如,作为加载/存储z指令的一部分的移动操作,或将数据从z移动到x或y存储器的提取指令)可在流水线中不执行操作(无操作),而是可仅将值读取或写入到z寄存器。此类指令可能在除读取或写入本地z存储器60之外的任何执行阶段中是不活动的。解码单元34可为这些操作生成旁路值,这指示执行流水线20的哪些执行阶段被给定操作旁路(该操作在这些阶段中不活动)。例如,每个操作可具有旁路字段中的bypassm和bypassa指示,这指示相乘阶段是否被旁路(bypassm活动)以及累加(相加)阶段是否被旁路(bypassa活动)。例如,bypassm和bypassa指示可以是位,这些位可被设定为指示旁路(旁路活动)并且清除以指示无旁路(旁路不活动,执行阶段活动)。在各种实施方案中,可使用设定和清除状态的相反意义,或可使用多位值。实现不同alu的实施方案也可包括与那些alu相对应的旁路指示。
[0093]
图12是实现旁路的一个实施方案的pe 42的框图。pe 42包括alu 58(例如,在该实施方案中,乘法器62和加法器64)、本地z存储器60和控制电路56。乘法器62被耦接以接收x和y操作数,这些x和y操作数被路由到用于该操作的pe 42以及用于该操作的目的地id(destid)。乘法器62可将destid以流水线的方式输送到加法器64以读取受该操作影响的z存储器条目,以及/或者写入如为该操作指定的z存储器条目。另选地,可将destid提供给控制电路56以读取/写入z存储器60。
[0094]
控制电路56也可被耦接以接收该操作的bypassm和bypassa指示,并且可被配置为
分别控制乘法器62和加法器64。如图12所示,控制电路56耦接到乘法器62和加法器64,并且也耦接到本地z存储器60。更具体地,如果bypassm指示是活动的,则控制电路56可致使乘法器62不对输入操作数执行乘法(例如,乘法器电路可不评估),并且可将操作数一直传递到加法器64。类似地,如果bypassa指示是活动的,则控制电路56可致使加法器电路64不评估。根据需要,实现不同alu 58的其他实施方案可包括用于alu 58的每个部件或alu 58的每个流水线的旁路指示。
[0095]
除了将数据提供给加法器64并且从加法器64接收结果之外,z存储器60还可耦接到数据缓冲器40以响应于移动操作或提取操作而提供数据。与数据缓冲器40的耦接可通过一个或多个流水线阶段和/或与其他pe42(例如,与该pe 42位于相同的列中的其他pe 42)复用,以将该数据提供给数据缓冲器40。在移动操作正将数据写入z存储器60(例如,作为loadz指令的一部分)的情况下,可在x操作数输入、y操作数输入中的一者上提供该数据(但在这种情况下,已根据分配到暂存寄存器的条目从数据缓冲器40读取该数据)。bypassm和bypassa指示可均被设定为阻止乘法器和加法器进行评估,并且可将该数据提供给z存储器60以便存储。
[0096]
图13是示出解码单元34的一个实施方案的操作以解码指令的流程图。虽然框以特定顺序示出,但也可使用其他顺序。框可在解码单元34中的组合式逻辑中并行执行。框、框的组合和/或流程图作为一个整体可在多个时钟周期内为流水线式的。解码单元34可被配置为实现图13所示的操作。
[0097]
解码单元34可解码该指令并且确定该操作是否排除乘法。例如,仅指定加法的指令可排除乘法。移动和提取指令可排除乘法。如果该指令排除乘法(决策框100,“是”分支),则解码单元34可设定所解码的操作的bypassm位(框102)。否则(决策框100,“否”分支),该指令包括乘法并且解码单元34可清除所解码的操作的bypassm位(框104)。类似地,解码单元34可解码该指令并且确定所解码的操作是否排除加法。例如,仅指定乘法的指令可排除加法。移动和提取指令可排除加法。如果该指令排除加法(决策框106,“是”分支),则解码单元34可设定所解码的操作的bypassa位(框108)。否则(决策框106,“否”分支),该指令包括加法并且解码单元34可清除所解码的操作的bypassa位(框110)。解码单元34可将该操作和旁路指示(例如,bypassm位和bypassa位)写入操作队列38。
[0098]
图14是示出执行电路30(以及更具体地,每个pe 42)的一个实施方案的操作以执行操作队列38所发布的操作的流程图。虽然框以特定顺序示出,但也可使用其他顺序。框可在执行电路30/pe 42中的组合式逻辑中并行执行。框、框的组合和/或流程图作为一个整体可在多个时钟周期内为流水线式的。执行电路30/pe 42可被配置为实现图14所示的操作。
[0099]
如果设定了bypassm位(决策框120,“是”分支),则pe 42可禁用乘法器62并且将所接收的操作数传递到加法器64(框122)。否则(决策框120,“否”分支),乘法器62可使操作数相乘并且将结果传递到加法器64(框124)。如果清除了bypassa位(决策框126,“否”分支),则pe 42可读取由destid指定的z存储器,将该值加到加法器输入(例如,如果清除了bypassm位,则为乘法结果,或者如果设定了bypassm位,则为一个或多个输入操作数),并且将结果写入由destid指定的z存储器(框130)。
[0100]
如果设定了bypassa位(决策框126,“是”分支),则pe 42可禁用加法器64(框128)。如果该操作是从z存储器移动或提取z(决策框132,“是”分支),则pe 42可读取由destid指
定的z存储器位置并且将结果转发到数据缓冲器40(框134)。如果该操作不是从z移动或提取z,则其要么是设定了bypassa位的计算操作,要么是移动至z的操作(决策框132,“否”分支)。在这种情况下,pe 42可将输入数据写入加法器64(例如,分别将乘法结果或输入操作数写入pe 42以用于计算操作或移动至z的操作)再写入本地z存储器60(框136)。
[0101]
图15是图5、图6和图7所示的执行电路30的各种实施方案以及分别实现单个pe组50、66或68的对应实施方案的框图。根据需要,其他实施方案可实现超过单个pe组50、66或68,但少于所有pe组50、66或68。
[0102]
可在期望更小的执行电路30时使用实现单个pe组50、66或68的实施方案。例如,在一个实施方案中,系统可包括高性能处理器集群和高功效处理器集群。高性能处理器集群可包括cpu处理器12,该cpu处理器被设计用于高性能,并且与高功效集群相比,在执行时可消耗相对较高量的功率。对于高性能集群而言,拥有高性能协处理器10可为期望的,因此可为高性能处理器集群实现完整执行电路30。然而,尺寸减小的执行电路30可用于高功效处理器集群中,以降低将协处理器10与cpu处理器12一起包括在高功效集群中的成本。高功效集群可不需要与高性能集群一样的高性能,这是由于cpu处理器12也可在高功效集群中以较低性能执行。
[0103]
当包括单个pe组50、66或68时,可将协处理器计算操作发布多次(多次传递经过pe组50、66或68)以完成完整操作。例如,可将矩阵模式指令重发四次,并且单个pe组50、66或68可在每次发布时执行总体操作的不同部分。从另一角度看,单个pe组50可用作矩阵模式计算操作的不同传递中的完整实现中的每个pe组50(左上、右上、左下和右下,在各种实施方案中采用任何顺序)。因此,在每次发布时,将由对应pe组(左上、右上、左下、右下)进行操作的矩阵模式指令的操作数的不同子集在给定发布期间供应给单个pe组50。例如,可读取数据缓冲器40,并且可从该数据中选择操作数的对应子集并将该子集供应给单个pe组50(例如,通过一组多路复用器等)。另选地,数据缓冲器40可被设计为基于单个pe组50的配置和正被发布的迭代来递送用于指令操作的总体操作数的子集。类似地,单个组66可用作完整实现的每个pe组66(并且可相应地选择操作数子集,例如对于一个迭代而言完整网格的列0和列1、对于另一个迭代而言完整网格的列2和列3等)。单个pe组68可用作完整实现的每个pe组68(并且可相应地选择操作数子集,例如对于一个迭代而言完整网格的行0和行1、对于另一个迭代而言完整网格的行2和行3等)。因此,对于图15所示的任何实施方案而言,可按照四次传递来执行矩阵模式操作。
[0104]
矢量模式操作使用pe阵列的一行。因此,矢量模式操作将针对单个pe组50发布两次,针对单个pe组66发布四次,或针对单个pe组68发布一次。在一个实施方案中,协处理器10的高功效实现可使用pe组68。然而,由于先前所提及的布线折衷,其他实施方案可选择将其他pe组50或66中的一者实现为单个pe组。
[0105]
需注意,虽然单个pe执行电路30中的pe组50、66、68通常可与完整执行电路30中的一个pe组50、66或68相同,但本地z存储器60的量可不同。更具体地,本地z存储器60可包括单个pe组50、66或68中的pe 42可更新的所有z存储器(例如,为完整执行电路30中的pe 42的四倍之多的z存储器60)。在每次传递以完成矩阵模式操作时,可基于在该传递期间评估的总体操作的部分来访问z存储器60的不同部分。
[0106]
协处理器10硬件可被设计为处理单个pe组实现或完整实现而没有显著变化。更具
体地,操作队列38中的调度器电路36可被设计为基于如何配置执行电路30来重发完成该操作所需的相同计算操作。图16中示出了可用于调度器电路36的一个实施方案中的示例性状态机。在例示的实施方案中,该状态机包括空闲状态140、发布状态142和重发状态144。空闲状态140可以是尚未从操作队列38发布操作时的状态。调度器电路36可监测操作队列38中的操作的冒险掩模和操作数准备度,并且可确定已准备好发布操作。当调度器电路36发布该操作时,该状态机转变为发布状态142。
[0107]
在发布状态142下,调度器电路36可确定该操作是否为多次传递操作。多次传递操作可以是向执行电路30发布超过一次的操作(例如,该操作进行经过执行电路30的超过一次传递以完成执行)。在一个实施方案中,如果实现完整执行电路30,则不存在多次传递操作。如果实现减小的执行电路30(例如,单个pe组实现),则矩阵模式操作可以是多次传递操作。每次传递可对用于该操作的操作数的总体集合的四分之一进行操作。在每次传递期间,可提供操作数的不同集合,其对应于在给定传递时评估的总体pe阵列的象限。在一个实施方案中,矢量模式操作可以是单个pe组实现中的单次传递(例如,如果使用pe组68)。在其他实施方案中,矢量模式操作也可以是多次传递(例如,pe组50中的2次传递、pe组66中的4次传递)。
[0108]
如果该操作不是多次传递,则该状态机可从发布状态142转变回空闲状态140并且可发布附加操作。如果该操作是多次传递,则该状态机可转变为重发状态144。调度器电路36可在处于重发状态144时重发用于附加传递的相同操作。一旦已发布附加传递,该状态机就可从重发状态144转变为空闲状态140。
[0109]
通常,调度器电路36可在每个发布周期发布至多一个操作。然而,如先前所提及的,矢量模式操作可在执行期间仅使用pe 42的单行。用于给定矢量模式操作的所选择的行是包含矢量模式操作所针对的z存储器60的行(基于destid)。其他行在矢量模式操作的执行期间是空闲的。
[0110]
在一个实施方案中,调度器电路36可被配置为在第二矢量模式操作使用空闲行中的一个空闲行的情况下使第二矢量模式操作与矢量模式操作融合。在其他实施方案中,可使使用执行电路30的不同行的多个矢量模式操作融合。经由图17的流程图示出了使两个矢量操作融合的示例。虽然框在图17中以特定顺序示出,但也可使用其他顺序。框可由调度器电路36中的组合式逻辑并行执行。调度器电路36可被配置为实现图17所示的操作。
[0111]
调度器电路36可识别准备发布并被选择用于通过任何其他准备操作(例如,操作队列38中的最旧准备操作)发布的操作。如果准备操作不是矢量模式操作(决策框150,“否”分支),则调度器电路36可能不能够使另一个操作与准备操作融合并且可在没有融合的情况下发布准备操作(框152)。如果准备操作是矢量模式操作(决策框150,“是”分支),则与另一个矢量模式操作的操作融合可为可能的。如果不存在另一个准备矢量模式操作(决策框154,“否”分支)或如果存在另一个准备矢量模式操作但其不使用pe 42的不同行(决策框154,“是”分支,以及决策框156,“否”分支),则融合为不可能的并且调度器电路36可在没有融合的情况下发布准备操作(框152)。如果存在另一个准备矢量操作并且该操作使用与初始准备矢量操作的pe的不同行(决策框154和156,“是”分支),则调度器电路36可发布融合操作(框158)。
[0112]
除了被设计为检测操作融合的调度器电路36之外,也可包括一些附加硬件电路以
从数据缓冲器40读取用于这两个矢量操作的操作数并且将这些操作数路由到pe 42的正确行。上图4中示出了用于操作融合的布线。
[0113]
图18是系统200的一个实施方案的框图。在例示的实施方案中,系统200包括耦接到一个或多个外围设备204和外部存储器208的集成电路(ic)202的至少一个实例。提供了电源206,其向ic 202供应供电电压以及向存储器208和/或外围设备204供应一个或多个供电电压。ic 202可包括cpu处理器12的一个或多个实例以及协处理器10的一个或多个实例。在其他实施方案中,可以为多个ic提供cpu处理器12和/或协处理器10的实例。
[0114]
根据系统200的类型,外围设备204可包括任何期望的电路。例如,在一个实施方案中,系统200可以是计算设备(例如,个人计算机、膝上型计算机等)、移动设备(例如,个人数字助理(pda)、智能电话、平板电脑等)、或能够受益于协处理器10的专用计算设备(例如,神经网络、lstm网络、其他机器学习引擎,包括实现机器学习的设备等)。在系统200的各种实施方案中,外围设备204可包括用于各种类型的无线通信的设备,诸如wifi、蓝牙、蜂窝、全球定位系统等。外围设备204还可包括附加存储装置,包括ram存储装置、固态存储装置或磁盘存储装置。外围设备204可包括用户界面设备,诸如显示屏,其包括触摸显示屏或多触摸显示屏、键盘或其他输入设备、麦克风、扬声器等。在其他实施方案中,系统200可为任何类型的计算系统(例如,台式个人计算机、膝上型电脑、工作站、网络机顶盒等)。
[0115]
外部存储器208可包括任何类型的存储器。例如,外部存储器208可为sram、动态ram(dram)(诸如同步dram(sdram))、双倍数据速率(ddr、ddr2、ddr3等)sdram、rambus dram、低功率版本的ddr dram(例如lpddr、mddr等)等等。外部存储器208可包括存储器设备可被安装到的一个或多个存储器模块,诸如单列直插内存模块(simm)、双列直插内存模块(dimm)等。另选地,外部存储器208可包括以芯片上芯片或封装上封装具体实施被安装在ic 202上的一个或多个存储器设备。
[0116]
图19是计算机可访问存储介质210的一个实施方案的框图,示出了该介质存储ic 202的电子描述(附图标号212)。更具体地,该描述可包括至少协处理器10和/或cpu处理器12。一般来讲,计算机可访问存储介质可包括在使用期间能够被计算机访问以向计算机提供指令和/或数据的任何存储介质。例如,计算机可访问存储介质可包括诸如磁性或光学介质的存储介质,例如,盘(固定或可拆卸)、带、cd

rom、dvd

rom、cd

r、cd

rw、dvd

r、dvd

rw或蓝光。存储介质还可包括易失性或非易失性存储器介质,诸如ram(例如,同步动态ram(sdram)、rambus dram(rdram)、静态ram(sram)等)、rom或闪存存储器。存储介质可被物理地包括在存储介质将指令/数据提供至其的计算机内。另选地,存储介质可连接至计算机。例如,存储介质可通过网络或无线链路诸如网络附接存储装置而被连接至计算机。存储介质可通过外围接口诸如通用串行总线(usb)而被连接。通常,计算机可访问存储介质210可以非暂态方式存储数据,其中非暂态在该上下文中可指不通过信号传输指令/数据。例如,非暂态存储装置可为易失性的(并且响应于断电而可能会丢失所存储的指令/数据)或为非易失性的。
[0117]
通常,存储在计算机可访问存储介质210上的ic 202的电子描述212可以是数据库,该数据库可以由程序读取并直接或间接用于制造包括ic 202的硬件。例如,该描述可以是诸如verilog或vhdl的高级设计语言(hdl)中硬件功能的行为级别的描述或寄存器传输级别(rtl)的描述。可通过合成工具读取该描述,合成工具可合成该描述以产生包括来自合
成库的门电路列表的网表。网表包括一组门电路,其还表示包括ic 202的硬件的功能。然后可放置并路由网表,以产生用于描述要应用到掩模的几何形状的数据集。然后可以在各种半导体制造步骤中使用掩模以产生对应于ic 202的半导体电路。另选地,计算机可访问存储介质210上的描述212可以是期望的网表(具有或没有合成库)或数据集。
[0118]
尽管计算机可访问存储介质210存储ic 202的描述212,但其他实施方案可根据需要存储ic 202的任何部分(例如,如上所述,协处理器10和/或cpu处理器12)的描述212。
[0119]
一旦充分了解了上面的公开,许多变型和修改对于本领域的技术人员而言将变得显而易见。本公开旨在使以下权利要求书被阐释为包含所有此类变型和修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1