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

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

Info

Publication number
CN102163143A
CN102163143A CN 201110108052 CN201110108052A CN102163143A CN 102163143 A CN102163143 A CN 102163143A CN 201110108052 CN201110108052 CN 201110108052 CN 201110108052 A CN201110108052 A CN 201110108052A CN 102163143 A CN102163143 A CN 102163143A
Authority
CN
China
Prior art keywords
value
instruction
historical
related information
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.)
Granted
Application number
CN 201110108052
Other languages
English (en)
Other versions
CN102163143B (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
Peking University
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 201110108052 priority Critical patent/CN102163143B/zh
Publication of CN102163143A publication Critical patent/CN102163143A/zh
Priority to PCT/CN2011/080247 priority patent/WO2012145992A1/zh
Application granted granted Critical
Publication of CN102163143B publication Critical patent/CN102163143B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

一种实现值关联间接跳转预测的方法
技术领域
本发明属于微处理器设计和应用微处理器的系统设计领域,尤其涉及现代处理器实现值关联间接跳转预测的方法。
背景技术
在现代处理器中,推测式执行是挖掘指令级并行性的重要手段之一。为了提高推测式执行的效率,减少错误的推测执行,准确的转移预测技术是至关重要的。
在现代的宽发射、深度流水的超标量处理器体系结构中,采用转移预测的主要目的是为了提高CPU的运算速度。推测执行是依托于转移预测基础之上的,即如果CPU能够在流水线执行的前条指令结果出来之前能够预测到是否程序转移,就可以提前执行相应的指令,由此可避免处理器中流水线的空闲等待,从而提高CPU的运行速度。另一方面,如果前一指令结果出来后证明转移预测错误,则必须将已装入流水线执行的指令和结果全部清除,然后再将正确的指令装入流水线重新处理,从而降低了处理器性能。
由此可见,准确的转移指令预测技术能够为处理器提供连续的指令流输入,弥补了在转移指令跳转方向和跳转目标地址尚未计算出来时处理器无法继续执行而造成的处理器时钟周期的浪费;而一旦发生转移指令误预测,处理器推测执行的错误步骤上的几十条甚至上百条指令将被丢弃,所有推测执行的工作将被取消,又会造成处理器时钟周期的浪费。因此,提高转移指令预测准确度是转移指令预测设计和应用的关键目标,对现代处理器挖掘指令级并行性具有重要意义。
转移指令根据转移的目标特性可以分为有条件转移与无条件转移,或者分为直接转移与间接转移。其中有条件直接转移(简称“条件转移”)和无条件间接转移(简称“间接跳转”)是两类最重要的转移指令。条件转移指令通常与转移历史具有较强的关联性,因此基于历史的条件转移预测器能够达到较高的预测准确率;而间接跳转指令因具有多个目标地址而难以准确预测。
间接跳转指令被广泛应用于现代面向对象程序和虚拟机解释器程序中,由此而引发了大量间接跳转预测失效。据统计,约45%的转移预测失效是由间接跳转指令所引起的,因此,间接跳转指令的预测失效问题是影响现代处理器性能的重要因素之一,如何设计高效准确的间接跳转预测器是目前处理器设计中面临的一个难题。
在现有的间接跳转预测器中,关联预测器是目前使用最为广泛的一类预测器。为了提高关联预测器的预测准确率,先后有基于历史、基于数据值和基于提前计算等多种间接跳转预测器被提出。其中,基于历史的间接跳转预测器使用跳转方向历史和执行路径历史等信息,指导间接跳转目标地址的预测;基于数据值的间接跳转预测器使用某些数据值指导间接跳转预测;而基于提前计算的间接跳转预测器则使用特殊硬件对虚函数调用这一类特殊的间接跳转指令提前计算其跳转目标地址。
目前,最新研究表明,由于间接跳转指令与某些数据值必然存在较强的关联性,因此基于数据值的间接跳转预测器相对来说通常能够取得较高的预测准确率。尽管如此,现有的基于数据值的间接跳转预测器存在两个难以解决的问题:首先是寻找有效的关联数据值是非常困难的;其次,这些关联数据值很可能在间接跳转预测时是无法得到的。这两个问题导致了现有的基于数据值的间接跳转预测器难以取得理想的预测结果。
发明内容
本发明所要解决的技术问题是提供一种实现值关联间接跳转预测的方法,能够根据间接跳转指令的有效关联信息准确地进行间接跳转预测。
为了解决上述技术问题,本发明提供了一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括:
编译器根据对处理器执行可执行程序时获取的剖视信息,识别源程序中间接跳转指令对应的子程序结构及其关联数据值中的关联信息,并在该源程序中插入用以标识该关联信息的引导指令,再次生成可执行程序;
处理器在执行编译器再次生成的可执行程序过程中,根据引导指令动态收集关联信息,并生成值历史模式。
进一步地,编译器获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;根据剖视信息识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括:
选取执行次数多于次数阈值和/或预测失效率高于失效率阈值的间接跳转指令为难预测指令;
识别难预测指令对应的所述子程序结构,包括虚函数调用、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)、(2,3)、(3,1)、(1,2)、(2,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:在源程序的控制流路径上显式地插入引导指令,以标识关联信息;
编译器通过对源程序的控制流进行分析,在该控制流的路径上显式地插入引导指令,以标识相应的间接跳转指令所对应的形成值历史信息的关联信息。
编译器在每一个控制路径上插入引导指令,可跟踪多条控制流路径,所以每个间接跳转指令可能会对应多个引导指令。
304:根据程序过程间数据依赖关系对引导指令进行调度,以增大引导指令和间接跳转指令间的距离。
可执行程序中的指令之间是存在数据依赖关系的,譬如一个寄存器中的值依赖于另外一个寄存器的值,或依赖于对多个寄存器的值运算的结果,或依赖于一个标号地址中的值。编译器对引导指令的调度主要是根据指令之间的这种数据依赖关系,在不影响程序正确性的前提下动态调度引导指令以及引导指令的前驱指令和后继指令,以增大引导指令和间接跳转指令之间的距离,从而使得处理器能够及时通过引导指令传递的关联数据值对间接跳转指令目标地址进行预测。
具体的指令调度算法是基于传统“表调度”算法(参考《Compilers:Principles,Techniques,& Tools.second Edition》中10.3.2节)实现的,包含如下步骤:
●根据程序中指令之间的数据依赖关系建立数据依赖图;
●在数据依赖图中标记引导指令,以及引导指令所依赖的所有其它指令;
●修改这些被标记指令的调度优先级,使得它们的优先级最高,以便尽可能早地完成这些被标记指令的调度。
通过修改调度优先级的方法,引导指令就可以尽早完成调度,在引导指令和间接跳转指令之间留下尽可能多的指令,从而增大了引导指令和间接跳转指令之间的距离。
在图1所示的方法实施例的步骤50中,处理器根据引导指令动态收集关联信息,并形成值历史模式,以及根据形成的值历史模式预测间接跳转指令,其方法实施例的具体流程表示在图3中,包括如下步骤:
510:在引导指令的发射阶段,根据引导指令从寄存器堆动态收集关联数据值,并针对间接跳转指令的类别移位处理关联数据值,获取相应的关联信息;
520:将获取的关联信息与前一值历史组合更新成当前值历史,形成值历史模式;将引导指令所对应的难预测转指令的PC值写入过滤表中;
530:在间接跳转指令的取指阶段,根据难预测指令的PC值和形成的值历史模式预测保存在目标地址缓冲区内的目标地址。
譬如下面中给出了SPEC CPU 2006程序集中的458.sjeng程序片段:
Figure BDA0000058054900000101
Figure BDA0000058054900000111
其中的switch-case语句中包含一个间接跳转指令,其目标地址反复变化(wpawn,wknight),如果用传统的间接跳转预测器则难以预测。
处理器执行该458.sjeng程序的可执行程序中,将在时刻t2针对在前两个时刻t0、t1出现的“i”值(即标准化case变量)为1、1,分别将各自的低位作为关联信息获取,组合形成值历史1,1;将在时刻t3针对在前两个时刻t1、t2出现的“i”值为1、2,分别将各自的低位作为关联信息获取,组合形成值历史1,2;......将在时刻t7针对在前两个时刻t5、t6出现的“i”值为1、2,分别将各自的低位作为关联信息获取,组合形成值历史1,2。
处理器在t0~t7时刻根据前两个时刻的“i”值中处于低位的关联信息形成的值历史,表示在表1中。
表1
  时刻   t0   t1   t2   t3   t4   t5   t6   t7
  期望的“i”值   1   1   2   2   1   1   2   2
  值历史   2,2   2,1   1,1   1,2   2,2   2,1   1,1   1,2
从上述表1中所有的值历史可获取值历史模式,即所有不同的值历史。表2中表示了获取的四个值历史模式,并表示出根据每一值历史模式预测的目标地址;其中T1表示预测的目标地址wpawn,T2表示预测的目标地址wknight。
表2
  值历史模式   1,1   1,2   2,2   2,1
  值历史模式预测目标   T2   T2   T1   T1
针对表1中的每一值历史,将根据值历史模式预测的目标地址表示在表3中,与程序执行实际出现的目标地址相比较,结果表明使用本发明的值历史模式作为有效的关联信息,可以非常准确地预测间接跳转的目标地址。
表3
  时刻   t0   t1   t2   t3   t4   t5   t6   t7
  期望的“i”值   1   1   2   2   1   1   2   2
  值历史   2,2   2,1   1,1   1,2   2,2   2,1   1,1   1,2
  实际目标   T1   T1   T2   T2   T1   T1   T2   T2
  值历史模式预测目标   T1   T1   T2   T2   T1   T1   T2   T2
为了更清楚地解释图3所示的处理器预测间接跳转指令的方法实施例的各个步骤,图5给予了更加详细的方法实施例流程,包括值历史更新和间接跳转预测两个过程,分别如图4所示虚线上半部和虚线下半部所示。
其中,值历史更新包括如下步骤:
511:在引导指令的发射阶段,根据引导指令表明的寄存器编号读取寄存器堆中相应寄存器的值作为关联数据值收集;
请参照图4,当引导指令进入发射阶段时,处理器根据引导指令所标识的关联数据值对应的寄存器编号RA,从寄存器堆1中读取相应的寄存器中的值,并将其作为关联数据值收集。
512:根据引导指令表明的间接跳转指令的类别对收集的关联数据值进行移位,将其中的关联信息移位到值历史第一组合位置上;
请参照图6,譬如处理器根据间接跳转指令的类别若判断该指令所对应的子程序结构为虚函数调用,则通过分类移位器2将虚函数表地址中间的多个关联信息比特移位到值历史第一组合位置(譬如右移到最低几位);其中移位的位数取决于虚函数表地址中间的关联信息比特数。
处理器根据间接跳转指令的类别若判断该指令所对应的子程序结构为Switch-case语句或函数指针调用,将对应的关联信息比特移位到值历史第一组合位置上的方法类似上述方法,移位的位数取决于对应的关联信息比特数。
521:将值历史模式寄存器中的前一值历史移位到值历史第二组合位置,与移位到值历史第一组合位置上的关联信息组合拼接,形成值历史模式;
如图7所示,表示了将移位到值历史第一组合位置上的关联信息与前一值历史(初始时刻为初始的值历史)拼接成值历史模式的过程,请参照图4:
首先在值历史模式寄存器3中将前一值历史移位到值历史第二组合位置(譬如移位到最高的几位),移位的位数取决于处于值历史第一组合位置上的关联信息的位数;
将移位到值历史第二组合位置上的前一值历史与处于值历史第一组合位置上的关联信息通过“或”操作,拼接成值历史模式。
522:将引导指令表明的距离值与该指令的PC值之和作为标签查询过滤表,若没有匹配的项,则将该标签作为难预测指令的PC值填入过滤表新分配的项中;
请参照图4,在引导指令的发射阶段,处理器将引导指令表明的距离值Offset与该指令的PC值之和作为标签查询过滤表4,若查询没有匹配的项,则在过滤表4新分配一项,并将该标签作为难预测指令的PC值填入该新分配中,否则则不必进行操作。
531:在取指阶段,将间接跳转指令的PC值作为标签查询过滤表,若过滤表中有与该标签匹配的项,则标记为当前跳转指令是难预测指令,否则标记为是普通跳转指令;
请参照图4,处理器在取指阶段将间接跳转指令的PC值作为标签,若查询过滤表4中有与该标签匹配的项,则认为当前跳转指令是难预测指令,否则认为是普通跳转指令。
532、533:对于难预测指令,将从值历史模式寄存器读取的值历史模式与该指令的PC值相异或,并以异或结果作为索引读取映射在BTB中的目标地址;对于普通跳转指令,按该指令的PC值访问BTB,获取目标地址;结束流程。
针对上述实现值关联间接跳转预测方法实施例,本发明相应地还提供了一种在该方法实施例中处理器在程序时刻预测间接跳转指令的装置实施例,其结构框图如图4所示,包括寄存器堆1、分类移位器2、值历史模式寄存器3、目标地址缓冲区5、指令取指模块6以及引导指令发射模块7,其中:
指令取指模块6,用于在指令的取指时刻将接收的引导指令输出给引导指令发射模块7;根据间接跳转指令的PC值和值历史模式寄存器3更新的值历史模式预测保存在目标地址缓冲区5中相应的目标地址;
引导指令发射模块7,用于在引导指令发射阶段根据该引导指令从寄存器堆1读取收集间接跳转指令的关联数据值,并向分类移位器2输出携带该关联数据值的分类移位命令;
寄存器堆1,用于通过多个寄存器存放间接跳转指令对应的关联数据值;
分类移位器2,用于根据分类移位命令将关联数据值中的关联信息移位到值历史第一组合位置,并将移位的关联信息输出给值历史模式寄存器3;
值历史模式寄存器3,用于将前一值历史模式移位到值历史第二组合位置后,与移位的关联信息组合成更新的值历史模式;
目标地址缓冲区5,用于根据间接跳转指令的PC值和所述关联数据值作为索引,保存所述间接跳转指令所对应的目标地址。
在上述上述装置实施例中,引导指令中携带有以下三种信息:第一类信息用于指示本引导指令与相应的间接跳转指令的距离;第二类信息是标识间接跳转指令所对应的关联信息相应的寄存器编号;第三类信息是表示引导指令所对应的间接跳转指令的类别,即表示该间接跳转指令相应的子程序结构的类别,其中:
引导指令发射模块7根据引导指令所标识的寄存器编号,从寄存器堆1中读取相应的寄存器中的值,并将其作为关联数据值与引导指令所表示的间接跳转指令的类别一起携带在分类移位命令中,输出给分类移位器2;
分类移位器2根据分类移位命令中携带的间接跳转指令的类别,将该命令携带的关联数据值中的关联信息移位到值历史第一组合位置,并输出移位的关联信息,待值历史模式寄存器3进行值历史模式更新。
上述装置实施例还包括过滤表4,其中:
引导指令发射模块7在引导指令的发射阶段还将引导指令表明的距离值与该指令的PC值之和作为标签查询过滤表4,若没有匹配的项,则将该标签作为难预测指令的PC值填入过滤表4新分配的项中;
指令取指模块6在取指阶段将间接跳转指令的PC值作为标签查询过滤表4,若有与该标签匹配的项,则标记当前跳转指令是难预测指令;针对该难预测指令将从值历史模式寄存器3读取的值历史模式与该指令的PC值相异或,并以异或结果作为索引读取保存在目标地址缓冲区5中的目标地址。
在图4所示的装置实施例中,分类移位器2是将关联数据值中的关联信息右移6位移到值历史第一组合位置上<5:0>;值历史模式寄存器3则将前一值历史模式左移6位,移位到值历史第二组合位置上<19:10>。
实际上,无论是分类移位器2右移关联数据值的位数,还是值历史模式寄存器3将前一值历史模式左移的位数,均取决于间接跳转指令所对应的关联数据值中的关联信息有效位的位数。但是,这样做起来会使得处理器的结构非常复杂,故考虑到此,本发明针对间接跳转指令的三类子程序结构采用固定的移位位数,并通过实验获取最佳的移位位数。
针对上述方法实施例和装置实施例进行了预测结果评测实验。评测实验结果表明,本发明能够有效地提高预测准确率,从而提高处理器性能。实验环境基于SimpleScalar模拟器和SPEC典型评测程序集。基础处理器使用4K表项、4路组相连BTB结构实现间接跳转预测,基本参数如表4所示。
表4.基础处理器配置参数
Figure BDA0000058054900000151
Figure BDA0000058054900000161
评测程序集包括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 JumpPrediction》中提出的最新的、预测性能最好的间接跳转预测技术,VHC(ValueHistory Classification,简称VHC)表示本发明所提出的间接跳转预测技术。从图8中可以看出,相对于基础处理器,本发明所提出的预测技术平均将性能提高19%;相对于VBBI预测器,本发明所提出的预测技术平均将性能提高4.3%。
对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。

Claims (9)

1.一种实现值关联间接跳转预测的方法,涉及编译器和处理器,该方法包括:
编译器根据对处理器执行可执行程序时获取的剖视信息,识别源程序中间接跳转指令对应的子程序结构及其关联数据值中的关联信息,并在所述源程序中插入用以标识所述关联信息的引导指令,再次生成可执行程序;
处理器在执行编译器再次生成的可执行程序过程中,根据所述引导指令动态收集关联信息,并生成值历史模式。
2.按照权利要求1所述的方法,其特征在于,所述编译器获取的剖视信息,包括间接跳转指令的执行次数、动态跳转目标数量以及目标地址预测失效次数中的一种或多种;根据所述剖视信息识别源程序中间接跳转指令对应的子程序结构及其关联数据值,具体包括:
选取执行次数多于次数阈值和/或预测失效率高于失效率阈值的所述间接跳转指令为难预测指令;
识别所述难预测指令对应的所述子程序结构,包括虚函数调用、Switch-case语句以及函数指针调用中的一种或多种子程序;其中:
对于所述虚函数调用子程序,将虚函数表地址中间的一个或多个比特信息识别为所述关联信息;
对于所述Switch-case语句子程序,将标准化case变量值中的低位比特信息识别为所述关联信息;
对于所述函数指针调用子程序,将函数指针值中非对齐开始的一个或多个比特识别为所述关联信息。
3.按照权利要求2所述的方法,其特征在于,所述编译器在所述源程序中插入用以标识所述关联信息的引导指令,再次生成可执行程序,具体包括:
所述编译器通过对所述源程序过程间的控制流进行分析,在所述控制流的路径上显式地插入所述引导指令,所述引导指令中携带的信息包括:用于指示所述引导指令与所述难预测指令之间的距离值,用于标识对应于所述难预测指令的所述关联数据值的寄存器编号,用于表示对应的子程序结构类别的所述难预测指令的类别。
4.按照权利要求3所述的方法,其特征在于,还包括:
所述编译器根据所述源程序过程间的数据依赖关系对所述引导指令进行调度,以增大所述引导指令和相应的所述难预测指令之间的距离。
5.按照权利要求3所述的方法,其特征在于,还涉及一寄存器堆、一值历史模式寄存器以及一目标地址缓冲区;所述处理器在执行编译器再次生成的可执行程序过程中,根据所述引导指令动态收集关联信息,并生成值历史模式,具体在所述引导指令的发射阶段包括:
根据所述引导指令表明的寄存器编号读取所述寄存器堆中相应寄存器的值作为关联数据值收集;
根据所述引导指令表明的所述难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上;
将所述值历史模式寄存器中的前一值历史移位到值历史第二组合位置,并与移位到值历史第一组合位置上的关联信息进行组合,拼接成所述值历史模式。
6.按照权利要求5所述的方法,其特征在于,
针对所述难预测指令的类别,将收集的关联数据值中的关联信息移位到值历史第一组合位置上,或者将所述值历史模式寄存器中的前一值历史移位到值历史第二组合位置,均采用固定移位位数,并通过实验确定最佳的固定移位位数。
7.按照权利要求5或6所述的方法,其特征在于,还包括:
在间接跳转指令的取指阶段,根据所述难预测指令的程序计数器PC值和生成的所述值历史模式预测所述难预测指令的目标地址。
8.按照权利要求7所述的方法,其特征在于,还涉及一过滤表,在所述引导指令的发射阶段,还包括:
将该引导指令表明的距离值与该引导指令的程序计数器PC值之和作为标签若查询所述过滤表中没有匹配的项,则将该标签作为难预测指令的PC值填入所述过滤表内新分配的项中。
9.按照权利要求8所述的方法,其特征在于,根据所述难预测指令的PC值和生成的所述值历史模式预测该难预测指令的目标地址,具体包括:
将所述间接跳转指令的PC值作为标签若查询所述过滤表中有与该标签匹配的项,则标记当前间接跳转指令是难预测指令;
针对所述难预测指令,将从所述值历史模式寄存器读取的值历史模式与该难预测指令的PC值进行异或操作,并以所述异或操作的结果作为索引读取保存在所述目标地址缓冲区中的目标地址,进行下一周期指令的取指和执行过程。
CN 201110108052 2011-04-28 2011-04-28 一种实现值关联间接跳转预测的方法 Active CN102163143B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN 201110108052 CN102163143B (zh) 2011-04-28 2011-04-28 一种实现值关联间接跳转预测的方法
PCT/CN2011/080247 WO2012145992A1 (zh) 2011-04-28 2011-09-27 一种实现值关联间接跳转预测的方法

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
CN102163143A true CN102163143A (zh) 2011-08-24
CN102163143B CN102163143B (zh) 2013-05-01

Family

ID=44464386

Family Applications (1)

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

Country Status (2)

Country Link
CN (1) CN102163143B (zh)
WO (1) WO2012145992A1 (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012145992A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
WO2012145997A1 (zh) * 2011-04-28 2012-11-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的装置
CN102799523A (zh) * 2012-07-03 2012-11-28 华为技术有限公司 动态探测程序执行路径的方法、装置和计算机系统
CN103679040A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679041A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN104049941A (zh) * 2013-03-15 2014-09-17 英特尔公司 跟踪指令的控制流程
CN104731719A (zh) * 2013-12-24 2015-06-24 上海芯豪微电子有限公司 一种缓存系统和方法
CN104981778A (zh) * 2013-02-22 2015-10-14 马维尔国际贸易有限公司 修补只读存储器的引导代码
CN105808251A (zh) * 2016-03-03 2016-07-27 武汉斗鱼网络科技有限公司 一种基于虚函数表劫持绕过安全检测的方法与系统
CN109522050A (zh) * 2018-09-10 2019-03-26 上海交通大学 基于处理器控制流记录特性的内存数据实时记录方法和系统
CN111176729A (zh) * 2018-11-13 2020-05-19 深圳市中兴微电子技术有限公司 一种信息处理方法、装置及计算机可读存储介质
CN112445522A (zh) * 2019-09-02 2021-03-05 中科寒武纪科技股份有限公司 指令跳转方法、相关设备及计算机可读介质
CN117389629A (zh) * 2023-11-02 2024-01-12 北京市合芯数字科技有限公司 分支预测方法、装置、电子设备及介质

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 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040172524A1 (en) * 2001-06-29 2004-09-02 Jan Hoogerbrugge Method, apparatus and compiler for predicting indirect branch target addresses
CN102156634B (zh) * 2011-04-20 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN102156635B (zh) * 2011-04-21 2014-01-15 北京北大众志微系统科技有限责任公司 实现值关联间接跳转预测的装置
CN102156636B (zh) * 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的装置
CN102163143B (zh) * 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法

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 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Cited By (22)

* 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 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN102799523A (zh) * 2012-07-03 2012-11-28 华为技术有限公司 动态探测程序执行路径的方法、装置和计算机系统
CN102799523B (zh) * 2012-07-03 2015-06-17 华为技术有限公司 动态探测程序执行路径的方法、装置和计算机系统
CN103679040B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN103679040A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679041A (zh) * 2012-09-06 2014-03-26 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN103679041B (zh) * 2012-09-06 2016-11-23 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN104981778A (zh) * 2013-02-22 2015-10-14 马维尔国际贸易有限公司 修补只读存储器的引导代码
CN104049941A (zh) * 2013-03-15 2014-09-17 英特尔公司 跟踪指令的控制流程
CN104049941B (zh) * 2013-03-15 2017-04-12 英特尔公司 跟踪指令的控制流程
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
CN104731719A (zh) * 2013-12-24 2015-06-24 上海芯豪微电子有限公司 一种缓存系统和方法
CN104731719B (zh) * 2013-12-24 2020-04-28 上海芯豪微电子有限公司 一种缓存系统和方法
CN105808251A (zh) * 2016-03-03 2016-07-27 武汉斗鱼网络科技有限公司 一种基于虚函数表劫持绕过安全检测的方法与系统
CN105808251B (zh) * 2016-03-03 2021-02-02 武汉斗鱼网络科技有限公司 一种基于虚函数表劫持绕过安全检测的方法与系统
CN109522050A (zh) * 2018-09-10 2019-03-26 上海交通大学 基于处理器控制流记录特性的内存数据实时记录方法和系统
CN109522050B (zh) * 2018-09-10 2020-11-17 上海交通大学 基于处理器控制流记录特性的内存数据实时记录方法和系统
CN111176729A (zh) * 2018-11-13 2020-05-19 深圳市中兴微电子技术有限公司 一种信息处理方法、装置及计算机可读存储介质
CN112445522A (zh) * 2019-09-02 2021-03-05 中科寒武纪科技股份有限公司 指令跳转方法、相关设备及计算机可读介质
CN117389629A (zh) * 2023-11-02 2024-01-12 北京市合芯数字科技有限公司 分支预测方法、装置、电子设备及介质
CN117389629B (zh) * 2023-11-02 2024-06-04 北京市合芯数字科技有限公司 分支预测方法、装置、电子设备及介质

Also Published As

Publication number Publication date
WO2012145992A1 (zh) 2012-11-01
CN102163143B (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
CN102163143B (zh) 一种实现值关联间接跳转预测的方法
US7707386B2 (en) Program segment searching for extension instruction determination to design a processor that meets performance goal
CN102156634B (zh) 一种实现值关联间接跳转预测的方法
JP4105264B2 (ja) コンパイラ
CN102156636B (zh) 一种实现值关联间接跳转预测的装置
Metzner Why model checking can improve WCET analysis
Kirner et al. Transformation of path information for WCET analysis during compilation
Vijaykumar Compiling for the multiscalar architecture
JPH10161882A (ja) 述語型コード処理システム
US7747992B2 (en) Methods and apparatus for creating software basic block layouts
Cedersjö et al. Tÿcho: A framework for compiling stream programs
Lakshminarayana et al. Incorporating speculative execution into scheduling of control-flow-intensive designs
CN102156635B (zh) 实现值关联间接跳转预测的装置
Shen et al. Lightweight reference affinity analysis
JP2013025403A (ja) プログラム生成装置
CN103270512A (zh) 智能架构创建器
Wu et al. Exploiting inter-sequence correlations for program behavior prediction
Kirner Integration of static runtime analysis and program compilation
Gustafsson et al. Code analysis for temporal predictability
Raman et al. Learning branch probabilities in compiler from datacenter workloads
CN101231598B (zh) 一种基于汇编程序构造语义流程图的方法
Mak Facilitating program parallelisation: a profiling-based approach
Zhao et al. Static classification of value predictability using compiler hints
August et al. Automatic Extraction of Parallelism from Sequential Code.
Bone Calculating likely parallelism within dependant conjunctions for logic programs

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: JI NAN ZHONGZHI INFORMATION TECHNOLOGY CO., LTD. B

Effective date: 20111221

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20111221

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

Applicant after: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

Co-applicant after: Jinan Dpstor Co., Ltd.

Co-applicant after: Peking University

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

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

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: 20160516

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.

Patentee after: Peking University

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

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

Patentee before: Jinan Dpstor Co., Ltd.

Patentee before: Peking University