CN109960607B - 预测栈的错误恢复方法、装置及存储介质 - Google Patents
预测栈的错误恢复方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109960607B CN109960607B CN201711405263.0A CN201711405263A CN109960607B CN 109960607 B CN109960607 B CN 109960607B CN 201711405263 A CN201711405263 A CN 201711405263A CN 109960607 B CN109960607 B CN 109960607B
- Authority
- CN
- China
- Prior art keywords
- stack
- prediction
- recovery
- branch instruction
- address information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
本发明提供一种预测栈的错误恢复方法、装置及存储介质,该方法包括:在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。本发明提供的预测栈的错误恢复方法、装置及存储介质,提高了返回地址预测栈的准确率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种预测栈的错误恢复方法、装置及存储介质。
背景技术
返回地址预测栈是处理器中分支预测器的一种,主要用于预测函数返回类分支指令,由于函数返回类分支指令与函数调用类分支指令一一对应,因此,当遇到函数调用类分支指令时,将其下一条指令的地址压入预测栈;当遇到函数返回类分支指令时,将该地址弹出栈用作预测地址,返回地址预测栈相对于条件分支预测器与间接跳转预测器,拥有很小的硬件开销,而且能够达到较高的预测准确率。
但是,现代处理器中存在猜测执行,即执行的分支指令的跳转地址是不确定的,这样一旦猜测错误,返回地址预测栈就很有可能发生错误,导致后续的预测出现错误,降低了返回地址预测栈的预测准确率。为了提高返回地址预测栈的预测准确率,现有技术中通过维护一个恢复栈,将猜测执行过程中被弹出的栈内项放入恢复栈内,当猜测执行错误时,将恢复栈内的项全部复写到返回地址预测栈中。然而,由于存在乱序执行机制,分支错误返回时不一定时顺序返回,由此造成的错误覆盖同样会污染栈内的相关项,从而导致返回地址预测栈的准确率不高。
发明内容
本发明提供一种预测栈的错误恢复方法、装置及存储介质,以解决现有技术中返回地址预测栈准确率不高的问题。
本发明实施例提供一种预测栈的错误恢复方法,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;该方法包括:
在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;
若所述待执行分支指令根据所述预测栈中的地址信息发生预测错误,则根据所述恢复栈中的地址信息校正所述预测栈中的地址信息。
在本发明一实施例中,所述至少一个恢复栈中的每个恢复栈有相应的恢复栈编号;
所述在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到所述恢复栈,包括:
在所述待执行分支指令的类型为函数调用类分支指令时,在所述预测栈的栈顶指针中写入所述待执行分支指令的地址信息;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
在所述待执行分支指令的类型为函数返回类分支指令时,将所述预测栈的栈顶指针的地址信息确定为所述待执行分支指令的预测地址信息,并将所述栈顶指针中的地址信息从所述预测栈中读出;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
在所述待执行分支指令的类型为其他类分支指令时,确定所述待执行分支指令的前一条分支指令对应的恢复栈;将所述前一条分支指令对应的恢复栈确定为所述待执行分支指令对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号。
在本发明一实施例中,所述若所述待执行分支指令根据所述预测栈中的地址信息发生预测错误,则根据所述恢复栈中的地址信息校正所述预测栈中的地址信息,包括:
获取预测错误信息;所述预测错误信息包括所述待执行分支指令对应的所述预测栈的栈顶指针和所述待对应的恢复栈的恢复栈编号;
根据所述恢复栈编号对应的所述恢复栈中的地址信息校正所述栈顶指针对应的预测栈中的地址信息。
在本发明一实施例中,该预测栈的错误恢复方法还包括:
在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈;
将所述预测栈中已有的分支指令的地址信息复制到所述新的恢复栈。
在本发明一实施例中,所述在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈,包括:
当待执行分支指令的数量大于预设阈值时,在新的待执行分支指令读写预测栈时,根据所述恢复栈的编号将所述恢复栈中的地址信息清空,得到所述新的恢复栈。
本发明实施例还提供一种预测栈的错误恢复装置,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;该装置包括:
复制单元,用于在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;
校正单元,用于若所述待执行分支指令根据所述预测栈中的地址信息发生预测错误,则根据所述恢复栈中的地址信息校正所述预测栈中的地址信息。
在本发明一实施例中,所述至少一个恢复栈中的每个恢复栈有相应的恢复栈编号;
所述复制单元,具体用于在所述待执行分支指令的类型为函数调用类分支指令时,在所述预测栈的栈顶指针中写入所述待执行分支指令的地址信息;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
所述复制单元,具体用于在所述待执行分支指令的类型为函数返回类分支指令时,将所述预测栈的栈顶指针的地址信息确定为所述待执行分支指令的预测地址信息,并将所述栈顶指针中的地址信息从所述预测栈中读出;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
所述复制单元,具体用于在所述待执行分支指令的类型为其他类分支指令时,确定所述待执行分支指令的前一条分支指令对应的恢复栈;将所述前一条分支指令对应的恢复栈确定为所述待执行分支指令对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号。
在本发明一实施例中,所述校正单元,具体用于获取预测错误信息;所述预测错误信息包括所述待执行分支指令对应的所述预测栈的栈顶指针和所述待对应的恢复栈的恢复栈编号;并根据所述恢复栈编号对应的所述恢复栈中的地址信息校正所述栈顶指针对应的预测栈中的地址信息。
在本发明一实施例中,该预测栈的错误恢复装置还包括:
清空单元,用于在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈;
所述复制单元,还用于将所述预测栈中已有的分支指令的地址信息复制到所述新的恢复栈。
在本发明一实施例中,所述清空单元,具体用于当待执行分支指令的数量大于预设阈值时,在新的待执行分支指令读写预测栈时,根据所述恢复栈的编号将所述恢复栈中的地址信息清空,得到所述新的恢复栈。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,在所述计算机程序被处理器执行时,执行上述任一实施例所述的预测栈的错误恢复方法。
本发明实施例提供的预测栈的错误恢复方法、装置及存储介质,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本发明实施例提供的一种预测栈的错误恢复方法的示意图;
图2为本发明实施例提供的一种恢复栈的示意图;
图3为本发明实施例提供的一种新的恢复栈的获取方式的示意图;
图4为本发明实施例提供的一种A函数调用类分支指令读写预测栈的示意图;
图5为本发明实施例提供的一种B函数调用类分支指令读写预测栈的示意图;
图6为本发明实施例提供的一种C函数返回类分支指令读写预测栈的示意图;
图7为本发明实施例提供的一种恢复预测栈的示意图;
图8为本发明实施例提供的另一种恢复预测栈的示意图;
图9为本发明实施例提供的一种E函数调用类分支指令读写预测栈的示意图;
图10为本发明实施例提供的再一种恢复预测栈的示意图;
图11为本发明实施例提供的一种预测栈的错误恢复装置的结构示意图;
图12为本发明实施例提供的另一种预测栈的错误恢复装置的结构示意图;
图13为本发明提供的一种电子设备的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了提高返回地址预测栈的预测准确率,现有技术中通过维护一个恢复栈,将猜测执行过程中被弹出的栈内项放入恢复栈内,当猜测执行错误时,将恢复栈内的项全部复写到返回地址预测栈中。然而,由于存在乱序执行机制,分支错误返回时不一定时顺序返回,由此造成的错误覆盖同样会污染栈内的相关项,从而导致返回地址预测栈的准确率不高。为了提高返回地址预测栈的预测准确率,本发明实施例提供了一种预测栈的错误恢复方法,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
下面以具体的实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图1为本发明实施例提供的一种预测栈的错误恢复方法的示意图,该预测栈的错误恢复方法可以由预测栈的错误恢复装置执行,该预测栈的错误恢复装置可以独立设置,也可以集成在处理器中。示例的,请参见图1所示,该预测栈的错误恢复方法可以包括:
S101、在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈。
其中,待执行分支指令的类型可以根据待执行分支指令的操作码的前五位进行确定,待执行分支指令的类型包括函数调用类分支指令、函数返回类分支指令和其他类分支指令。对于函数调用类分支指令,在其读写预测栈时,是执行入栈操作,对于函数返回类分支指令,在其读写预测栈时,执行出栈操作,对于其他类分支指令,在其读写预测栈时,既不执行入栈操作,也不执行出栈操作。
在将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈之前,可以预先配置对预测栈中的地址信息进行备份的至少一个恢复栈,且该恢复栈为空的恢复栈,通过预先配置至少一个恢复栈,使得在待执行分支指令的类型读写预测栈后,可以将预测栈中已有的分支指令的地址信息复制到预先配置的其中一个恢复栈中。示例的,在本发明实施例中,至少一个恢复栈的个数可以为八个,请参见图2所示,图2为本发明实施例提供的一种恢复栈的示意图,整体的恢复栈共32项,该恢复栈分成独立的八组,每组四项,恢复栈编号循环分配,设恢复栈编号为RAS_REC,初始值为1,最大值为8。
在预先配置好至少一个恢复栈之后,就可以执行S101在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到恢复栈,具体可以包括以下三种可能的实现方式:
在第一种可能的实现方式中:当待执行分支指令的类型为函数调用类分支指令时,在预测栈的栈顶指针中写入待执行分支指令的地址信息,则此时预测栈中的地址信息包括当前待执行分支指令的地址信息,将预测栈中已有的分支指令的地址信息复制到对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号。
在第二种可能的实现方中:当待执行分支指令的类型为函数返回类分支指令时,将预测栈的栈顶指针的地址信息确定为待执行分支指令的预测地址信息,并将栈顶指针中的地址信息从预测栈中读出,则此时预测栈中的地址信息不包括当前待执行分支指令的地址信息,将预测栈中已有的分支指令的地址信息复制到对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号。
在第三种可能的实现方中:在待执行分支指令的类型为其他类分支指令时,确定待执行分支指令的前一条分支指令对应的恢复栈;将前一条分支指令对应的恢复栈确定为待执行分支指令对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号。
需要说明的是,对于其他类分支指令,在该其他类分支指令读写预测栈时,该其他类分支指令既不执行地址信息写入操作,也不执行地址信息读出操作,因此,在确定该其他类分支指令对应的恢复栈时,需要先确定该其他类分支指令的前一条分支指令对应的恢复栈;将前一条分支指令对应的恢复栈确定为其他类分支指令对应的恢复栈,且其他类分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号。
S102、若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。
通过上述S101,在得到三种不同类型分支指令对应的恢复栈之后,就可以执行S102,在待执行分支指令根据预测栈中的地址信息发生预测错误时,可以根据恢复栈中的地址信息校正预测栈中的地址信息,从而提高预测栈中地址信息的准确率。
可选的,S102若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息,可以包括:
获取预测错误信息;预测错误信息包括待执行分支指令对应的预测栈的栈顶指针和待对应的恢复栈的恢复栈编号;根据恢复栈编号对应的恢复栈中的地址信息校正栈顶指针对应的预测栈中的地址信息。
若待执行分支指令执行一端时间后,获取到包含该待执行分支指令的预测错误信息,则可以根据预测错误信息中包括的预测栈的栈顶指针和待对应的恢复栈的恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息复制到栈顶指针对应的预测栈中。由此可见,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而实现对预测栈中的地址信息的校正,进而提高了预测栈中地址信息的准确率。
本发明实施例提供的预测栈的错误恢复方法,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
为了更好地复用预先配置的至少一个恢复栈,则在至少一个恢复栈中每一个恢复栈被占用之后,在新的待执行分支指令读写预测栈之前,可以先清空其中一个恢复栈中的地址信息,从而为新的待执行分支指令提供空的恢复栈,其具体实现方式可以参见图3所示,图3为本发明实施例提供的一种新的恢复栈的获取方式的示意图。
S301、在新的待执行分支指令读写预测栈时,根据预设规则将恢复栈中的地址信息清空,得到新的恢复栈。
可选的,当待执行分支指令的数量大于预设阈值时,在新的待执行分支指令读写预测栈时,根据恢复栈的编号将恢复栈中的地址信息清空,得到新的恢复栈。
需要说明的是,由于其他类分支指令不专门占用恢复栈,因此,此处的待执行分支指令的数量是指调用类分支指令和返回类分支指令的数量之和。预设阈值的值具体可以根据预先配置的至少一个恢复栈的个数确定。示例的,若预先配置八个恢复栈,则预设阈值的值为8,当然,本发明实施例只是以预先配置八个恢复栈,且预设阈值的值为8为例进行说明,具体可以根据实际需要进行设置。
S302、将预测栈中已有的分支指令的地址信息复制到新的恢复栈。
示例的,在第九个待执行分支指令读写预测栈时,由于前八个待执行分支指令(为调用类分支指令或返回类分支指令,其他类分支指令不专门占用恢复栈)对应的预测栈已经相应占用了预先配置的八个恢复栈,则可以按顺序清空恢复栈编号为1的恢复栈中的地址信息,以释放恢复栈编号为1的恢复栈中的地址信息,从而得到新的恢复栈,再将第九个待执行分支指令对应的预测栈中的地址信息复制到该新的恢复栈中。在第十个待执行分支指令读写预测栈时,可以按顺序清空恢复栈编号为2的恢复栈中的地址信息,以释放恢复栈编号为2的恢复栈中的地址信息,从而得到新的恢复栈,再将第十个待执行分支指令对应的预测栈中的地址信息复制到该新的恢复栈中,以此类推。
由此可见,通过上述S301和S302,当待执行分支指令的数量大于预先配置的恢复栈的个数时,可以根据恢复栈编号将预先配置的恢复栈中的地址信息清空,以释放恢复栈中的地址信息,之后再该待执行分支指令对应的预测栈中的地址信息复制到新的恢复栈,以实现恢复栈的复用,从而提高了恢复栈的利用率。
为了更清楚地说明本发明实施例所示的技术方案,假设有五条条分支指令,分别为:{A函数调用类分支指令、B函数调用类分支指令、C函数返回类分支指令、D其他类分支指令、E函数调用类分支指令}。
在A函数调用类分支指令读写预测栈时,预测栈栈顶指针RAS_TOS的初始值为0,将A函数调用类分支指令对应的PC+8的地址写入到预测栈中,并将预测栈的栈顶指针RAS_TOS加1,此时预测栈中包括的是A函数调用类分支指令的PC+8的地址信息,将预测栈中已有的A函数调用类分支指令对应的PC+8的地址复制到恢复栈编号RAS_REC=1的恢复栈中,则恢复栈编号RAS_REC=1的恢复栈也备份了A函数调用类分支指令的地址信息,则A函数调用类分支指令对应的恢复栈为恢复栈编号RAS_REC=1的恢复栈。示例的,请参见图4所示,图4为本发明实施例提供的一种A函数调用类分支指令读写预测栈的示意图。
在B函数调用类分支指令读写预测栈时,将B函数调用类分支指令对应的PC+8的地址写入到预测栈中,并将预测栈的栈顶指针RAS_TOS加1,此时预测栈中包括的是A函数调用类分支指令的PC+8的地址信息和B函数调用类分支指令的PC+8的地址,将预测栈中已有的地址信息复制到恢复栈编号RAS_REC=2的恢复栈中,则恢复栈编号RAS_REC=2的恢复栈中也顺序备份了A函数调用类分支指令对应的PC+8的地址和B函数调用类分支指令对应的PC+8的地址,则B函数调用类分支指令对应的恢复栈为恢复栈编号RAS_REC=2的恢复栈。示例的,请参见图5所示,图5为本发明实施例提供的一种B函数调用类分支指令读写预测栈的示意图。
在C函数返回类分支指令读写预测栈时,将预测栈的栈顶指针RAS_TOS=1对应的B函数调用类分支指令的PC+8的地址确定为C函数返回类分支指令的预测地址信息,对预测栈中的B函数调用类分支指令的PC+8的地址执行出栈操作,此时预测栈包括的是A函数调用类分支指令的PC+8的地址,将预测栈中已有的地址信息复制到恢复栈编号RAS_REC=3的恢复栈中,则恢复栈编号RAS_REC=3的恢复栈中也只备份了A函数调用类分支指令的PC+8的地址,则C函数返回类分支指令对应的恢复栈编号RAS_REC=3的恢复栈。示例的,请参见图6所示,图6为本发明实施例提供的一种C函数返回类分支指令读写预测栈的示意图。
一段时间之后,若获取到B函数调用类分支指令的预测错误信息,该B函数调用类分支指令的预测错误信息包括B函数调用类分支指令对应的预测栈的栈顶指针和B函数调用类分支指令对应的恢复栈编号RAS_REC=2,则可以将恢复栈编号RAS_REC=2的恢复栈中的地址信息复制到栈顶指针对应的预测栈中,从而完成对预测栈中的地址信息的校正。请参见图7所示,图7为本发明实施例提供的一种恢复预测栈的示意图,这样,在B函数调用类分支指令读写预测栈时,若B函数调用类分支指令预测错误,则根据B函数调用类分支指令对应的恢复栈编号RAS_REC=2,将恢复栈编号RAS_REC=2的恢复栈中的地址信息复制到栈顶指针对应的预测栈中。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
示例的,若继续执行D其他类分支指令,由于D指令为其他类分支指令,在执行D其他类分支指令时,D其他类分支指令对应的PC+8的地址不写入预测栈,也不在恢复栈中备份,因此,D其他类分支指令携带的还是前一条C函数返回类分支指令对应的预测栈的栈顶指针和C函数返回类分支指令对应的恢复栈编号RAS_REC=3。
一段时间之后,若获取到C函数返回类分支指令的预测错误信息,该C函数返回类分支指令的预测错误信息包括C函数返回类分支指令对应的预测栈的栈顶指针和C函数返回类分支指令对应的恢复栈编号RAS_REC=3,则将恢复栈编号RAS_REC=3的恢复栈中的地址信息复制到栈顶指针对应的预测栈中,从而完成对预测栈中的地址信息的校正。请参见图8所示,图8为本发明实施例提供的另一种恢复预测栈的示意图,这样,在C函数返回类分支指令读写预测栈时,在确定C函数返回类分支指令预测错误时,根据C函数返回类分支指令对应的恢复栈编号RAS_REC=3,将恢复栈编号RAS_REC=3的恢复栈中的地址信息复制到栈顶指针对应的预测栈中。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
示例的,若继续执行E函数调用类分支指令,在E函数调用类分支指令读写预测栈时,将E函数调用类分支指令对应的PC+8的地址写入到预测栈中,并将预测栈的栈顶指针RAS_TOS加1,此时预测栈中包括的是A函数调用类分支指令的PC+8的地址信息和E函数调用类分支指令的PC+8的地址信息;将预测栈中已有的地址信息复制到恢复栈编号RAS_REC=4的恢复栈中,则恢复栈编号RAS_REC=4的恢复栈中也顺序备份了A函数调用类分支指令的PC+8的地址信息和E函数调用类分支指令的PC+8的地址信息,则E函数调用类分支指令对应的恢复栈为恢复栈编号RAS_REC=4的恢复栈。示例的,请参见图9所示,图9为本发明实施例提供的一种E函数调用类分支指令读写预测栈的示意图。
一段时间之后,若获取到D其他类分支指令的预测错误信息,该D其他类分支指令的预测错误信息包括D其他类分支指令对应的预测栈的栈顶指针和D其他类分支指令对应的恢复栈编号RAS_REC=3,则将恢复栈编号RAS_REC=3的恢复栈中的地址信息复制到栈顶指针对应的预测栈中,从而完成对预测栈中的地址信息的校正。请参见图10所示,图10为本发明实施例提供的再一种恢复预测栈的示意图,这样,在D其他类分支指令读写预测栈时,在确定D其他类分支指令预测错误时,根据D其他类分支指令对应的恢复栈编号RAS_REC=3,将恢复栈编号RAS_REC=3的恢复栈中的地址信息复制到栈顶指针对应的预测栈中。这样,通过为预测栈构建相应的恢复栈,使得在待执行分支指令在预测错误时,可以根据恢复栈编号,将恢复栈编号对应的恢复栈中的地址信息恢复至栈顶指针对应的预测栈中,从而提高了返回地址预测栈的准确率。
图11为本发明实施例提供的一种预测栈的错误恢复装置11的结构示意图,请参见图11所示,配置有对预测栈中的地址信息进行备份的至少一个恢复栈;该预测栈的错误恢复装置11可以包括:
复制单元1101,用于在根据待执行分支指令的类型读写预测栈后,将预测栈中已有的分支指令的地址信息复制到其中一个恢复栈。
校正单元1102,用于若待执行分支指令根据预测栈中的地址信息发生预测错误,则根据恢复栈中的地址信息校正预测栈中的地址信息。
可选的,至少一个恢复栈中的每个恢复栈有相应的恢复栈编号。
复制单元1101,具体用于在待执行分支指令的类型为函数调用类分支指令时,在预测栈的栈顶指针中写入待执行分支指令的地址信息;将预测栈中已有的分支指令的地址信息复制到对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号;
复制单元1101,具体用于在待执行分支指令的类型为函数返回类分支指令时,将预测栈的栈顶指针的地址信息确定为待执行分支指令的预测地址信息,并将栈顶指针中的地址信息从预测栈中读出;将预测栈中已有的分支指令的地址信息复制到对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号;
复制单元1101,具体用于在待执行分支指令的类型为其他类分支指令时,确定待执行分支指令的前一条分支指令对应的恢复栈;将前一条分支指令对应的恢复栈确定为待执行分支指令对应的恢复栈,待执行分支指令携带预测栈的栈顶指针和对应的恢复栈的恢复栈编号。
可选的,校正单元1102,具体用于获取预测错误信息;预测错误信息包括待执行分支指令对应的预测栈的栈顶指针和待对应的恢复栈的恢复栈编号;并根据恢复栈编号对应的恢复栈中的地址信息校正栈顶指针对应的预测栈中的地址信息。
可选的,该预测栈的错误恢复装置11还可以包括清空单元1103,请参见图12所示,图12为本发明实施例提供的另一种预测栈的错误恢复装置11的结构示意图。
清空单元1103,用于在新的待执行分支指令读写预测栈时,根据预设规则将恢复栈中的地址信息清空,得到新的恢复栈。
复制单元1101,还用于将预测栈中已有的分支指令的地址信息复制到新的恢复栈。
可选的,清空单元1103,具体用于当待执行分支指令的数量大于预设阈值时,在新的待执行分支指令读写预测栈时,根据恢复栈的编号将恢复栈中的地址信息清空,得到新的恢复栈。
上述预测栈的错误恢复装置11,对应地可执行任一实施例的预测栈的错误恢复方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,在计算机程序被处理器执行时,执行上述任一实施例所示的预测栈的错误恢复方法。
上述计算机可读存储介质,对应地可执行任一实施例的预测栈的错误恢复方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
图13为本发明提供的一种电子设备13的结构示意图,请参见图13所示,该电子设备13可以包括:
处理器1301和存储器1302,其中,存储器1302用于存储程序指令。
处理器1301用于读取存储器1302中的程序指令,并根据存储器1302中的程序指令执行上述任一实施例所示的预测栈的错误恢复方法。
应理解的是,处理器1301可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器1301也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器1301中的硬件及软件模块组合执行完成。
实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一可读取存储器中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储器(存储介质)包括:只读存储器(read-only memory,ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(magnetic tape)、软盘(floppy disk)、光盘(optical disc)及其任意组合。
上述电子设备13,对应地可执行任一实施例的预测栈的错误恢复方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。
Claims (8)
1.一种预测栈的错误恢复方法,其特征在于,配置有对预测栈中的地址信息进行备份的至少一个恢复栈,所述至少一个恢复栈中的每个恢复栈有相应的恢复栈编号;该方法包括:
在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;
若所述待执行分支指令根据所述预测栈中的地址信息发生预测错误,则根据所述恢复栈中的地址信息校正所述预测栈中的地址信息;
获取预测错误信息;所述预测错误信息包括所述待执行分支指令对应的所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
根据所述恢复栈编号对应的所述恢复栈中的地址信息校正所述栈顶指针对应的预测栈中的地址信息。
2.根据权利要求1所述的方法,其特征在于,
所述在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到所述恢复栈,包括:
在所述待执行分支指令的类型为函数调用类分支指令时,在所述预测栈的栈顶指针中写入所述待执行分支指令的地址信息;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
在所述待执行分支指令的类型为函数返回类分支指令时,将所述预测栈的栈顶指针的地址信息确定为所述待执行分支指令的预测地址信息,并将所述栈顶指针中的地址信息从所述预测栈中读出;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
在所述待执行分支指令的类型为其他类分支指令时,确定所述待执行分支指令的前一条分支指令对应的恢复栈;将所述前一条分支指令对应的恢复栈确定为所述待执行分支指令对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号。
3.根据权利要求1所述的方法,其特征在于,还包括:
在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈;
将所述预测栈中已有的分支指令的地址信息复制到所述新的恢复栈。
4.根据权利要求3所述的方法,其特征在于,所述在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈,包括:
当待执行分支指令的数量大于预设阈值时,在新的待执行分支指令读写预测栈时,根据所述恢复栈的编号将所述恢复栈中的地址信息清空,得到所述新的恢复栈。
5.一种预测栈的错误恢复装置,其特征在于,配置有对预测栈中的地址信息进行备份的至少一个恢复栈,所述至少一个恢复栈中的每个恢复栈有相应的恢复栈编号;该装置包括:
复制单元,用于在根据待执行分支指令的类型读写预测栈后,将所述预测栈中已有的分支指令的地址信息复制到其中一个恢复栈;
校正单元,用于若所述待执行分支指令根据所述预测栈中的地址信息发生预测错误,则根据所述恢复栈中的地址信息校正所述预测栈中的地址信息;
所述校正单元,具体用于获取预测错误信息;所述预测错误信息包括所述待执行分支指令对应的所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;并根据所述恢复栈编号对应的所述恢复栈中的地址信息校正所述栈顶指针对应的预测栈中的地址信息。
6.根据权利要求5所述的装置,其特征在于,
所述复制单元,具体用于在所述待执行分支指令的类型为函数调用类分支指令时,在所述预测栈的栈顶指针中写入所述待执行分支指令的地址信息;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
所述复制单元,具体用于在所述待执行分支指令的类型为函数返回类分支指令时,将所述预测栈的栈顶指针的地址信息确定为所述待执行分支指令的预测地址信息,并将所述栈顶指针中的地址信息从所述预测栈中读出;将所述预测栈中已有的分支指令的地址信息复制到对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号;
所述复制单元,具体用于在所述待执行分支指令的类型为其他类分支指令时,确定所述待执行分支指令的前一条分支指令对应的恢复栈;将所述前一条分支指令对应的恢复栈确定为所述待执行分支指令对应的恢复栈,所述待执行分支指令携带所述预测栈的栈顶指针和所述对应的恢复栈的恢复栈编号。
7.根据权利要求5所述的装置,其特征在于,还包括:
清空单元,用于在新的待执行分支指令读写预测栈时,根据预设规则将所述恢复栈中的地址信息清空,得到新的恢复栈;
所述复制单元,还用于将所述预测栈中已有的分支指令的地址信息复制到所述新的恢复栈。
8.一种计算机可读存储介质,其特征在于,
计算机可读存储介质上存储有计算机程序,在所述计算机程序被处理器执行时,执行权利要求1~4任一项所述的预测栈的错误恢复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711405263.0A CN109960607B (zh) | 2017-12-22 | 2017-12-22 | 预测栈的错误恢复方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711405263.0A CN109960607B (zh) | 2017-12-22 | 2017-12-22 | 预测栈的错误恢复方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960607A CN109960607A (zh) | 2019-07-02 |
CN109960607B true CN109960607B (zh) | 2021-04-20 |
Family
ID=67019500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711405263.0A Active CN109960607B (zh) | 2017-12-22 | 2017-12-22 | 预测栈的错误恢复方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960607B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816536B (zh) * | 2022-06-30 | 2022-09-20 | 飞腾信息技术有限公司 | 一种分支预测处理方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5964868A (en) * | 1996-05-15 | 1999-10-12 | Intel Corporation | Method and apparatus for implementing a speculative return stack buffer |
US6253315B1 (en) * | 1998-08-06 | 2001-06-26 | Intel Corporation | Return address predictor that uses branch instructions to track a last valid return address |
CN1560734A (zh) * | 2004-03-09 | 2005-01-05 | 中国人民解放军国防科学技术大学 | 双栈返回地址预测器设计方法 |
CN101535951A (zh) * | 2006-11-28 | 2009-09-16 | 高通股份有限公司 | 用于辨识子例程调用的方法及设备 |
CN104252586A (zh) * | 2013-06-28 | 2014-12-31 | 国际商业机器公司 | 选择的指令的预测获取和解码方法和系统 |
CN104820580A (zh) * | 2014-01-31 | 2015-08-05 | 想象技术有限公司 | 改进的返回堆栈缓存 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8078851B2 (en) * | 2008-12-18 | 2011-12-13 | Faraday Technology Corp. | Processor and method for recovering global history shift register and return address stack thereof by determining a removal range of a branch recovery table |
-
2017
- 2017-12-22 CN CN201711405263.0A patent/CN109960607B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5964868A (en) * | 1996-05-15 | 1999-10-12 | Intel Corporation | Method and apparatus for implementing a speculative return stack buffer |
US6253315B1 (en) * | 1998-08-06 | 2001-06-26 | Intel Corporation | Return address predictor that uses branch instructions to track a last valid return address |
CN1560734A (zh) * | 2004-03-09 | 2005-01-05 | 中国人民解放军国防科学技术大学 | 双栈返回地址预测器设计方法 |
CN101535951A (zh) * | 2006-11-28 | 2009-09-16 | 高通股份有限公司 | 用于辨识子例程调用的方法及设备 |
CN104252586A (zh) * | 2013-06-28 | 2014-12-31 | 国际商业机器公司 | 选择的指令的预测获取和解码方法和系统 |
CN104820580A (zh) * | 2014-01-31 | 2015-08-05 | 想象技术有限公司 | 改进的返回堆栈缓存 |
Non-Patent Citations (2)
Title |
---|
Speculative return address stack management revisited;Hans Vandierendonck 等;《ACM Transactions on Architecture and Code Optimization (TACO)》;20081201;第5卷(第3期);1-15 * |
龙芯GS464E处理器核架构设计;吴瑞阳 等;《中国科学:信息科学》;20150420;第45卷(第4期);480-500 * |
Also Published As
Publication number | Publication date |
---|---|
CN109960607A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9021512B1 (en) | Runtime management of TOC pointer save and restore commands | |
US9652248B2 (en) | Load queue entry reuse for operand store compare history table update | |
US9110675B1 (en) | Usage of TOC register as application register | |
CN110673924B (zh) | 一种多架构容器云镜像选择方法、装置、设备及存储介质 | |
US8707286B2 (en) | Unique context-based code enhancement | |
EP2846261B1 (en) | Method and apparatus for starting a boot program | |
US8650439B2 (en) | Apparatus and method for fault tolerant FOTA update | |
CN110659256B (zh) | 多机房同步方法、计算设备及计算机存储介质 | |
US20190369999A1 (en) | Storing incidental branch predictions to reduce latency of misprediction recovery | |
US7076769B2 (en) | Apparatus and method for reproduction of a source ISA application state corresponding to a target ISA application state at an execution stop point | |
US9116853B1 (en) | Tape backup and restore in a disk storage environment | |
CN107992268B (zh) | 一种坏块标记的方法及相关装置 | |
CN109960607B (zh) | 预测栈的错误恢复方法、装置及存储介质 | |
US20130205072A1 (en) | Asynchronous bad block management in nand flash memory | |
US10747514B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
US20160328290A1 (en) | Error vector readout from a memory device | |
CN110941516A (zh) | 操作系统还原方法、装置、设备及存储介质 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
CN113238760A (zh) | 一种软件迁移方法、装置、计算设备及可读存储介质 | |
CN111381905B (zh) | 一种程序处理方法、装置及设备 | |
KR20080066381A (ko) | 소프트웨어의 업그레이드 방법 | |
CN113051184B (zh) | 一种数据读取的方法、装置、电子设备及存储介质 | |
CN105335095A (zh) | 闪存文件系统的处理方法及装置 | |
CN109032962B (zh) | 数据存储方法、装置和嵌入式系统 | |
CN107526656B (zh) | 一种云复原方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |