首页> 中国专利> 寄存器文件高速缓存的软分区

寄存器文件高速缓存的软分区

摘要

描述了对寄存器文件高速缓存的软分区。所述软分区通过基于在多线程乱序处理器中指令属于的线程而对与所述指令相关联的目的寄存器重命名来实现。寄存器重命名可以由寄存器重命名模块来执行,并且在实施例中,寄存器重命名模块接收用于寄存器重命名的指令,所述指令识别与所述指令相关联的线程和一个或多个架构寄存器。可用的物理寄存器然后基于所识别的线程向每一个所识别的架构寄存器分配。在一些示例中,将在多线程乱序处理器中的物理寄存器在逻辑上划分成组,并且基于线程到组映射来分配物理寄存器。在另外的示例中,线程到组映射不是固定的,但可以基于在多线程乱序处理器中的一个或多个线程的活动水平来更新。

著录项

  • 公开/公告号CN104679663A

    专利类型发明专利

  • 公开/公告日2015-06-03

    原文格式PDF

  • 申请/专利权人 想象力科技有限公司;

    申请/专利号CN201410705339.1

  • 发明设计人 A·霍特;H·杰克逊;

    申请日2014-11-27

  • 分类号

  • 代理机构永新专利商标代理有限公司;

  • 代理人刘瑜

  • 地址 英国赫特福德郡

  • 入库时间 2023-12-18 09:13:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-10-11

    授权

    授权

  • 2018-11-27

    著录事项变更 IPC(主分类):G06F12/02 变更前: 变更后: 申请日:20141127

    著录事项变更

  • 2018-11-27

    专利申请权的转移 IPC(主分类):G06F12/02 登记生效日:20181108 变更前: 变更后: 申请日:20141127

    专利申请权、专利权的转移

  • 2017-01-04

    实质审查的生效 IPC(主分类):G06F12/02 申请日:20141127

    实质审查的生效

  • 2015-06-03

    公开

    公开

说明书

背景技术

很多现代处理器都是多线程的,并且每一个线程都能够在同一处理器核心上同步执行。在多线程处理器中,在核心内的一些资源被复制(使得存在用于每一个线程的资源的实例),并且一些资源在线程之间共享。在资源在线程之间共享的场合,其中一个线程的操作干扰其它线程的操作,性能瓶颈就可能出现。例如,在高速缓存资源在线程之间共享的场合,当一个线程用数据填充高速缓存时,冲突可能出现。当数据被添加到已经充满的高速缓存时,可以由其它线程(被称为“受害者”线程)使用的数据可以被迁出(用于为新数据提供空间)。当接下来需要迁出的数据时然后需要将所述迁出的数据再次取回,并且这影响了需要数据的受害者线程的性能。对此的解决方案是为每一个线程提供单独的高速缓存。

下面描述的实施例不限于解决已知的多线程处理器的任何或所有缺点的实现。

发明内容

提供本发明内容用于以简化形式介绍下面在具体实施方式中进一步详细地描述的选择的概念。本发明内容并不是要识别所要求保护的主题的关键特征或本质特征,也不是要用于有助于确定所要求保护的主题的范围。

描述了寄存器文件高速缓存的软分区。通过基于在多线程乱序处理器中指令属于的线程来对与所述指令相关联的目的寄存器进行重命名,从而实现所述软分区。寄存器重命名可以由寄存器重命名模块来执行,并且在实施例中,寄存器重命名模块接收用于寄存器重命名的指令,所述指令识别与该指令相关联的线程以及一个或多个架构寄存器。然后基于识别出的线程将可用的物理寄存器分配给每一个识别出的架构寄存器。在一些示例中,将在多线程乱序处理器中的物理寄存器在逻辑上划分成组,并且基于线程到组的映射来分配物理寄存器。在另外的示例中,线程到组的映射不是固定的,而可以基于多线程乱序处理器中的一个或多个线程的活动水平来对线程到组的映射进行更新。

第一方面提供了使用寄存器重命名来在包括多个物理寄存器的多线程乱序处理器中的线程之间动态地分配分配物理寄存器以及资源的方法,所述方法包括:接收用于寄存器重命名的指令,所述指令识别架构寄存器和与指令相关联的线程;至少基于与所述指令相关联的线程将来自处理器中的多个物理寄存器的可用的物理寄存器分配给架构寄存器,其中多个物理寄存器中的每一个都被映射到在动态分配的资源中的一个或多个存储位置;以及存储寄存器分配的细节。

第二方面在多线程乱序处理器中提供了模块,所述模块被布置用于使用寄存器重命名来在处理器中的线程之间动态地分配分配物理寄存器以及资源,多线程乱序处理器包括多个物理寄存器和包括硬件逻辑的模块,所述硬件逻辑被布置用于:至少基于与指令相关联的线程将来自处理器中的多个物理寄存器中的可用物理寄存器分配给指令中的架构寄存器,其中,多个物理寄存器中的每一个被映射到动态地分配的资源中的一个或多个存储位置。

另一方面提供了以下内容:实质上参考附图的图2或4所描述的方法;实质上参考附图的图1或3描述的处理器;计算机可读存储介质,所述计算机可读存储介质具有在其上编码的计算机可读程序代码,以用于生成包括本文描述的模块的处理器;以及计算机可读存储介质,所述计算机可读存储介质具有在其上编码的计算机可读程序代码,以用于生成被配置用于执行本文描述的方法的处理器。

本文描述的方法可以由计算机执行,所述计算机配置有以机器可读形式存储在有形存储介质上的软件,例如以包括计算机可读程序代码的计算机程序的形式,所述计算机可读程序代码用于配置计算机来执行所述方法的组成部分或以包括计算机程序代码单元的计算机程序的形式,当所述程序在计算机上运行时,所述计算机程序代码单元适合于执行本文所述的任何方法的所有步骤,并且其中计算机程序可以体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括盘、拇指驱动器、存储卡等,并且不包括传播的信号。软件可以适合于在并行处理器或串行处理器上执行,使得方法步骤可以以任何适当的顺序或同时执行。

本文描述的硬件部件可以由具有在其上编码的计算机可读程序代码的非暂时性计算机可读存储介质生成。

这表示固件和软件可以单独地使用并且是有价值的。这是要包括运行或控制无智能”或标准硬件用于执行期望功能的软件。还是要包括“描述”或定义硬件的配置的软件(例如,HDL(硬件描述语言)软件,如用于设计硅芯片或用于配置通用可编程芯片的),从而用于执行期望功能。

优选的特征可以在适当时相结合(这对技术人员而言是显而易见的),并且可以与本发明的任何方面相结合。

附图说明

作为示例,参考下面的附图来描述本发明的实施例,其中:

图1是示例性多线程乱序处理器的示意图;

图2示出了物理寄存器分配的示例性方法的流程图;

图3是另一示例性多线程乱序处理器的示意图;

图4示出了物理寄存器分配的进一步的示例性方法的流程图;以及

图5示出了图4所示的物理寄存器分配的方法中的另一示例性分配方法的流程图。

在全部附图中使用共同的附图标记来指示相似的特征。

具体实施方式

下面仅作为示例来描述本发明的实施例。这些示例表示申请人目前已知的实施本发明的最佳方式,但是它们并不是可以实现本发明的唯一方式。具体实施方式阐述了示例的功能以及用于构造并且运行所述示例的步骤的序列。然而,相同或等效的功能和序列可以由不同的示例来完成。

如上所述,冲突可以出现,其中在处理器(或处理器核心)内的多个线程共享资源,例如高速缓存。可以在处理器(或处理器核心)上运行的线程之间共享的高速缓存的一个示例是寄存器文件高速缓存(RFC)。RFC是小型高速缓存(例如,在尺寸上有32个条目),其用于存储最近写入的寄存器,用于通过随后的指令来使访问这些寄存器的延迟最小化。这些最近写入的寄存器是最可能由随后的指令读取的寄存器。在没有RFC的情况下,寄存器需要从更大的寄存器文件(RF)访问。从RF(其可以例如具有128个条目)取出寄存器与访问RFC相比具有更高的延迟(例如,2个周期而不是1个周期);然而,RFC比RF小得多。当RFC充满时,新条目将旧条目从RFC迁出,并且存在可以用于确定哪个条目被迁出的多个不同的策略(例如,最近最少使用或最近最少插入)。

如果所请求的寄存器在RFC中被找到,则这是高速缓存命中,并且寄存器值可以被立即返回。然而如果所请求的寄存器没有在RFC中找到(高速缓存未命中),则从RF取出它并且引起正在请求的指令塞入并且重新发出,这招致(例如,4个或更多周期的)性能惩罚。如果RFC具有高命中率(即,产生高速缓存命中的所请求的寄存器的比例很高,例如95%+),则塞入的指令的数量减少并且处理器的性能提高。

乱序处理器可以通过以不同于程序的顺序的序列来执行指令来提供改进的计算性能,使得当指令的输入数据是可用的时执行所述指令,而不是等待程序中前面的指令执行。然而,程序中的指令流有时可以在执行期间(例如由于分支或跳跃指令)而改变。在这样的情况下,分支预测器常常用于预测将采取哪个指令分支,以允许推测地取出在所预测的分支中的指令并且乱序地执行。这意味着分支误预测可能发生。其它推测技术(例如数据的预先取出)也可以在乱序处理器中使用来提高性能。

误推测线程(例如,做出不正确的分支预测或不适当地预先取出数据的线程)不执行任何有用的工作(例如,因为在误推测之后执行的所有指令需要冲掉/反绕)。在这样的误推测线程写入RFC的场合,它可以迁出由处理器中的另一线程(受害者线程)使用的寄存器值,并且因此影响了受害者线程的性能。

降低一个线程对另一同时执行的线程的影响的一种方式是将单独的资源分配给每一个线程(例如,使每一个线程具有单独的RFC)。这意味着误推测线程将只污染其自己的RFC。然而,当不是所有线程都是同等的活跃(例如,不活跃线程的RFC将是利用不足的,而在同一处理器核心中的活跃线程的RFC可能是满的)时,这导致资源浪费。

降低一个线程对另一线程的影响的另一方法是限制线程写入RFC的具体的方式(其中高速缓存是组相联或完全相联的高速缓存);然而这限制了可以实现的相关性并且不能应用于直接映射的高速缓存。

在下面描述的实施例中,基于哪个线程的指令写入物理寄存器来将物理寄存器(在RF中)分配给线程。在本文这可以被称为智慧或智能寄存器分配。在本文描述的示例中,基于线程的索引(或ID或任何其他标识符)(即,其中线程0具有索引0,线程1具有索引1,线程m具有索引m,等)来分配物理寄存器;然而应当认识到,等效的机制(例如,其以不同的方式来分配索引或以不同的方式来分配寄存器,同时仍然取决于哪个线程的指令正在写寄存器)还可以用于将物理寄存器分配给线程。所述分配机制(其可以包括线程到组映射或映射标准)可以严格地强加或可以动态地(在运行时)放宽,用于在优先基础上操作,使得如果一个线程比同一处理器核心中的其它线程更活跃(例如,比其它线程发出更多的指令),则可以向活跃线程分配寄存器,所述寄存器否则将(即,如果分配机制是固定的)分配给另一较不活跃的线程。以这种方式使用灵活的分配机制,确保活跃线程的执行不被阻挡,而不管资源是否是可用的,并且同时提高了资源使用的效率(并且特别是RFC,其可以是直接映射的或是组相联的)。

在处理器(或处理器核心)内的物理寄存器可以被考虑为划分(在逻辑上而不是在物理上)成组,不同的组用于不同的线程。线程和组之间的关系可以被称为线程到组(线程-组)映射(例如,向线程A分配来自组A的寄存器,向线程B分配来自组B和C的寄存器等)。在一些示例中,寄存器的组的数量可以与在处理器核心内的线程的数量相同。例如,可以存在两个线程和两组寄存器,向第一线程(线程0)分配来自第一组的寄存器,而向第二线程(线程1)分配来自第二组的寄存器。在其它示例中,可以存在比线程更多的寄存器组,例如,2个线程和4组寄存器。在这样的示例中,可以向更活跃的(或更高优先级的)线程分配来自多于一个组的寄存器,并且可以向更不活跃的线程分配来自单个组的寄存器。在另外一些示例中,可以存在比寄存器的组更多的线程,例如4个线程和2组寄存器,向最活跃的线程分配来自一个组的寄存器,而向其它三个线程分配来自另一组的寄存器。

线程到组映射可以由映射标准来进行限定。映射标准可以明确地识别寄存器的组(例如,组一包括偶数寄存器,而组二包括奇数寄存器),并且在线程和这些组之间的映射(例如,线程0映射到组一,而线程1映射到组二)或可选地,物理寄存器到组的划分在映射标准内可以是隐含的(例如,偶数线程被映射到偶数寄存器,并且奇数线程被映射到奇数寄存器)。描述映射标准的这两种方式在功能上是等效的,并且在逻辑上将寄存器划分成组并基于指令所属于的线程来分配来自特定的组的寄存器。

图1是示例性多线程乱序处理器100的示意图。处理器100包括在本文称为线程0和线程1的两个线程102、104。每一个线程102、104包括:取出阶段106、108;解码阶段110、112;重排序缓冲区114、116以及提交阶段118、120。在示出的示例中,线程102、104共享保留站122、124、功能单元126、128、寄存器文件高速缓存(RFC)130、寄存器文件(RF)134和寄存器重命名模块136。寄存器重命名模块136维持每一个线程的寄存器重命名表138、139。在一些示例中,可以存在用于每一个功能单元的单独的RFC;然而,下面描述的方法同样是可应用的,而不管RFC是否在一些/所有功能单元126、128之间共享,或存在用于每一个功能单元的一个RFC。每一个功能单元可以在属于任何线程的指令上操作。

在处理器100中的每一个线程102、104包括取出阶段106、108,所述取出阶段106、108被配置用于从程序(以程序顺序)取出指令,如由程序计数器(PC)所指示的。一旦指令被取出,就将所述指令提供到解码阶段110、112。

解码阶段110、112被布置用于解释指令并且与执行寄存器重命名的寄存器重命名模块136进行交互。特别地,每一个指令可以包括寄存器写操作;一个或多个寄存器读操作;和/或算术或逻辑操作。寄存器写操作写入目的寄存器,并且寄存器读操作从源寄存器读取。在寄存器重命名期间,在指令中提到的每一个架构寄存器(例如,每一个源和目的寄存器)利用物理寄存器来代替(或重命名)。

对于寄存器写操作,向所提到的架构寄存器(例如,目的寄存器)分配了未使用的(或可用的)物理寄存器,并且所分配的物理寄存器可以由寄存器重命名模块136确定。任何分配都可以存储在相关线程的寄存器重命名表138、139中,其中寄存器重命名表138、139是示出了每一个架构寄存器和所分配的物理寄存器之间的映射的数据结构,直到所述指令在程序流中。正是在本例中由寄存器重命名模块136执行的所述分配过程,其以新的方式分配寄存器并且将在下面对其进行更详细地描述。对于寄存器读操作,特定架构寄存器(例如,源寄存器)的正确物理寄存器可以根据由架构寄存器索引的适当的寄存器重命名表138或139中的条目确定。

在指令经过解码阶段110、112之后,将所述指令插入到重排序缓冲区114、116(ROB)中并且将其分派到保留站122、124,用于由相对应的功能单元126、128执行。分派了指令的保留站122、124可以是基于指令的类型的。例如,DSP指令可以分派到第一保留站122(保留站0),并且所有其它指令可以分派到第二保留站124(保留站1)。

