一种对寄存器别名表恢复方法与流程

文档序号:13673568阅读:169来源:国知局

本发明涉及寄存器处理技术领域,具体涉及一种对寄存器别名表恢复方法。



背景技术:

现代的超标量处理器广泛地使用分支预测、寄存器重命名和猜测执行技术来提升运行效率。其中分支预测技术使得处理器可以在分支指令被执行前根据程序运行的历史信息,提前预测分支目标并进行取指;寄存器重命名技术可以通过冗余的物理寄存器,消除由于逻辑寄存器数量不足引起的数据先读后写相关和写写相关,从而允许更多的指令并行执行;猜测执行可以提前执行根据分支预测而预取的指令。这三种技术的联合使用可以使处理器减小由于程序分支带来的性能损失,但是也对处理器的设计提出了挑战。

处理器的运行频率是衡量处理器性能的重要指标,如果某些用于提升处理器运行效率的技术的加入,导致处理器结构复杂化,进一步使处理器可运行的频率降低,那么这些技术对处理器实际运行速度的帮助就要打折扣,在某些场合下可能还会损害处理器的实际性能。比如上述技术,如果处理器运行的程序中分支指令很少,那它们能够给处理器带来的运行效率提高是有限的,如果它们的加入降低了处理器的运行频率,那么此时处理器性能反而会降低。处理器要应付各式各样的应用,要求在各个应用场景下都能有较好的性能表现,而全面提升处理器性能的最佳方式就是提升处理器的运行频率。因此,在加入提高处理器运行效率的技术时,如何尽量降低其对处理器运行频率的影响是一个特别重要的问题。

上述三种提升处理器运行效率的技术之间有连锁作用:当分支预测发生错误时,从错误的目标取得的指令可能已经被猜测执行,而在执行前的寄存器重命名操作已经改写了寄存器别名表,因此不能仅仅取消掉这写被错误执行的指令,而必须将寄存器别名表恢复到猜测执行前的状态,否则后面的执行会出错。

寄存器别名表记录了逻辑寄存器和物理寄存器之间的对应关系,在寄存器重命名时,指令要写入的逻辑寄存器别赋予一个对应的物理寄存器,当之后的指令要读取这个逻辑寄存器的值时,实际上是从寄存器别名表中查找到它所对应的物理寄存器,并读取这个物理寄存器。当处理器发现分支预测错误时,猜测执行的指令已经根据自己要写入的逻辑寄存器获取了物理寄存器并改写了寄存器别名表,此时必须对寄存器别名表进行恢复,释放被取消指占用的物理寄存器并重建逻辑寄存器与物理寄存器的对应关系,否则后继指令将可能从被取消的指令所占用的物理寄存器获取数据,造成程序运行结果的错误。

当处理器发现分支预测错误时,可能有很多条来自于错误地址的指令已经被猜测执行,此时寄存器别名表已经被多次改写,如果对寄存器别名表的恢复需要很多个周期,在此期间内寄存器别名表处于不可用状态,会影响到重新取指后新指令的执行,降低处理器的执行效率,而要想快速恢复寄存器别名表,则又可能需要在一个时钟周期内执行太多的操作,影响处理器的运行频率。一个常用的解决这个问题的方法是采用备份寄存器别名表的方式,当一个新的分支指令到来时,原有的寄存器别名表保持不变,而使用一个新的寄存器别名表来进行分支指令之后的指令的寄存器重命名操作,如果在之后发现分支预测错误,就作废当前的寄存器别名表,换回原先使用的寄存器别名表。这个方法的问题是需要多张寄存器别名表,还需要同时更新其中的两张或在寄存器别名表切换时将旧表的内容拷贝到新表中以使新表能够继承旧表的内容,保持寄存器映射关系的一致性。当处理器支持很多个分支的猜测执行时,系统中会存在很多寄存器别名表,需要很大的面积,而且从多张寄存器别名表进行选择的逻辑是加在程序正常执行的时序路径上的,对处理器的运行频率可能会产生不利影响。

在专利(申请号为利cn201010607215)中披露了一种使用重排序缓冲器中的信息恢复寄存器别名表的方法。该方法利用从发现分支预测错误到新取指指令到达流水线重命名阶段的空闲时间,通过搜索分支取消后的重排序缓冲器的方法进行寄存器别名表恢复操作,避免了需要多个寄存器别名表,以及对寄存器别名表的选择影响时序的问题。但是该发明仍然存在一些限制,最突出的就是对重排序缓冲器的搜索过程是顺序进行的,如果重排序的深度较大,则搜索逻辑也会占用较大的时间,而且较长的逻辑链的时序开销不一定能够完全被新取指指令到达流水线寄存器重命名阶段的空闲时间所覆盖。



