CN102591621B - 使用计算历史进行预测 - Google Patents
使用计算历史进行预测 Download PDFInfo
- Publication number
- CN102591621B CN102591621B CN201110353106.6A CN201110353106A CN102591621B CN 102591621 B CN102591621 B CN 102591621B CN 201110353106 A CN201110353106 A CN 201110353106A CN 102591621 B CN102591621 B CN 102591621B
- Authority
- CN
- China
- Prior art keywords
- history
- instruction
- calculating
- static
- register
- 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.)
- Expired - Fee Related
Links
- 230000003068 static effect Effects 0.000 claims description 74
- 238000004364 calculation method Methods 0.000 claims description 38
- 238000000034 method Methods 0.000 claims description 29
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 6
- 238000010276 construction Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 230000032683 aging Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000035772 mutation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
程序中与指令相关的是计算历史。计算历史代表所有影响指令结果的对象,这些对象包括(但不限于)寄存器,存储地址,静态值,和指令程序计数器。计算历史可以用来对指令特性做预测。
Description
本申请是申请日为2003年12月25日,申请号为200310112911.5,发明名称为“使用计算历史进行预测”的申请的分案申请。
技术领域
本发明属于程序执行,特别是提高运行程序指令的效率。
背景技术
计算机最初建造的目的是运行程序,而并不关心使计算机有效率:能够运行为计算机写的程序就足够了。因此,处理器读一个指令并运行它,而后返回程序等待下一个指令。
随着计算机设计更多地被大家所知,工程师已经可以设计比简单的“取来并运行”的处理器要更有效率的处理器。现代的处理器包括“流水线”:在任何时刻,处理器的不同部分运行不同的指令。例如,当中央处理单元的核心正在运行一个指令,处理器的另一部分也许正在从存储器加载未来的指令需要的数据值。
已经得到广泛研究和思考的处理器设计的一个领域是分支处理。在分支指令运行后,根据一个关联的数据值,可以在两个(或更多)不同点中的一个继续控制。这引起现代处理器的一个问题:直至得到分支指令输出,任何随后指令的预处理是徒然的。
为了解决这个问题,现代处理器进行分支预测。与其等待分支指令得到执行以及通过程序得到正确的路径,该处理器进行猜测。但是如果处理器猜测的不正确,任何根据计划路径的预处理都将浪费。例如,如果对分支指令的两个可能的随后的指令都加载一个值到寄存器,如果该错误指令被预处理,则寄存器中会存在该错误值。处理器必须解消对错误路径的预处理。如果处理器猜测错误,运行会比处理器只简单等待分支指令运行慢一些。
与其盲目猜测,分支预测器试图进行有根据的猜测。为了实现此目的,他们做了某些假设。一个可能的假设是,一个特定分支指令的输出单独取决于此分支先前的输出。另外,更一般的假设是,该输出取决于分支指令之前的若干(固定大小)组指令。还有其他一些变种。
图1说明了根据现有技术在运行一程序的计算机系统。图1中,计算机系统105包括计算机110,其中装有存储器115。图1中的一部分说明了装入存储器115的程序130。程序130包括分支指令135。
在一个支路的最经常的方向是最可能的方向的假设下,使用表140,一个分支预测器可以预测一个分支是否被采用。如行145所示,指令135被采用的次数比不采用的次数多(每次该分支被采用,计数器增加,分支不被采用,计数器减少)。因而,分支预测器可以推测出该分支将被再次采用。
在分支方向受在先指令影响的假设下,分支预测器注意指令150(包括指令135),并把它们的程序计数器散列在一起。这样产生一个索引,分支预测器可以用于访问表155。使用这个方法,如行160显示,分支预测器将会推测出该分支不会被采用。
但是考虑到一个分支预测器观察分支前的最后五个指令。不保证任何这些指令对控制分支输出的数据值上有任何影响。同样地,不保证这些指令是影响预测的唯一指令。也许存在一条与分支的输出高度相关的旧指令。
为了更精确地预测分支和指令的其他特性,我们需要一种途径来致力于解决与现有技术相关的这些和其他问题。
发明内容
本发明提供了一种计算机,包括:
一个存储器;
一个存储在存储器中的指令;
所述指令的一个计算历史,该计算历史由一组静态数据值来静态确定,每个数据值表示一个对指令有影响的对象;
一个查阅表,该查阅表存储关于多个指令的多个预测;和
一个索引,可由计算历史引出,用于存取查阅表以确定对该指令的预测。
本发明所提供的计算机中,查阅表可存储于存储器中。
查阅表可存储于计算机的第二存储器中。
所述的计算机还可包括一个计算历史发生器可用以产生指令的计算历史。
所述指令可包括两个操作数,每个操作数以计算机的一个寄存器来表示,第一寄存器具有第二计算历史,第二寄存器具有第三计算历史;
计算历史发生器可用以对第二计算历史进行循环移位,并将循环移位后的第二计算历史与第三计算历史散列。
计算历史发生器还可以进一步将循环移位过的第二计算历史与第三计算历史和该指令的程序计数器散列。
计算历史发生器可使用第二计算历史为该指令的源操作数生成计算历史。
计算历史发生器可使用一组静态值子集产生计算历史,该组静态值包括一个或多个第二计算历史,一个或多个静态值和一个用于指令的程序计数器。
计算历史可以是由指令的目标操作数的计算历史确定的。
所述的计算机还可包括一个索引计数器以计算从计算历史得来的索引。
所述的计算机还可包括一个计算历史文件,来存储计算历史。
所述的计算机还可包括一个与计算历史相关联的寄存器,该寄存器是指令的目标操作数。
所述指令可以是组成一个程序的多个指令之一;且该计算历史可以是在运行程序前产生的。
本发明还提供了一种计算机,包括:
一个存储器;
一个存储于存储器中的分支指令;
一个数据流图;
一个查询表,该查询表存储着一个关于分支指令采用的方向的预测,查询表中的预测通过数据流图进行标识。
本发明还提供的计算机中,查询表可以存储在存储器中。
查询表可以存储在计算机的第二存储器中。
数据流图可以是由一组静态数据值来静态确定,每个数据值代表一个对分支指令有影响的对象。
本发明提供了一种产生计算历史的方法,包括:
读取一指令;
确定该指令的源操作数;
从源操作数中读取静态第一计算历史;
将第一计算历史与一个静态数据组合,产生一个静态第二计算历史。
本发明所提供的方法还可包括:
确定该指令的目标操作数;和
将第二计算历史存储为目标操作数的第二计算历史。
所述的方法还可包括将第二计算历史存储为指令的第二计算历史。
加载第一计算历史可包括,如果指令缺乏源操作数,分配一个静态值作为计算历史。
加载第一计算历史可包括,如果源操作数是一个存储器地址,使用一个静态值作为计算历史。
加载第一计算历史可包括,当该指令和第二指令通讯时,加载基于第二指令的第三计算历史。
确定一个源操作数可包括确定一个寄存器作为源操作数。
第一计算历史与静态数据的组合可包括:
确定是否有第二源操作数;以及
如果有第二源操作数,则将第三计算历史作为静态数据装入第二源操作数。
第一计算历史与静态数据的组合可包括对第一计算历史与指令的程序计数器进行组合。
第一计算历史与静态数据的组合可包括对第一计算历史与静态数据进行散列。
散列第一计算历史与静态数据可包括:
对第一计算历史进行循环移位;且
对循环移位过的第一计算历史和静态数据执行“异或”操作。
散列第一计算历史还可包括对“异或”操作的结果进行移位。
本发明提供了一种项目,包括:
一个存储介质,该存储介质具有存储的上述指令,当由计算机运行时,导致:
读一个指令;
确定该指令的源操作数;
为源操作数加载一个静态第一计算历史;且
将第一计算历史与静态数据组合,并产生一个静态第二计算历史。
本发明提供的项目中,指令还可包括:
确定该指令的目标操作数;且
将第二计算历史存储为目标操作数的第二计算历史。
所述指令还可包括,将第二计算历史存储为该指令的第二计算历史。
加载第一计算历史可包括,当该指令缺乏源操作数时,分配一个静态值作为计算历史。
加载第一计算历史可包括,如果源操作数是一个存储器地址,则使用静态值作为计算历史。
加载第一计算历史可包括,当该指令和第二指令通信时,加载基于第二指令的一个第三计算历史。
确定一个源操作数可包括确定一个寄存器作为源操作数。
将第一计算历史与静态数据组合可包括:
确定是否有一个第二源操作数;和
如果有第二源操作数,则将一个第三计算历史作为静态数据加载第二源操作数。
将第一计算历史与静态数据组合可包括,将第一计算历史与该指令的程序计数器组合。
将第一计算历史与静态数据组合可包括,对第一计算历史与静态数据进行散列。
散列第一计算历史与静态数据可包括:
对第一计算历史进行循环移位;且
对循环移位后的第一计算历史和静态数据上执行“异或”操作。
散列第一计算历史还可包括,对“异或”操作的结果进行移位。
本发明还提供了一种使用静态计算历史的方法,包括:
读一个指令;
确定该指令的静态计算历史;
使用该静态计算历史,预测该指令的一个特性。
本发明所提供的方法中,预测该指令特性可包括:
存取查阅表;
使用静态计算历史,索引进入查阅表;
基于静态计算历史的索引,从查阅表中读值。
索引进入查阅表可包括,减小静态计算历史的长度。
减小静态计算历史的长度可包括:
将静态计算历史分成两部分;
对这两部分执行“异或”操作;
使用“异或”操作的结果,索引进入查阅表。
预测指令特性可包括,预测一个分支指令的方向。
所述的方法还可包括:
确定预测是否正确;
更新计数器来反映预测的准确度。
本发明另外提供了一种项目,包括:
一个存储介质,该存储介质拥有存储上述的指令,当由计算机运行时,导致:
读一个指令;
确定该指令的一个静态计算历史;
使用该静态计算历史,预测该指令的一个特性。
本发明另外提供的项目中,预测该指令的特性可包括:
存取查阅表;
使用静态计算历史,索引进入查阅表;
基于静态计算历史索引,从查阅表读值。
索引进入查阅表可包括,减小静态计算历史的长度。
减小静态计算历史的长度可包括:
将静态计算历史分成两部分;
对这两部分执行“异或”操作;
使用“异或”操作的结果,索引进入查阅表。
预测指令特性可包括,预测一个分支指令的方向。
指令还可包括:
确定该预测是否正确;和
更新计数器来反映预测的准确性。
本发明提供了一种使用数据流图的方法,包括:
读一个分支指令;
构造分支指令的一个数据流图;
使用数据流图,预测由分支指令采用的方向。
构造数据流图可包括,使用一组静态数据值,构造数据流图,其中每个数据值表示一个对分支指令上有作用的对象。
本发明提供了一种项目,包括:
一个存储介质,所述存储介质拥有存储上述的指令,当由计算机运行时,导致:
读一个分支指令;
构造分支指令的数据流图;
使用数据流图,预测由分支指令采用的方向。
本发明所提供的项目中,构造数据流图可包括,使用一组静态数据值,构造数据流图,其中每个数据值表示一个对分支指令有作用的对象。
附图说明
图1是根据现有技术的一个在运行程序的计算机系统。
图2是根据本发明的一实施例,对指令特性进行预测的计算机系统。
图3是根据本发明的一实施例,在图2所示的计算机系统中,与计算历史相关联的寄存器。
图4是根据本发明的一实施例,从其他寄存器生成的一个图3所示的寄存器的计算历史。
图5是根据本发明的一实施例,在没有使用其它寄存器的计算历史的前提下,生成一个图3所示寄存器的计算历史。
图6是根据本发明的一实施例,在图2所示计算机系统中,生成一个查找表索引。
图7A-7B是根据本发明的一实施例,在图2所示计算机系统中,为一个指令构建计算历史的步骤的流程图。
图8是根据本发明的一实施例,在图2所示计算机系统中,使用一种可能的散列函数来产生计算历史的步骤的流程图。
图9是根据本发明的一实施例,在图2所示计算机系统内,使用一个计算历史来预测指令特性的步骤的流程图。
具体实施方式
图2是根据本发明的一实施例,对指令特性进行预测的计算机系统。图2中,计算机系统202与图1中的计算机系统105非常相似。计算机系统202包括计算机205,监视器210,键盘215和鼠标220。本领域技术人员会发现尽管计算机系统202显示为台式个人计算机,但本发明不局限于任何特定类型的计算机。例如,计算机系统202也可以是一个缺少计算机205,键盘215或鼠标220的互联网设备。计算机系统202也可以成为个人数字助理(PDA),或是无线计算机,或是其他设备的其中一种。在图2中,计算机系统202中部分没有显示的作为其一部分的选装设备包括其他输入/输出设备,例如打印机或调制解调器。图2中也没有显示某些计算机系统202的常规内部组件:如,中央处理单元,文件系统,网络接口等等。
计算机205包括计算历史发生器225。计算历史发生器225负责在程序130中产生指令的计算历史。有关计算历史是什么和如何被使用的具体情况会在图3-5中提及。在一个实施例中,计算历史发生器225是计算机205的中央处理单元的一部分。在另一个实施例中,计算历史发生器225是中央处理单元的外部硬件。在第三个实施例中,计算历史发生器225是当计算机运行时,存储于存储器115中的软件。
当计算机系统202需要对一个指令的特性做预测时,计算历史发生器225为该指令产生.一个计算历史。该计算历史可用于确定对查阅表230的索引。该查阅表存储着对指令特性的预测。例如,如果询问的特性是分支指令135的方向,指令135的计算历史可以由计算历史发生器225产生。然后,计算历史可以用于确定索引0x41D1,该索引指向查阅表230的行235。该分支的预测是该分支将会被采用(由正向计数器值显示出)。
图3显示了根据本发明的一实施例,在图2所示计算机系统中与计算历史关联的寄存器。图3中显示了程序130,同时也显示了作为中央处理单元中的寄存器305-1至305-8。不同的指令使用这些寄存器:例如,指令310使用寄存器305-1,305-3和305-5,指令315使用寄存器305-5和305-7。
寄存器可以是源寄存器或目标寄存器(或两者都是),取决于指令是从寄存器读一个值还是写一个值到寄存器。例如,寄存器305-5是指令310的一个目标寄存器,也是指令315的源寄存器(箭头的方向显示一个寄存器是源寄存器还是目标寄存器)。
与每个寄存器关联的是计算历史。例如,寄存器305-1与计算历史320-1关联,寄存器305-2与计算历史320-2关联,等等。每个计算历史是影响寄存器当前数据值的所有事件的信息融合。影响寄存器当前数据值的事件可以包括其他寄存器值,静态常量,存储器值,写入寄存器的指令,等等。为了简化计算历史的产生,在一个实施例中只使用静态数据以产生计算历史。形容词“静态”意味着计算历史产生中使用的事件(通常是某类数据)是在程序编译时就知道的事件(比较术语“静态”与“动态”和“运行时间”,意味着事件在程序运行时才知道)。换句话说,计算历史不取决于实际运用在程序中的数据,并限于某些在每一时间运行程序时总是相同的事件。
为生成寄存器的计算历史,首先,需要确定计算历史和其他对寄存器有影响的对象的静态数据。典型地,这些是由写入寄存器的指令使用的其他寄存器的计算历史。也可以使用其他静态数据:例如,写入到寄存器的指令的程序计数器。将这些计算历史和其他静态数据通过一个散列算法散列在一起。结果得到与在当前状况下的寄存器关联的计算历史。
例如,考虑到一个如ADDR1,R2,R3的指令,该指令指示处理器读取寄存器R1和R2的值,将读出的值相加,结果存储在寄存器R3中。运行这个指令后,为计算寄存器R3的计算历史,需读取寄存器R1和R2的计算历史,但ADD指令的程序计数器可任选。这些值散列在一起,产生一个新的计算历史,该计算历史可与寄存器R3关联(至少到寄存器R3已经分配了一个新值前)。
通常把一组寄存器(寄存器305-1至305-8)称为一个寄存器文件。在本文中,当寄存器中的值变化时,寄存器文件也相应变化。同样,计算历史320-1至320-8可以被称为一个计算历史文件。当与单独寄存器相关联的计算历史改变时,计算历史文件也相应改变。
图4使用特定散列算法详细图解了该过程。图4中,源寄存器的计算历史是确定的:在这种情况下,是计算历史320-1和320-3。由于散列算法使用了指令的程序计数器,程序计数器405也会被确定。此信息被输入至计算历史发生器225,其详细情况显示在框410中。如框410所示,计算历史之一被循环移位,产生循环移位后的计算历史420。如图框425所示,该计算历史通过一个“异或”操作与其他计算历史和程序计数器405组合。结果被框430移位。最终输出是寄存器305-5新的计算历史。
框410中按次序解释了散列算法。首先,如果相同的计算历史被使用两次(在同一个寄存器被作为指令的源操作使用两次时,该情况可以发生),则同一不经循环移位操作数的“异或”操作将归零。为了避免该情况,计算历史之一可以被循环移位。其次,通过结果移位,计算历史将老化。这将帮助计算历史反映新近的指令比老化的指令对计算历史的值影响更大的事实。
在本发明的一实施例中,一个计算历史持续的时间仅仅与它被使用的时间一样长。例如,假定寄存器305-5当前储存着一个值,计算历史320-5当前在寄存器305-5中存储一个计算历史的值。如果下一个指令从存储器读出一个值,并存入寄存器305-5,一个新计算历史320-5将会产生,旧的计算历史将消失。在另一个实施例中,与丢弃计算历史不同,计算历史可以置于计算历史栈435中。计算历史栈435在存储器的某一位置,当相应的寄存器的值被存入存储器时,计算历史可以存入计算历史栈。然后,如果该计算历史的值返回至寄存器,相应计算历史可以从计算历史栈435重新得到。例如,当寄存器305-5的值被交换出至存储器,行440显示与该值相关的计算历史的值是0x34D12F21。
虽然如图3-4显示了计算历史与寄存器相关,它们也可与指令相关联。指令的计算历史可以是一个操作数的计算历史,一个由源操作数(或者其他静态信息)或目标操作数的计算历史产生的计算历史。例如,在预测一分支指令时,源寄存器的计算历史可以被加载为指令的计算历史。
本领域技术人员将认识到,计算历史的生成是递归的:就是说,产生一计算历史依赖于对先前计算历史的了解。通过计算历史递归产生,每个计算历史标识(通过散列)影响寄存器当前值的所有的值。影响计算历史的对象数目没有限制:计算历史有效的跟踪寄存器中当前数据值的全部起源。
本领域技术人员也认识到,指令可以有非寄存器的操作数对象。例如,一个“加载”指令加载一个数据值(或许来自存储器,如果直接存储器寻址是允许的,或许是一个静态值)到寄存器中。这些如何影响计算历史将通过以下的图5进一步讨论。
图5是根据本发明的一实施例,没有使用其它寄存器的计算历史,生成一个图3所示寄存器的计算历史。图5中,指令505可以是一个“加载”指令,从存储器515加载一个值到寄存器。加载指令505的计算历史通常是在忽视加载指令505使用的任何源寄存器的前提下生成的,但是加载指令505的计算历史可使用源寄存器的计算历史或源寄存器中的值。例如,用于加载该数值的存储单元地址可以被装入寄存器用于加载指令505。(计算历史发生器225可以将该值与指令505的程序计数器510进行任选散列。)这个新值成为寄存器305-5的计算历史。
计算历史是一个更普通概念的特殊实例:数据流图。数据流图是程序中数据流的一种表示法。数据流图可以使用运行时间数据(例如程序运行中与变量关联的实际值)动态生成,也可以使用仅在编译时可用数据来静态生成。数据流图可以计算历史相同的方式使用:对指令特性作出预测,例如由分支指令采用的方向。
图6是根据本发明的一实施例,显示在图2所示计算机系统中,一个查找表索引的生成。显然,计算历史可以被直接用于索引进入查阅表230。但是由于查阅表230索引使用的每一附加位使查阅表230长度变长两倍,最好是保持查阅表230的长度不要过大。这样,即使图6显示了32位计算历史,查阅表230的索引长度仅仅是16位。为了将计算历史的长度缩短至索引的长度,可使用索引计算器605。框610显示了一实施例中索引计算器610的详细情况。
框610中,计算历史被分成两部分。图6所示,两部分615和620通过框625中的“异或”操作散列。结果得到一个16位索引,该索引可用于索引进入查阅表230。如果希望得到一个较小的索引,可重复该过程,将该索引减少为8位。本领域技术人员也认识到,也可以使用其它方法将计算历史的长度减少至索引进入查阅表230索引的大小。
请注意查阅表230可以存储对数据的任何种类的预测。查阅表230最直接的用途是存储一个分支预测,但是它对于存储何种预测没有限制。例如,查阅表230可以用于对存储器查阅地址或由变量采用的数据值做预测。
图7A-7B是根据本发明的一实施例,在图2所示计算机系统中,为一个指令构建计算历史的步骤的流程图。图7A中,在程序块705,一个指令被读取。在判定点710,检查源操作数以确定是否存在计算历史。如果有,在程序块715中,加载源操作数的计算历史。如果没有,在程序块720中,静态值将被用作源操作数的计算历史。(根据以上对图5的讨论,那些没有源计算历史的指令的例子是存取存储器或将一个静态值加载至寄存器的指令。)
在程序块725(图7B),计算历史被组合。其他静态数据在此时也可以被使用。在程序块730,结果被确定为指令的计算历史。最后,在程序块735,计算历史(任选地)与指令的目标操作数一起存储。
图8是根据本发明的一实施例,在图2所示计算机系统中,使用一种可能的散列功能来产生计算历史的步骤的流程图。在程序块805中,源操作数之一的计算历史被循环移位。在程序块810中,计算历史通过“异或”操作组合。在程序块815中,任何其他静态数据都可以成为计算历史的一部分:例如,指令的程序计数器。最后,在程序块820中,结果被移位,以老化计算历史。
图9是根据本发明的一实施例,在图2所示计算机系统内,使用一个计算历史来预测指令特性的步骤的流程图。在程序块905中,为指令存取一个计算历史。通常如果指令有一个目标寄存器,采用的计算历史与该指令的目标存储器相关联。对于没有目标存储器的指令(例如一个分支指令),采用的计算历史与该指令的源寄存器相关联。在程序块910中,由计算历史产生一个索引。在程序块915中,该索引被用来存取一个查阅表。在程序块920中,从查阅表读一个值。在程序块925中,使用从查阅表读出的值对指令特性作出预测。最后,在程序块930中,一旦预测的真伪已知,查阅表的值可以被(任选地)更新。
本领域技术人员将认识到,以上描述的发明实施例是可以通过使用计算机实现的。那样,本方法由组成程序的指令实现(这样,指示中央处理单元如何运行程序)。该程序可以存储于计算机可读媒介,例如软盘,光盘(如压密盘),硬盘(如硬驱),随即存取存储器(RAM),只读存储器(ROM),或快速存储器。该程序可以在计算机上运行以实现该方法。本领域技术人员也可以认识到,以上涉及的发明实施例可以包括一个计算机可读调制载波信号,该程序或程序运行的一部分,可以分布于网络中的多个计算机。
以上在本发明的一个实施例中图示和描述了本发明的原理,有一点对本领域技术人员显而易见,不偏离该原理,本发明可在安排和细节上修改。所有在随后权利要求的精神和范围中的修改都被要求权利。
Claims (11)
1.一种处理器,包括:
计算历史发生器,以产生相应于指令的计算历史,所述计算历史包括操作数的计算历史,其中所述操作数的计算历史包括静态数据,所述静态数据是在程序编译时就知道的,所述程序包括所述指令,并且其中所述处理器使用所述计算历史来产生与所述指令的特性有关的预测,其中所述计算历史用于确定对查阅表的索引,所述查阅表存储对指令的特性的预测,所述指令的特性包括所述指令的方向,其中所述指令是分支指令。
2.如权利要求1所述的处理器,还包括由所述计算历史引出的索引,所述索引被用于存取与所述指令的所述特性有关的所述预测。
3.如权利要求2所述的处理器,还包括索引计算器以减少进入所述查阅表的索引的大小。
4.如权利要求1所述的处理器,其中所述计算历史将使用一组静态数据值来产生,每个静态数据值表示对所述指令有影响的对象。
5.一种用于使用静态计算历史的方法,包括:
读取指令,所述指令包括两个操作数,每个操作数是计算机中的一个寄存器,两个寄存器中的第一寄存器具有第二静态计算历史,而所述两个寄存器中的第二寄存器具有第三静态计算历史;
使用一组静态值的子集确定用于所述指令的第一静态计算历史,所述一组静态值包括一个或多个第二静态计算历史、一个或多个静态值和一个用于所述指令的程序计数器,包括:
对所述第二静态计算历史进行循环移位,以及
将循环移位后的第二静态计算历史与所述第三静态计算历史散列;以及
使用所述第一静态计算历史预测所述指令的特性。
6.如权利要求5所述的方法,其中将循环移位后的第二静态计算历史与所述第三静态计算历史散列包括将循环移位后的第二静态计算历史与所述第三静态计算历史和用于所述指令的程序计数器散列。
7.如权利要求5所述的方法,其中预测所述指令的特性包括:
存取查阅表;
使用所述静态计算历史,索引进入所述查阅表;以及
基于所述静态计算历史的索引,从所述查阅表读值。
8.如权利要求7所述的方法,其中索引进入所述查阅表包括减小所述第一静态计算历史的长度。
9.如权利要求8所述的方法,其中减小所述第一静态计算历史的长度包括:
将所述第一静态计算历史分成两部分;
对所述两部分执行“异或”操作;以及
使用“异或”操作的结果,索引进入所述查阅表。
10.如权利要求5所述的方法,其中预测所述指令的特性包括预测分支指令的方向。
11.如权利要求5所述的方法,还包括:
确定所述预测是否正确;以及
更新计数器来反映所述预测的准确性。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/330,492 | 2002-12-27 | ||
US10/330,492 US7143272B2 (en) | 2002-12-27 | 2002-12-27 | Using computation histories to make predictions |
CN2003101129115A CN1512325B (zh) | 2002-12-27 | 2003-12-25 | 一种计算机及一种产生并使用计算历史的方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2003101129115A Division CN1512325B (zh) | 2002-12-27 | 2003-12-25 | 一种计算机及一种产生并使用计算历史的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591621A CN102591621A (zh) | 2012-07-18 |
CN102591621B true CN102591621B (zh) | 2016-04-06 |
Family
ID=32654506
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110353106.6A Expired - Fee Related CN102591621B (zh) | 2002-12-27 | 2003-12-25 | 使用计算历史进行预测 |
CN2006101672158A Expired - Fee Related CN101140512B (zh) | 2002-12-27 | 2003-12-25 | 使用计算历史进行预测的处理器及系统 |
CN2003101129115A Expired - Fee Related CN1512325B (zh) | 2002-12-27 | 2003-12-25 | 一种计算机及一种产生并使用计算历史的方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101672158A Expired - Fee Related CN101140512B (zh) | 2002-12-27 | 2003-12-25 | 使用计算历史进行预测的处理器及系统 |
CN2003101129115A Expired - Fee Related CN1512325B (zh) | 2002-12-27 | 2003-12-25 | 一种计算机及一种产生并使用计算历史的方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7143272B2 (zh) |
CN (3) | CN102591621B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE602004030575D1 (de) * | 2003-07-09 | 2011-01-27 | Nxp Bv | Verfahren und system zur zweigprädiktion |
US7506105B2 (en) * | 2005-05-02 | 2009-03-17 | Freescale Semiconductor, Inc. | Prefetching using hashed program counter |
US20070101100A1 (en) * | 2005-10-28 | 2007-05-03 | Freescale Semiconductor, Inc. | System and method for decoupled precomputation prefetching |
US8205200B2 (en) * | 2005-11-29 | 2012-06-19 | Intel Corporation | Compiler-based scheduling optimization hints for user-level threads |
CN101515230B (zh) * | 2008-02-18 | 2012-02-08 | 瑞昱半导体股份有限公司 | 预测存储器存取的装置及其方法 |
US8127106B2 (en) * | 2008-04-18 | 2012-02-28 | International Business Machines Corporation | Access speculation predictor with predictions based on a domain indicator of a cache line |
US8131974B2 (en) * | 2008-04-18 | 2012-03-06 | International Business Machines Corporation | Access speculation predictor implemented via idle command processing resources |
US8122223B2 (en) * | 2008-04-18 | 2012-02-21 | International Business Machines Corporation | Access speculation predictor with predictions based on memory region prior requestor tag information |
US8122222B2 (en) * | 2008-04-18 | 2012-02-21 | International Business Machines Corporation | Access speculation predictor with predictions based on a scope predictor |
US20100257529A1 (en) * | 2009-04-06 | 2010-10-07 | Christopher Wilkerson | Efficient systems and methods for consuming and providing power |
US9223710B2 (en) | 2013-03-16 | 2015-12-29 | Intel Corporation | Read-write partitioning of cache memory |
CN106843812A (zh) * | 2016-12-23 | 2017-06-13 | 北京北大众志微系统科技有限责任公司 | 一种实现间接转移关联软件预测的方法及装置 |
CN107145334B (zh) * | 2017-04-26 | 2020-10-09 | 龙芯中科技术有限公司 | 常量获取方法、装置、处理器及计算机可读存储介质 |
CN107273098B (zh) * | 2017-05-03 | 2020-07-31 | 北京中科睿芯科技有限公司 | 一种优化数据流架构数据传输延迟的方法及其系统 |
US10437592B2 (en) * | 2017-08-24 | 2019-10-08 | Qualcomm Incorporated | Reduced logic level operation folding of context history in a history register in a prediction system for a processor-based system |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978909A (en) * | 1997-11-26 | 1999-11-02 | Intel Corporation | System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer |
US6272624B1 (en) * | 1999-04-02 | 2001-08-07 | Compaq Computer Corporation | Method and apparatus for predicting multiple conditional branches |
CN1359488A (zh) * | 1999-05-03 | 2002-07-17 | 英特尔公司 | 强静态预测分支指令的优化执行 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4370711A (en) * | 1980-10-21 | 1983-01-25 | Control Data Corporation | Branch predictor using random access memory |
US5564118A (en) * | 1992-11-12 | 1996-10-08 | Digital Equipment Corporation | Past-history filtered branch prediction |
US5996060A (en) * | 1997-09-25 | 1999-11-30 | Technion Research And Development Foundation Ltd. | System and method for concurrent processing |
US6173384B1 (en) * | 1998-02-11 | 2001-01-09 | Nortel Networks Limited | Method of searching for a data element in a data structure |
US6151672A (en) * | 1998-02-23 | 2000-11-21 | Hewlett-Packard Company | Methods and apparatus for reducing interference in a branch history table of a microprocessor |
JP2000132390A (ja) * | 1998-10-23 | 2000-05-12 | Toshiba Corp | プロセッサ及び分岐予測器 |
US6247122B1 (en) * | 1998-12-02 | 2001-06-12 | Ip-First, L.L.C. | Method and apparatus for performing branch prediction combining static and dynamic branch predictors |
US6601161B2 (en) * | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
US6272623B1 (en) * | 1999-01-25 | 2001-08-07 | Sun Microsystems, Inc. | Methods and apparatus for branch prediction using hybrid history with index sharing |
US6418530B2 (en) * | 1999-02-18 | 2002-07-09 | Hewlett-Packard Company | Hardware/software system for instruction profiling and trace selection using branch history information for branch predictions |
US6393544B1 (en) * | 1999-10-31 | 2002-05-21 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for calculating a page table index from a virtual address |
JP2001273138A (ja) * | 2000-03-24 | 2001-10-05 | Fujitsu Ltd | プログラム変換装置および方法 |
US6779108B2 (en) * | 2000-12-15 | 2004-08-17 | Intel Corporation | Incorporating trigger loads in branch histories for branch prediction |
US6766443B2 (en) * | 2001-05-17 | 2004-07-20 | International Business Machines Corporation | Compression of execution path history to improve branch prediction accuracy |
-
2002
- 2002-12-27 US US10/330,492 patent/US7143272B2/en not_active Expired - Fee Related
-
2003
- 2003-12-25 CN CN201110353106.6A patent/CN102591621B/zh not_active Expired - Fee Related
- 2003-12-25 CN CN2006101672158A patent/CN101140512B/zh not_active Expired - Fee Related
- 2003-12-25 CN CN2003101129115A patent/CN1512325B/zh not_active Expired - Fee Related
-
2006
- 2006-10-18 US US11/550,747 patent/US7624258B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5978909A (en) * | 1997-11-26 | 1999-11-02 | Intel Corporation | System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer |
US6272624B1 (en) * | 1999-04-02 | 2001-08-07 | Compaq Computer Corporation | Method and apparatus for predicting multiple conditional branches |
CN1359488A (zh) * | 1999-05-03 | 2002-07-17 | 英特尔公司 | 强静态预测分支指令的优化执行 |
Also Published As
Publication number | Publication date |
---|---|
CN102591621A (zh) | 2012-07-18 |
US7143272B2 (en) | 2006-11-28 |
CN101140512A (zh) | 2008-03-12 |
US7624258B2 (en) | 2009-11-24 |
US20040128490A1 (en) | 2004-07-01 |
CN101140512B (zh) | 2010-05-19 |
CN1512325A (zh) | 2004-07-14 |
CN1512325B (zh) | 2012-01-11 |
US20070088936A1 (en) | 2007-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102591621B (zh) | 使用计算历史进行预测 | |
CN100501739C (zh) | 利用流预取历史来改进数据预取性能的方法和系统 | |
US5933628A (en) | Method for identifying hard-to-predict branches to enhance processor performance | |
US7797521B2 (en) | Method, system, and computer program product for path-correlated indirect address predictions | |
US5687360A (en) | Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction | |
CN101427213B (zh) | 用于实现多态分支预测器的方法和装置 | |
CN1255674B (zh) | 用于在运行时间选择编译方式的方法和装置 | |
CN101611380A (zh) | 推测性吞吐量计算 | |
US8943298B2 (en) | Meta predictor restoration upon detecting misprediction | |
CN109308191B (zh) | 分支预测方法及装置 | |
CN104423929A (zh) | 一种分支预测方法及相关装置 | |
US9280350B2 (en) | Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments | |
CN102306094A (zh) | 实现现代处理器间接转移预测的装置及方法 | |
US20220091850A1 (en) | Apparatus and method for efficient branch prediction using machine learning | |
CN104899181A (zh) | 用于处理向量操作数的数据处理装置和方法 | |
CN105022607A (zh) | 连续微操作的结果复用 | |
CN103365628A (zh) | 用于执行预解码时优化的指令的方法和系统 | |
US20030088863A1 (en) | Method and apparatus for selecting references for prefetching in an optimizing compiler | |
CN112784970A (zh) | 一种硬件加速器、数据处理方法、系统级芯片及介质 | |
CN102156636B (zh) | 一种实现值关联间接跳转预测的装置 | |
Lakshminarayana et al. | Incorporating speculative execution into scheduling of control-flow-intensive designs | |
JPWO2005103886A1 (ja) | 分岐予測装置、その方法、及びプロセサ | |
US20160011889A1 (en) | Simulation method and storage medium | |
US7428627B2 (en) | Method and apparatus for predicting values in a processor having a plurality of prediction modes | |
JP2020027533A (ja) | 演算処理装置及び演算処理装置の制御方法 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160406 Termination date: 20171225 |