重排序缓冲区114、116是使指令能够被乱序地执行但按顺序提交的缓冲区。重排序缓冲区114、116保存以程序顺序将其插入的指令,但在ROB114、116内的指令可以由功能单元126、128不按顺序地执行。在一些示例中,可以将重排序缓冲区114、116形成为环形缓冲区,所述环形缓冲区具有指向ROB 114、116中的最老指令的头部和指向ROB 114、116中的最新指令的尾部。指令以程序顺序从重排序缓存器114、116输出到提交阶段118、120。换句话说,当执行指令时,所述指令从ROB 114、116的头部输出,并且头部递增到ROB 114、116中的下一指令。从重排序缓冲区114、116输出的指令被提供到提交阶段118、120,所述提交阶段118、120将所述指令的结果提交到寄存器/存储器。

每一个保留站122、124从解码阶段110、112接收指令并且将它们存储在队列中。指令在队列中等待,直到它的输入操作数值是可用的为止。一旦所有指令的操作数值都是可用的,指令就被认为准备好执行并且可以被发到相对应的功能单元126、128用于执行。指令的操作数值可以在更早的、更老的指令的操作数值之前是可用的,允许指令在那些更早的、更老的指令之前离开保留站122、124队列。

每一个功能单元126、128负责执行指令,并可以包括一个或多个功能单元管线。功能单元126、128可以被配置用于执行特定类型的指令。例如,一个或多个功能单元126、128可以是整数单元、浮点单元(FPU)、数字信号处理(DSP)/单指令多数据(SIMD)单元或乘法累加(MAC)单元。整数单元执行整数指令,FPU执行浮点指令,DSP/SIMD单元具有同时在多个数据点上执行相同的操作的多个处理元件,并且MAC单元计算两个数字的乘积并且将该乘积加到累加器。功能单元和其中的管线可以具有不同的长度和/或复杂度。例如,FPU管线一般比整数执行管线更长,因为它通常执行更复杂的操作。

当执行从保留站122、124接收的指令时,每一个功能单元126、128在一个或多个共享寄存器文件134中执行读取和写入物理寄存器。为了减少延迟,最近写入的寄存器存储在寄存器文件高速缓存130中,并且在一些示例中可以存在多于一个的RFC 130(例如,每功能单元一个RFC)。在一些情况下,在寄存器文件高速缓存130上执行的寄存器写操作立即写入寄存器文件134。在其它情况下,随着资源变得可用,寄存器写操作随后写入寄存器文件134。

功能单元将寄存器值写入的RFC中的位置,取决于被写入的特定的物理寄存器。例如,如果RFC包括8行,则由功能单元写入物理寄存器32的寄存器值将存储在RFC中的行(或索引)0中,因为32模8=0(其也可以写为32mod 8=0),即,当32除以8时,余数为零。在其它示例中,模函数可以不使用,并且可以存在可选的方案,通过所述方案,RFC中的位置由被写入的特定的物理寄存器指定(例如,基于最高有效位,使得寄存器0-7存储在行0中,寄存器8-15存储器在行1中等)。

因此,通过如本文所述的智能地将物理寄存器分配给线程(在寄存器重命名模块136中),用于不同线程的RFC中的条目可以彼此保持分离(除了分配方法被放宽的场合以外,如下面参考图4和5描述的),并且误推测线程于是将不影响其它线程的操作,因为它将不迁出有用的数据,以便存储随后证明是无用的数据。

如果寄存器文件高速缓存130不包括在寄存器读操作中指定的寄存器的条目,则存在寄存器文件高速缓存未命中。当寄存器文件高速缓存未命中发生时,寄存器读操作在寄存器文件134上执行,这增加了延迟并且可能需要相关联的指令和任何其它稍后发出的相关指令从功能单元管线被移除或冲掉(如上所述)。

处理器100还可以包括分支预测器(未示出),其被配置用于在已知引起可能的流程变化的指令(例如,分支指令)的情况下预测程序流将采取哪个方向。如上所述,分支预测是有用的,因为它使指令能够在分支指令的结果是已知的之前由处理器100推测地执行。

当分支预测器准确地预测程序流时,这提高了处理器100的性能。然而,如果分支预测器不正确地预测了分支方向,则误预测发生,这需要在程序可以继续之前被校正。为了校正误预测,发送到ROB 114、116的推测指令被丢弃,并且取出阶段106、108开始从正确的程序分支取出指令。

图2示出了可以由图1所示的寄存器重命名模块136执行的物理寄存器分配(或寄存器重命名)的示例性方法的流程图200。应当认识到,虽然图1示出了包括两个线程102、104的处理器,但是本文所述的方法可以应用于任何多线程乱序处理器(具有两个或多个线程)。

当接收到用于寄存器重命名的指令时,物理寄存器分配被触发(框102)。指令(在框202接收)从相关联的线程的解码阶段110、112接收,并且识别与所述指令相关联的线程(即,取出特定指令的线程)和一个或多个架构寄存器,其为在寄存器重命名操作中被分配的物理寄存器(即,指令的目的寄存器)。相关联的线程可以隐含地被识别(例如,基于指令从哪个解码阶段110、112接收),或相关联的线程可以在利用从前面的阶段接收的指令传递的边带数据内明确地识别出。

接着基于与指令相关联的线程(例如,基于映射标准)将物理寄存器分配给每一个识别出的架构目的寄存器(框204),并且这个分配被记录在寄存器重命名表中(框206)。除了相关联的线程(例如,基于线程的活动性,正如下面参考图4和5更详细描述的)以外,分配还可以基于其它因素,并且这些其它因素可以包括在映射标准内或在不同的情况下引起不同映射标准的使用。

图2还示出分配操作的两个示例性实现(在框204中),表示为204a-204b。在第一示例204a中,在寄存器文件134内的物理寄存器在逻辑上划分成组(框210),并且基于相关联的线程来选择寄存器的组(框212),使用映射标准。然后将来自选定的寄存器的组的可用的(或自由的)物理寄存器分配给每一个架构目的寄存器(框214),即,将来自选定的组的不同的物理寄存器分配给框202接收的每一个指令的每一个架构目的寄存器。

寄存器在本文中被描述为逻辑上划分成组,因为它们未在物理上划分成组,并且组内的寄存器可以不是连续的,并且寄存器的分组可以随着时间而改变。

应该认识到,寄存器到组的逻辑划分可以是固定的,并且所以框210(在示例204a中)可以不是每次执行的和/或可以在物理寄存器分配之前执行(例如,在方法200之前)。

在第二示例204b中,访问映射标准(框216),并且然后基于映射标准将物理寄存器分配给在框202中接收的指令中识别的每一个目的架构寄存器(框218)。在本示例中,映射标准至少包括与指令相关联的线程,并且如上所述,寄存器到组的逻辑划分可以被吸收到映射标准中(即,使得映射标准将寄存器有效地划分成逻辑组)和/或映射标准可以明确地指定物理寄存器的特定组。作为结果,虽然不同地进行了表达,但是示例204a和204b在功能上是等效的。

图2附加地示出了映射标准(正如在框216中访问的和在框218中使用的)的四个示例,表示为204c-204f。在示例204c中示出了包括两个线程(例如,如图1所示)的处理器的示例,并且这些线程可以被表示为线程0和线程1。在本示例中,映射标准基于线程是奇数的还是偶数的,并且如果相关联的线程是偶数的(框220中的“是”),即,对于线程0,将偶数寄存器分配给在框202中接收的指令中识别的每一个架构目的寄存器(框222)。然而,如果相关联的线程是奇数的(框220中的“否”),即,对于线程1,将奇数寄存器分配给在框202中接收的指令中识别的每一个架构目的寄存器(框224)。如上所述,这个映射标准基于寄存器的编号(奇数寄存器和偶数寄存器)在逻辑上将寄存器划分成两组。

在只存在两个线程的场合,所述示例204c将一个线程的高速缓存迁出的结果与另一线程隔离。所述示例204c还可以应用于包括多于两个线程的处理器;然而在这种情况下,不存在完全的隔离,但替代地,一个线程的高速缓存迁出的结果只影响一半的线程(例如,其中偶数线程的写指令引起RFC条目被迁出以使新值能够被存储,所迁出的条目将属于偶数线程,并且对奇数线程不存在影响)。

在示例204c中的映射标准可以等效于在示例204d中所示的映射标准。在示例204d中,寄存器根据下列值分配:

register_number mod 2

其中register_number是寄存器的编号。换句话说,物理寄存器根据register_number mod 2的值在逻辑上被划分成组。为了使所述示例204d等效于前面的示例204c,可以将寄存器分配给线程i,如果:

register_number mod 2=i

这个映射标准可以被考虑为限定线程到组映射,线程i映射到包括满足register_number mod 2=i的那些寄存器的一组寄存器。

如同示例204c一样,示例204d还可以应用于包括多于两个线程的处理器。例如,使用四个线程(线程0、1、2、3),可以向偶数线程(线程0和2)分配寄存器,其中register_number mod 2=0,并且可以向奇数线程(线程1和3)分配寄存器,其中register_number mod 2=1。在这样的示例中,映射标准可以被考虑为如下限定线程到组映射:

●线程0映射到包括满足register_number mod 2=0的寄存器的组

●线程1映射到包括满足register_number mod 2=1的寄存器的组

●线程2映射到包括满足register_number mod 2=0的寄存器的组

●线程3映射到包括满足register_number mod 2=1的寄存器的组

虽然在本文描述的示例中,偶数线程被描述为分配偶数寄存器等,应当认识到在其它示例中,可以向偶数线程分配奇数寄存器,反之亦然,如下:

●线程0映射到包括满足register_number mod 2=1的寄存器的组

●线程1映射到包括满足register_number mod 2=0的寄存器的组

示例204e是示例204d的一般化。在示例204e中,可以考虑将寄存器在逻辑上划分成X个组,其中处理器包括X个线程,并且可以将寄存器分配给线程i,如果:

register_number mod X=i

最后的示例204f是前面的示例204c-204e的进一步的一般化,其中寄存器可以在逻辑上分成B组,其中处理器包括X个线程,并且可以将寄存器根据下列项的值分配给线程:

register_number modB

逻辑组因此包括满足下列标准的那些寄存器:

register_number mod B=b

