CN102156635B - 实现值关联间接跳转预测的装置 - Google Patents

实现值关联间接跳转预测的装置 Download PDF

Info

Publication number
CN102156635B
CN102156635B CN201110100718.4A CN201110100718A CN102156635B CN 102156635 B CN102156635 B CN 102156635B CN 201110100718 A CN201110100718 A CN 201110100718A CN 102156635 B CN102156635 B CN 102156635B
Authority
CN
China
Prior art keywords
instruction
value
data value
associated data
key instruction
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
Application number
CN201110100718.4A
Other languages
English (en)
Other versions
CN102156635A (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 CN201110100718.4A priority Critical patent/CN102156635B/zh
Publication of CN102156635A publication Critical patent/CN102156635A/zh
Application granted granted Critical
Publication of CN102156635B publication Critical patent/CN102156635B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明披露了实现值关联间接跳转预测的装置,其中处理器预测间接跳转指令的装置包括:指令取指模块将在取指时刻接收的引导指令输出给引导指令发射模块;引导指令发射模块在引导指令的发射阶段根据该引导指令从寄存器堆读取收集间接跳转指令的关联数据值,并存放在关联数据值缓冲区;关联数据值缓冲区通过关联值域存放引导指令发射模块收集的关联数据值;寄存器堆通过多个寄存器存放接跳转指令对应的关联数据值;目标地址缓冲区据间接跳转指令的PC值和关联数据值存放间接跳转指令的目标地址。本发明提高了间接跳转指令的预测准确率及处理器应用整体的系统性能。

Description

实现值关联间接跳转预测的装置
技术领域
本发明属于微处理器设计和应用微处理器的系统设计领域,尤其涉及现代处理器实现值关联间接跳转预测的装置。 
背景技术
在现代处理器中,推测式执行是挖掘指令级并行性的重要手段之一。为了提高推测式执行的效率,减少错误的推测执行,准确的转移预测技术是至关重要的。 
在现代的宽发射、深度流水的超标量处理器体系结构中,采用转移预测的主要目的是为了提高CPU的运算速度。推测执行是依托于转移预测基础之上的,即如果CPU能够在流水线执行的前条指令结果出来之前能够预测到是否程序转移,就可以提前执行相应的指令,由此可避免处理器中流水线的空闲等待,从而提高CPU的运行速度。另一方面,如果前一指令结果出来后证明转移预测错误,则必须将已装入流水线执行的指令和结果全部清除,然后再将正确的指令装入流水线重新处理,从而降低了处理器性能。 
由此可见,准确的转移指令预测技术能够为处理器提供连续的指令流输入,弥补了在转移指令跳转方向和跳转目标地址尚未计算出来时处理器无法继续执行而造成的处理器时钟周期的浪费;而一旦发生转移指令误预测,处理器推测执行的错误步骤上的几十条甚至上百条指令将被丢弃,所有推测执行的工作将被取消,又会造成处理器时钟周期的浪费。因此,提高转移指令预测准确度是转移指令预测设计和应用的关键目标,对现代处理器挖掘指令级并行性具有重要意义。 
转移指令根据转移的目标特性可以分为有条件转移与无条件转移,或者分为直接转移与间接转移。其中有条件直接转移(简称“条件转移”)和无条件间接转移(简称“间接跳转”)是两类最重要的转移指令。条件转移指 令通常与转移历史具有较强的关联性,因此基于历史的条件转移预测器能够达到较高的预测准确率;而间接跳转指令因具有多个目标地址而难以准确预测。 
间接跳转指令被广泛应用于现代面向对象程序和虚拟机解释器程序中,由此而引发了大量间接跳转预测失效。据统计,约45%的转移预测失效是由间接跳转指令所引起的,因此,间接跳转指令的预测失效问题是影响现代处理器性能的重要因素之一,如何设计高效准确的间接跳转预测器是目前处理器设计中面临的一个难题。 
在现有的间接跳转预测器中,关联预测器是目前使用最为广泛的一类预测器。为了提高关联预测器的预测准确率,先后有基于历史、基于数据值和基于提前计算等多种间接跳转预测器被提出。其中,基于历史的间接跳转预测器使用跳转方向历史和执行路径历史等信息,指导间接跳转目标地址的预测;基于数据值的间接跳转预测器使用某些数据值指导间接跳转预测;而基于提前计算的间接跳转预测器则使用特殊硬件对虚函数调用这一类特殊的间接跳转指令提前计算其跳转目标地址。 
目前,最新研究表明,由于间接跳转指令与某些数据值必然存在较强的关联性,因此基于数据值的间接跳转预测器相对来说通常能够取得较高的预测准确率。尽管如此,现有的基于数据值的间接跳转预测器存在两个难以解决的问题:首先是寻找有效的关联数据值是非常困难的;其次,这些关联数据值很可能在间接跳转预测时是无法得到的。这两个问题导致了现有的基于数据值的间接跳转预测器难以取得理想的预测结果。 
发明内容
本发明所要解决的技术问题是提供实现值关联间接跳转预测的装置,能够根据间接跳转指令的有效关联值准确地进行间接跳转预测。 
为了解决上述技术问题,本发明提供了一种在编译器编译过程进行再次编译的装置,包括依次连接的程序剖视模块、关联数据值识别模块以及引导指令插入模块,其中: 
程序剖视模块,用于对处理器执行可执行程序的过程进行剖视,并将获取的剖视信息输出给关联数据值识别模块,该剖视信息包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种; 
关联数据值识别模块,用于根据输入的剖视信息通过再次编译过程选取执行次数多于次数阈值和预测失效率高于失效率阈值的间接跳转指令为难预测指令,将难预测指令对应的子程序结构和子程序结构中相应的参数值识别为间接跳转指令的子程序结构和关联数据值,将识别的子程序结构对应的关联数据值输出给引导指令插入模块; 
引导指令插入模块,用于通过引导指令插入单元对源程序过程间的控制流进行分析,在控制流的路径上显式地插入用以标识关联数据值的引导指令,引导指令中携带的信息包括:用于指示引导指令与难预测指令之间的距离值,用于标识对应于难预测指令的关联数据值相应的寄存器编号;通过引导指令调度单元对插入引导指令的源程序根据指令之间的数据依赖关系对引导指令进行动态调度,然后再次生成可执行程序。 
进一步地, 
关联数据值识别模块识别的子程序结构包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种;其中: 
对于虚函数调用,将虚函数表地址识别为相应的间接跳转指令的关联数据值; 
对于Switch-case语句,将标准化case变量值识别为相应的间接跳转指令的关联数据值; 
对于函数指针调用,将函数指针值识别为相应的间接跳转指令的关联数据值。 
为了解决上述技术问题,本发明提供了一种在处理器运行可执行程序过程预测间接跳转指令的装置,包括指令取指模块、引导指令发射模块、关联数据值缓冲区、寄存器堆以及目标地址缓冲区,其中: 
指令取指模块,用于在指令的取指时刻将接收的引导指令输出给引导指 令发射模块,该引导指令中携带的信息包括:用于指示所述引导指令与难预测的间接跳转指令之间的距离值,用于标识对应于难预测的间接跳转指令的关联数据值相应的寄存器编号; 
引导指令发射模块,用于在引导指令的发射阶段根据该引导指令携带的寄存器编号从寄存器堆中读取相应寄存器中的值作为间接跳转指令的关联数据值收集,根据该引导指令的PC值和该引导指令携带的距离值之和作为访问标签将收集的关联数据值写入关联数据值缓冲区; 
关联数据值缓冲区,包含相应项的标签域和关联值域,其中标签域用于存放访问相应项的关联值域的索引标签,关联值域用于存放引导指令发射模块收集的关联数据值; 
寄存器堆,用于通过多个寄存器存放接跳转指令对应的关联数据值; 
目标地址缓冲区,用于根据间接跳转指令的程序计数器PC值和关联数据值存放间接跳转指令的目标地址。 
进一步地,关联数据值缓冲区还包含标签域,用于存放访问相应项关联值域的索引标签; 
引导指令发射模块在所述引导指令的发射阶段,根据该引导指令携带的寄存器编号从寄存器堆中读取相应寄存器中的值作为间接跳转指令的关联数据值收集;根据该引导指令的PC值和该引导指令携带的距离值之和作为访问标签将收集的关联数据值写入相应项的关联值域; 
指令取指模块在间接跳转指令的取指时刻,将该间接跳转指令的PC值作为标签与关联数据值缓冲区中内的标签域进行比较,若查询到该标签与一项标签域中的值相匹配,则将该跳转指令识别为难预测指令;在间接跳转指令的预测阶段,以难预测指令的PC值作为标签访问关联数据值缓冲区,并从相应项关联值域中读取关联数据值;将读取的关联数据值与该指令的PC值相异或,将异或结果作为索引访问目标地址缓冲区,并将从中读取的值作为对该间接跳转指令预测的目标地址,进行下一周期指令的取指和执行过程。 
进一步地,关联数据值缓冲区还包含标识域,其中: 
所述指令取指模块还在对引导指令进行取指时,将该引导指令的PC值 和该引导指令携带的距离值之和作为标签查询关联数据值缓冲区的标签域,若存在与标签域的值相匹配的项,则将该项的标识域的值设为匹配标识值;在对间接跳转指令进行预测时,用该间接跳转指令的PC值作为标签查询到与关联数据值缓冲区的标签域的值相匹配的项,则将该项的标识域的值设为预测标识值。 
进一步地, 
引导指令发射模块在引导指令的发射阶段,若根据该引导指令查询关联数据值缓冲区对应的标识域的值为预测标识值,则在将根据该引导指令从寄存器堆读取的关联数据值写入关联数据值缓冲区对应的关联值域的同时,向指令取指模块输出再次预测命令; 
指令取指模块根据输入的再次预测命令对所述难预测指令的目标地址进行第二次预测,若比较两次预测的结果相同,则忽略该第二次预测的结果;否则,取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。 
进一步地,所述标识域用一个比特实现,所述匹配标识值为0,所述预测标识值为1。 
通过本发明的方法及系统,由于编译器在编译时刻识别的典型子程序结构及其有效的关联数据值,并通过插入引导指令传递给处理器,使得处理器在执行程序过程中根据引导指令将动态收集的关联数据值作为有效的关联信息,或者,将动态收集的多个关联数据值形成值历史模式作为有效的关联信息,来引导预测间接跳转指令,从而有效地提高了间接跳转指令的预测准确率,提高了处理器及其应用整体的系统性能。 
附图说明
图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 DEST_PATH_GDA00002278302300141
评测程序集包括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 (7)

1.一种在编译器编译过程进行再次编译的装置,其特征在于,包括依次连接的程序剖视模块、关联数据值识别模块以及引导指令插入模块,所述引导指令插入模块包括引导指令插入单元和引导指令调度单元,其中:
程序剖视模块,用于对处理器执行可执行程序的过程进行剖视,并将获取的剖视信息输出给关联数据值识别模块,所述剖视信息包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;
关联数据值识别模块,用于根据输入的剖视信息通过再次编译过程选取执行次数多于次数阈值和预测失效率高于失效率阈值的所述间接跳转指令为难预测指令,将所述难预测指令对应的子程序结构和所述子程序结构中相应的参数值识别为所述间接跳转指令的子程序结构和所述关联数据值,将识别的子程序结构对应的关联数据值输出给引导指令插入模块;
引导指令插入模块,用于通过引导指令插入单元对源程序过程间的控制流进行分析,在所述控制流的路径上显式地插入用以标识所述关联数据值的引导指令,所述引导指令中携带的信息包括:用于指示所述引导指令与所述难预测指令之间的距离值,用于标识对应于所述难预测指令的所述关联数据值相应的寄存器编号;通过引导指令调度单元对插入所述引导指令的源程序根据指令之间的数据依赖关系对所述引导指令进行动态调度,然后再次生成可执行程序。
2.按照权利要求1所述的装置,其特征在于,
所述关联数据值识别模块识别的所述子程序结构包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种;其中:
对于所述虚函数调用,将虚函数表地址识别为相应的间接跳转指令的所述关联数据值;
对于所述Switch-case语句,将标准化case变量值识别为相应的间接跳转指令的所述关联数据值;
对于所述函数指针调用,将函数指针值识别为相应的间接跳转指令的所述关联数据值。
3.一种在处理器运行可执行程序过程预测间接跳转指令的装置,其特征在于,包括指令取指模块、引导指令发射模块、关联数据值缓冲区、寄存器堆以及目标地址缓冲区,其中:
指令取指模块,用于在指令的取指时刻将接收的引导指令输出给引导指令发射模块,所述引导指令中携带的信息包括:用于指示所述引导指令与难预测的间接跳转指令之间的距离值,用于标识对应于难预测的间接跳转指令的关联数据值相应的寄存器编号;
引导指令发射模块,用于在引导指令的发射阶段根据该引导指令携带的所述寄存器编号从所述寄存器堆中读取相应寄存器中的值作为间接跳转指令的关联数据值收集,根据该引导指令的PC值和该引导指令携带的所述距离值之和作为访问标签将收集的所述关联数据值写入关联数据值缓冲区;
关联数据值缓冲区,包含相应项的标签域和关联值域,其中标签域用于存放访问所述相应项的关联值域的索引标签,所述关联值域用于存放引导指令发射模块收集的关联数据值;
寄存器堆,用于通过多个寄存器存放接跳转指令对应的关联数据值;
目标地址缓冲区,用于根据间接跳转指令的程序计数器PC值和所述关联数据值存放所述间接跳转指令的目标地址。
4.按照权利要求3所述的装置,其特征在于,
所述指令取指模块在所述间接跳转指令的取指时刻,将该间接跳转指令的PC值作为标签与所述关联数据值缓冲区中内的所述标签域进行比较,若查询到该标签与一项标签域中的值相匹配,则将该跳转指令识别为难预测指令;在所述间接跳转指令的预测阶段,以所述难预测指令的PC值作为标签访问所述关联数据值缓冲区,并从相应项关联值域中读取所述关联数据值;将读取的关联数据值与该指令的PC值相异或,将异或结果作为索引访问目标地址缓冲区,并将从中读取的值作为对该间接跳转指令预测的目标地址,进行下一周期指令的取指和执行过程。
5.按照权利要求4所述的装置,其特征在于,所述关联数据值缓冲区还包含标识域,其中:
所述指令取指模块还在对所述引导指令进行取指时,将该引导指令的PC值和该引导指令携带的距离值之和作为标签查询所述关联数据值缓冲区的标签域,若存在与所述标签域的值相匹配的项,则将该项的标识域的值设为匹配标识值;在对所述间接跳转指令进行预测时,用该间接跳转指令的PC值作为标签查询到与所述关联数据值缓冲区的标签域的值相匹配的项,则将该项的标识域的值设为预测标识值。
6.按照权利要求5所述的装置,其特征在于,
所述引导指令发射模块在所述引导指令的发射阶段,若根据该引导指令查询所述关联数据值缓冲区对应的标识域的值为所述预测标识值,则在将根据该引导指令从所述寄存器堆读取的所述关联数据值写入所述关联数据值缓冲区对应的关联值域的同时,向所述指令取指模块输出再次预测命令;
所述指令取指模块根据输入的再次预测命令对所述难预测指令的目标地址进行第二次预测,若比较两次预测的结果相同,则忽略该第二次预测的结果;否则,取消第一次预测之后的所有推测式执行的结果,并重新开始指令的取指和执行。
7.按照权利要求5或6所述的装置,其特征在于,所述标识域用一个比特实现,所述匹配标识值为0,所述预测标识值为1。
CN201110100718.4A 2011-04-21 2011-04-21 实现值关联间接跳转预测的装置 Active CN102156635B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110100718.4A CN102156635B (zh) 2011-04-21 2011-04-21 实现值关联间接跳转预测的装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110100718.4A CN102156635B (zh) 2011-04-21 2011-04-21 实现值关联间接跳转预测的装置

Publications (2)

Publication Number Publication Date
CN102156635A CN102156635A (zh) 2011-08-17
CN102156635B true CN102156635B (zh) 2014-01-15

Family

ID=44438143

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110100718.4A Active CN102156635B (zh) 2011-04-21 2011-04-21 实现值关联间接跳转预测的装置

Country Status (1)

Country Link
CN (1) CN102156635B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102156636B (zh) * 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的装置
CN102163143B (zh) * 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN109522050B (zh) * 2018-09-10 2020-11-17 上海交通大学 基于处理器控制流记录特性的内存数据实时记录方法和系统
CN116627502B (zh) * 2023-07-21 2023-11-14 紫光同芯微电子有限公司 跳转指令的优化方法、指令的跳转方法、装置、电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493600B2 (en) * 2004-08-23 2009-02-17 Faraday Technology Corp. Method for verifying branch prediction mechanism and accessible recording medium for storing program thereof
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493600B2 (en) * 2004-08-23 2009-02-17 Faraday Technology Corp. Method for verifying branch prediction mechanism and accessible recording medium for storing program thereof
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Also Published As

Publication number Publication date
CN102156635A (zh) 2011-08-17

Similar Documents

Publication Publication Date Title
CN102163143B (zh) 一种实现值关联间接跳转预测的方法
CN102156634B (zh) 一种实现值关联间接跳转预测的方法
CN1332321C (zh) 页表中维护性能监测结构用于监测程序性能的方法和设备
CN1627270B (zh) 用于对指令执行和数据访问进行计数的方法和设备
US5539907A (en) System for monitoring computer system performance
Gabbay et al. Can program profiling support value prediction?
US5732273A (en) System for monitoring compute system performance
CN102473104B (zh) 插入用于优化的simd代码的操作-和-指示指令
Metzner Why model checking can improve WCET analysis
CN101963918B (zh) 实现cpu/gpu异构平台的虚拟执行环境的方法
Vijaykumar Compiling for the multiscalar architecture
CN102156636B (zh) 一种实现值关联间接跳转预测的装置
JPH10187463A (ja) コンパイラ
Chen et al. TEST: a tracer for extracting speculative threads
Shi et al. Learning execution through neural code fusion
CN102156635B (zh) 实现值关联间接跳转预测的装置
CN100444126C (zh) 用于自主剖析应用程序的方法和设备
CN102289362A (zh) 分段符号执行装置及其工作方法
CN104169886A (zh) 通过地址的运行时间检测间接采样
Wu et al. Exploiting inter-sequence correlations for program behavior prediction
Mao et al. Cross-input learning and discriminative prediction in evolvable virtual machines
Tang et al. GPMB—software pipelining branch-intensive loops
Raman et al. Learning branch probabilities in compiler from datacenter workloads
CN101231598B (zh) 一种基于汇编程序构造语义流程图的方法
Jakimovska et al. Modern processor architectures overview

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