一种实现值关联间接跳转预测的方法

文档序号:6423245阅读:168来源:国知局
专利名称:一种实现值关联间接跳转预测的方法
技术领域
本发明属于微处理器设计和应用微处理器的系统设计领域,尤其涉及现代处理器实现值关联间接跳转预测的方法。
背景技术
在现代处理器中,推测式执行是挖掘指令级并行性的重要手段之一。为了提高推测式执行的效率,减少错误的推测执行,准确的转移预测技术是至关重要的。在现代的宽发射、深度流水的超标量处理器体系结构中,采用转移预测的主要目的是为了提高CPU的运算速度。推测执行是依托于转移预测基础之上的,即如果CPU能够在流水线执行的前条指令结果出来之前能够预测到是否程序转移,就可以提前执行相应的指令,由此可避免处理器中流水线的空闲等待,从而提高CPU的运行速度。另一方面,如果前一指令结果出来后证明转移预测错误,则必须将已装入流水线执行的指令和结果全部清除,然后再将正确的指令装入流水线重新处理,从而降低了处理器性能。由此可见,准确的转移指令预测技术能够为处理器提供连续的指令流输入,弥补了在转移指令跳转方向和跳转目标地址尚未计算出来时处理器无法继续执行而造成的处理器时钟周期的浪费;而一旦发生转移指令误预测,处理器推测执行的错误步骤上的几十条甚至上百条指令将被丢弃,所有推测执行的工作将被取消,又会造成处理器时钟周期的浪费。因此,提高转移指令预测准确度是转移指令预测设计和应用的关键目标,对现代处理器挖掘指令级并行性具有重要意义。转移指令根据转移的目标特性可以分为有条件转移与无条件转移,或者分为直接转移与间接转移。其中有条件直接转移(简称“条件转移”)和无条件间接转移(简称“间接跳转”)是两类最重要的转移指令。条件转移指令通常与转移历史具有较强的关联性,因此基于历史的条件转移预测器能够达到较高的预测准确率;而间接跳转指令因具有多个目标地址而难以准确预测。间接跳转指令被广泛应用于现代面向对象程序和虚拟机解释器程序中,由此而引发了大量间接跳转预测失效。据统计,约45%的转移预测失效是由间接跳转指令所引起的, 因此,间接跳转指令的预测失效问题是影响现代处理器性能的重要因素之一,如何设计高效准确的间接跳转预测器是目前处理器设计中面临的一个难题。在现有的间接跳转预测器中,关联预测器是目前使用最为广泛的一类预测器。为了提高关联预测器的预测准确率,先后有基于历史、基于数据值和基于提前计算等多种间接跳转预测器被提出。其中,基于历史的间接跳转预测器使用跳转方向历史和执行路径历史等信息,指导间接跳转目标地址的预测;基于数据值的间接跳转预测器使用某些数据值指导间接跳转预测;而基于提前计算的间接跳转预测器则使用特殊硬件对虚函数调用这一类特殊的间接跳转指令提前计算其跳转目标地址。目前,最新研究表明,由于间接跳转指令与某些数据值必然存在较强的关联性,因此基于数据值的间接跳转预测器相对来说通常能够取得较高的预测准确率。尽管如此,现有的基于数据值的间接跳转预测器存在两个难以解决的问题首先是寻找有效的关联数据值是非常困难的;其次,这些关联数据值很可能在间接跳转预测时是无法得到的。这两个问题导致了现有的基于数据值的间接跳转预测器难以取得理想的预测结果。

发明内容
本发明所要解决的技术问题是提供一种实现值关联间接跳转预测的方法,能够根据间接跳转指令的有效关联信息准确地进行间接跳转预测。为了解决上述技术问题,本发明提供了一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括编译器根据对处理器执行可执行程序时获取的剖视信息,识别源程序中间接跳转指令对应的子程序结构及其关联数据值中的关联信息,并在该源程序中插入用以标识该关联信息的引导指令,再次生成可执行程序;处理器在执行编译器再次生成的可执行程序过程中,根据弓I导指令动态收集关联信息,并生成值历史模式。进一步地,编译器获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;根据剖视信息识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括选取执行次数多于次数阈值和/或预测失效率高于失效率阈值的间接跳转指令为难预测指令;识别难预测指令对应的所述子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种子程序;其中对于所述虚函数调用子程序,将虚函数表地址中间的一个或多个比特信息识别为关联信息;对于Switch-case语句子程序,将标准化case变量值中的低位比特信息识别为关联信息;对于函数指针调用子程序,将函数指针值中非对齐开始的一个或多个比特识别为
关联信息。进一步地,编译器在源程序中插入用以标识该关联信息的引导指令,再次生成可执行程序,具体包括编译器通过对源程序过程间的控制流进行分析,在控制流的路径上显式地插入引导指令,该引导指令中携带的信息包括用于指示引导指令与难预测指令之间的距离值,用于标识对应于难预测指令的关联数据值的寄存器编号,用于表示对应的子程序结构类别的难预测指令的类别。进一步地,该方法还包括编译器根据源程序过程间的数据依赖关系对引导指令进行调度,以增大该引导指令和相应的难预测指令之间的距离。进一步地,该方法还涉及一寄存器堆、一值历史模式寄存器以及一目标地址缓冲区;处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集关联信息, 并生成值历史模式,具体在引导指令的发射阶段包括
根据引导指令表明的寄存器编号读取寄存器堆中相应寄存器的值作为关联数据值收集;根据引导指令表明的难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上;将值历史模式寄存器中的前一值历史移位到值历史第二组合位置,并与移位到值历史第一组合位置上的关联信息进行组合,拼接成值历史模式。进一步地,针对难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上,或者将值历史模式寄存器中的前一值历史移位到值历史第二组合位置,均采用固定移位位数,并通过实验确定最佳的固定移位位数。进一步地,该方法还包括在间接跳转指令的取指阶段,根据难预测指令的程序计数器PC值和生成的值历史模式预测难预测指令的目标地址。进一步地,该方法还涉及一过滤表,在引导指令的发射阶段,还包括将该引导指令表明的距离值与该引导指令的程序计数器PC值之和作为标签若查询该过滤表中没有匹配的项,则将该标签作为难预测指令的PC值填入该过滤表内新分配的项中。进一步地,根据难预测指令的PC值和生成的值历史模式预测该难预测指令的目标地址,具体包括将间接跳转指令的PC值作为标签若查询所述过滤表中有与该标签匹配的项,则标记当前间接跳转指令是难预测指令;针对该难预测指令,将从值历史模式寄存器读取的值历史模式与该难预测指令的 PC值进行异或操作,并以异或操作的结果作为索引读取保存在目标地址缓冲区中的目标地址,进行下一周期指令的取指和执行过程。通过本发明的方法,编译器在编译时刻识别的典型子程序结构及其有效的关联数据值,并通过插入引导指令传递给处理器,使得处理器在执行程序过程中根据动态收集的多个关联数据值形成值历史模式,并作为有效的关联信息预测间接跳转指令,因而可有效地提高间接跳转指令的预测准确率,从而可提高处理器及其应用整体的系统性能。将本发明的方法应用于现代超标量处理器中,通过实验结果表明能够有效地提高应用处理器系统的整体性能。