不同的组具有不同的b值,其中b=0,1,…B-1。可以向线程分配来自一组或多组的寄存器,并且在一些示例中,可以向多个线程分配来自同一组的寄存器。线程到组的所述映射可以是固定的或在运行时期间动态地设置的。

如果B=X,则所述示例204f等效于示例204e,并且如果B=X=2,则所述示例204f等效于示例204c和示例204d二者。然而更通常地,B不必等于X(即,与处理器中的线程的数相比,可以存在不同数量的逻辑组),并且线程和寄存器的组之间的关系可以用任何方式定义,并且各种示例将在下面描述。如上所述,线程和组之间的映射可以是固定的或可以改变的(例如可以例如基于线程活动性或物理寄存器的可用性来动态地修改)。

如果B>X(即,存在比线程更多的组),则可以向每一个线程分配来自一组或多组的寄存器(向不同的线程分配来自不同组的寄存器),并且分配给线程的组的数量可以取决于特定线程的活动性。例如,在B=X+1的场合,可以向每一个线程分配来自B组中的不同一个寄存器,例外是最活跃的线程,可以向其分配来自B组的两组中的寄存器(其中这两组不用于其它线程中的任一个)。在另一示例中,B=αX,其中α是整数,并且每一个线程可以被映射到B组中的一个或多个(例如,取决于线程的活动性)。在线程到组的映射取决于活动性的场合,所述映射可以动态地改变。

可以存在对B的大小的上限,因为当B增加时,在每一个组中的物理寄存器的总数减小。在上面描述的分配方法严格实施的场合,B的大小由下列要求限制(除非允许死锁发生):对任何线程可用的物理寄存器的总数比架构寄存器的总数至少大一。所述至少一个附加的物理寄存器确保寄存器的自由列表不是空的,即使将物理寄存器分配给每一个线程的每一个架构寄存器时。在没有至少一个附加的物理寄存器的情况下,新指令可以不执行,因为重命名不可能发生。

如果B<X(即,存在比线程更少的组),则可以向两个或多个更不活跃的(和/或更小推测性的)线程分配来自同一组的寄存器。可以向更活跃的和/或更大推测性的线程分配来自寄存器的专用组的寄存器(即,其不用于将寄存器分配给其它线程)以便将更活跃的和/或更大推测性的线程的影响与其它线程隔离。例如,在B=2和X>2的场合,可以向最活跃的(和/或最大推测性的)线程分配来自一组的寄存器,并且可以向其它线程分配来自其它组的寄存器。在B=X-1的另一示例中,两个最不活跃的线程可以其它来自同一组的寄存器,(X个线程的)每一个其它线程映射到寄存器的专用组(只将其分配给该线程而不分配给其它线程)。

应当认识到,在204a-204f中所示的示例只示出一些方式,以所述一些方式可以基于与写指令相关联的线程将物理寄存器分配给每一个架构寄存器(在框204中),并且可以使用变形或替代的方法。例如,可以使用上面描述的方法的任何组合。

如上所述,被分配(在框204中)的物理寄存器接着确定最近写入的值在RFC 130内存储的位置。在RFC内对位置的分配基于物理寄存器的寄存器编号,并且可以使用上面描述的公式或任何其它方法。

在一些示例中,自由寄存器列表140可以用于跟踪来自寄存器的逻辑组中的每一个组中的哪些物理寄存器是可以用于分配的,并且可以包括多个子列表142,每一个子列表用于寄存器的每一组。每一个子列表都可以列出在寄存器的组中的未分配的(即,自由的)寄存器,并且当分配物理寄存器(例如在框204中)时可以由寄存器重命名模块136使用。在示例中,寄存器重命名模块136可以请求来自自由寄存器列表140的特定组的自由寄存器或可以访问该列表用于识别来自特定组的自由寄存器。对自由寄存器列表140的更新可以由自由寄存器模块144执行。

自由寄存器列表140、自由寄存器模块144或寄存器重命名模块136还可以记录在窗口(其可以按照时间段或寄存器分配的数量来定义)内从每组(或子列表)中分配的寄存器的数量,并且所述信息可以用于放宽或否则控制图2所示的寄存器分配方法的使用。

在使用自由寄存器列表140的场合,应当认识到,上面描述的分配机制可以由寄存器重命名模块136(如上所述)或由自由寄存器模块144实现。在分配机制(例如,如图2所示)由自由寄存器模块144实现的场合,寄存器重命名模块136从自由寄存器模块144请求用于特定线程的自由寄存器(例如,在框202中),并且自由寄存器模块144执行寄存器分配(框204)并且将自由寄存器的细节返回到寄存器重命名模块136,以便寄存器重命名模块136可以接着将所述分配存储在寄存器重命名表138、139中(在框206中)。

应当进一步认识到,寄存器重命名模块136和自由寄存器模块144的操作可以组合成单个模块,或可替代地,在这两个模块之间可以存在功能上的不同划分。

图3是另一示例性多线程乱序处理器300的示意图。处理器300包括自动MIPS分配(AMATM)模块302。AMATM模块302监视处理器300中的每一个线程的活动,并且向寄存器重命名模块136(或自由寄存器模块144,如果其执行了所述分配方法)提供控制信号用于影响将物理寄存器分配给不同线程的方式。所述控制信号可以以一种或多种不同的方式来影响物理寄存器的分配,例如:

●通过放宽分配策略,使得可以向活跃线程分配来自否则将只由其它线程使用的寄存器的组中的寄存器;

●通过改变分配策略内线程和组之间的关系(例如,使得向线程分配寄存器的附加的组或不同的组,或使得分配给正在推测地执行的线程的资源可以与其它线程隔离);

●通过关闭用于线程的子集(即,一个或多个线程,但不是所有线程)的分配策略;以及

●通过完全关闭所述分配策略(即,对于处理器中的所有线程)。

可以存在很多不同的方式,以所述方式,AMATM模块302可以监视每一个线程的活动,并且所述活动可以用多种不同的方式(例如,所发出的指令的数量和/或线程是如何推测地执行的)来限定。在一个示例中,AMATM模块302跟踪在给定的窗口上寄存器到单独线程的分配(例如,在时间或分配的数量中所限定的)。这个分配信息可以存储在自由寄存器列表140、自由寄存器模块144、寄存器重命名模块136或AMATM模块302中。发出更多指令(用于不同的架构寄存器的)并且因此在该窗口内具有分配给它的更多物理寄存器的线程可以被认为是比在同一窗口内具有分配给它的更少物理寄存器的线程更活跃。在另一示例中,AMATM模块302确定哪些线程正在推测地执行。如上所述,虽然图3示出了两个线程,但是本文描述的方法可以应用于任何多线程乱序处理器(具有两个或多个线程)。

图4示出了物理寄存器分配(或寄存器重命名)的另一示例性方法的流程图400,并且其中寄存器的分配由处理器中的至少一个线程的活动的度量影响(框404)。所述活动的度量(在框404中使用)可以是由AMATM模块302或其它元件生成的控制信号。可选地,所述活动的度量可以基于来自自由寄存器列表140或自由寄存器模块144(其识别出子列表中的一个是空的或接近空的)的输入或可以用任何其它方式和通过处理器内的任何其它元件来定义。

图4还示出了由表示为404a-404c的活动的度量影响的分配操作的多个示例性实现(框404)。在图5中示出了第四示例性实现404d。前两个示例404a、404b示出了两个不同的实现,在所述实现中,当不存在来自选定组的可用的物理寄存器(框406中的“否”)时,放宽分配策略(如图2所示),其中所述选定的组是基于与所接收的指令相关联的线程(如上所述)选择的(在框212中)。在第一示例404a中,如果不存在来自选定组的可用的物理寄存器(框406中的“否”),则从另一组(框408)(例如,从否则向最不活跃的线程分配的一组)分配可用的寄存器。

在第二示例404b中,如果不存在来自选定组的可用的物理寄存器(框406中的“否”),则在选择新组(在框212中)之前修改线程到组映射(其用于选择线程的组)(框410),并且可用的寄存器接着从新选择的组中被分配(在框214中)。当在本示例中修改线程到组映射时,其它线程的寄存器的分配也可以受到影响,与在示例404a中不同,示例404a是只应用于特定的寄存器分配操作的一个关闭操作。

在第三示例404c中,分配策略对线程关闭,其中不存在来自选定组的可用的物理寄存器(框406中的“否”),并且因此分配任何自由的物理寄存器(框412)。与示例404a一样,示例404c只影响特定线程而非其它线程的寄存器重命名,但是可能影响其它线程的操作,如果寄存器分配(在框412中)使另一线程所需的数据从RFC迁出。

应当认识到,虽然示例404a-404c示出了当不存在来自选定组的可用的物理寄存器(框406中的“否”)时对所实施的分配策略的修改,但是在其它示例中,修改可以在较早的阶段(例如,当来自选定组的可用的寄存器的数量在阈值之下或响应于控制信号(例如,来自AMATM模块302的)时)来实施。

第四示例404d(在图5中)示出了当线程(或线程的集合)的活动性超过阈值活动水平时对分配策略的修改(以多种不同的方式)。可以以任何方式(例如,在窗口内从组中分配的寄存器的数量)来定义活动水平,并且还可以以任何方式来定义阈值。如上所述,可以响应于从寄存器命名模块136外部的元件接收的控制信号或通过寄存器重命名模块本身来做出活动水平超过阈值的确定。

在本示例中,当(一个或多个线程的)活动性超过阈值(框414中的“是”)时,多个不同的事件可能发生,如由图5中的点箭头所指示的。在第一示例中,可以用与示例404a类似的方式从另一组(框408)分配寄存器。在第二示例中,线程到组的映射(或映射标准)可以改变(框410),并且然后基于所述新映射来选择组并且从选定的组分配寄存器(以与示例404b类似的方式)。在第三示例中,可以用与示例404c类似的方式来分配任何可用的物理寄存器(框412),并且在第四示例中,分配策略可以对所有线程关闭一段时间或直到活动性在阈值之下(框416)为止。在所述时间段结束时或当活动性在阈值之下时,分配策略可以再次对所有线程开启。

在图4和5中示出并且上面描述过的方法提供了在下列情况中的灵活性:线程是非常活跃的并且否则将通过如图2所示的物理寄存器的智能分配来对RFC进行软分区从而对其进行约束。使用参考图4和5描述的方法,可以控制寄存器的分配,使得RFC利用率是100%,即使单独线程的负载随着时间的过去而改变。