技术实现要素:

本发明旨在至少解决上述技术问题之一。

为此,本发明的目的在于提出一种对寄存器别名表恢复方法,以在重排序缓冲器深度较大时优化时序性能。

为了实现上述目的,本发明的实施例公开了一种对寄存器别名表恢复方法,包括以下步骤:s1:在指令取消发生时,对重排序缓冲站进行更新;s2:从所述重排序缓冲站队列的头指针所指项开始分成多个组,并在每个周期把一组的每一项的指令有效位、目标寄存器有效位和目标寄存器的逻辑地址送入与逻辑寄存器对应的映射关系恢复模块中;s3:所述映射关系恢复模块从送入的一组信息中的最后信息开始倒序搜索,并判断所述信息的指令有效位是否有效、目标寄存器有效位是否有效以及目标寄存器逻辑地址是否与所述映射关系恢复模块所对应的逻辑寄存器地址相同;s4:如果所述信息的指令有效位有效、目标寄存器有效位有效且目标寄存器逻辑地址与所述映射关系恢复模块所对应的逻辑寄存器地址相同,则产生寄存器别名表对应项的更新信号,并在所述重命名缓冲站中对应项的目标寄存器的物理地址发送到所述寄存器别名表中。s5:重复步骤s3-s4,直至所述重排序缓冲站队列的所有项均处理完毕。

进一步地,在步骤s3中,如果处理器中存在多个寄存器别名表,则目标寄存器有效位的数量与所述寄存器别名表的数量相对应,分别对多个所述目标寄存器有效位是否有效进行判断。

进一步地,在步骤s4中,如果存在多个寄存器别名表,则根据所述多个寄存器别名表相应的目标寄存器有效位一一对应地生成的更新信号。

进一步地,重命名寄存器与所述重排序缓冲站相对应,将重命名缓冲站的队列id作为更新的物理地址。

进一步地,重命名寄存器与体系结构寄存器共用同一个物理寄存器文件,用重命名保留站中保存的目标寄存器的物理地址来进行更新所述寄存器别名表的物理地址。

进一步地,所述重排序缓冲站中的不同组使用的映射关系恢复模块是相同的。

根据本发明实施例的对寄存器别名表恢复方法,相比现有技术存在以下优点:

在重排序缓冲器深度较大时减小面积并优化时序性能。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是本发明实施例的对寄存器别名表恢复方法的流程图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

以下结合附图描述本发明。

图1是本发明实施例的对寄存器别名表恢复方法的流程图。如图1所示,一种对寄存器别名表恢复方法,包括以下步骤:

s1:在指令取消发生时,对重排序缓冲站进行更新。

s2:从重排序缓冲站队列的头指针所指项开始分成多个组,并在每个周期把一组的每一项的指令有效位、目标寄存器有效位和目标寄存器的逻辑地址送入与逻辑寄存器对应的映射关系恢复模块中。

本发明的实施例对重排序缓冲站的搜索分成多步进行,每个周期只搜索部分重排序缓冲站的内容,因此映射关系恢复模块的地址比较器的数量减少,优先级选择链的长度也缩短了。

s3:映射关系恢复模块从送入的一组信息中的最后信息开始倒序搜索,并判断信息的指令有效位是否有效、目标寄存器有效位是否有效以及目标寄存器逻辑地址是否与映射关系恢复模块所对应的逻辑寄存器地址相同。

在本发明的一个实施例中,如果处理器中存在多个寄存器别名表,则目标寄存器有效位的数量与寄存器别名表的数量相对应,分别对多个目标寄存器有效位是否有效进行判断。

s4:如果信息的指令有效位有效、目标寄存器有效位有效且目标寄存器逻辑地址与映射关系恢复模块所对应的逻辑寄存器地址相同,则产生寄存器别名表对应项的更新信号,并在重命名缓冲站中对应项的目标寄存器的物理地址发送到寄存器别名表中。

s5:重复步骤s3-s4,直至重排序缓冲站中的所有项均处理完毕。

在本发明的一个实施例中,如果存在多个寄存器别名表,则根据多个寄存器别名表相应的目标寄存器有效位一一对应地生成的更新信号。

