微处理器中累加器寄存器结果的检查点设置的制作方法

文档序号:30793786发布日期:2022-07-16 11:19阅读:117来源:国知局
微处理器中累加器寄存器结果的检查点设置的制作方法
微处理器中累加器寄存器结果的检查点设置


背景技术:

1.本发明总体上涉及数据处理系统、处理器,并且更具体地涉及处理器中的累加器寄存器文件,包括与一个或多个密集数学执行单元(诸如,例如一个或多个矩阵-乘法-累加器(mma)单元)相关联的累加器寄存器。
2.当前在数据处理系统中使用的处理器一次处理多于一个指令,且经常无序地处理那些指令。在现代计算机架构中,存在若干已知的方式来设计适于一次执行多于一个指令的计算机,或适于至少在同一时间框架内执行多于一个指令的计算机。例如,提高吞吐量的一种设计包括在处理器核内的多个执行切片以同时处理多个指令线程,其中线程共享处理器核的某些资源。执行切片可指代像处理器内的流水线那样串行连接的多个数据处理硬件单元,以在单个处理周期中处理多个指令。流水线处理涉及分阶段处理指令,使得同时处理多个指令。多个执行切片可用作处理器核内的同时多线程的部分。
3.各个流水线阶段可包括“指令获取”阶段,其中从存储器中获取指令。在“解码”阶段,指令解码成不同的控制位,该控制位通常指定(i)用于执行由指令指定的操作的功能单元(例如,执行单元)的类型,(ii)操作的源操作数,以及(iii)操作的结果的目的地。在“分派”阶段,解码的指令被分派至发布队列(isq),在该发布队列中指令等待数据和可用的执行单元。发布队列中的指令通常被发布到“执行”阶段中的执行单元。“执行”阶段处理由指令指定的操作。执行由指令指定的操作通常包括接受数据(例如,一个或多个操作数)和产生一个或多个结果。通常存在与执行单元相关联的寄存器文件和/或发布队列以保持执行单元的数据和/或信息。寄存器文件通常具有从寄存器文件中的条目或位置读取和/或写入寄存器文件中的条目或位置的信息。
4.为了增加计算吞吐量,处理器可包括专用计算单元(例如,矩阵-乘法-累加器单元(mma单元))以处理不同数据类型和执行高度并行的任务。处理宽单指令多数据流(simd)是实现高计算吞吐量的一种方式。在微处理器中,具有进行中指令的寄存器重命名以改善乱序执行并不罕见。然而,在机器深度学习使用具有高计算能力的执行单元(例如,mma单元)的情况下,寄存器重命名可导致可消耗功率的大量数据移动,并且还可引入不必要的执行气泡和等待时间。


技术实现要素:

5.给出本公开的概述以帮助理解计算机系统、计算机架构结构、处理器、包括累加器寄存器文件的寄存器文件、以及在处理器中使用寄存器文件的方法,而并非旨在限制本公开或本发明。本公开涉及本领域普通技术人员。应理解,本公开的各个方面和特征可有利地在一些情况下单独地使用,或在其他情况下与本公开的其他方面和特征组合使用。因而,可以对计算机系统、架构结构、处理器、寄存器文件和/或它们的操作方法进行变化和修改,以实现不同的效果。
6.在一个或多个实施例中,公开了一种用于处理信息的计算机系统。在实施例中用于处理信息的计算机系统包括具有用于处理指令的电路和逻辑的至少一个处理器,该处理
器具有:与至少一个处理器相关联的主寄存器文件,主寄存器文件具有电路和用于存储数据的多个条目,用于将数据写入主寄存器文件条目的一个或多个写入端口,以及用于从主寄存器文件条目读取数据的一个或多个读取端口;具有电路和逻辑的一个或多个执行单元,一个或多个执行单元包括密集数学执行单元;以及至少一个累加器寄存器文件,具有电路和用于存储数据的多个条目,所述至少一个累加器寄存器文件与所述密集数学执行单元相关联。在一个方面中处理器被配置为在密集数学执行单元中处理数据,其中密集数学执行单元的结果被写入第一组一个或多个累加器寄存器文件条目,并且在检查点边界被越过之后——基于例如在检查点开始之后或每“n”个被分派指令之后分派的指令的数量“n”,密集数学执行单元的结果被写入第二组一个或多个累加器寄存器文件条目。在一个或多个方面中处理器还被配置为将结果多次写回到第一组一个或多个累加器寄存器文件条目。在实施例中,处理器还被配置为将来自一个或多个累加器寄存器文件条目的组的数据写入主寄存器文件。优选地,处理器被配置为响应于访问被映射到一个或多个累加器寄存器文件条目的组中的累加器寄存器文件条目的主寄存器文件条目的指令而将来自一个或多个累加器寄存器文件条目的组的数据写入到多个主寄存器文件条目。
7.根据一个或多个实施例,累加器寄存器文件在密集数学单元本地。在实施例中,密集数学执行单元是矩阵-乘法-累加器(mma)单元,并且累加器寄存器文件位于mma中。累加器寄存器文件的位字段宽度优选地比主寄存器文件的位字段宽度宽,并且在实施例中,累加器寄存器文件中的每个条目被映射到多个主寄存器文件条目。在一个或多个实施例中计算机系统还包括:分派单元,具有用于分派指令的电路和逻辑;指令完成表(ict),具有用于跟踪分派的指令的电路和逻辑,ict具有用于存储数据的多个条目;以及映射器,具有将一个或多个主寄存器文件条目映射至一个或多个累加器寄存器文件条目的电路和逻辑,其中分派单元通知映射器第二组累加器寄存器文件条目被分配,并且映射器将第一组一个或多个累加器寄存器文件条目重命名为第二组累加器寄存器文件条目。在进一步方面中,处理器被配置为响应于以累加器寄存器文件为目标的指令来启动(prime)累加器寄存器文件以接收数据,并且响应于启动累加器寄存器文件,创建第一检查点,并且分派单元将对应于第一检查点的第一检查点开始itag发送到ict并且存储第一检查点开始itag。
8.在一方面中,检查点边界基于自检查点开始起(例如,自检查点开始itag起)分派的指令的数量“n”,并且在分派单元分派数量“n”的指令之后(或在另一示例中,在每n个指令之后),分派单元检测到分派的指令将触发第二组累加器寄存器文件条目的分配,并且创建第二检查点。在实施例中,响应于第二检查点被创建,分派单元向对应于第二检查点的ict发送第二检查点开始itag并存储第二检查点开始itag。在一个或多个方面中,分派单元跟踪当前检查点开始itag,并且比当前检查点开始itag年轻的所有指令属于与一个或多个累加器寄存器文件条目的相应组相关联的检查点。在实施例中ict基于由分派单元分派的指令的数量来确定哪些指令属于相应检查点。在ict条目中提供根据实施例的编码,以将指令标识为检查点开始itag或者标识为在检查点itag中。每个检查点没有完成并且累加器寄存器文件条目未释放用于重新使用,直到相应检查点内的所有指令(itag)完成。ict优选地查看相应检查点内的所有指令的完成位,并且如果相应检查点中的所有指令完成,则相应检查点完成并且相应检查点映射被释放到准备好被重新分配以供使用的累加器寄存器文件条目的空闲列表。响应于第二检查点内的清除操作,将清除itag与第二检查点开始itag
进行比较,并且清除第二检查点,并且恢复第一检查点和第一检查点的累加器寄存器映射。
9.公开了一种用于处理信息的处理器,所述处理器包括:与所述至少一个处理器相关联的主寄存器文件,所述主寄存器文件具有电路和用于存储数据的多个条目,用于将数据写入主寄存器文件条目的一个或多个写入端口,以及用于从主寄存器文件条目读取数据的一个或多个读取端口;具有电路和逻辑的一个或多个执行单元,所述一个或多个执行单元包括密集数学执行单元;具有电路和用于存储数据的多个条目的至少一个累加器寄存器文件,所述至少一个累加器寄存器文件与密集数学执行单元相关联,并且累加器寄存器文件的位字段宽度比主寄存器文件的位字段宽度宽;分派单元,具有用于分派指令的电路和逻辑;指令完成表(ict),具有用于跟踪分派的指令的电路和逻辑,ict具有用于存储数据的多个条目;以及映射器,具有用于将一个或多个主寄存器文件条目映射到一个或多个累加器寄存器文件条目的电路和逻辑。处理器被配置为在密集数学执行单元中处理数据,其中密集数学执行单元的结果被多次写到第一组一个或多个累加器寄存器文件条目,以及在越过检查点边界之后(例如,在自检查点开始以来分派n个指令之后或者每n个指令之后),密集数学执行单元的结果被写入第二组一个或多个累加器寄存器文件条目,以及其中处理器被配置为将来自一个或多个累加器寄存器文件条目的组的数据写入回主寄存器文件条目。
10.在实施例中处理器被配置为响应于将累加器寄存器文件作为目标的指令来启动累加器寄存器文件以接收数据,并且响应于启动累加器寄存器文件,创建第一检查点,并且分派单元向ict发送对应于第一检查点的第一检查点开始itag并存储第一检查点开始itag,并且进一步其中,检查点边界基于在第一检查点开始itag之后分派的指令的数量“n”,并且在分派单元分派数量“n”的指令之后,分派单元检测何时分派的指令将触发第二组累加器寄存器文件条目的分配并且创建第二检查点,分派单元通知映射器第二组累加器寄存器文件条目正在被分配,并且映射器将第一组一个或多个累加器文件条目重新命名为第二组文件条目,以及响应于第二检查点被创建,分派单元向ict发送对应于第二检查点的第二检查点开始itag并存储第二检查点开始itag。
11.本发明的前述和其他目的、特征和优点将从如附图中示出的本发明的示例性实施例的以下更具体的描述中变得明晰。
附图说明
12.当结合所提供的附图阅读时,将更好地理解计算机系统、计算机架构结构、处理器、包括累加器寄存器文件的寄存器文件和/或它们的操作方法的各个方面、特征和实施例。出于说明计算机系统、计算机架构结构、处理器、寄存器文件、累加器寄存器文件及其操作方法的方面、特征和/或不同实施例的目的,在图中提供了实施例,但权利要求不应限于所示的精确系统、实施例、方法、过程和/或装置,并且所示的特征和/或过程可单独使用或与其他特征和/或过程组合使用。
13.图1示出了可以实施本公开的方面的数据处理系统的示例。
14.图2示出了可以实施本公开的某些方面的处理器的实施方式的框图。
15.图3示出了多切片处理器的一部分的实施方式的框图。
16.图4示出了根据本公开的实施例的具有累加器寄存器文件的多切片处理器的一部分的框图。
17.图5示出了展示根据本公开的实施例的mma单元、累加器寄存器文件和物理vs寄存器文件的设置的简化框图。
18.图6示出了具有mma单元和累加器寄存器文件的处理器的两个超级切片的简化框图。
19.图7示出了根据实施方式的用于在处理器中处理数据的方法的流程图。
具体实施方式
20.以下描述是为了说明本发明的一般原理而进行的,并且不意味着限制在此要求的发明概念。在以下详细描述中,阐述了许多细节以便提供对计算机系统、计算机架构结构、处理器、寄存器文件、累加器寄存器文件及其操作方法的理解,然而,所属领域的技术人员将理解,计算机系统、计算机架构结构、处理器、寄存器文件、累加器寄存器文件及其操作方法的不同和众多实施例可在没有那些特定细节的情况下实践,以及权利要求书和本发明不应限于本文具体描述和示出的系统、组件、子组件、实施例、特征、过程、方法、方面和/或细节。进一步,本文中所描述的特定特征可以与不同可能的组合和置换中的每一者中的其他所描述特征组合使用。
21.除非本文中另外特别限定,否则所有术语将被给予它们的最广泛的可能解释,包括从说明书中暗示的含义以及本领域技术人员所理解的含义和/或如在词典、论文等中限定的含义。还必须注意的是,如在说明书和所附权利要求中使用的,除非另外指明,单数形式“一个”、“一种”和“该”包括复数指示物,并且术语“包括”和/或“包含”指定所述特征、整体、步骤、操作、元件和/或部件的存在,但不排除一个或多个特征、整体、步骤、操作、元件、部件和/或其组合的存在或添加。
22.以下讨论省略或仅简要描述信息处理系统的常规特征,包括处理器和微处理器系统和架构,其对本领域技术人员是明显的。假定所属领域的技术人员熟悉处理器的一般架构,且明确地说,熟悉以乱序执行方式操作的处理器,包括多切片处理器及其寄存器的使用。可以注意到,编号的元件是根据其中引入该元件的附图编号的,并且在随后的附图中经常但并非总是由该数字指代。
23.图1示出了可以实施本公开的方面的数据处理系统100的示例。该系统具有中央处理单元(cpu)110。cpu 110通过系统总线112耦接到不同其他组件。只读存储器(“rom”)116耦接至系统总线112并且包括控制数据处理系统100的某些基本功能的基本输入/输出系统(“bios”)。随机存取存储器(“ram”)114、i/o适配器118、以及通信适配器134也被耦接到系统总线112。i/o适配器118可以是与磁盘存储设备120通信的小型计算机系统接口(“scsi”)适配器。通信适配器134将总线112与外部网络互连,使得数据处理系统能够与其他这样的系统通信。输入/输出设备还经由用户接口适配器122和显示适配器136连接到系统总线112。键盘124、跟踪球132、鼠标126和扬声器128均通过用户接口适配器122与总线112互连。显示监视器138通过显示适配器136连接到系统总线112。以此方式,用户能够通过键盘124、轨迹球132或鼠标126输入到系统,并且经由扬声器128和显示器138从系统接收输出。此外,使用诸如aix(“aix”是ibm公司的商标)的操作系统来协调图1中所示的各种组件的功能。
24.cpu(或“处理器”)110包括各种寄存器、缓冲器、存储器、以及由集成电路形成的其他单元,并且可以根据精简指令集计算(“risc”)技术进行操作。cpu 110根据处理器周期来
处理,在一些方面,这些周期与内部时钟(未示出)同步。
25.图2描绘了根据实施例的处理器110的简化框图。处理器110包括存储器202、指令高速缓存204、指令获取单元206、分支预测器208、分支分类单元218、处理流水线210和目的地资源220。处理器110可包含在计算机处理器内或以其他方式分布在计算机系统内。指令和数据可以存储在存储器202中,并且指令高速缓存204可以访问存储器202中的指令并且存储要获取的指令。存储器202可以包括任何类型的易失性或非易失性存储器。存储器202和指令高速缓存204可包括多个高速缓存级。
26.在图2中,描绘了指令获取单元206和处理流水线210的简化示例。在不同实施例中,处理器110可包括多个处理流水线210和指令获取单元206。在实施例中,处理流水线210包括解码单元20、发布单元22、执行单元24、回写逻辑26、逻辑寄存器映射器28、历史缓冲器(例如,保存和恢复缓冲器(srb))30以及物理寄存器文件32。指令获取单元206和/或分支预测器208也可以是处理流水线210的一部分。处理流水线210还可包括其他特征,诸如错误检查和处理逻辑、通过处理流水线210的一个或多个并行路径、以及本领域现在或之后已知的其他特征。虽然在图2中描述了通过处理器110的前向路径,但是在处理器110的元件之间可以包括其他反馈和信令路径。处理器110可以包括其他电路、功能单元和组件。
27.指令获取单元206根据指令地址从指令高速缓存204获取指令,以供解码单元20进一步处理。解码单元20解码指令并且将经解码的指令、指令的部分或其他经解码的数据传递给发布单元22。解码单元20还可检测未由分支预测器208预测的分支指令。发布单元22分析指令或其他数据,并基于该分析将经解码的指令、指令的部分或其他数据传输到流水线210中的一个或多个执行单元24。物理寄存器文件32保持用于执行单元24的数据。执行单元24实施并执行由向执行单元24发出的指令指定的操作。执行单元24可包括多个执行单元,诸如定点执行单元、浮点执行单元、加载/存储执行单元(lsu)、向量标量执行单元(vsu)和/或其他执行单元。逻辑寄存器映射器28包含提供逻辑寄存器条目(lreg)和物理寄存器文件32中的条目之间的映射的条目。当指令指定读取逻辑寄存器条目(lreg)时,逻辑寄存器映射器28通知发布单元22,发布单元22通知执行单元24物理寄存器文件32中的数据可以定位在何处。
28.当检测到误预测分支指令或其他异常时,丢弃在误预测分支或异常之后的指令和数据,例如从处理器110的各个单元清除(flush)。历史缓冲器(例如,保存和恢复缓冲器(srb))30包含推测寄存器状态和架构寄存器状态,并且当分派新指令时备份逻辑寄存器文件数据。在这方面,在新指令被清除并且旧数据需要被恢复的情况下,当新指令从逻辑寄存器映射器28驱逐数据时,历史缓冲器存储来自逻辑寄存器映射器28的信息。历史缓冲器(srb)30保持所存储的信息,直到新指令完成。历史缓冲器(srb)30与逻辑寄存器映射器28接口连接,以便将逻辑寄存器条目的内容从历史缓冲器(srb)30恢复到逻辑寄存器映射器28,更新逻辑寄存器映射器28中的指针,从而指令知道在何处获得正确数据,例如,将处理器返回到可中断指令(例如分支指令)被错误预测之前存在的状态。
29.回写逻辑26将执行的指令的结果写回到目的地资源220。目的地资源220可以是任何类型的资源,包括寄存器、高速缓存存储器、其他存储器、用于与其他设备通信的i/o电路、其他处理电路、或用于执行的指令或数据的任何其他类型的目的地。
30.可以在逻辑流水线阶段的序列中在处理器110中处理指令。然而,应理解,这些阶
段的功能可合并在一起,使得阶段的此特定划分不应被视为限制,除非在本文中的权利要求中清楚地指示此限制。实际上,为了简单理解,在图2中一些阶段表示为单个逻辑单元,并且以下将提供相关的进一步的细节。
31.图3示出了处理器110的一部分的框图,并且在该示例中,示出了根据本公开的实施方式的多切片处理器110。要注意的是,图3仅仅以示意性方式显示了多切片处理器110的部分,用于进行讨论。应理解,多切片处理器可具有其他配置。如图3所示,多切片处理器包括两个处理切片——切片0(切片s0或360)和切片1(切片s1或365)。处理器包括指令获取单元310。切片s0和s1中的每一个包括指令分派单元(320a和320b);逻辑寄存器映射器(350a和350b);历史缓冲器(hb)(370a和370b);发布队列(isq)(330a和330b);指令完成表(ict)(325a和325b);以及执行单元(340a和340b),其包括加载存储单元(lsu)(304a和304b)、向量标量单元(vsu)(306a和306b)、以及寄存器文件(rf)(380a和380b)。执行单元340可包括用于保持供执行单元340执行的指令的一个或多个队列。
32.应注意,仅为了易于说明和论述而展示两个切片,且多切片处理器110可包含多于两个处理或执行切片,其中每一切片具有上文针对切片s0和s1(切片360和365)中的每一者所论述的所有组件。进一步,可将处理切片分组成超级切片(ss 395),其中每一超级切片包含一对处理切片。例如,多切片处理器可包括两个超级切片ss0和ss1,其中ss0包括切片s0和s1,并且ss1(未示出)包括切片s2和s3。
33.指令获取单元310获取要由处理器110或处理器切片执行的指令。由指令获取单元310获取的指令被发送至指令分派单元320。指令分派单元320通常以程序顺序将指令分派至发布队列(isq)330。发布队列(isq)330将向执行单元340发布指令。isq 330通常保持指令,直到与该指令相关联的数据已经被检索并准备好使用。物理寄存器文件380可用于存储将在分派给执行单元340的指令中指定的操作中使用的数据,并且可将由执行单元340执行的操作的结果写入物理寄存器文件380中的指定的目标寄存器条目。
34.在某些方面,isq 330保持一组指令并且寄存器文件380累加用于指令输入的数据。寄存器文件可用于在存储器和处理器中的其他功能(执行)单元之间分级数据。可以有许多寄存器文件和类型。当所有源数据针对所述指令累加时,将所述数据传递到指定用于所述指令的执行的一个或多个执行单元。每个执行单元(例如,lsu 304和vsu 306)可以使结果数据在回写总线上可用于写入寄存器文件(rf)条目。
35.当数据未准备好(例如,不在适当的数据高速缓存或寄存器内)时,可能导致延迟,因为isq 330将不向执行单元340发布指令。至少由于这个原因,发布队列(isq)通常乱序地向执行单元340发布指令,因此可以执行所需数据可用的指令。在一个或多个实施例中,分派单元320将用标识符(例如,标识标签(itag))对分派到发布队列330的每个指令加戳以识别指令。分派单元320可以用其他信息和元数据来对指令加戳。指令(itag)通常由分派单元320在每个线程的基础上按照升序程序顺序分配(分发)和加戳。
36.逻辑寄存器映射器350包含提供逻辑寄存器(例如,gpr1)中的条目与物理寄存器文件380中的条目(例如,物理寄存器阵列条目)之间的映射的元数据(例如,itag、rftag等)。rftag是将逻辑寄存器条目与物理寄存器文件条目相关的指针。例如,当指令想要读取逻辑寄存器(例如,gpr1)时,逻辑寄存器映射器350告诉发布队列330,发布队列330告诉执行单元340其在物理寄存器文件380中哪里可以找到数据(例如,物理寄存器阵列条目)。执
行单元340乱序地执行指令,并且当执行单元340完成指令时,执行单元340将完成的指令(例如,itag)发送到ict 325。ict 325包含由分派单元320分派的指令(itag)的队列,并在指令(itag)被处理时跟踪指令的进展。
37.历史缓冲器(srb)390包含由较新指令从逻辑寄存器映射器350驱逐的逻辑寄存器条目。存储在历史缓冲器(srb)390中的信息可以包括从逻辑寄存器驱逐逻辑寄存器条目的指令的itag(即,驱逐者itag)。在实施例中,历史缓冲器(srb)390存储itag、逻辑寄存器条目号(标识逻辑寄存器条目(lreg)的位字段)以及寄存器文件标签(rftag)信息。历史缓冲器(srb)390可以存储和跟踪其他信息。历史缓冲器(srb)390具有到逻辑寄存器映射器350的接口,以针对每个逐出的逻辑寄存器条目(lreg)恢复itag和寄存器文件标签(rftag)(和其他元数据)。该信息保持在历史缓冲器(srb)条目中的历史缓冲器(srb)390中,直到完成新指令(驱逐或指令)。此时,在实施例中,从历史缓冲器(srb)390中移除条目。
38.具有多个处理切片的cpu 110可以能够同时执行多个指令,例如,在一个处理周期中同时执行每个处理切片中的一个指令。具有多个处理切片的这种cpu可称为多切片处理器或并行切片处理器。多个执行切片中的同时处理可大大增加多切片处理器的处理速度。在单线程(st)模式中,处理单个线程,且在smt模式中,同时处理两个线程(smt2)或四个线程(smt4)。
39.在一方面中,每个执行/处理切片可具有其自身的寄存器文件,如图3所示。在另一方面中,每个超级切片可分配一个寄存器文件,并由超级切片的处理切片共享。在一个方面,一个寄存器文件可被分配给多于一个的超级切片,并且由超级切片的处理切片共享。例如,可分配切片s0、s1、s2和s3以共享一个寄存器文件。下面将更详细地讨论寄存器文件。
40.在处理器中,具有进行中指令的寄存器重命名以改善指令的乱序执行并不罕见。然而,在使用具有高计算和吞吐量的执行单元(例如,密集数学操作)的情况下,进行中指令的寄存器重命名可导致可消耗功率来处理的许多数据移动,并且还可因一个或多个执行气泡而引入不必要的延迟和等待时间。在一个或多个实施例中,使用累加器寄存器文件,并且在一个方面中,执行使用具有密集数学指令的累加器寄存器文件重命名的处理。使用累加器寄存器文件和累加器寄存器文件重命名处理,使得执行期间的数据移动被最小化以减少功率并提高执行吞吐量。为了进入累加器寄存器重命名模式,在一方面中,累加器寄存器被启动。在累加器寄存器被启动之后,密集数学执行单元(例如,矩阵-乘法-累加器(mma)单元和/或推断引擎)在一个或多个实施例中,可在本地读取和写入累加器寄存器,而无需写入主寄存器文件。优选地,密集数学执行单元多次访问、读取和/或写入相同的累加器寄存器文件条目,而无需重命名新的累加器寄存器文件和/或写回主文件寄存器。当密集数学操作完成时,和/或响应于预定操作和指令,在实施例中,累加器寄存器文件中的结果可被写到主寄存器文件和/或主存储器。
41.在一个或多个实施例中,代替重命名每个指令,检查累加器寄存器文件以提高吞吐量并增加性能。在一方面中,累加器寄存器在映射器中在特定点处被重命名,例如当检查点边界被越过时。在检查点边界处或越过检查点边界时(也称为对累加器寄存器设定检查点)而不是在每个指令处重命名累加器寄存器改善了寄存器/累加器寄存器区域、功率和性能,并且在实施例中有助于清除恢复。即,如果存在例如分支或加载未命中,则将累加器寄存器清除到适当的检查点,例如清除回到检查点开始指令,而不是特定清除指令或第一密
集数学指令,从而增加恢复性能。
42.在一个或多个实施例中,使用与一个或多个密集数学执行单元(例如,一个或多个推断引擎和/或mma单元)相关联、位于其本地和/或位于其中的一个或多个累加器寄存器来描述处理、处理器架构和系统,优选地用于处理密集数学指令。或者(和/或另外),累加器寄存器文件不是mma单元本地的,且在统一寄存器中作为向量/标量(vs)主寄存器文件中的vs寄存器的组。在进一步的实施例中,累加器寄存器具有位字段宽度比主寄存器文件条目的位字段宽度宽的条目。
43.图4示出了利用与执行单元(例如,推断引擎/mma单元)相关联的累加器寄存器文件和位于向量标量(vs)执行单元(vsu)内的向量/标量(vs)主寄存器文件的处理流水线的简化框图。处理流水线或执行切片包括分派单元320、具有多个条目351(a)-351(n)的逻辑映射器350、指令完成表(ict)325、发布队列(isq)330、推断引擎或矩阵乘法累加器(mma)单元460、具有多个条目471(a)-471(n)的累加器寄存器文件470以及具有主(vs)寄存器文件380(具有多个条目381(a)-381(n))的vs执行单元(vsu)340。虽然累加器寄存器文件470在图4中被图示为与推断引擎/mma单元460相关联且在推断引擎/mma单元460本地,但是在一个或多个实施例中,累加器寄存器文件470可驻留在mma单元460内。在另一方面中,累加器寄存器文件处于统一寄存器文件中,其中累加器寄存器文件作为vs寄存器的组处于主vs寄存器文件中。
44.在推断引擎和/或mma操作期间,在一个或多个实施例中,累加器寄存器文件470被用作源和目标(累加器)。即,在一方面中,当mma操作时,其使用来自累加器寄存器文件的操作数且将结果写回到累加器寄存器文件,且在实施例中,将结果写回到同一累加器寄存器文件条目471,且在一方面中,多次写回到同一目标累加器寄存器文件条目471。以此方式,包括vs或主寄存器文件的处理器在推断引擎或mma操作期间不经历重命名操作。在一个或多个实施例中,在处理多个指令之后和/或在越过检查点边界之后,结果被写回到累加器寄存器470中的不同累加器寄存器文件条目471。
45.在实施例中,累加器寄存器文件470是宽位累加器寄存器文件条目471(a)-471(n)的池。例如,在实施例中,累加器寄存器文件470是三十二(32)个物理512位寄存器条目471的池,而vs主寄存器文件是128位宽。在实施例中,每个累加器寄存器文件条目471保存多个主寄存器文件条目,并且在实施例中,保存一组四个连续的主vs寄存器文件条目(381(n)-381(n+3))。在图5的简化框图中,示出了具有四个条目381(a)-381(d)的vs或主寄存器文件380,其被映射到累加器寄存器文件470中的单个累加器寄存器条目471。在示例中,四个连续的128位主vs寄存器文件条目381(a)-381(d)被映射到单个512位累加器寄存器文件条目471。实施例中的推断引擎可以是一组八(8)个矩阵-乘法-累加(mma)单元和三十二(32)个512位累加器寄存器。在一个或多个实施例中,每个线程有八(8)个逻辑累加器寄存器(acc0-acc7)。这八(8)个逻辑累加器寄存器被映射到三十二(32)个物理寄存器。在实施例中,每个逻辑累加器寄存器被指派指向物理寄存器的五(5)位标签。
46.指令用于建立和运行密集数学执行单元,例如,推断引擎和/或一个或多个mma单元。通用矩阵秩操作(“ger”)指令是一个示例,并且在一个或多个方面中对2n个数据执行n2个操作。在一个或多个实施例中,推断引擎/mma单元工作负载通常具有三个部分。累加器寄存器文件用初始数据启动以执行其操作。乘法运算在该mma单元中执行,且结果被累加在该
累加器寄存器文件中。即,在正常操作下,累加操作写回到累加器寄存器并且结果通常不写回到主寄存器文件。一个或多个实施例中,累加器寄存器不用每个指令重命名。并且,在一方面,当密集数学执行单元完成时,和/或响应于某些指令,累加器寄存器文件中的结果被写回到存储器(例如,主寄存器文件和/或主存储器)。累加器指令(“ger”指令)通常具有两个vsr操作数源、累加器vsr目的地和累加器vsr源。
47.为了开始密集数学操作(例如,mma单元操作),在一个或多个实施例中,处理器将解码和/或检测密集数学指令,例如,推断引擎/mma单元“ger”指令。在一个实施例中,每个密集数学指令具有itag并且将利用一个完整分派通道和一个完整发布队列(isq)条目。在一方面,主寄存器映射器350为每个密集数学指令(例如,mma单元指令)分配多个(例如,四(4))目标(主寄存器文件条目)。对于写入同一累加器寄存器文件条目(例如,图4中的471(a))的指令,主寄存器映射器350不分配新的主寄存器文件标签rftag(条目),但寄存器映射器350将需要新的itag用于新指令。在实施例中,主寄存器映射器350将标记被映射到累加器寄存器文件条目471的主寄存器文件条目381。在一方面,主寄存器映射器350会将同一累加器寄存器文件itag写入多个连续主寄存器文件条目381,例如,vsr(n)