图1是本发明的实现值关联间接跳转预测的方法实施例流程图;图2是图1所示的方法实施例中编译器在第二次编译中识别关联数据值实施例的流程图;图3是图1所示的方法实施例中处理器根据引导指令收集的关联数据值形成值历史模式并预测间接跳转指令的方法实施例的流程图;图4是在图3所示的方法实施例中使用的值关联间接跳转预测装置实施例的结构框图5是对图3所示的方法实施例流程的操作进一步细述的流程;图6是图4所示的装置实施例中分类移位器2对关联数据值进行分类移位的示意图;图7是图4所示的装置实施例中值历史模式寄存器3进行值历史模式更新的示意图;图8是说明本发明方法及装置的预测结果的评测实验结果数据示意图。
具体实施例方式下面结合附图和优选实施例对本发明的技术方案进行详细地说明。以下例举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。本发明采用软硬件协同的技术方案,提出了一种基于编译指导的值关联间接跳转预测的方法及系统,其核心思想是编译器通过对典型的子程序结构中所包含的间接跳转指令的特点分析,找到不同的子程序结构中的间接跳转指令应该关联到的不同关联数据值, 并通过在程序中插入引导指令对关联数据值进行标记,以指导处理器在执行可执行程序时进行的间接跳转预测。本发明基于上述思想设计了一种根据子程序结构自动为难预测的间接跳转指令识别不同关联值的编译方法,并设计了一种能将编译时识别的关联数据值传递给处理器的引导指令。编译器根据子程序结构识别关联值后显式地插入引导指令,以便将编译时刻识别的关联信息传递给处理器。如图1所示,是本发明提供的实现值关联间接跳转预测的方法一实施例的流程, 包括编译器在编译时刻执行的流程和处理器在程序运行时刻执行的流程,分别包括如下步骤10 编译器通过首次编译将源程序编译成可执行程序;20 编译器对处理器执行可执行程序过程进行剖视,获取剖视信息;编译器对处理器在执行可执行程序过程中的间接跳转指令进行剖视,搜集程序间接跳转指令在典型输入集情况下的剖视(profiling)信息,主要包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种。30:编译器根据剖视信息进行二次编译,为间接跳转指令识别源程序中的子程序结构及其关联信息,并在编译过程中插入引导指令;其中,编译器识别源程序中的间接跳转指令所对应的子程序结构,主要包括虚函数调用、Switch-case语句、函数指针调用中的一种或多种;根据相应的子程序结构识别与间接跳转指令跳转目标具有较强关联性的信息;通过过程间控制流分析,将引导指令显式插入到程序中,以标识该间接跳转指令所对应的关联信息。本发明为实现值关联间接跳转预测而设置的“引导指令”,是通过扩展指令系统而添加的一种特殊指令(是使用处理器的用户所看不到的指令),该指令携带以下三类信息第一类信息用于指示本引导指令与相应的间接跳转指令的距离,表示这种距离的数值可以为正值或者负值,它由引导指令和间接跳转指令的相对顺序决定;第二类信息则是标识间接跳转指令所对应的关联信息相应的寄存器编号;第三类信息是表示引导指令所对应的间接跳转指令的类别,即表示该间接跳转指令相应的子程序结构的类别。以上三类信息均是由编码器通过直接编码而包含到引导指令之中;在由处理器执行程序过程中对引导指令进行译码时即可获得这三类信息。引导指令的具体格式可以根据处理器的指令系统的特点而定制。40 再次生成可执行程序;50 处理器在执行可执行程序过程中根据引导指令动态收集关联信息,并形成值历史模式;值历史模式是一种将多个关联数据值中相应的关联信息组合形成的复合体信息。 它借鉴了基于转移历史的间接跳转预测器的思想,但它与基于转移历史的间接跳转预测器所不同的是,其形成历史模式使用的是关联数据值中的信息而不是使用转移历史。假设间接跳转指令的关联数据值依次为1,2,3,1,2,3,...;若值历史模式由2个关联数据值中各自的关联信息比特组合而成,则该间接跳转指令所对应的值历史为(1,2)、 0,3)、(3,1)、(1,2)、0,3)、...,其值历史模式为(1,2)、(2,3)、(3,1);若值历史模式由 3 个关联数据值中各自的关联信息比特组合而成,则该间接跳转指令所对应的值历史为(1, 2,3), (2,3,1)、(3,1,2), (1,2,3),...,其值历史模式为(1,2,3), (2,3,1)、(3,1,2)。值历史模式反映了关联数据值出现的规律,与间接跳转目标地址具有较强的关联性,因此可用于引导间接跳转预测。60 根据值历史模式对间接跳转指令进行预测。处理器将根据收集的关联信息所形成的值历史模式作为有效的关联信息对间接跳转指令进行预测。图1中所示的步骤30,即编译器在进行二次编译过程中,为间接跳转指令识别源程序中的子程序结构及其关联数据值,并将其插入引导指令,具体的流程表示在图2中,包括如下步骤301 编译器根据源程序及其典型输入集剖视处理器执行的程序,搜集难预测指令;编译器根据在剖视过程中获取的剖视信息选取执行次数多于次数阈值和预测失效率高于失效率阈值的间接跳转指令作为“难预测指令”。302 根据源程序中的子程序结构为每个难预测指令识别关联信息;编译器在二次编译过程中对那些“难预测指令”进行特殊处理,包括(1)识别“难预测指令”对应的子程序结构;这些子程序结构是一种局部控制流和数据依赖结构,即包括上述虚函数调用、 Switch-case语句、函数指针调用中的一种或多种。由于这些子程序结构携带了源程序级别的控制流和数据流信息,因此能够更清楚地表明哪些数据值与间接跳转指令关联性较强, 以及如何使用这些关联性强的信息。(2)根据相应的子程序结构识别与间接跳转指令跳转目标具有较强关联性的信息;其中a、对于虚函数调用,将虚函数表地址中间的一个或多个比特信息识别为形成对应的值历史信息的关联信息。虚函数调用子程序是一种为实现面向对象程序中“多态性”特征而设计的一种特殊函数调用。该“多态性”是指发出同样的消息被不同类别的对象接收时,有可能导致完全不同的行为,因此虚函数调用目标地址由对象的具体类别动态确定。应用于虚函数调用的间接跳转指令通常需要进行三个过程,即获取对象地址、获取虚函数表地址以及间接跳转。根据虚函数调用的语义特征,可以发现虚函数表与间接跳转指令具有强烈关联性,并且其对应的值历史信息应该包含虚函数表地址中间的一个或多个比特信息。b、对于Switch-case语句,将标准化case变量值的低位比特信息识别为形成对应的值历史信息的关联信息。Switch-case语句是一种根据case变量值动态选择分支路径执行的控制流结构, 被广泛用于c/c++/c#/java等现代高级编程语言中。通常,当分支路径数目大于一定阈值时,编译器会使用间接跳转指令来实现Switch-case语句,否则使用if-else结构来实现。 当使用间接跳转指令实现时,其具体过程为首先对case变量进行标准化使其成为从0开始的相邻枚举变量,然后使用标准化case变量值作为索引获得相应目标地址,并使用间接跳转指令跳转到相应分支路径。标准化case变量值与间接跳转指令具有强烈的关联性,并且其对应的值历史模式应包含标准化case变量值的低位比特信息。C、对于函数指针调用,将函数指针值中非对齐开始的一个或多个比特识别为形成对应的值历史信息的关联信息。函数指针调用主要用于根据函数指针内容跳转到相应的目标地址。故函数指针值与间接跳转指令具有强烈关联性,并且其对应的值历史模式应该包含函数值指针值中非对齐开始的一个或多个比特信息。303 在源程序的控制流路径上显式地插入引导指令,以标识关联信息;编译器通过对源程序的控制流进行分析,在该控制流的路径上显式地插入引导指令,以标识相应的间接跳转指令所对应的形成值历史信息的关联信息。编译器在每一个控制路径上插入引导指令,可跟踪多条控制流路径,所以每个间接跳转指令可能会对应多个弓I导指令。304 根据程序过程间数据依赖关系对引导指令进行调度,以增大引导指令和间接跳转指令间的距离。可执行程序中的指令之间是存在数据依赖关系的,譬如一个寄存器中的值依赖于另外一个寄存器的值,或依赖于对多个寄存器的值运算的结果,或依赖于一个标号地址中的值。编译器对引导指令的调度主要是根据指令之间的这种数据依赖关系,在不影响程序正确性的前提下动态调度引导指令以及引导指令的前驱指令和后继指令,以增大引导指令和间接跳转指令之间的距离,从而使得处理器能够及时通过引导指令传递的关联数据值对间接跳转指令目标地址进行预测。具体的指令调度算法是基于传统“表调度”算法(参考《Compilers principles, Techniques, & Tools, second Edition))中 10. 3. 2 节)实现的,包含如下步骤 根据程序中指令之间的数据依赖关系建立数据依赖图; 在数据依赖图中标记引导指令,以及引导指令所依赖的所有其它指令; 修改这些被标记指令的调度优先级,使得它们的优先级最高,以便尽可能早地完成这些被标记指令的调度。通过修改调度优先级的方法,引导指令就可以尽早完成调度,在引导指令和间接跳转指令之间留下尽可能多的指令,从而增大了弓丨导指令和间接跳转指令之间的距离。在图1所示的方法实施例的步骤50中,处理器根据引导指令动态收集关联信息, 并形成值历史模式,以及根据形成的值历史模式预测间接跳转指令,其方法实施例的具体流程表示在图3中,包括如下步骤510:在引导指令的发射阶段,根据引导指令从寄存器堆动态收集关联数据值,并针对间接跳转指令的类别移位处理关联数据值,获取相应的关联信息;520 将获取的关联信息与前一值历史组合更新成当前值历史,形成值历史模式; 将引导指令所对应的难预测转指令的PC值写入过滤表中;530:在间接跳转指令的取指阶段,根据难预测指令的PC值和形成的值历史模式预测保存在目标地址缓冲区内的目标地址。譬如下面中给出了 SPEC CPU 2006程序集中的458. sjeng程序片段
权利要求
1.一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括编译器根据对处理器执行可执行程序时获取的剖视信息,识别源程序中间接跳转指令对应的子程序结构及其关联数据值中的关联信息,并在所述源程序中插入用以标识所述关联信息的引导指令,再次生成可执行程序;处理器在执行编译器再次生成的可执行程序过程中,根据所述引导指令动态收集关联信息,并生成值历史模式。
2.按照权利要求1所述的方法,其特征在于,所述编译器获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;根据所述剖视信息识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括选取执行次数多于次数阈值和/或预测失效率高于失效率阈值的所述间接跳转指令为难预测指令;识别所述难预测指令对应的所述子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种子程序;其中对于所述虚函数调用子程序,将虚函数表地址中间的一个或多个比特信息识别为所述关联信息;对于所述Switch-case语句子程序,将标准化case变量值中的低位比特信息识别为所述关联信息;对于所述函数指针调用子程序,将函数指针值中非对齐开始的一个或多个比特识别为所述关联信息。
3.按照权利要求2所述的方法,其特征在于,所述编译器在所述源程序中插入用以标识所述关联信息的引导指令,再次生成可执行程序,具体包括所述编译器通过对所述源程序过程间的控制流进行分析,在所述控制流的路径上显式地插入所述引导指令,所述引导指令中携带的信息包括用于指示所述引导指令与所述难预测指令之间的距离值,用于标识对应于所述难预测指令的所述关联数据值的寄存器编号,用于表示对应的子程序结构类别的所述难预测指令的类别。
4.按照权利要求3所述的方法,其特征在于,还包括所述编译器根据所述源程序过程间的数据依赖关系对所述引导指令进行调度,以增大所述弓I导指令和相应的所述难预测指令之间的距离。
5.按照权利要求3所述的方法,其特征在于,还涉及一寄存器堆、一值历史模式寄存器以及一目标地址缓冲区;所述处理器在执行编译器再次生成的可执行程序过程中,根据所述引导指令动态收集关联信息,并生成值历史模式,具体在所述引导指令的发射阶段包括根据所述引导指令表明的寄存器编号读取所述寄存器堆中相应寄存器的值作为关联数据值收集;根据所述引导指令表明的所述难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上;将所述值历史模式寄存器中的前一值历史移位到值历史第二组合位置,并与移位到值历史第一组合位置上的关联信息进行组合,拼接成所述值历史模式。
6.按照权利要求5所述的方法,其特征在于,针对所述难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上,或者将所述值历史模式寄存器中的前一值历史移位到值历史第二组合位置,均采用固定移位位数,并通过实验确定最佳的固定移位位数。
7.按照权利要求5或6所述的方法,其特征在于,还包括在间接跳转指令的取指阶段,根据所述难预测指令的程序计数器PC值和生成的所述值历史模式预测所述难预测指令的目标地址。
8.按照权利要求7所述的方法,其特征在于,还涉及一过滤表,在所述引导指令的发射阶段,还包括将该引导指令表明的距离值与该引导指令的程序计数器PC值之和作为标签若查询所述过滤表中没有匹配的项,则将该标签作为难预测指令的PC值填入所述过滤表内新分配的项中。
9.按照权利要求8所述的方法,其特征在于,根据所述难预测指令的PC值和生成的所述值历史模式预测该难预测指令的目标地址,具体包括将所述间接跳转指令的PC值作为标签若查询所述过滤表中有与该标签匹配的项,则标记当前间接跳转指令是难预测指令;针对所述难预测指令,将从所述值历史模式寄存器读取的值历史模式与该难预测指令的PC值进行异或操作,并以所述异或操作的结果作为索引读取保存在所述目标地址缓冲区中的目标地址,进行下一周期指令的取指和执行过程。
全文摘要
本发明披露了一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括编译器根据对处理器执行可执行程序时获取的剖视信息,识别源程序中间接跳转指令对应的子程序结构及其关联数据值中的关联信息,并在该源程序中插入用以标识该关联信息的引导指令,再次生成可执行程序;处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集关联信息,并生成值历史模式。本发明可有效地提高间接跳转指令的预测准确率,从而可提高处理器及其应用整体的系统性能。
文档编号G06F9/38GK102163143SQ20111010805
公开日2011年8月24日 申请日期2011年4月28日 优先权日2011年4月28日
发明者佟冬, 刘先华, 张吉豫, 程旭, 谢子超, 谭明星 申请人:北京北大众志微系统科技有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1