虽然图4的描述专门指组的使用,如上所述(相对于图2),但是这些组可以按照映射标准被定义,并且所述映射标准可以用于用图4所示的任何方法来分配寄存器。

在物理寄存器的智能分配是基于“register_number mod B=b”的策略或其任何子集(例如,图204c-e)的场合,自由寄存器列表可以应用简单的硬件逻辑来确定满足分配策略的合格的物理寄存器。在可用的(未使用的)寄存器的池当中,硬件逻辑可以检查可用的物理寄存器的“log2(B)”最低有效位以使它与“b”匹配,作为分配所述物理寄存器的所需条件。下面利用具体的示例来解释所述硬件实现技术。

在寄存器是基于模2(即,奇/偶)来在逻辑上划分成组的场合,只需要检查寄存器编号的最低有效位(LSB)(LSB=0,则寄存器为偶数的,LSB=1,则寄存器为奇数的)。类似地,在映射标准(或寄存器分组)是基于模4的场合,只需要检查两个最低有效位,并且在映射标准(或寄存器分组)是基于模8的场合,只需要检查寄存器编号的三个最低有效位。

本文所述的方法包括基于与给定指令相关联的线程的物理寄存器到架构寄存器的智能分配,并且这随后影响数据存储在RFC中的位置。寄存器重命名因此不仅分配物理寄存器,而且除了物理寄存器以外还动态地分配资源(例如,RFC)。

本文描述的智能分配将在处理器核心内的单独线程的影响彼此隔离,并且这在线程使用推测技术积极地执行的场合是特别有用的。

通过将灵活性的程度应用在如何利用智能分配策略中(例如,如图4和5中所示的),可以优化对RFC的利用。

虽然参考RFC(除了物理寄存器以外)的分配描述了上述方法,但是所述方法还可以用于动态地分配重排序缓冲区和/或保留站存储装置内的资源。

本文描述的方法可以用于任何多线程乱序处理器中,而不考虑线程的数量(两个或多个)和/或处理器核心的数量。

术语“处理器”和“计算机”在本文用于指具有处理能力的任何设备或其部分,使得它可以执行指令。本领域中的技术人员应当认识到,这样的处理能力合并到很多不同的设备中,并且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理以及很多其它设备。

本领域中的技术人员将认识到,用于存储程序指令的存储设备可以遍及网络分布。例如,远程计算机可以存储被描述为软件的过程的示例。本地或终端计算机可以访问远程计算机并且下载软件的一部分或全部用于运行程序。可选地,本地计算机可以按需要下载软件的一段,或在本地终端处执行一些软件指令并且在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员公知的常规技术,或所述软件指令的全部或一部分可以由专用电路(例如,DSP、可编程逻辑阵列等)执行。

对“逻辑”的特别提及指执行功能或多个功能的结构。逻辑的示例包括布置为执行所述功能的电路。例如,这样的电路可以包括晶体管和/或在制造过程中可用的其它硬件元件。这样的晶体管和/或其它元件可以用于形成电路或结构,其作为示例实现和/或包含存储器(例如,寄存器)、触发器或锁存器、逻辑运算符(例如,布尔运算)、数学运算符(例如,加法器、乘法器或移位器)和互连。这样的元件可以被提供为定制电路或标准单元库、宏或其它级别的抽象。这样的元件可以互连在特定的布置中。逻辑可以包括作为固定功能的电路,或可以被编程用于执行功能或多个功能的电路;可以从固件或软件更新或控制机制来提供这样的编程。被识别用于执行一种功能的逻辑还可以包括实现组成性功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定功能操作或操作、状态机或过程的电路。

本文给出的任何范围或设备值可以扩展或改变,而不失去所寻求的效果,这对技术人员而言将是显而易见的。

应当理解,上面描述的益处和优点可以与一个实施例相关或可以与几个实施例相关。实施例不限于解决任何或所有所陈述的问题的那些实施例或具有任何或所有所陈述的益处和优点的那些实施例。

对“一”物件的任何提及指那些物件中的一个或多个。术语“包括”在本文中用于意指包括所识别的方法块或元件,但这样的块或元件不包括排他列表,并且装置可以包含附加的块或元件,以及方法可以包含附加的操作或元件。

本文描述的方法的步骤可以在适当的场合按任何适当的顺序或同时执行。在附图中的框之间的箭头示出了方法步骤的一个示例性序列,但并不是要排除其它序列或并行的多个步骤的执行。此外,可以从所述方法的任何方法中删除单独的块,而不偏离本文描述的主题的精神和范围。上面描述的示例的任何方面可以与所描述的任何其它示例的方面组合以形成另外的示例,而不失去所寻求的效果。在附图的元件由箭头连接示出的场合,应当认识到,这些箭头只显示在元件之间的通信(包括数据和控制消息)的一个示例性流程。元件之间的流程可以以在任一方向上或在两个方向上。

应当理解,优选实施例的上面的描述仅作为示例给出,并且各种修改可以由本领域中的技术人员做出。虽然各种实施例以某个程度的粒度或参考一个或多个单独的实施例在上面描述,但是本领域中的技术人员可以对所公开的实施例进行很多变更,而不偏离本发明的精神或范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号