vsr(n+3)。即,将一个itag命名给一组连续的主寄存器文件条目,例如,四个主寄存器文件条目381(n)-381(n+3)。
48.在一个或多个实施例中,应当启动累加器寄存器文件。在一个或多个实施例中,根据需要启动每个累加器寄存器文件。在一个或多个实施例中,启动累加器寄存器包括将来自附着到非mma执行单元的stf寄存器文件中的多个向量寄存器的数据移动到附着到mma执行单元的acc阵列中的累加器寄存器中。当从存储器(例如,主寄存器文件和/或主存储器)写入累加器寄存器文件时,或者作为启动(priming)指令的结果,启动累加器寄存器文件。例如,指令(例如,xxmtacc)可以将数据从主(vs)寄存器文件移动到累加器寄存器文件,以便使累加器寄存器文件和主(vs)寄存器文件同步。在另一示例中,指令(例如,lxacc)可以将数据从主存储器加载并移动到累加器寄存器文件。在进一步的示例中,在其条目/多个条目中的数据被设置为零的情况下,累加器寄存器文件被启动。构想用于启动累加器寄存器文件的其他指令。
49.在实施例中,向量标量(vs)执行单元(vsu)将向适当的累加器寄存器文件条目中写入主(vs)寄存器主要数据和正进行启动的指令的itag。启动累加器寄存器文件还分配累加器寄存器重命名。在启动时,累加器寄存器目标被重命名并映射到物理寄存器文件条目。在累加器寄存器的启动(和解除启动)期间,对于每个累加器寄存器文件条目,多个主寄存器文件标签(例如,四个)将在单发(one shot)中发布。参考图5,在启动的一个示例期间,分配累加器寄存器重命名,并且将条目381(a)-381(d)中的vs寄存器数据写入所分配的累加器寄存器条目471。在一个或多个实施例中,vs执行单元将向映射的累加器寄存器文件中写入进行启动的指令的itag和主(vs)寄存器文件数据。在一个或多个实施例中,累加器空闲列表472维护所分配的和空闲累加器标签的计数。累加器标签标识累加器寄存器文件条目。在一方面中,累加器寄存器文件忙碌标志被用于指示累加器寄存器文件条目当前是活动的。当所有累加器寄存器文件条目被占用时,分派将以类似于主寄存器资源暂停的方式暂停。
50.在密集的数学操作中,累加器寄存器文件在每个循环不被读取和写到主(vs)寄存
器文件。相反,大量数据结果通过使用累加器寄存器文件而保持在密集数学引擎(例如,mma单元)的本地。也就是说,mma单元操作被写回累加器寄存器文件。在一方面,同一累加器寄存器文件被写入多次(例如,多次)。累加器寄存器文件条目不用每个指令重命名。在一个或多个实施例中,累加器寄存器文件在mma操作期间被用作源和目标(累加器)。图5中的循环475示出了mma单元在累加器寄存器470中重写相同目标条目471的操作。
51.每一mma单元指令写入单个累加器寄存器文件条目且将目标累加器寄存器条目的状态设定为脏,从而指示累加器寄存器文件条目和对应的主(vs)寄存器文件条目不同步。在一方面,对于mma单元指令(例如,“ger”指令),累加器寄存器文件存储结果,并且主(vs)寄存器文件不存储结果。虽然数据不会被写回到主执行单元(例如,vsu)中的主寄存器文件,但是当主执行单元从发布队列接收到新指令时,主执行单元将更新累加器寄存器文件itag。对于利用累加器寄存器文件条目的指令,利用累加器寄存器文件的较年轻指令的itag将替换较旧的itag,但主寄存器文件标签(rftag)将不改变。
52.在一个或多个实施例中,利用累加器寄存器文件470的密集数学指令从发布队列330以优选地按照寄存器编号的顺序发布,并且在一个方面按照指令类型的顺序发布。在一方面,利用累加器寄存器文件的密集数学指令的发布速率是每周期一个指令(除了在一个或多个实施例中,用于启动累加器寄存器文件的第一指令可花费多于一个周期)。利用累加器寄存器文件的指令优选地按顺序且背对背地发布。如果存在利用累加器寄存器文件的较旧指令,则发布队列可以发布较旧指令,因为较旧指令将读取或写入主寄存器文件,但是累加器寄存器文件将仅更新累加器寄存器文件,直到累加器寄存器文件中的数据可以被写回到主寄存器文件。
53.在一方面,当密集数学指令(例如,“ger”指令)以自上次解除启动(例如,通过xxmtacc或ldacc)以来未被启动的累加器寄存器文件作为源时,硬件将启动该累加器寄存器文件条目。硬件将运行启动累加器寄存器文件并分配累加器寄存器文件条目(重命名)的序列。然后将执行密集数学指令。
54.响应于多个场景,累加器寄存器文件被解除启动和/或其数据被写回。在实施例中,响应于指令累加器寄存器文件被写回和/或解除启动,以及/或者在累加器寄存器被脏之后主(vs)寄存器文件作为源。例如,响应于从累加器寄存器移动到主(vs)寄存器文件指令(例如,xxmfacc),累加器寄存器文件被解除启动,并且累加器寄存器文件中的结果从累加器寄存器文件移动并写回到主(vs)寄存器文件。在另一示例中,响应于从累加器寄存器文件移动和存储指令(例如,stxacc),将累加器寄存器文件解除启动,并且将累加器寄存器文件中的结果写回到主存储器。
55.在一个或多个实施例中,当累加器寄存器文件条目是脏的并且由主(vs)寄存器文件访问时,硬件将解除启动累加器寄存器。在实施例中,硬件将运行将所有累加器寄存器写回到主(vs)寄存器文件的序列。例如,用于读取或写入被分配给累加器寄存器文件条目471的主寄存器文件条目381的较年轻的非密集数学指令将通知发布队列(isq)330开始回写处理。在一方面,当密集数学执行单元操作完成时,累加器寄存器文件被解除启动。在一个或多个实施例中,从累加器移动的指令的序列由分派单元320发送并由发布单元330发布,以从累加器寄存器文件470读取累加器寄存器的内容。在一个或多个实施例中,回写处理包括停止分派单元320,并且在发布队列可以恢复发布指令之前通知发布队列330耗尽累加器寄
存器文件470中的数据。在一方面,发布队列将保持分派单元,直到累加器寄存器被耗尽,例如,数据被写到对应的主寄存器文件条目。
56.在一方面,每个累加器寄存器文件条目将被解除启动,累加器寄存器文件中的数据将被写入到主vs寄存器文件中,且累加器寄存器文件也将从重命名池中解除分配。如果累加器寄存器文件470没有将结果写入主寄存器文件380,则不解除分配主寄存器文件条目(rftag)。当和/或响应于相应的累加器寄存器文件条目471中的数据被写到主寄存器文件380时,例如响应于较年轻的非密集数学指令,解除分配主寄存器文件条目(rftag)381。当累加器寄存器文件中的数据的最后部分被写回到主寄存器文件时,累加器寄存器指令被完成。完成的指令的itag被广播至历史缓冲器(图4中未示出),以解除分配主寄存器文件条目(rftag)。处理器然后将处理较年轻的非密集数学指令,包括从主寄存器文件读取数据。此外,在累加器寄存器文件被耗尽并且acc忙碌标志被清除之后,发布队列可以恢复发布指令,并且分派单元可以恢复分派指令。在一个或多个实施例中,在累加器寄存器被启动并且主(vs)寄存器文件被定为目标的情况下,即使累加器寄存器不是脏的,累加器寄存器也将被解除启动。
57.图6示出了具有与本地累加器寄存器文件相关联的一个或多个密集数学执行单元(例如,矩阵-乘法-累加器(mma)单元)的处理器的另一实施例,其中处理器被配置为使得一个或多个密集数学单元的操作将结果多次写回到同一累加器寄存器文件条目。图6示出了用于处理数据的处理器的两个超级切片。每个超级切片包括至少一个mma单元460、两个向量标量(vs)执行单元306和两个加载存储(ls)单元304。单个累加器寄存器文件470与两个mma单元460结合使用。在替代实施例中,每一执行切片可具有其自己的具有本地累加器寄存器文件的mma单元,且在进一步方面中,每一mma单元具有包含在每一执行切片中的mma单元内的累加器寄存器文件。在图6的实施方式中,在超级切片0中的发布队列330b(isq1)和超级切片1中的发布队列330c(isq2)向相应的mma单元(460a和460b)发布指令,例如,“ger”指令。可替代地,如图6中的虚线所示,发布队列330a(isq0)和发布队列330d(isq3)可向相应超级切片中的每个mma单元(460a和460b)发布指令,例如,“ger”指令。
58.在一个或多个实施例中,累加器寄存器被周期性地重命名。即,在其中利用累加器寄存器文件和密集数学执行单元处理多个指令之后,不同组的一个或多个累加器寄存器文件条目用于处理以该密集数学执行单元为目标的指令。在一个或多个实施例中,在越过itag边界之后累加器寄存器被重命名。例如,当累加器操作越过itag检查点边界时,在实施例中,密集数学执行单元操作的结果被写入从累加器寄存器条目的空闲池中分配的新累加器寄存器条目。itag检查点边界可以根据多个标准来定义。例如,在实施例中,在分派数量“n”个指令(itag)(例如,检查点开始itag之后64个指令)之后响应于以累加器寄存器文件条目为目标的指令对累加器寄存器文件条目进行重命名。在另一实施例中,可在每n个指令之后(例如,每64个指令之后)开始新的检查点。
59.在示例中,规定或预定的itag边界可以基于六十四(64)个指令(itag),但是还设想设置或使用不同数量“n”个指令(itag)或使用不同的第n个指令。例如,设置自最后检查点开始itag以来分派的指令的数量“n”或应将每“n”个指令设置为什么可以在操作之前或期间改变,并且在一方面,可以取决于累加器寄存器文件正在经历的清除(flush)操作的数量而改变。如果在累加器寄存器文件中没有足够的累加器寄存器条目可用于重命名累加器
寄存器文件,则以累加器寄存器文件为目标的指令将在分派时暂停,直到一个或多个累加器寄存器文件条目是空闲的。
60.在一个或多个实施例中,由第一指令(itag)创建的检查点以便将不活跃的累加器寄存器条目作为目标。在一个或多个实施例中,这发生在累加器寄存器被启动时或者在越过itag边界至下一个检查点之后的第一累加器操作时。在实施例中,累加器寄存器文件的启动指令将主寄存器文件条目(rftag)分配给累加器寄存器文件条目。在示例中,用于累加器寄存器文件的启动指令被分配四(4)个rftag,映射到累加器寄存器文件条目的每个主vs寄存器条目一个。在实施例中,这些是被分配给累加器寄存器文件条目的仅有rftag,直到新的“启动”指令被分派。当新的启动指令被分派时,先前的主vs寄存器映射被驱逐到历史缓冲器(srb)。
61.实施例中的分派逻辑将寻找以非活跃的累加器寄存器条目为目标的累加器操作(例如,启动指令)。分派逻辑检测什么类型的指令并且如果检测到适当的密集数学执行单元操作指令(例如,mma(“ger”)指令)则使累加器寄存器启动。在一个或多个实施例中,分派逻辑检测到指令正在创建新的检查点,例如,要使用同一组累加器寄存器文件条目处理的一组指令。在一个或多个实施例中,分派向ict发送检查点开始itag。ict标记该指令并开始检查点。检查点内的所有指令将一起完成。检查点开始itag也存储在分派单元中,并且在实施例中,存储在特殊完成/异常宏(spcomp)中。
62.此外,在一个或多个实施例中,分派逻辑将在越过检查点itag边界之后寻找以活跃的累加器寄存器文件条目为目标的第一累加器操作。即,在实施例中,响应于越过检查点边界之后的累加指令(例如,以累加器寄存器文件条目为目标的指令),将开始新检查点(并且将标识新检查点开始itag)。在实施例中,基于在先前检查点开始itag之后分派“n”个指令(itag)设置和/或确定下一检查点边界。从检查点开始itag计算指令的数量“n”以确定itag边界。在实施方式中,分派通知映射器新的检查点开始,并且映射器重命名累加器寄存器条目。在替代实施例中,检查点边界基于每n个指令设置,例如在64个、128个、192个、256个指令等。
63.在一方面,分派单元跟踪最年轻/当前检查点开始itag。比检查点开始itag年轻的所有指令属于该检查点。这些指令可以是累加指令或其他独立操作,例如,分支、控制指令、加载指令和/或存储指令。在实施例中,从分派向ict提供检查点开始itag,并且ict确定哪些指令在检查点中(例如构建哪些指令在检查点中的掩码)。例如,在一方面中,在ict条目中提供额外位以将指令识别为检查点开始itag或检查点itag。在示例中,如果检查点开始指令是itag 0x05,并且检查点边界基于每六十四(64)个指令(例如,每n个指令),则itag 0-4在检查点外部,并且itag 5-63在检查点内部。分派具有最年轻/当前检查点开始itag,并且检测指令何时将触发新检查点。分派知道已经分派的指令的数量(通过其自身的逻辑)并且检测何时分派累加指令。响应于在越过itag边界之后以累加器寄存器文件为目标,在实施例中,分派通知映射器新的检查点开始,并且映射器重命名累加器寄存器条目。在实施例中,为了开始新的检查点,使用(例如设置)位或编码来分配新的累加器标签(acctag)和以旧的累加器寄存器条目作为源。在一个或多个实施例中,分派将新的检查点开始itag发送到ict,并且ict开始新的检查点。新的检查点开始itag也存储在分派单元中,并且在实施例中,存储在特殊完成/异常宏(spcomp)中。
64.在示例中,累加器寄存器文件将每线程保持高达三(3)个检查点。在每线程有多达三(3)个检查点的示例中,在一方面中,特殊完成宏(spcomp)将存储每线程多达三(3)个检查点开始itag。设想每个线程的其他数量的检查点,例如每个线程四(4)个检查点,并且将部分地取决于累加器寄存器文件的大小。单独的累加器寄存器文件空闲列表维护并跟踪所分配的和空闲的累加器寄存器文件标签(acctag)的计数。
65.为了将累加器寄存器文件条目释放回空闲列表使得它们可被重用,检查点内的指令应当被完成。ict查看检查点中的指令(itag)的完成位(映射到同一组累加器寄存器文件条目的一组指令),并且如果检查点中的所有指令完成,则检查点完成。当完成检查点时,释放对应于该检查点的累加器寄存器文件条目的映射,将那些累加器寄存器文件条目释放回累加器寄存器文件空闲列表。在检查点开始itag是0x05并且itag 5-63在检查点内的示例中,itag 6-63需要在该检查点可以完成之前完成。为了完成检查点,在实施例中,itag 0x05应当是接下来完成的(ntf),检查点中的所有其他指令应当已经完成,并且spcomp宏完成检查点开始指令(itag)。在实施例中,检查点开始itag是检查点中的要结束的最后指令。在一个或多个实施例中,spcomp宏将处理先前检查点的结束/完成,同时还存储当前检查点开始指令(itag)。
66.在示例中,检查点0将累加器结果(例如,密集数学执行单元结果)映射到累加器寄存器文件条目0:7。检查点1将累加器结果(例如,密集数学执行单元结果)映射到累加器寄存器文件条目8:15,从而驱逐检查点0映射。检查点映射被逐出到历史缓冲器(srb),其中位或标签编码(例如,stftag)指示其是累加器寄存器条目。当检查点映射被驱逐到历史缓冲器(srb)时,累加器寄存器条目中的数据被保持在检查点的累加器寄存器条目中。在实施例中,检查点开始itag未由发布队列(isq)完成。这将阻止比检查点开始itag年轻的指令的完成。在实施例中,检查点开始指令被标记成非完成,或者异常完成。检查点2将累加器结果(例如,密集数学执行单元结果)映射到累加器寄存器文件条目16:23,从而驱逐检查点1映射到历史缓冲器(srb)。当检查点1完成时,从srb中释放检查点0映射,从而将累加器条目0:7(例如,检查点0累加器寄存器文件条目(acctag))释放回空闲列表。这些条目(标签)可用于被分配给新检查点中的新指令。
67.如果例如由于分支或加载未命中而在检查点内存在清除,则必须清除整个检查点。在一方面,异常宏将清除itag与线程的检查点开始itag进行比较,并且生成新的清除请求,清除检查点开始itag,并恢复先前检查点。异常宏应当使刚清除的检查点开始itag无效。历史缓冲器(srb)将恢复先前累加器寄存器映射至映射器以及在检查点中修改的任何其他gpr或vsr。历史缓冲器(srb)会将之前的检查点开始itag恢复至分派和异常宏两者。先前检查点可能尚未完成,并且需要检查点开始itag来完成先前检查点。
68.参考下面的表1、表2和表3示出了累加器寄存器文件的清除操作的示例,其中,表1和表3示出了映射器中的数据,表2示出了历史缓冲器(srb)中的数据。检查点开始itag通过粗体示于表1-表3中。检查点0开始itag是0x0f(itag 0x0f-0x3f),并且检查点1开始itag是0x40(itag 0x40-0x7f)。表1示出清除操作之前的映射器中的数据,表2示出清除操作之前的历史缓冲器(srb)中的数据。
[0069][0070]
表1示出映射器当前具有检查点1数据,其中映射器条目已经针对每个累加器指令用新itag更新,但是保持从检查点开始分配的累加器标签(acctag)。历史缓冲器或srb具有检查点0数据。在处理器中存在清除操作,其中清除itag是0x47,其是检查点1的一部分。在该示例中,检查点1具有0x40的检查点开始itag,因此处理器将清除检查点开始itag 0x40并恢复先前检查点。清除检查点开始itag 0x40将恢复历史缓冲器(srb)条目0-4(检查点0)并更新映射器。在阴影行中在表3所示的映射器中更新检查点0数据。
[0071]
表3
[0072][0073]
图7是根据一个实施例的示例性流程图,示出并描述了根据本公开的实施例的在处理器中处理数据(例如,执行指令)的方法,在一个实施例中,包括在处理器中处理和处置密集数学指令(例如,mma(“ger”)指令)。更具体地,在一方面中,该方法针对检查点设置,例如,在多个操作或指令之后进行重命名以及将数据写入到新的累加器寄存器条目。虽然为方便起见而不是为了限制本公开而将方法700描述为包括一系列和/或多个步骤,应当理解的是,该过程不需要作为一系列步骤进行和/或这些步骤不需要以相对于图7所示出和描述的顺序进行,但是该过程可以被集成和/或一个或多个步骤可以一起、同时地执行,或者这些步骤可以按照公开的顺序或者按照替代的顺序执行。
[0074]
图7中的方法700涉及在处理器中处理数据,更具体地涉及通过使用密集数学执行单元(例如,mma执行单元)来处理密集数学操作。更具体地,在一个方面,方法700涉及对累加器寄存器文件进行检查点设置,例如,在越过检查点边界之后(例如,在多个操作/指令之后或在多个(n个)指令之后)向一个或多个新的累加器寄存器文件条目重命名和写入数据。
在705处,提供密集数学执行单元。在示例中,密集数学执行单元是矩阵-乘法-累加(mma)单元。在一个或多个示例中,密集数学执行单元可以是被布置为推断引擎的多个mma单元。构想了其他密集数学执行单元。
[0075]
在一个或多个实施例中,在710处,优选地与密集数学执行单元相关联地提供累加器寄存器文件。在实施例中,累加器寄存器文件对于一个或多个密集数学执行单元是本地的,并且在一个方面,累加器寄存器文件驻留在mma单元中。优选地,累加器寄存器文件具有比处理器中的主寄存器文件的位字段宽度宽的位字段宽度。在实施例中,累加器寄存器文件是512位宽,而处理器中的主寄存器文件是128位宽。针对累加器寄存器构想了其他位宽度。根据一个方面,多于一个主寄存器文件条目可被映射到累加器寄存器文件。例如,在操作期间四个连续的主寄存器文件被映射到一个累加器寄存器文件。在替代实施例中,累加器寄存器文件与主寄存器文件统一并驻留在主寄存器文件中。合并累加器寄存器的统一寄存器文件优选地与密集数学执行单元相关联。
[0076]
在一个或多个实施例中,在715处,启动累加器寄存器文件。在一个或多个实施例中,一组一个或多个累加器寄存器文件条目被启动。在实施例中,响应于用于密集数学执行单元操作的指令,启动累加器寄存器文件(例如,该组一个或多个累加器寄存器文件条目)。例如,在累加器寄存器文件是密集数学执行单元操作的源的情况下,累加器寄存器文件被启动。在实施例中,启动累加器寄存器文件包括将累加器寄存器文件中的数据与驻留在主寄存器文件(例如,vs寄存器文件)中的数据或驻留在主存储器中的数据同步。例如,启动指令可将数据从主寄存器文件移动到累加器寄存器文件。启动累加器寄存器文件还可包括清零(clear)累加器寄存器文件中的数据,例如,将累加器寄存器文件条目中的数据置零。在一个或多个实施例中,密集数学指令(例如,mma“ger”指令)可以不具有累加器寄存器文件源数据,并且该密集数学指令将被认为是自启动的。在一个或多个方面中,当首先从主寄存器文件、从主存储器或作为自启动指令的结果(其中累加器寄存器文件条目中的数据被置零)写入累加器寄存器文件时,累加器寄存器文件被启动。在一个或多个实施例中,该累加器寄存器文件分配累加器寄存器文件重命名,该累加器寄存器文件被启动,并且该累加器寄存器文件中的数据的值被设置为主寄存器文件中的值、主存储器中的值、或被置零。
[0077]
在715处,在一个或多个实施例中,创建(例如,开始)检查点,并且存储检查点开始itag。在一方面,分派单元检测开始检查点的指令。在实施例中,ict开始检查点,在实施例中,检查点开始itag被存储在分派单元和/或特殊完成/异常宏(spcomp)中。在一个或多个实施例中,密集数学执行单元(例如,mma和/或推断引擎)在720处经历密集数学操作。即,使用一个或多个密集数学执行单元(例如,推断引擎和/或mma单元)来执行密集数学操作。
[0078]
在730处,确定是否越过检查点边界。如果检查点边界未被越过(730:否),则在740处,密集数学单元操作的结果被写回当前正被使用的累加器寄存器文件条目,例如,在使用的累加器寄存器文件条目。即,在示例中,累加器寄存器文件条目在密集数学执行单元操作期间被用作源和目标两者。密集数学执行单元的结果优选地在没有重命名的情况下多次被写回相同的目标累加器寄存器文件条目。即,在实施例中,单个累加器寄存器文件目标重命名可被重写多次。在一个或多个方面,响应于密集数学执行单元指令(例如,“ger”指令),没有写回到主寄存器文件,相反,密集数学执行单元本地的累加器寄存器(例如,mma单元)存储该结果,而主寄存器文件不存储该结果。以此方式,密集数学执行单元(例如,推断引擎
和/或mma单元)在不重命名主寄存器文件条目的情况下操作。在实施例中,响应于密集数学执行单元将结果写回到累加器寄存器,累加器寄存器文件条目被做标志或标记,例如标记为脏的。
[0079]
如果在730处确定检查点边界被越过或将被越过(730:是),则在735处开始用于累加器寄存器文件的新检查点(例如,新累加器寄存器文件条目被启动)并且存储新检查点开始itag。如果在735处开始新的检查点,则在740处,密集数学执行单元操作的结果被写回到新的累加器寄存器文件条目,例如,自新的累加器寄存器文件条目被创建起当前使用的累加器寄存器文件条目。以此方式,在密集数学执行单元的结果已被写回到相同的累加器寄存器文件条目达一次或多次(例如,直到itag边界被越过)之后,如果指令以累加器寄存器文件为目标,则分配新的累加器寄存器文件条目并接收密集数学执行单元操作的结果。在一方面,新检查点由第一itag创建以将不活跃的累加器寄存器文件条目作为目标。在一方面中,越过itag边界之后的第一累加器操作开始和/或创建新检查点。在一个或多个实施例中,旧的累加器寄存器文件条目中的结果保留在旧的累加器寄存器文件条目中。可替代地,在一方面中可以驱逐旧的先前累加器寄存器文件条目的映射。
[0080]
是否开始或创建新检查点以及开始或创建新检查点的频繁程度可基于许多因素或标准。根据实施例,自检查点开始以来分派的指令的数量“n”可用于创建检查点边界。在这方面,检查点边界可被设置为在检查点开始itag之后的“n”个指令(itag)。可以根据期望的性能规定、预定、预先设置和/或改变数量“n”。在不期望许多清除的情况下,在检查点之前分派的指令的数量“n”可能较大或增加。在所描述的示例中,自检查点开始itag起的规定数量“n”个指令(itag)可以是六十四(64),尽管构想了其他数量。就这一点而言,计算自检查点开始itag被分派起所分派的指令的数量,并且如果自检查点开始起所分派的指令的数量等于或大于数量“n”,则在735处越过检查点边界并且新检查点被创建或将被创建。如果自检查点开始itag被分派起所分派的指令的数量n小于n,则检查点边界未被越过并且在740处,当前使用中累加器寄存器文件被用于写回密集数学操作的结果。
[0081]
可替代地,检查点边界可以是每n个指令。即,每n个指令存在新的检查点边界。因此,在第n个指令被设置为六十四(64)的示例中,检查点边界将在64个指令、128个指令、192个指令、(64
×
n)等处。在该示例中,计算并确定检查点边界itag,并且如果指令通过那些检查点边界中的一个,则在740处启动新的累加器寄存器条目,并且将结果写入到新的累加器寄存器条目。
[0082]
在745处,确定下一指令是否是密集数学执行单元操作的一部分。即,确定密集数学运算是否已完成。可确定密集数学操作是否已完成的一种方式是当累加器寄存器文件被解除启动时。如果密集数学操作未完成,或者下一指令是密集数学操作的一部分,例如以累加器寄存器文件条目为目标(745:是),则在745处,该方法继续到720并执行密集数学执行单元操作。在实施例中,当密集数学执行单元操作完成时(745:否),累加器寄存器文件的结果在750处被写回主寄存器文件和/或主存储器。在实施例中,累加器寄存器被解除启动,累加器寄存器文件条目中的值被写入到主寄存器文件(或主存储器)中,且累加器寄存器文件条目被解除分配。对此,将累加器寄存器文件条目中的结果写入主寄存器文件,其中,累加器寄存器文件条目处于使用中的当前已设置检查点的累加器寄存器文件条目中并且已完成。根据实施例,主寄存器文件响应于指令而被写回,例如从累加器寄存器文件条目移动到
主寄存器文件指令(xxmfacc),以及从累加器寄存器文件条目移动和存储指令(stxacc)。当映射到累加器寄存器文件条目的主寄存器文件条目作为源或目标并且累加器寄存器文件条目是脏的时,累加器寄存器的结果也被写回到主寄存器文件。在一方面中,定义的读取累加器指令将数据从累加器寄存器文件移动到主寄存器文件。在实施例中,在读取累加器之后,一系列存储操作(例如,“八倍/四倍字”存储操作)将读取主寄存器文件并且写入主存储器。
[0083]
在实施例中,当累加器寄存器文件条目是脏的并且由主寄存器访问时,硬件将解除启动累加器寄存器文件。在一方面,当主寄存器文件条目被定为目标并且映射的累加器寄存器条目被启动时,硬件将解除启动累加器寄存器,即使累加器寄存器不是脏的。硬件将运行将所有累加器寄存器文件条目写回到主寄存器文件的序列,将执行目标为主寄存器文件条目的操作,并且从重命名池(例如,空闲列表)解除分配每个累加器寄存器文件条目。
[0084]
在一方面,当密集数学指令(例如,“ger”指令)源自自上次解除启动(例如,通过xxmtacc或1dacc)以来未被启动的累加器寄存器文件时,硬件将启动该累加器寄存器文件条目。在一方面,硬件将运行启动累加器寄存器文件并分配累加器寄存器文件条目(重命名)的序列。然后将执行密集数学指令。
[0085]
本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质(或多个介质)。
[0086]
计算机可读存储介质可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字通用盘(dvd)、记忆棒、软盘、诸如穿孔卡或具有记录在其上的指令的槽中的凸出结构之类的机械编码设备、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输媒体传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
[0087]
本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0088]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c++等)和过程程序设计语言(诸如“c”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、
部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(lan)或广域网(wan))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
[0089]
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0090]
这些计算机可读程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
[0091]
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
[0092]
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者这些块有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
[0093]
此外,根据不同实施例的系统可包括处理器和与处理器集成和/或可由处理器执行的逻辑,逻辑被配置为执行本文所述的一个或多个处理步骤。通过与其集成,意味着处理器具有嵌入在其中的作为硬件逻辑的逻辑,诸如专用集成电路(asic)、现场可编程门阵列(fpga)等。处理器可执行的意思是逻辑是硬件逻辑;软件逻辑,诸如固件、操作系统的一部分、应用程序的一部分;等等,或硬件和软件逻辑的某种组合,所述硬件和软件逻辑可由所述处理器访问并且被配置为在由所述处理器执行时使所述处理器执行某种功能。软件逻辑可以存储在任何存储器类型的本地和/或远程存储器上,如本领域中已知的。可以使用本领域已知的任何处理器,诸如软件处理器模块和/或硬件处理器,诸如asic、fpga、中央处理单元(cpu)、集成电路(ic)、图形处理单元(gpu)等。
[0094]
将清楚的是,前述系统和/或方法的不同特征可以以任何方式进行组合,从而从以
上呈现的描述中创建多个组合。
[0095]
还应当理解,本发明的实施例可以按代表客户部署的服务的形式来提供,以按需提供服务。
[0096]
已经出于说明的目的呈现了本发明的各个实施例的描述,但并不旨在是详尽的或限于所公开的实施例。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员将是显而易见的。本文使用的术语被选择来最好地解释实施例的原理、实际应用或对在市场中找到的技术的技术改进,或者使得本领域普通技术人员能够理解本文公开的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1