在本发明的一个实施例中,重命名寄存器与重排序缓冲站相对应,将重命名缓冲站的队列id作为更新的物理地址。

具体地,相关技术中处理器中的寄存器重命名采用重命名寄存器与重排序缓冲站对应方式时,产生更新的物理地址的方法为:将重命名缓冲站的队列id作为更新的物理地址。在搜索第1组时如果没有找到命中项,仍然会产生寄存器别名表更新操作,此时更新的地址是寄存器别名表对应项的复位值,即认为该逻辑寄存器当前没有对应的物理寄存器,如果在后面的搜索中发现了命中项,则再次发起更新操作,由于此时新指令尚未到达流水线的寄存器重命名阶段,因此之前的更新虽然并不正确但是其结果没有被采用,不会对程序执行的正确性造成影响。

在本发明的一个实施例中,重命名寄存器与体系结构寄存器共用同一个物理寄存器文件,用重命名保留站中保存的目标寄存器的物理地址来进行更新寄存器别名表的物理地址。

具体地,相关技术中处理器中的寄存器重命名采用重命名寄存器与体系结构寄存器共用同一个物理寄存器文件方式时,用重命名保留站中保存的目标寄存器的物理地址来进行更新。由于在重排序缓冲站找不到命中项时就使用当前的映射关系,因此不需要产生额外的更新操作。

本发明实施例的对寄存器别名表恢复方法相对于专利cn201010607215的区别为:

本发明没有定时装置,而是每个周期都会发起对寄存器别名表的部分更新操作。此外,本发明并不是从重排序缓冲站的尾指针所指位置开始从后往前搜索,而是将重排序缓冲站中的队列分组后,从重排序缓冲站头指针所在组开始搜索,这样做的原因是,在本发明中对重命名缓冲站的搜索是分布进行,如果从重命名缓冲器的队列尾部开始搜索,那么在更早的块中搜索到命中项时,不知道该项是否在之前的搜索中被更新过,则无法判断是否应该进行更新,因为最终的更新结果应该是各个逻辑寄存器最新的映射关系。在本发明中,由于对块的搜索是从前向后的,因此当后面的搜索发现命中后,直接再次更新寄存器别名表即可,无需设置寄存器保存之前是否进行过更新操作。

为了使本领域技术人员进一步理解本发明,将通过以下实施例进行详细说明。

重排序缓冲站共有32项,而寄存器别名表有3个,分别是通用寄存器别名表、浮点寄存器别名表和向量寄存器别名表,每个寄存器别名表都有32项。通用寄存器和浮点寄存器采用寄存器重命名的第1种实现方式,而向量寄存器采用寄存器重命名的第2种实现方式。在本实施例中,重排序缓冲站的队列被分成了两组,其中头指针所指的是第一组的第一条指令。在本实施例中,共有16*32个地址比较器,其中16是对重排序缓冲站的队列进行分组后每组的项数,而32是寄存器别名表中的项数。每个地址比较器的功能是把从重排序缓冲站中提取的地址与特定的地址进行比较,比如有16个地址比较器把从重排序缓冲站获得的16个地址与“0”比较;另有16个地址比较器把这些地址与“1”比较,以此类推,最后的16个地址比较器把这些地址与“31”比较,如果比较结果是相等,输出“1”。

在本实施例中,当处理器发现分支预测错误时,会在下一个周期把第1组的地址送到这些地址比较器中,比较的结果送到三个恢复器中,这三个恢复器分别对应于通用寄存器、浮点寄存器和向量寄存器的寄存器别名表。恢复器根据地址比较的结果和预测错误矫正后重命名缓冲站队列的指令有效情况以及寄存器类型,产生相应的寄存器别名表恢复信号。

在本实施例中,地址比较器和三个恢复模块起到的是发明专利cn201010607215中映射关系恢复模块的功能。

在本实施例中,对寄存器别名表的更新将分两个周期进行,第1个周期根据重排序缓冲站队列的第1组进行更新,第2个周期根据重排序缓冲站队列的第2组进行更新,如果寄存器别名表的同一项在这两个周期都收到更新信号,那么后面的更新会覆盖前面的更新,由于此时寄存器别名表处于未被使用的状态,所以进行多次更新不会引起错误。

另外,本发明实施例的对寄存器别名表恢复方法的其它构成以及作用对于本领域的技术人员而言都是已知的,为了减少冗余,不做赘述。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1