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

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

Info

Publication number
CN102156634A
CN102156634A CN2011100994403A CN201110099440A CN102156634A CN 102156634 A CN102156634 A CN 102156634A CN 2011100994403 A CN2011100994403 A CN 2011100994403A CN 201110099440 A CN201110099440 A CN 201110099440A CN 102156634 A CN102156634 A CN 102156634A
Authority
CN
China
Prior art keywords
value
associated data
data value
instruction
buffer zone
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.)
Granted
Application number
CN2011100994403A
Other languages
English (en)
Other versions
CN102156634B (zh
Inventor
程旭
谭明星
刘先华
张吉豫
佟冬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhongzhi Core Technology Co Ltd
Original Assignee
BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING filed Critical BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority to CN 201110099440 priority Critical patent/CN102156634B/zh
Publication of CN102156634A publication Critical patent/CN102156634A/zh
Application granted granted Critical
Publication of CN102156634B publication Critical patent/CN102156634B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明披露了一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括:编译器对处理器执行可执行程序的过程进行剖视,并获取剖视信息;编译器根据该剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,并在源程序中插入用以标识关联数据值的引导指令,再次生成可执行程序。处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集所述关联数据值,并对难预测指令进行预测。本发明有效地提高了间接跳转指令的预测准确率,提高了处理器及其应用整体的系统性能。

Description

一种实现值关联间接跳转预测的方法
技术领域
本发明属于微处理器设计和应用微处理器的系统设计领域,尤其涉及现代处理器实现值关联间接跳转预测的方法。
背景技术
在现代处理器中,推测式执行是挖掘指令级并行性的重要手段之一。为了提高推测式执行的效率,减少错误的推测执行,准确的转移预测技术是至关重要的。
在现代的宽发射、深度流水的超标量处理器体系结构中,采用转移预测的主要目的是为了提高CPU的运算速度。推测执行是依托于转移预测基础之上的,即如果CPU能够在流水线执行的前条指令结果出来之前能够预测到是否程序转移,就可以提前执行相应的指令,由此可避免处理器中流水线的空闲等待,从而提高CPU的运行速度。另一方面,如果前一指令结果出来后证明转移预测错误,则必须将已装入流水线执行的指令和结果全部清除,然后再将正确的指令装入流水线重新处理,从而降低了处理器性能。
由此可见,准确的转移指令预测技术能够为处理器提供连续的指令流输入,弥补了在转移指令跳转方向和跳转目标地址尚未计算出来时处理器无法继续执行而造成的处理器时钟周期的浪费;而一旦发生转移指令误预测,处理器推测执行的错误步骤上的几十条甚至上百条指令将被丢弃,所有推测执行的工作将被取消,又会造成处理器时钟周期的浪费。因此,提高转移指令预测准确度是转移指令预测设计和应用的关键目标,对现代处理器挖掘指令级并行性具有重要意义。
转移指令根据转移的目标特性可以分为有条件转移与无条件转移,或者分为直接转移与间接转移。其中有条件直接转移(简称“条件转移”)和无条件间接转移(简称“间接跳转”)是两类最重要的转移指令。条件转移指令通常与转移历史具有较强的关联性,因此基于历史的条件转移预测器能够达到较高的预测准确率;而间接跳转指令因具有多个目标地址而难以准确预测。
间接跳转指令被广泛应用于现代面向对象程序和虚拟机解释器程序中,由此而引发了大量间接跳转预测失效。据统计,约45%的转移预测失效是由间接跳转指令所引起的,因此,间接跳转指令的预测失效问题是影响现代处理器性能的重要因素之一,如何设计高效准确的间接跳转预测器是目前处理器设计中面临的一个难题。
在现有的间接跳转预测器中,关联预测器是目前使用最为广泛的一类预测器。为了提高关联预测器的预测准确率,先后有基于历史、基于数据值和基于提前计算等多种间接跳转预测器被提出。其中,基于历史的间接跳转预测器使用跳转方向历史和执行路径历史等信息,指导间接跳转目标地址的预测;基于数据值的间接跳转预测器使用某些数据值指导间接跳转预测;而基于提前计算的间接跳转预测器则使用特殊硬件对虚函数调用这一类特殊的间接跳转指令提前计算其跳转目标地址。
目前,最新研究表明,由于间接跳转指令与某些数据值必然存在较强的关联性,因此基于数据值的间接跳转预测器相对来说通常能够取得较高的预测准确率。尽管如此,现有的基于数据值的间接跳转预测器存在两个难以解决的问题:首先是寻找有效的关联数据值是非常困难的;其次,这些关联数据值很可能在间接跳转预测时是无法得到的。这两个问题导致了现有的基于数据值的间接跳转预测器难以取得理想的预测结果。
发明内容
本发明所要解决的技术问题是提供一种实现值关联间接跳转预测的方法,能够根据间接跳转指令的有效关联值准确地进行间接跳转预测。
为了解决上述技术问题,本发明提供了一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括:
编译器对处理器执行可执行程序的过程进行剖视,并获取剖视信息;
编译器根据该剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,并在源程序中插入用以标识关联数据值的引导指令,再次生成可执行程序。
进一步地,编译器通过对所述过程进行剖视获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种。
进一步地,编译器根据剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括:
选取执行次数多于次数阈值和预测失效率高于失效率阈值的间接跳转指令为难预测指令;
识别难预测指令对应的所述子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种;其中:
对于虚函数调用,将虚函数表地址识别为相应的间接跳转指令的关联数据值;
对于所述Switch-case语句,将标准化case变量值识别为相应的间接跳转指令的关联数据值;
对于函数指针调用,将函数指针值识别为相应的间接跳转指令的关联数据值。
进一步地,编译器在源程序中插入用以标识关联数据值的引导指令,再次生成可执行程序,具体包括:
编译器通过对源程序过程间的控制流进行分析,在控制流的路径上显式地插入引导指令,然后再次生成可执行程序;引导指令中携带的信息包括:用于指示引导指令与所述难预测指令之间的距离值,用于标识对应于难预测指令的关联数据值相应的寄存器编号。
进一步地,在再次生成可执行程序前,还包括:
编译器根据源程序过程间的数据依赖关系对引导指令进行调度,即包括:
根据源程序中指令之间的数据依赖关系建立数据依赖图;
在数据依赖图中标记引导指令以及引导指令所依赖的所有其它指令;
修改被标记的指令的调度优先级为最高。
进一步地,该方法还包括:处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集所述关联数据值,并对难预测指令进行预测。
进一步地,该方法还涉及一寄存器堆、一至少包括关联值域的关联数据值缓冲区以及一目标地址缓冲区;处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集关联数据值,并对难预测指令进行预测,具体包括:
在引导指令的发射阶段,根据该引导指令所携带的寄存器编号,从寄存器堆中读取相应的寄存器中的值,并将读取的值作为关联数据值写入关联数据值缓冲区中的关联值域;
在所述难预测指令的预测阶段,从关联值域中读取关联数据值,根据难预测指令的程序计数器PC值和读取的关联数据值从所述目标地址缓冲区中预测该难预测指令的目标地址。
进一步地,涉及的关联数据值缓冲区还包括标签域;处理器将关联数据值写入关联数据值缓冲区中的关联值域,具体包括:
将引导指令的PC值与该引导指令携带的距离值之和作为标签,若查询到该标签与标签域中的值相匹配的项,则将读取的关联数据值写入该项对应的关联值域中;否则,在关联数据值缓冲区中新分配一项,并将新分配的项相应的标签域进行初始化,将读取的关联数据值写入该新分配的项相应的关联值域。
进一步地,处理器在对所述间接跳转指令进行预测之前,还包括:若查询到间接跳转指令的PC值与关联数据值缓冲区的标签域中的值相匹配,则将该跳转指令识别为难预测指令;
处理器在难预测指令的预测阶段,读取关联值域中相应的关联数据值,根据难预测指令的PC值和读取的关联数据值从目标地址缓冲区中预测该难预测指令的目标地址,具体包括:
用该难预测指令的PC值作为标签从关联数据值缓冲区相应项的关联值域中读取关联数据值;
对难预测指令的PC值和读取的关联数据值进行异或操作,将异或操作的结果作为索引,将从目标地址缓冲区中读取的值作为预测的难预测指令的目标地址,进行下一周期指令的取指和执行过程。
进一步地,涉及的关联数据值缓冲区还包括标识域,该方法还包括:
处理器在对引导指令进行取指时,将该引导指令的PC值和该引导指令携带的距离值之和作为标签查询关联数据值缓冲区的标签域,若存在与标签域的值相匹配的项,则将该项的标识域的值设为匹配标识值;
处理器在对间接跳转指令进行预测时,用该间接跳转指令的PC值作为标签查询到与关联数据值缓冲区的标签域的值相匹配的项,则将该项的标识域的值设为预测标识值;
处理器在引导指令的发射阶段,若根据该引导指令查询关联数据值缓冲区对应的标识域的值为预测标识值,则在将根据该引导指令从寄存器堆读取的关联数据值写入关联数据值缓冲区对应的关联值域的同时,对难预测指令的目标地址进行第二次预测,若比较两次预测的结果相同,则忽略该第二次预测的结果;否则取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。
通过本发明的方法及系统,由于编译器在编译时刻识别的典型子程序结构及其有效的关联数据值,并通过插入引导指令传递给处理器,使得处理器在执行程序过程中根据引导指令将动态收集的关联数据值作为有效的关联信息,或者,将动态收集的多个关联数据值形成值历史模式作为有效的关联信息,来引导预测间接跳转指令,从而有效地提高了间接跳转指令的预测准确率,由此提高了处理器及其应用整体的系统性能。
附图说明
图1是本发明的实现值关联间接跳转预测的方法实施例流程图;
图2是图1所示的方法实施例中编译器在二次编译中识别关联数据值实施例的流程图;
图3是图1所示的方法实施例中处理器根据引导指令收集关联数据值并预测间接跳转指令方法一实施例的流程图;
图4是在图3所示的方法实施例中使用的值关联间接跳转预测装置的一实施例的结构框图;
图5是对图3所示的方法实施例流程的操作进一步细述的流程;
图6是处理器在执行程序过程中几个典型操作的时刻点示意图;
图7是图1所示的方法实施例中编译器进行再次编译的装置实施例的结构;
图8是说明本发明方法及装置的预测结果的评测实验结果数据示意图。
具体实施方式
下面结合附图和优选实施例对本发明的技术方案进行详细地说明。以下例举的实施例仅用于说明和解释本发明,而不构成对本发明技术方案的限制。
本发明采用软硬件协同的技术方案,提出了一种基于编译指导的值关联间接跳转预测的方法及系统,其核心思想是编译器通过对典型的子程序结构中所包含的间接跳转指令的特点分析,找到不同的子程序结构中的间接跳转指令应该关联到的不同关联数据值,并通过在程序中插入引导指令对关联数据值进行标记,以指导处理器在执行可执行程序时进行的间接跳转预测。
本发明基于上述思想设计了一种根据子程序结构自动为难预测的间接跳转指令识别不同关联值的编译方法,并设计了一种能将编译时识别的关联数据值传递给处理器的引导指令。编译器根据子程序结构识别关联值后显式地插入引导指令,以便将编译时刻识别的关联信息传递给处理器。
如图1所示,是本发明提供的实现值关联间接跳转预测的方法实施例的流程,包括编译器在编译时刻执行的流程和处理器在程序运行时刻执行的流程,分别包括如下步骤:
10:编译器通过首次编译将源程序编译成可执行程序;
20:编译器对处理器执行可执行程序过程进行剖视,获取剖视信息;
编译器对处理器在执行可执行程序过程中的间接跳转指令进行剖视,搜集程序间接跳转指令在典型输入集情况下的剖视(profiling)信息,主要包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种。
30:编译器根据剖视信息进行二次编译,为间接跳转指令识别源程序中的子程序结构及其关联数据值,并在编译过程中插入引导指令;
其中,编译器识别源程序中的间接跳转指令所对应的子程序结构,主要包括虚函数调用、Switch-case语句、函数指针调用中的一种或多种;根据相应的子程序结构识别与间接跳转指令跳转目标具有较强关联性的数据值;通过过程间控制流分析,将引导指令显式插入到程序中,以标识该间接跳转指令所对应的关联数据值。
本发明为实现值关联间接跳转预测而设置的“引导指令”,是通过扩展指令系统而添加的一种特殊指令(是使用处理器的用户所看不到的指令),该指令携带两类信息:一类信息用于指示本引导指令与相应的间接跳转指令的距离,表示这种距离的数值可以为正值或者负值,它由引导指令和间接跳转指令的相对顺序决定;另一类信息则是标识间接跳转指令所对应的关联数据值相应的寄存器编号。
引导指令的具体格式可以根据处理器的指令系统的特点而定制。
40:生成可执行程序;
50:处理器在执行可执行程序过程中根据引导指令动态收集关联数据值,并对间接跳转指令进行预测。
图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:在源程序的控制流路径上显式地插入引导指令,以标识关联数据值;
编译器通过对源程序的控制流进行分析,在该控制流的路径上显式地插入引导指令,以标识相应的间接跳转指令所对应的关联数据值。
编译器在每一个控制路径上插入引导指令,可跟踪多条控制流路径,所以每个间接跳转指令可能会对应多个引导指令。
304:根据程序过程间数据依赖关系对引导指令进行调度,以增大引导指令和间接跳转指令间的距离。
可执行程序中的指令之间是存在数据依赖关系的,譬如一个寄存器中的值依赖于另外一个寄存器的值,或依赖于对多个寄存器的值运算的结果,或依赖于一个标号地址中的值。编译器对引导指令的调度主要是根据指令之间的这种数据依赖关系,在不影响程序正确性的前提下动态调度引导指令以及引导指令的前驱指令和后继指令,以增大引导指令和间接跳转指令之间的距离,从而使得处理器能够及时通过引导指令传递的关联数据值对间接跳转指令目标地址进行预测。
具体的指令调度算法是基于传统“表调度”算法(参考《Compilers:Principles,Techniques,& Tools.second Edition》中10.3.2节)实现的,包含如下步骤:
●根据程序中指令之间的数据依赖关系建立数据依赖图;
●在数据依赖图中标记引导指令,以及引导指令所依赖的所有其它指令;
●修改这些被标记指令的调度优先级,使得它们的优先级最高,以便尽可能早地完成这些被标记指令的调度。
通过修改调度优先级的方法,引导指令就可以尽早完成调度,在引导指令和间接跳转指令之间留下尽可能多的指令,从而增大了引导指令和间接跳转指令之间的距离。
对于图1所示的方法实施例中处理器根据引导指令收集关联数据值并预测间接跳转指令方法实施例的具体流程表示在图3中,包括如下步骤:
510:在引导指令的发射阶段,根据引导指令从寄存器堆动态收集关联数据值,并写入关联数据值缓冲区;
处理器在开始运行可执行程序时,通过执行引导指令来动态收集关联数据值,并使用关联数据值缓冲区结构保存收集的关联数据值。
关联数据值缓冲区的结构可参见图4中的关联数据值缓冲区1,它是一种容量很小(可小于1K bit)的硬件存储器,至少包含关联值域,用于存放处理器收集的关联数据值。其访问方式可以根据处理器特性配置为全相连(即当关联数据值缓冲区中的项目数较少时,可以访问全部项目)或者组相连(即当关联数据值缓冲区中的项目数较多时,每次只能访问同一组的项目),可以配置为含标签(在全相连的情况下每次访问需要用标签作为索引)或无标签(在组相连的情况下可以不用访问标签)。
处理器根据引导指令从寄存器堆动态收集关联数据值,并写入关联数据值缓冲区,具体包括在图5所示的流程中如下步骤中:
511:在引导指令的发射阶段,根据引导指令表明的寄存器的编号读取寄存器堆中相应寄存器的值作为关联数据值收集;
请参照图4,当引导指令进入发射阶段时,处理器根据引导指令所标识的关联数据值对应的寄存器编号RA,从寄存器堆2中读取相应的寄存器中的值,并将其作为关联数据值收集。
512:将当前引导指令的PC值与该引导指令携带的距离值之和作为标签访问关联数据值缓冲区内各项的标签域;
请参照图4,关联数据值缓冲区1还包含标签域,用于存放访问关联值域的索引标签值。
处理器写入过程以当前引导指令所对应的间接跳转指令的程序计数器(PC,Program Counter)值作为标签,该标签具体计算方式为:将当前引导指令的PC值加上该引导指令中所携带的距离值Offset。
513~515:处理器在对图4所示的关联数据值缓冲区1的写入过程中,若该标签与关联数据值缓冲区1的某一项的标签域的值相匹配,则直接将从寄存器堆2中读取的关联数据值写入这一项的关联值域;否则,在关联数据值缓冲区1中新分配一项,并将其中的标签域进行初始化,以及将读取的关联数据值写入该项的关联值域。
520:在间接跳转指令的取指阶段,根据间接跳转指令访问关联数据值缓冲区,识别难预测的间接跳转指令;
处理器根据间接跳转指令访问关联数据值缓冲区,识别难预测的间接跳转指令,具体包括在图5所示的如下步骤521、522中:
521:在指令的取指阶段,将间接跳转指令的PC值作为标签访问关联数据值缓冲区内各项的标签域;
522:若关联数据值缓冲区存在该标签与标签域中的值匹配的项,将该间接跳转指令识别为难预测指令,否则识别为普通跳转指令。
530:根据难预测的间接跳转指令的PC值和从关联数据值缓冲区读取的相应的关联数据值获取保存在目标地址缓冲区内的目标地址,作为难预测指令的预测结果。
处理器对识别为难预测指令的预测处理和对识别为普通跳转指令的处理分别包括在图5所示的如下步骤531、532中:
531:对于难预测指令,将从相应的关联值域读取的关联数据值与该指令的PC值相异或,并以异或结果作为索引,从常规BTB中读取间接跳转目标地址。
请参照图4,处理器对所有的难预测指令以该指令的PC值作为标签访问关联数据值缓冲区1,并读取相应项关联域中的关联数据值;然后将读取的关联数据值与该指令的PC值相异或,并将异或结果作为索引访问常规的目标地址缓冲区(BTB,Branch Target Buffer)3,并将从BTB 3中读取的值作为对该间接跳转指令预测的目标地址,进行下一周期指令的取指和执行过程。
532:对于普通跳转指令,按该指令的PC值访问BTB,获取目标地址。
处理器对普通跳转指令的访问过程和传统访问过程一致,即直接使用该普通跳转指令的PC值作为索引访问常规的BTB。
引导指令的发射时刻既有可能在该指令的取指时刻之前,如图6中所示的时刻(1),也有可能在该指令的取指时刻之后,如图6中所示的时刻(2)。因此,在间接跳转指令被取指时的预测阶段,当前间接跳转指令对应的关联数据值有可能尚未写入关联值缓冲区中,在此情况下可使用“目标地址覆盖”机制进行处理,即首先使用关联值缓冲区中已有的旧值作为关联数据值进行第一次目标地址预测(因为处理器此时并不知道该值是旧值);在随后发生的引导指令发射阶段,当处理器将最新的关联数据值写入关联数据缓冲区的同时,使用更新后的关联数据值进行第二次目标地址预测,并比较第二次预测的结果,若两次预测的结果相同,则忽略第二次预测的结果并继续当前取指和执行过程,若两次预测的结果不同,则取消第一次预测之后所有推测执行的指令,并根据第二次预测的结果进行新的取指和执行过程。
由于第二次预测具有更高的预测准确率,因此“目标地址覆盖”机制能够有效减小预测失效,减少预测失效所带来的流水线清空的开销。
上述“目标地址覆盖”机制可借助于关联数据值缓冲区的标识域,譬如U比特(可有一个或多个Bit)来实现,如图4所示,在关联数据值缓冲区1中包含该U比特,用于表明引导指令发射阶段和间接跳转预测阶段的相对顺序。当引导指令被取指时,处理器根据引导指令的PC值和该引导指令包含的距离值Offset之和查询关联数据值缓冲区1,若存在标签匹配项,则设置该项的U比特为匹配标识值(譬如设为0);当相应的间接跳转指令被取指和预测时,处理器根据该指令的PC值也查询关联数据值缓冲区1,并将对应项的U比特设置为预测标识值(譬如设为1)。
在引导指令的发射阶段,处理器若查询对应的U比特为预测标识值(譬如为1),则表明相应项的关联值域中的关联数据值是首次预测(发生在引导指令的发射时刻之前)使用的关联数据值,是旧值,则处理器在将该引导指令对应的关联数据值写入关联数据值缓冲区1的同时,再次对间接跳转指令的目标地址进行预测,并比较两次预测的结果,若两次预测的结果相同则忽略第二次预测结果,否则取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。
针对上述实现值关联间接跳转预测方法实施例,本发明相应地还提供了一种在该方法实施例中编译时刻进行再次编译的装置实施例,其结构如图7所示,包括依次连接的程序剖视模块710、关联数据值识别模块720以及引导指令插入模块730,其中:
程序剖视模块710,用于对处理器执行可执行程序的过程进行剖视,并将获取的剖视信息输出给关联数据值识别模块720;
关联数据值识别模块720,用于根据输入的剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,并将识别的子程序结构对应的关联数据值输出给引导指令插入模块730;
引导指令插入模块730,用于将输入的关联数据值包含在相应的引导指令里插入到源程序中,再次生成可执行程序。
程序剖视模块710通过对上述过程进行剖视获取、并向关联数据值识别模块输出的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;
关联数据值识别模块720选取执行次数多于次数阈值和预测失效率高于失效率阈值的间接跳转指令为难预测指令;识别难预测指令对应的子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种;其中:对于虚函数调用,将虚函数表地址识别为相应的间接跳转指令的所述关联数据值;对于Switch-case语句,将标准化case变量值识别为相应的间接跳转指令的所述关联数据值;对于函数指针调用,将函数指针值识别为相应的间接跳转指令的关联数据值;
引导指令插入模块730进一步包括引导指令插入单元和引导指令调度单元,其中:
引导指令插入单元,用于通过对源程序过程间的控制流进行分析,在控制流的路径上显式地插入引导指令,引导指令中携带的信息包括:用于指示引导指令与难预测指令之间的距离值,用于标识对应于难预测指令的关联数据值相应的寄存器编号;
引导指令调度单元,用于对插入引导指令的源程序根据指令之间的数据依赖关系对引导指令进行动态调度,以增大引导指令和间接跳转指令之间的距离;然后再次生成可执行程序。
针对上述实现值关联间接跳转预测方法实施例,本发明相应地还提供了一种在该方法实施例中处理器在程序时刻预测间接跳转指令的装置实施例,其结构框图如图4所示,包括关联数据值缓冲区1、寄存器堆2、目标地址缓冲区3、指令取指模块4以及引导指令发射模块5,其中:
指令取指模块4,用于在指令的取指时刻将接收的引导指令输出给引导指令发射模块5;
引导指令发射模块5,用于在引导指令发射阶段根据该引导指令从寄存器堆2读取收集间接跳转指令的关联数据值,并存放在关联数据值缓冲区1;
关联数据值缓冲区1,至少包含关联值域,用于存放引导指令发射模块5收集的关联数据值;
寄存器堆2,用于在处理器执行指令期间通过多个寄存器存放间接跳转指令对应的关联数据值;
目标地址缓冲区3,用于根据间接跳转指令的PC值和关联数据值作为索引,保存间接跳转指令的目标地址。
关联数据值缓冲区1还包含标签域,用于存放访问相应项关联值域的索引标签;
引导指令发射模块5在引导指令发射阶段根据引导指令包含的寄存器的编号从寄存器堆2中读取相应寄存器中的值作为间接跳转指令的关联数据值,根据引导指令的PC值和引导指令携带的距离值Offset之和作为访问标签将收集的关联数据值写入相应项的关联值域。
指令取指模块4在间接跳转指令的取指时刻,将该间接跳转指令的PC值作为标签与关联数据值缓冲区1中的标签域进行比较,若查询到该标签与某一项标签域中的值相匹配,则将该跳转指令识别为“难预测指令”。
指令取指模块4在间接跳转指令的预测阶段,针对“难预测指令”以该指令的PC值作为标签访问关联数据值缓冲区1,并从相应项关联值域中读取关联数据值;将读取的关联数据值与该指令的PC值相异或,并将异或结果作为索引访问目标地址缓冲区3,并将从中读取的值作为对该间接跳转指令预测的目标地址进行下一周期指令的取指和执行过程。
关联数据值缓冲区1还包含标识域,譬如U比特;
指令取指模块4还在对引导指令的取指时刻,用该引导指令的PC值和该引导指令包含的距离值Offset之和作为标签查询关联数据值缓冲区1的标签域,若存在标签匹配项,则设置该项的U比特为一匹配标识值(譬如设为0);在对相应的间接跳转指令进行预测时,根据该指令的PC值查询到有与关联数据值缓冲区1的标签域的值相匹配的项,则将该项的U比特设置为一预测标识值(譬如设为1)。
引导指令发射模块5在引导指令的发射时刻将该引导指令的PC值和其包含的距离值之和作为标签,若查询到关联数据值缓冲区1中对应项的U比特为预测标识值(譬如为1),则在将根据该引导指令包含的寄存器的编号从寄存器堆2读取的关联数据值写入关联数据值缓冲区1相应的关联值域的同时,向指令取指模块4输出再次预测命令;
指令取指模块4根据再次预测命令对间接跳转指令的目标地址进行预测,并比较两次预测的结果,若两次预测的结果相同则忽略第二次预测结果,否则取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。
针对上述方法实施例和装置实施例进行了预测结果评测实验。评测实验结果表明,本发明能够有效地提高预测准确率,从而提高处理器性能。实验环境基于SimpleScalar模拟器和SPEC典型评测程序集。基础处理器使用4K表项、4路组相连BTB结构实现间接跳转预测,基本参数如表1所示。
表1.基础处理器配置参数
Figure BDA0000056406370000161
评测程序集包括5个SPEC CPU2000典型程序(图8中横坐标上的perlbmk、gap、gcc00、crafty、eon),3个SPEC CPU2006典型程序(图8中横坐标上的perlbench、gcc06、sjeng)和2个C++典型程序(图8中横坐标上的richards、ixx)。
在SPEC CPU2000和SPEC CPU2006评测程序集中,仅选择间接跳转误预测性能损失大于5%的典型程序。另外两个C++典型程序为Richards和ixx,其中Richards是一个模拟的操作系统内核任务调度器,ixx是一个将IDL源程序转化为C++程序的转化器,它们反映了面向对象程序的间接跳转指令行为,被广泛用于间接跳转评测。对每个评测程序,使用SimPoint工具选取由100M条指令构成的代表程序片段来实际运行。编译环境基于开源编译器GCC-4.1,主要添加子程序结构分析、关联数据值识别和标记等编译过程。剖视过程基于常规BTB预测器完成,即:选取执行次数多于次数阈值和预测失效率高于失效率阈值的间接跳转指令作为“难预测指令”。
图8给出了本发明所提出的间接跳转预测技术的性能。其中,ORIG表示基础处理器,VBBI(Value Based BTB Indexing,简称VBBI)预测器是2010年由Farooq等人在论文《Value Based BTB Indexing for Indirect Jump Prediction》中提出的最新的、预测性能最好的间接跳转预测技术,CVC(Compiler-directed Value Correlation,简称CVC)表示本发明所提出的间接跳转预测技术。从图8中可以看出,本发明所提出的间接跳转预测技术的预测准确率要远远高于ORIG和VBBI预测器。在平均情况下,本发明所提出的间接跳转预测技术能够达到96%的间接跳转预测准确率,高于ORIG预测器(62%)和VBBI预测器(79%)。
对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。

Claims (10)

1.一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括:
编译器对处理器执行可执行程序的过程进行剖视,并获取剖视信息;
编译器根据所述剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,并在所述源程序中插入用以标识所述关联数据值的引导指令,再次生成可执行程序。
2.按照权利要求1所述的方法,其特征在于,所述编译器通过对所述过程进行剖视获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种。
3.按照权利要求2所述的方法,其特征在于,所述编译器根据所述剖视信息通过再次编译过程识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括:
选取执行次数多于次数阈值和预测失效率高于失效率阈值的所述间接跳转指令为难预测指令;
识别所述难预测指令对应的所述子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种;其中:
对于所述虚函数调用,将虚函数表地址识别为相应的间接跳转指令的所述关联数据值;
对于所述Switch-case语句,将标准化case变量值识别为相应的间接跳转指令的所述关联数据值;
对于所述函数指针调用,将函数指针值识别为相应的间接跳转指令的所述关联数据值。
4.按照权利要求3所述的方法,其特征在于,所述编译器在所述源程序中插入用以标识所述关联数据值的引导指令,再次生成可执行程序,具体包括:
所述编译器通过对所述源程序过程间的控制流进行分析,在所述控制流的路径上显式地插入所述引导指令,然后再次生成可执行程序;所述引导指令中携带的信息包括:用于指示所述引导指令与所述难预测指令之间的距离值,用于标识对应于所述难预测指令的所述关联数据值相应的寄存器编号。
5.按照权利要求4所述的方法,其特征在于,在再次生成可执行程序前,还包括:
所述编译器根据所述源程序过程间的数据依赖关系对所述引导指令进行调度,即包括:
根据所述源程序中指令之间的数据依赖关系建立数据依赖图;
在所述数据依赖图中标记所述引导指令以及所述引导指令所依赖的所有其它指令;
修改被标记的指令的调度优先级为最高。
6.按照权利要求4或5所述的方法,其特征在于,还包括:所述处理器在执行所述编译器再次生成的可执行程序过程中,根据所述引导指令动态收集所述关联数据值,并对所述难预测指令进行预测。
7.按照权利要求6所述的方法,其特征在于,还涉及一寄存器堆、一至少包括关联值域的关联数据值缓冲区以及一目标地址缓冲区;所述处理器在执行所述编译器再次生成的可执行程序过程中,根据所述引导指令动态收集所述关联数据值,并对所述难预测指令进行预测,具体包括:
在所述引导指令的发射阶段,根据该引导指令所携带的所述寄存器编号,从所述寄存器堆中读取相应的寄存器中的值,并将读取的值作为所述关联数据值写入所述关联数据值缓冲区中的所述关联值域;
在所述难预测指令的预测阶段,从所述关联值域中读取关联数据值,根据所述难预测指令的程序计数器PC值和读取的所述关联数据值从所述目标地址缓冲区中预测该难预测指令的目标地址。
8.按照权利要求7所述的方法,其特征在于,涉及的所述关联数据值缓冲区还包括标签域;所述处理器将所述关联数据值写入所述关联数据值缓冲区中的所述关联值域,具体包括:
将所述引导指令的PC值与该引导指令携带的所述距离值之和作为标签,若查询到该标签与所述标签域中的值相匹配的项,则将读取的所述关联数据值写入该项对应的关联值域中;否则,在所述关联数据值缓冲区中新分配一项,并将新分配的项相应的标签域进行初始化,将读取的所述关联数据值写入该新分配的项相应的关联值域。
9.按照权利要求8所述的方法,其特征在于,所述处理器在对所述间接跳转指令进行预测之前,还包括:若查询到所述间接跳转指令的PC值与所述关联数据值缓冲区的所述标签域中的值相匹配,则将该跳转指令识别为难预测指令;
所述处理器在所述难预测指令的预测阶段,读取所述关联值域中相应的关联数据值,根据所述难预测指令的PC值和读取的所述关联数据值从所述目标地址缓冲区中预测该难预测指令的目标地址,具体包括:
用所述难预测指令的PC值作为标签从所述关联数据值缓冲区相应项的关联值域中读取所述关联数据值;
对所述难预测指令的PC值和读取的所述关联数据值进行异或操作,将所述异或操作的结果作为索引,将从所述目标地址缓冲区中读取的值作为预测的所述难预测指令的目标地址,进行下一周期指令的取指和执行过程。
10.按照权利要求9所述的方法,其特征在于,涉及的所述关联数据值缓冲区还包括标识域,所述方法还包括:
所述处理器在对所述引导指令进行取指时,将该引导指令的PC值和该引导指令携带的距离值之和作为标签查询所述关联数据值缓冲区的标签域,若存在与所述标签域的值相匹配的项,则将该项的标识域的值设为匹配标识值;
所述处理器在对所述间接跳转指令进行预测时,用该间接跳转指令的PC值作为标签查询到与所述关联数据值缓冲区的标签域的值相匹配的项,则将该项的标识域的值设为预测标识值;
所述处理器在所述引导指令的发射阶段,若根据该引导指令查询所述关联数据值缓冲区对应的标识域的值为所述预测标识值,则在将根据该引导指令从所述寄存器堆读取的所述关联数据值写入所述关联数据值缓冲区对应的关联值域的同时,对所述难预测指令的目标地址进行第二次预测,若比较两次预测的结果相同,则忽略该第二次预测的结果;否则取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。
CN 201110099440 2011-04-20 2011-04-20 一种实现值关联间接跳转预测的方法 Active CN102156634B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110099440 CN102156634B (zh) 2011-04-20 2011-04-20 一种实现值关联间接跳转预测的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110099440 CN102156634B (zh) 2011-04-20 2011-04-20 一种实现值关联间接跳转预测的方法

Publications (2)

Publication Number Publication Date
CN102156634A true CN102156634A (zh) 2011-08-17
CN102156634B CN102156634B (zh) 2013-05-01

Family

ID=44438142

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110099440 Active CN102156634B (zh) 2011-04-20 2011-04-20 一种实现值关联间接跳转预测的方法

Country Status (1)

Country Link
CN (1) CN102156634B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012145997A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的装置
WO2012145992A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN103679041A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679040A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN105677297A (zh) * 2014-11-18 2016-06-15 龙芯中科技术有限公司 套锁实现方法及装置
CN106445575A (zh) * 2015-08-13 2017-02-22 龙芯中科技术有限公司 程序的重写方法和装置
CN109960905A (zh) * 2017-12-14 2019-07-02 北京京东尚科信息技术有限公司 信息处理方法、系统、介质和电子设备

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012145997A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的装置
WO2012145992A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN103679041A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679040A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679040B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN103679041B (zh) * 2012-09-06 2016-11-23 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN105677297A (zh) * 2014-11-18 2016-06-15 龙芯中科技术有限公司 套锁实现方法及装置
CN105677297B (zh) * 2014-11-18 2018-05-04 龙芯中科技术有限公司 套锁实现方法及装置
CN106445575A (zh) * 2015-08-13 2017-02-22 龙芯中科技术有限公司 程序的重写方法和装置
CN106445575B (zh) * 2015-08-13 2019-12-31 龙芯中科技术有限公司 程序的重写方法和装置
CN109960905A (zh) * 2017-12-14 2019-07-02 北京京东尚科信息技术有限公司 信息处理方法、系统、介质和电子设备
CN109960905B (zh) * 2017-12-14 2020-11-03 北京京东尚科信息技术有限公司 信息处理方法、系统、介质和电子设备

Also Published As

Publication number Publication date
CN102156634B (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
CN102163143B (zh) 一种实现值关联间接跳转预测的方法
CN102156634B (zh) 一种实现值关联间接跳转预测的方法
CN1332321C (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
Metzner Why model checking can improve WCET analysis
JP4105264B2 (ja) コンパイラ
Vijaykumar Compiling for the multiscalar architecture
US7707386B2 (en) Program segment searching for extension instruction determination to design a processor that meets performance goal
CN102156636B (zh) 一种实现值关联间接跳转预测的装置
CN102830954B (zh) 指令调度方法及装置
CN102156635B (zh) 实现值关联间接跳转预测的装置
US20060041875A1 (en) Methods and apparatus for creating software basic block layouts
Lakshminarayana et al. Incorporating speculative execution into scheduling of control-flow-intensive designs
Cedersjö et al. Tÿcho: A framework for compiling stream programs
Wu et al. Exploiting inter-sequence correlations for program behavior prediction
Agarwal et al. Exploiting postdominance for speculative parallelization
Tang et al. GPMB—software pipelining branch-intensive loops
CN101231598B (zh) 一种基于汇编程序构造语义流程图的方法
Sangireddy Reducing rename logic complexity for high-speed and low-power front-end architectures
Raman et al. Learning branch probabilities in compiler from datacenter workloads
Reinman et al. Classifying load and store instructions for memory renaming
Carminati et al. On the use of static branch prediction to reduce the worst-case execution time of real-time applications
Gabbay et al. Improving achievable ILP through value prediction and program profiling
Zhao et al. Static classification of value predictability using compiler hints
Vijaykumar et al. Task selection for the multiscalar architecture
Pompougnac et al. Performance bottlenecks detection through microarchitectural sensitivity

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20160330

Address after: 100080 Beijing City, Haidian District Zhongguancun No. 151 North Street Yanyuan resources building room 1107

Patentee after: Beijing Zhongzhi core technology Co. Ltd.

Address before: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Patentee before: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing