CN1168727A - 有限游程转移预测 - Google Patents

有限游程转移预测 Download PDF

Info

Publication number
CN1168727A
CN1168727A CN95196554.9A CN95196554A CN1168727A CN 1168727 A CN1168727 A CN 1168727A CN 95196554 A CN95196554 A CN 95196554A CN 1168727 A CN1168727 A CN 1168727A
Authority
CN
China
Prior art keywords
transfer
condition
instruction
taking
counter
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
CN95196554.9A
Other languages
English (en)
Other versions
CN1159648C (zh
Inventor
戴维·L·伊萨曼
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.)
Metafolw Technologies Inc
SK Hynix America Inc
Original Assignee
Metafolw Technologies Inc
Hyundai Electronics America Inc
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 Metafolw Technologies Inc, Hyundai Electronics America Inc filed Critical Metafolw Technologies Inc
Publication of CN1168727A publication Critical patent/CN1168727A/zh
Application granted granted Critical
Publication of CN1159648C publication Critical patent/CN1159648C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Abstract

本发明提供了一种可以提高正确地预测一个条件转移指令的方向的可能性的转移预测技术。本技术基于观察到许多转移都具有恒定的或缓变的游程长度,即几个连续的1的游程的长度是相同的这种事实。本技术利用每个转移的存储历史,两个小计数器(102,113),一个上计数器(102)和一个下计数器(113)增强了该历史。为了很准确的预测,这两个计数器(102,113)与一个现有技术的状态机转移预测器(101)协同操作。

Description

有限游程转移预测
执行条件转移所需的时间严重地限制了流水线处理器的性能。处理器一般是以顺序方式取出和执行指令的;即,在从地址n取出的指令Ei之后立即执行的指令Ei+1(Ei的后继指令)的地址是通过把Ei的长度加n而找到的。无条件转移是一个其执行使得控制转移到一个位于非顺序地址的指令的指令。因此一个转移B的后继者是从一个任意目标地址取出的。在一些计算机中,转移指令B的目标地址包含在该指令中,而在其它的计算机中目标地址是由包含在指令B中的补偿值加上指令B本身的取出地址形成的。
根据对一些数据段的测试,一个条件转移指令有条件地造成一个控制的转移。与目标地址的说明一起,这样一个指令包含一个待测试的条件。这个条件一般是一个数的一小组代数特性之一:该数是或不是零,该数是或不是正的,该数是或不是负的,等等。如果满足了条件,则进行转移:即,从转移的目标地址取出后继指令。如果条件不满足,则后继指令是按顺序的下一个指令,就象非转移指令一样。
流水线计算机通过一个由数个处理阶段——一般至少五个——构成的流水线传递每个指令。在每个时钟周期中可以把一条新的指令输入到流水线中。结果,一台流水线计算机可以同时具有在不同执行阶段的几个指令,因此在每个阶段最大地利用了硬件资源。
当转移指令是在待测试的数据代数条件确定之前取出时,会出现流水线计算机中产生由条件转移引起的性能降低。在那些由转移指令本身指明待测试数据存储单元的计算机中这种现象是最不利的。对代数条件的评估只是在经过几个流水线阶段之后才能进行。由于在取出转移指令以前不能开始对代数条件的评估,因此转移指令取出后的数个时钟周期之后才能知道待测试的条件。因为只有在测试了数据之后才能肯定地确定待取出的下一个指令的存储单元,所以有数个时钟周期不能取出指令。
转移预测是要在取出一个条件转移时立即预测是否要执行该转移,而不必等待测试结果的确定。以这种方式,能够以满速率连续取出指令。如果预测出转移,则需要确认该预测,并且需要收回错误的预测。如果预测是不正确的,那么在错误地预测的(“坏的”)转移之后取出的所有指令都是错误的指令,因此必须逆向恢复它们的执行结果。记录,确认和修正预测转移的技术不是本发明的主题。
由于必须放弃在一个坏的转移之后取出的所有指令,所以它们代表了浪费的效率。因此机器的性能是直接与转移预测的精确性相关的。
转移预测方案可以是静态的或是动态的。在一种静态方案中,转移指令本身包含着预测;这一般是由产生了该程序的编译程序提供的,其基础是编译程序已经执行了一个典型数据集的程序。只有在计算机的指令系统是考虑到这一点而设计的时候,静态预测才是可能的。大多数商业上成功的指令系统并不提供允许静态转移预测的功能。
动态转移预测使用在程序执行过程中硬件收集的有关转移的信息。硬件只能“知道”一个给定转移指令的过去的执行模式,并因此必须使其动态预测基于这种信息。由于条件转移是相当频繁的(其密度达到每五个指令就有一个),因此如果不使用很大的存储容量,对每个条件转移的可以存储的执行历史的量不可能很大。一般在一个程序中转移预测信息仅保存在一个小的——但却是不定的——转移的子集中。
在一个程序的执行过程中的任何一个时刻的一个给定的转移指令的正确执行历史可以用二进制符号1和0的一个序列代表。这个序列指出该转移指令是执行了(1)或是没有执行(0)。每次执行一个转移指令时,根据转移的正确的(不必是预测的)执行是否发生了,在这个转移历史的终点加上一个1或0使转移历史延长。
可以把一个转移指令的执行历史划分为多个游程。一个转移游程是一个前后各有一个1的连续的0的序列,或是相反。也就是说,在该历史中的每个符号完全在一个游程中,并且每个游程是全部由0或全部由1组成的。一个游程的长度是其中符号的数量。
现有技术的动态转移预测机构利用了这样一个观察结果,对于一个程序中的许多转移,所有的或是几乎所有的0的游程的长度都是1。这些通常是结束循环的转移。一个循环一般是通过将一个条件转移放置在构成循环体的指令序列的终点来实现的。该条件转移测试循环结束的条件,并且如果条件为假时转移到成为循环体的序列中的第一指令。如果该转移没有执行,循环被终止。下一次执行的转移将在循环下一次激活中第一个被执行,除非这次激活在一次追踪后终止。因此存在着一个由一个代表循环终止的单一的0构成的游程。(一些编译程序把条件转移放在循环体的开始而不是末尾构造循环。通过执行转移终止这样一个循环。这种循环构造导致具有由一个单一的1构成的游程的执行历史。)
现有技术转移预测将每次预测建立在每个转移的两比特的存储历史上。这些比特是一个四-态状态机的状态(图1)。这个状态机的作用是要预测转移将具有与上一个长度大于1的游程相同的结果。因此在一个总是被不止一次追踪的,因而其执行历史没有两个或更多0的游程的循环的场合,预测将是恒定的。
这种现有的状态机的预测精度与1的游程的长度直接相关。如果平均游程长度是n,那么每n次正确的预测中有一次错误的预测。因此对于较短的游程效率较差。本发明的目的是要改进对于短游程长度转移的预测精度。
许多转移具有恒定或缓慢变化游程长度,也就是说,几个连续的1的游程有同样的长度。本发明通过增加两个小计数器,一个上计数器和一个下计数器来增强为每个转移所存储的历史。这两个计数器与现有技术的状态机转移预测器协同工作。
上计数器计算当前游程的长度。如果游程在计数器溢出之前终止,该上计数器的值被复制到下计数器中,并把上计数器重新初始化为零。然后下计数器在接下来的游程中递减计数。在下计数器达到零之前,使用的预测是状态机作出的。在下计数器为零的第一执行时,对状态机的预测进行求补。如果当前游程的长度与前面的游程的长度相等,那么预测将是正确的。只要游程长度保持恒定,本发明的预测精度是100%。如果游程长于可能计算的长度,计数器失效,预测依赖状态机独自进行。
每次发布任何条件转移指令B,都要检查它的预测历史,以确定是否将该转移预测为被执行的转移或是未执行的转移,并且立即部分地根据该预测更新历史。该更新还依赖于这是否是B的再发布。只有当B的任何执行BE被错误地预测,此时还不知道正确的方向,并且知道没有任何BE之前的转移的执行是被错误地预测的时候才发生B的再发布。在这种场合,发生对BE的转移修正:放弃BE和所有任何后续指令的执行,并再发布B。
更新计数器的算法是建立在状态机预测器总是预测相同方向的假设的基础上的。因此,一个游程的终点是仅由计数器预测的。一个再发布意味着错误地预测了游程长度:没有作出对游程长度的预测,或是把游程长度预测的过短或过长。如果因为前面的游程太长而不能计数,而根本没有作出游程长度的预测,则把上计数器设置为0,以防万一新开始的游程是短的足以进行计数,并且将下计数器置位为使预测器失效的-1。如果由于游程比预计提前结束而使再发布转移预测错误,则将新的,较短的长度从上计数器复制到下计数器,并把上计数器复位为0。如果预测的游程长度太短,上计数器继续递增,以计算出正确的较长的长度,并且当知道不能正确地预测出这个较长的游程的终点时,将下计数器置位为-1。
对于任何一个不是再发布的转移的发布,如果上计数器已经到达其最大计数时,该计数器停留在该计数上,并把下计数器置位为-1,防止任何游程长度预测。否则,如果下计数器不是0,就递增上计数器的值,指出游程的预测终点;在这种场合,把上计数器复制到下计数器,并随后把上计数器复位为0。如果上计数器没有在其最大值,下计数器没被禁止,那么如果下计数器还没有到0,就递减下计数器值。
使用本发明而增加的对每个转移必须存储的状态信息量是很大的。所幸的是,少量的比特就能给出高的性能增益。三比特计数器可以正确地预测所有小于7的恒定游程长度。不能正确预测的最短游程长度,7,具有从状态机预测器独自获得的87%的精度。四比特计数器给出至少93%的精度。
本发明的优选实施例与一种超标量处理器(superscalarprocessor)有关。一个超标量处理器每时钟周期取出并向流水线发布多个——在本例中多达四个——指令。由于并不是所有的处理器元件都与本发明相关,因此这些元件中的某些元件没有包括在本发明的说明中。Popescu等1990年12月5日申请的题为“处理器构造(ProcessorArchi tecture)”序列号为07/622,893的美国专利申请中对此有所描述。
关于转移指令的预测和本发明,所有转移的执行历史存储在两种结构中,一个转移预测RAM 10和一个处理器中的转移储层(shelf)20。转移预测RAM 10存储直到最老的未决预测转移,但并不包括这个最老的未决预测转移本身的全部转移执行的历史。转移储层20保持是一个未决预测转移或是在一个未决预测转移后面的所有转移执行的历史。
在本优选实施例中,转移预测RAM 10是由1K(1024)字构成的。为读取转移预测RAM 10,处理器的程序计数器寄存器11经过地址总线13用一个值PC给RAM 10编址。PC是处理器中的下一次取出的指令的存储器地址。转移预测RAM 10有四个分别连接于输出线14A-14D的输出数据端口,Dout0-Dout3。通过这四个端口输出分别位于四个地址PC,PC+1,PC+2和PC+3的指令的转移预测状态,以适应处理器的超标量性质。当然,应当理解本发明同样适用于简单标量处理。
转移预测RAM 10是双字编址的。即,忽略经过地址总线13的最不重要的PC比特。因此,必须从转移预测RAM 10给两个连续的指令——一个为偶数PC值,另一个为紧接其后的较高的奇数PC值——赋予相同的预测历史。假设两个连续的转移指令极少出现,以这种方式,1K深(deep)RAM 10可以存储达2K的指令的唯一的预测历史。
转移预测RAM 10不是超高速缓冲存储器。它的内容可以或可以不严格地反映一个给定转移指令的预测状态。例如,两个PC值严格相差2K倍数的指令将产生混叠。两个指令的历史都将以相同的RAM字存储,并因此可能引起破坏性的干扰。由于转移预测RAM 10只是一种预测机构,这种情况是允许的;以后将对每个转移预测进行校验,如果有错误,将对其进行修复。因此,破坏性的混叠仅在预测精度上和性能上造成潜在的降低;转移预测RAM 10的大小是与性能降低相平衡的。
转移储层20是一种存储所有推测的转移指令的预测历史的12深(deep)的内容定址先进先出(FIFO)结构。是一个其正确方向尚不为所知的预测转移执行的,或是跟随其后的所有的指令执行都是推测执行。转移储层20具有一个连接于地址总线13的搜索端口,一个连接于三条线37B,39和40——下面将对它们进行说明——的输入端口,和一个连接于转移预测RAM 10的更新端口。
转移储层20按它们发布的顺序存储推测的转移执行的转移预测历史。每个存储在转移储层20中的项目具有两个与本发明相关的部分:一个条件转移指令的预测历史和该指令的地址。在每个时钟周期当增加项目信号40为真时,即,是逻辑“1”时,经过输入端口把一个新项目加到转移储层20中。
转移储层20象个有多个格层的堆栈那样操作。把每个项目写入“最底层”的空单元。可以经过更新端口把最底层单元移动到转移预测RAM 10中。更新端口有三条线路:一个用于转移转移储层20的最底层单元中的条件转移指令的预测历史数据的数据总线19A,一个用于转移最底层单元中的条件转移指令的地址的地址总线19B,和一个用于向要执行写入操作的转移预测RAM 10发送信号的允写控制线19C。当发生这种移动时,所有转移储层20中的项目向下移动一格。转移修复包括删除发现错误预测的转移执行的项目,以及其上方的所有项目。在这种方法中,将转移储层20中全部有效项目以它们进入的顺序从最底层项目起相邻存储。
当把一个PC值经过地址总线13施加到转移储层20的搜索端口时,PC,PC+1,PC+2和PC+3地址同时与每个存储的转移指令地址比较,并且如果增加项目信号为真时,与在输入端口的地址比较。把这些比较的结果从转移储层20的四个数据输出端口,Bout0-Bout3,送出。转移储层20的每个数据输出端口有两个部分,并且连接于两组线路。一组是分别用于每个端口Bout0-Bout3的一比特匹配线22A-22D。另一组是分别用于每个端口Bout0-Bout3的数据总线21A-21D,用于每个存储的转移指令地址的预测历史数据。当且仅当存在至少一个分别匹配于PC,PC+1,PC+2或PC+3的存储地址时,在这些输出端口上的匹配线22A-22D带有一个逻辑“1”。对于其匹配线22A-22D是逻辑“1”的任何端口,在这个端口的对应的预测历史数据是存储在最顶层的(最近输入的)地址匹配的项目中的预测历史数据(在此把位于输入端口的值考虑为最顶层)。
匹配线路22A-22D分别连接于并且控制二线一线多路复用器15A-15D。对于每个具有匹配线22A-22D是逻辑1的数据输出端口Bout0-Bout3,其对应的多路复用器15A-15D选择来自转移储层20的数据总线21A-21D。选择来自那个端口的预测历史数据作为对那个多路复用器15A-15D的输出。如果数据输出端口匹配线22A-22D是逻辑“0”,对应多路复用器15A-15D的输出在总线14A-14D上选择来自转移预测RAM 10的对应数据输出端口Dout0-Dout3的预测历史数据。
利用这种安排,四个多路复用器15A-15D的输出是对于在PC,PC+1,PC+2和PC+3的任何转移的最近预测历史。在任何时刻,如果在PC+i——此处i=0,1,2,3——有转移指令B,那么有两种可能性:没有B的推测执行存在,或是有一个或更多的推测执行存在。在前一种场合,来自转移储层20的对应于PC+1的匹配线22A-22D是逻辑“0”,因此多路复用器15A-15D的输出来自对应数据输出总线14A-14D上的转移预测RAM 10。来自多路复用器15A-15D的输出信号代表上溯至其最近执行的——在这种场合是非推测的——转移指令B的历史。
如果有一个B的推测执行,那么来自输出端口Bout0-Bout3之一的一个匹配线22A-22D载有一个逻辑1信号,并且该端口的预测历史输出是B的最近推测执行之后的输出。由于所有推测执行比所有非推测执行更为新近,因此这是最新的执行,并被对应的多路复用器15A-15D选作输出。
每个多路复用器15A-15D的输出总线是四个相同的预测模块16A-16D之一的输入总线。图3中所示的每个预测模块16A-16D检验来自其对应多路复用器15A-15D的预测历史数据,以确定对转移指令的当前执行的预测。预测历史数据有8比特,包括一个2比特预测状态,一个3比特上计数器值,和一个3比特下计数器值。预测历史数据由形成每个多路复用器15A-15D的输出总线的八条总线线路携带。
每个预测模块16A-16D有一个“或非”门23和一个“异或”门24。“或非”门23接收下计数器的3比特作为输入,并且连接“或非”门23的输出作为“异或”门24的一个输入。至“异或”门24的第二个输入是意义更为重要的预测状态比特的预测状态,状态〔1〕的比特。如图3所示,次要的比特,状态〔0〕,以及上计数器的3比特从预测模块16A-16D通过,而没有连接于“或非”门23和“异或”门24。
可以看到,状态机给出的预测等于最重要的状态比特,状态〔1〕。为零的下计数器值(三个比特全部等于逻辑0)使“或非”门23产生一个输出逻辑1,该输出逻辑1接着又使“异或”门24对状态〔1〕的值求补。如果下计数器为非零,那么“或非”门23有一个逻辑0的输出,该逻辑0输出致使“异或”门24输出状态〔1〕的值。“异或”门24的输出就是预测值。
预测模块16A-16D的输出——预测历史数据的8比特加上对在PC+i,i=0至3,的四个指令中每个的当前预测——分别连接于一个指令解码FIFO 25的输入端口26A-26D。FIFO 25有五个指令深,并且存储从它们自指令超高速缓冲存储器(未示出)中取出时直到他们能够发布到处理器的流水线的执行阶段的指令。每个时钟周期可以在输入端口26A-26D增加高达四个指令的预测历史数据。预测历史数据是按照从最底层空单元递增的地址增加的。即,通过输入端口26A——其接收在PC的指令的预测历史——的数据,进入FIFO 25的最底层的空项目。通过输入端口26B的数据进入正好在其上方的项目,等等。
在把指令的预测历史提供给输入端口26A的同时,由总线13通过FIFO 25的一个地址输入端口30供给指令的地址,PC。指令解码FIFO 25包含逻辑电路,该逻辑电路将存储在其内的指令与取出该指令的地址结合在一起。
指令发布逻辑电路50检验在指令解码FIFO 25中的四个最底层指令。指令发布逻辑电路50的主要任务是要刚好在指令可以被“发布”时,即,在处理器流水线中的后续阶段之前,对指令解码FIFO 25中的每个指令进行测定。指令发布逻辑电路必须执行的两个任务是:(1)跟踪每个发布的指令的结果的可用性和位置,和(2)确定指令解码FIFO 25中的每个指令与先前发布的指令的关系。如何执行这些任务的具体细节与本发明无关。
当指令发布逻辑电路向后续流水线阶段发布指令时,它将那些指令从指令解码FIFO 25的底层移出。在本优选实施例中,一个指令只有当在它“之下”的所有指令也被发布之后才能发布;因此本指令解码FIFO是真正的先进先出。
如果指令解码FIFO 25包含转移指令,指令发布逻辑电路50检验最底层的这种指令。如果是个无条件执行转移,那么指令发布逻辑电路执行两个特定步骤:(1)它遵照转移指令改变程序计数器寄存器11,以便替换取出指令的序列。(2)它从指令解码FIFO 25的“顶层”清除那些跟随在不应当执行的转移之后的指令。
如果在指令解码FIFO 25中的最底层转移指令是一个条件转移,那么指令发布逻辑电路50以上述的方法确定:(1)这个转移依赖于先前发布的一个或一些指令,和(2)那些前面的指令的结果是否可用,如果可用,那些结果的值是什么。如果知道了该转移依赖的所有结果,那么指令发布逻辑电路50评估它们以确定是否应当执行或不执行该转移指令。如果要执行该转移指令,那么指令发布逻辑电路执行上述的两个步骤,替换程序计数器寄存器11的步骤,和从指令解码FIFO 25移出任何随后的放弃的指令。
如果在指令解码FIFO 25中的最底层转移指令是一个条件转移,并且它所从属的结果是不可用的,那么指令发布逻辑电路50使用一个预测来确定该转移的配置。那个预测是由一个预测模块16A-16D产生的,并且是用转移指令经过一个输入端口26A-26D写入指令解码FIFO的。如果转移被预测执行,则替换程序计数寄存器11的内容,并且从FIFO 25放弃在该转移之后的指令。
控制转移储层20的写入的指令发布逻辑电路50产生有三个控制信号输出。在发布,即从FIFO 25的底层移出,一个条件转移指令的每个时钟周期的加项目信号40是一个逻辑1。每当加项目信号40是逻辑1时,二比特选择转移信号35是被发布的转移指令的FIFO中的标志,和如果执行了转移,执行信号41是逻辑1,如果转移未执行,执行信号41是逻辑0。
指令解码FIFO 25有四个输出端口Fout0-Fout3,数据总线31A-31D和地址总线32A-32D分别连接于四个输出端口。这些输出端口Fout0-Fout3中的每个产生两段信息:在数据总线31A-31D之一上的一个存储在FIFO 25中的预测历史,和在对应的地址总线32A-32D上的相关的指令地址。这四个输出端口Fout0-Fout3输出指令FIFO 25中的最底层的四个项目。
数据总线31A-31D和地址总线32A-32D连接于一个多路复用器36的输入端,该多路复用器36有两个选择控制线35。指令发布逻辑电路50在控制线35上产生的选择转移控制信号是指令解码FIFO 25的四个输出中的最老的条件转移——如果有的话——的标志。这个控制信号使多路复用器36从输出端口Fout0-Fout3之一中选出那个最老的转移的地址和预测状态信息,分别作为对一个地址总线37B和一个数据总线37A的输出。地址总线37B直接连接于转移储层20的输入端口18B。
数据总线37A上的预测状态信息传送到一个更新模块38。模块38如下文所述那样“更新”预测状态,并将数据送到连接于转移储层20的输入端口18A的线路39上。来自指令发布逻辑电路50的控制线40上的加项目信号使输入端口18A和18B上的地址和更新的状态信息刚好在指令解码FIFO 25中的一个条件转移指令被发布时写入到转移储层20中。
更新模块38——它可以在一个随机逻辑存储器或只读型存储器中使用——产生用于四状态转移预测器和上、下计数器的新值。如图1的状态图中所示,计算转移预测器的新值。输入到状态机的信号是指令发布逻辑电路50产生的执行信号41。如果转移被执行,它的值是逻辑1,如果转移未被执行,它的值是逻辑0。
图4显示了更新模块38计算用于上、下计数器的新值的算法。模块38首先通过步骤101来确定是否已经知道预测的转移方向错误的。这需要知道转移所依赖的数据,和需要由一个预测模块16A-16D产生的并且存储在指令解码FIFO 25中的预测的方向不是正确的方向。
如果不知道预测是错误的,沿路径202进行,并通过步骤102检验上计数器以确定它是否已经达到它的最大值。如果是,那么显然转移游程长度过长而不能用这些计数器跟踪。沿路径203进行,并通过步骤103把下计数器设置为最大值(在本发明的这个实施例中是7)。其结果是禁止进行转移游程预测,由于下计数器将不减值,因此永远不会达到零。由于上计数器已经达到最大值,因此它保持不变。
如果上计数器还没有到达其最大值,那么沿路径204进行。通过步骤104和105检验下计数器看其是否在最大值,零,或一个中间值。如果计数器在一个中间值(在步骤104和105之后分别沿路径205和206进行),这意味着还未禁止对这个转移的转移游程预测,和该转移游程尚未到达预测的游程的终点。因此,由于它现在是一个更为接近预测的游程终点的转移执行,下计数器通过步骤107减1。
如果步骤104确定下计数器在其最大值,或步骤104和105确定它是一个中间值,那么步骤108使上计数器增加1。因此当前游程长度总是保持在上计数器中(直到计数器到达最大值),即使转移游程预测器被禁止(在步骤104后沿路径207进行)。
如果步骤105确定下计数器是零,那么沿路径208进行。步骤109为下计数器重新装载上计数器的当前值,并由步骤110把上计数器重新初始化为零。下计数器为零表示预测的游程的终点,即,该第一转移在相反的方向行进。把上计数器复制到下计数器预示下一个游程与刚刚结束的游程将有相同的长度。把上计数器设置为0预示在这个相反的转移之后的下一个转移将是新游程中的第一个。因此,一个具有恒定长度(小于最大计数器值)游程的,被相反方向单一转移隔开的转移,将总是被正确地预测。
回到步骤101,如果知道转移预测是错误的,沿路径210进行。步骤111检测上计数器以确定它是否在最大值。如果该计数器已经达到最大值,那么刚刚完成的当前游程(如被错误预测指示的)对于计数器来说太长,但下一个游程可能足够短。沿路径211进行,通过步骤112把下计数器设置为最大值以禁止转移游程预测器工作,但步骤110将上计数器重新初始化为零。
如果步骤111确定上计数器还没有到达其最大值,那么沿路径212进行。步骤113检验下计数器是否为零。如果下计数器是零,那么当前游程被错误地预测为已经结束,即预测的长度太短。在这种场合,上计数器一直计算这个游程的实际长度,并应继续计数。流程沿路径213进行,步骤114将下计数器设置为最大值,以防止在当前游程中进行任何预测,步骤108使上计数器的值递增。
如果步骤113确定下计数器不是零,那么错误地预测了当前游程还尚未结束;即预测的长度太长。流程沿路径216进行。步骤109将保持当前游程实际长度的上计数器复制到下计数器,以预测下一个游程是同样长度的游程。接着步骤110把上计数器重新初始化为零。
图5A显示了在一个恒定游程长度是3的转移上的转移预测器的稳态行为。最左边的列指示转移预测器的状态,“上”列指出上计数器的值,“下”列是下计数器的值,“预测”列是来自转移预测器的预测比特。最右边的列显示了转移的实际方向,其中1表示执行的转移,0表示未执行的转移(不过颠倒这些值也可获得同样的行为)。这一列显示了一个0后面跟随着三个1的反复模式。在这个场合,由于主要的方向是1,所以该四状态预测器总是预测1。它的预测是该状态的最重要的比特;由于相反的0的游程不长于1,所以只有这个状态机的状态的最不重要的比特不断变化。
如图5A的第一行所示,下计数器是0,上计数器等于游程的长度,3。下计数器的零值使得转移预测器状态机给出的预测——它的预测是1——要由预测模块16A-16D进行求补。当这个0转移被发布并写入转移储层20中时,更新模块38,响应上计数器小于最大值和下计数器是零的事实,在步骤109把上计数器复制到下计数器,并在步骤110把上计数器复位为零。
下一次取出这个转移时,从转移储层20或转移预测RAM 10读取图5A的第二行中给出的值。这次预测模块16A-16D将看到一个非零下计数器值,并因此恢复1的不变更状态机预测。当发布这个转移时,更新模块38见到小于最大值的上计数器,和在零与最大值之间的中间值的下计数器。因此,该模块只是在步骤107简单递减下计数器的值,和在步骤108增加上计数器的值。在下两次取出和发布转移时重复这种相同的行为。如图5A的行5所示,在这个1的游程的终点,下计数器再次达到零,并因此再次对预测求补和再初始化计数器,以便为下一个游程计数。
图5B显示了当一个长度为3的游程后面紧跟着一个较短的游程时的行为,在长度为2的场合,它后面又跟随着一个长度为4的较长的游程。在图5B的行1所示的状态中,已经正确地预测了前面的长度为3的游程的终点,如图5A中所示。在假设下一个游程也是长度3的基础上重新初始化两个计数器(行2)。通过行3和4递增上计数器的值和递减下计数器的值。在行4中,由于预测的游程尚未完成,所以预测仍然是1,但实际方向是0。
在一个后续的时间,在行4中发布的转移的正确方向成为已知。转移修复机构放弃该转移和它后面的所有指令的效果。然后将重新取出和再发布该转移。重新取出的状态机和计数器的值(行4’所示)与它们的原始取出值(行4所示)相同。这是正确的,因为转移修复机构已经清除了包括对转移储层20的任何修改在内的原始发布的效果;由于该转移尚未被分辨,所以那些修改决不会写入转移预测RAM10中。
当修复后再发布转移时,更新模块38把再次成为1的预测与已知的0的正确方向相比较,以确定预测是错误的。在步骤101后沿路径210进行。由于上计数器小于最大值和下计数器不为零,更新模块38把上计数器值复制到下计数器,并把上计数器复位到0,如图5B的行5所示。因此设定转移游程预测器以预测下一个游程应当是长度2。
上和下计数器计算出在行6和7中的一个预测为2的游程长度。由于下计数器是零,因此预测出在行7中发布的转移是游程的终点。因而预测被改变为0。以后发现这是一个不正确的预测,因此用与预测器相同的值再发布转移,如行7’所示。这次更新模块38在步骤101确定预测是错误的,并再次沿路径210进行。当步骤111确定上计数器不是最大值后,后续的步骤113确定下计数器是零。在这种场合,仍然不知道游程的实际长度,所以不能预测其终点。因此,步骤114把下计数器设置为最大值,以防止任何预测游程终点的企图。步骤108继续递增上计数器的值,以计算当前游程的长度。
由于下计数器被禁止,行8和9中的预测是直接从状态机预测器取得的。在行9中发布的转移预测是1,但发现是0,这指示一个长度为4的游程的终点(行5,6,7和8)。当再发布这个转移时(行9’),在步骤101更新模块38再次确定预测是错误的。在步骤111和路径212之后,步骤113确定下计数器不是零,因此步骤109把上计数器复制到下计数器,和步骤110重新将上计数器初始化为零。因此,在行10,设置转移游程预测器以预测下一个游程将是长度4。
如果没有转移游程预测器,图5B中所示的例子中的所有转移都会被预测为1。因此,行4和9中的转移会被不正确地预测,但行7中的转移会被正确地预测。也就是说,每当一个比7短的游程后面跟随着一个较长的游程时,产生一个额外的转移修复。当一个长度为7或比7小的长度的游程后面跟随着一个较短的游程时,如行4中的例子,有或没有转移游程预测器都会发生一个修复。每当一个短的游程后面跟随着一个同样长度的游程时,转移游程预测器避开一个转移修复。
通过利用本发明,可以显著地改善对于恒定或缓变游程长度的转移的转移预测速率。速变游程长度的转移可能有较坏的性能,这取决于游程长度的恰当分布。
尽管以上是对本发明的优选实施例的完整的说明,但也可以使用各种不同的替代,更改和等同物。显而易见,通过对上述实施例进行适当的修改,本发明也同样适用。因此,上述的说明不应限制权利要求所定义的本发明的范围。

Claims (47)

1.一种从一个指令存储器取出一个在计算机系统中执行的指令序列的方法,所述序列包括无条件和条件控制转移指令,其特征在于,所述方法包括步骤:
在每个时钟周期中从指令存储器读取一个或多个以保持在一个程序计数器中的地址开始的连续地址的指令;
把来自所述一个或多个指令中的每个控制转移指令分类为无条件的,条件的且已知被执行的,条件的且已知不被执行的,或推测的;
预测对序列中的每个推测的控制转移指令的控制条件;和
根据第一控制转移指令,如果有的话,的指示为随后的时钟周期的读取步骤替换程序计数器,该第一控制转移指令是无条件的,已知被执行的,或是预测被执行的;
如果控制一个存储在指令存储器中的条件转移的条件显示一种一致的循环行为,每个循环具有条件相同的n次,其后跟随着条件相反的一次,该取出方法每次正确地预测该条件。
2.一种如权利要求1所述的取出方法,其特征在于,如果控制一个条件转移的条件显示一种循环行为,每个循环包括条件是相同的主要值的一次或多次,和随后的条件相反的一次,并且该条件是在一个其长度与其最接近的前面的循环长度相同的循环中,该方法每次正确地预测该条件。
3.一种如权利要求2所述的取出方法,其特征在于,如果控制一个条件转移的条件显示一种循环行为,并且当前循环和其最接近的前面的一个循环的长度小于某个常数,该方法每次正确地预测该条件。
4.一种如权利要求3所述的取出方法,其特征在于,如果控制一个条件转移的条件显示一种循环行为,前面的循环的长度大于或等于该常数,并且这个条件转移不是在当前循环——它的条件与循环中的所有其它的相反——终点的条件转移,该方法正确地预测该条件。
5.一种如权利要求4所述的取出方法,其特征在于,当已知的或预测的一个值将在最近的两次或多次取出保持在一行内时,该方法将该值建立为用于一个转移的条件的主要值。
6.一种如权利要求5所述的取出方法,其特征在于,该方法从最后的取出——已知或预测到它的条件的值已经与主要值相反——开始保持对转移的取出数的计数。
7.一种如权利要求6所述的取出方法,其特征在于,该方法存储在转移的最后取出——已知或预测到它的条件的值与主要值相反——时的计数器的值。
8.一种如权利要求7所述的取出方法,其特征在于,该方法把存储的计数器的值与计数器的当前值比较,并且如果当前的计数不等于存储的计数,则预测主要条件值。
9.一种如权利要求7所述的取出方法,其特征在于,该方法在条件的值与主要值相反的转移的最近取出时,检查并存储是否计数器已经由于被该取出终止的循环的长度超过了计数器的容量而溢出。
10.一种如权利要求9所述的取出方法,其特征在于,该方法把存储的计数器的值(包括溢出的)与计数器的当前值比较,如果存储的计数是一个溢出值并且不等于当前值,则预测主要条件值。
11.一种如权利要求10所述的取出方法,其特征在于,该方法用条件转移维护一个第一二进制计数器,在该转移的一次取出时把该计数器初始化为零,该次取出不是一个再取出并且知道或预测到具有相反的值,或者该次取出是一个再取出并且当初已经预测为没有相反的值,和在该转移的每次其它取出时把该计数器增加1,除非该计数器已经到达其最大值,在这种场合计数器保持不变。
12.一种如权利要求11所述的取出方法,其特征在于,该方法用条件转移维护一个具有与第一二进制计数器相同容量的第二二进制计数器,当并且是仅当第二二进制计数器保持为零时预测相反的条件值,并且以一种方式在转移的每次取出时修改这个第二二进制计数器,所述的方式取决于这个取出是否是一个由于在一个较早的转移取出时的错误预测而被迫需要的再取出,该计数器的修改方式如下,
如果不是一个再取出,那么如果第一二进制计数器保持在最大值则把第二二进制计数器设置为它的最大值,否则把第二二进制计数器减1,除非它保持在零,在这个场合把第一二进制计数器中的值复制到第二二进制计数器中;
如果这是一个再取出,那么把在较早取出时已经在第一二进制计数器中的值复制到第二二进制计数器中,除非该较早的取出过去已经被预测是与主要方向相反的,在这种场合把第二二进制计数器设置为它的最大值。
13.一种如权利要求12所述的取出方法,其特征在于,该方法每当它再取出一个转移时,可以刚好在正在再取出的转移取出之前恢复使用于该转移的主要预测和第一和第二二进制计数器的值。
14.一种如权利要求13所述的取出方法,其特征在于,该方法在取出一个转移之后,把更新的对于该转移的主要预测和第一和第二二进制计数器的值与该转移指令的指令存储器地址一起存储在一个转移储层中。
15.一种如权利要求14所述的取出方法,其特征在于,该方法在知道了控制该取出的转移和任何转移的所有的先期取出的条件之后的某个时间,把一个取出的转移的主要预测和第一和第二二进制计数器的值从转移储层移到一个转移预测RAM中,其可以是能够达到此目的的一个指令存储器或一个辅助RAM。
16.一种如权利要求15所述的取出方法,其特征在于,该方法在取出一个转移时,通过搜索一个存储该转移的地址的项目的转移储层和读取转移预测RAM,以及使用在转移储层上发现的最近增加的匹配项目——如果有的话——否则使用从转移预测RAM读取的值,以确定用于该转移的主要预测和第一和第二二进制计数器的值。
17.一种如权利要求16所述的取出方法,其特征在于,该方法在检测到错误地预测了一个或多个取出的转移控制条件时,从转移储层中清除用于每个这样取出的转移的项目和所有比任何这种转移更为近期取出的转移。
18.一种操作计算机从一个指令存储器取出一个在所述计算机系统中执行的指令序列的方法,所述序列包括无条件和条件控制转移指令,其特征在于,所述方法包括步骤:
在每个时钟周期中从所述指令存储器读取至少一个在一个程序计数器中的地址的指令;
把来自所述指令存储器的每个转移指令分类为无条件的,条件的且已知被执行的,条件的且已知不被执行的,或推测的;
预测所述序列中的每个推测的转移指令的控制条件有一个游程长度等于比所述控制条件游程长度大的最新游程长度;和
根据第一转移指令,如果有的话,的指示为随后的时钟周期的读取步骤替换所述程序计数器,该第一转移指令是无条件的,已知被执行的,或是预测被执行的;
因此如果控制一个存储在所述指令存储器中的条件转移的条件显示一种一致的循环行为,所述取出方法正确地预测所述条件。
19.一种如权利要求18所述的操作方法,其特征在于,所述预测步骤包括计算一个条件转移指令的控制条件在转变为一个第二状态之前保持在一种状态的次数,以确定所述条件转移指令的游程长度。
20.一种如权利要求19所述的操作方法,其特征在于,所述计数子步骤包括计数至一个预定的常数。
21.一种如权利要求20所述的操作方法,其特征在于,所述预测步骤预测,当一个条件转移指令的当前游程长度等于或超过所述预定常数时,控制所述条件转移指令的一个条件对于所述条件转移指令的最后两次或更多次数的取出是相同的。
22.一种如权利要求19所述的操作方法,其特征在于,所述计数子步骤包括从所述条件转移指令的具有一个条件的最后取出起计算它的取出次数,该最后取出具有的条件是一个已知或预测为是对那个对于所述条件转移指令的最后两次或更多次的连续取出保持不变的条件的求补的条件。
23.一种如权利要求22所述的操作方法,其特征在于,所述预测步骤包括从所述条件转移指令的具有一个条件的最后取出起存储它的取出次数,该最后取出具有的条件是一个已知或预测为是对那个对于所述条件转移指令的最后两次或更多次的取出保持不变的条件的求补的条件。
24.一种如权利要求23所述的操作方法,其特征在于,所述预测步骤包括把以前的游程长度与所述条件转移指令的当前取出次数进行比较,并假设所述控制条件对于所述条件转移指令的最后两次或更多次的取出是相同的,除非所述以前的游程长度等于所述当前取出次数。
25.一种如权利要求24所述的操作方法,其特征在于,所述预测步骤包括确定所述以前的游程长度是否等于或超过一个预定常数。
26.一种如权利要求25所述的操作方法,其特征在于,所述假设子步骤包括假设所述控制条件对于所述条件转移指令的最后两次或更多次的取出是相同的,除非所述以前的游程长度小于所述预定常数和等于所述当前取出次数。
27.一种如权利要求18所述的操作方法,其特征在于,所述预测步骤包括:
使一个第一二进制计数器与每个条件转移指令相关;
当取出一个条件转移指令时,如果所述转移指令不是所述转移指令的一个再取出并且已知或被预测为具有一个对于所述转移指令的最靠近的前面的取出的条件的求补控制条件,或者是一个再取出并且已经被预测具有与所述转移指令的一个最靠近的前面的取出的控制条件相同的所述控制条件,初始化一个相关的计数器;和
在所述转移指令的每次后续取出把所述计数器增1,除非所述计数器已经到达一个预定的最大计数。
28.一种如权利要求27所述的操作方法,其特征在于,所述预测步骤还包括:
使一个第二二进制计数器与每个条件转移指令相关,所述第二计数器的最大计数与所述第一二进制计数器相同;
当并且是仅当所述第二计数器保持一个零计数时,预测一个相关的转移指令的所述控制条件是求补条件;和
响应所述取出是否是一个由于在所述转移指令的较早取出的不正确预测而必需的再取出,在所述转移指令的每次取出修改所述第二二进制计数器。
29.一种如权利要求28所述的操作方法,其特征在于,如果所述取出不是所述转移指令的一个再取出,所述第二二进制计数器修改子步骤还包括:
如果第一二进制计数器保持在所述最大计数,设置所述第二二进制计数器为所述最大计数;
否则将所述第二二进制计数器减1,除非它保持一个零计数;和
如果所述第二二进制计数器保持一个零计数,把第一二进制计数器中的计数复制到所述第二二进制计数器中。
30.一种如权利要求28所述的操作方法,其特征在于,如果所述取出是一个所述转移指令的再取出,所述第二二进制计数器修改子步骤还包括:
把所述第一二进制计数器中的在较早取出时的计数复制到第二二进制计数器中,除非所述较早的取出的所述控制条件已经被预测为是对所述条件转移指令的最后两次或更多次的取出保持不变的那个条件的求补条件;和
如果所述较早的取出的所述控制条件已经被预测为是对所述条件转移指令的最后两次或更多次的取出保持不变的那个条件的求补条件,将所述第二二进制计数器设置为所述最大计数。
31.一种如权利要求30所述的操作方法,其特征在于,所述预测步骤包括:
恢复对于条件转移指令的最后两次或更多次数的取出保持不变的所述转移指令的控制条件,和在所述第一和第二二进制计数器中的用于正被再取出的所述转移指令的取出的最靠近的前面的所述转移指令的计数。
32.一种如权利要求13所述的操作方法,其特征在于,所述预测步骤包括:
在所述转移指令的每次取出时,存储对于条件转移指令的最后两次或更多次的取出保持不变的所述转移指令的控制条件,在所述第一和第二二进制计数器中的用于所述转移指令的计数,和一个所述转移指令的指令存储器地址。
33.一种在计算机中预测一个条件转移指令方向的方法包括:
确定达到一个预定限度的所述转移指令的一个第一游程的长度;
计算所述条件转移指令的下一个游程的长度;和
假设所述下一个游程长度与所述第一游程长度相同,除非所述下一个游程长度在等于所述第一游程长度之前结束或超过所述第一游程长度;
因此提高了正确地预测的条件转移指令的发生率。
34.权利要求33所述的方法,其特征在于该方法还包括:
如果所述下一个游程长度超过所述第一游程长度,那么假设所述下一个游程长度无限地继续。
35.权利要求34所述的方法,其特征在于该方法还包括:
如果所述下一个游程长度在等于所述第一游程长度之前结束,那么确定所述转移指令的所述下一个游程的长度;
计算跟随在所述下一个游程之后的所述条件转移指令的游程长度;和
假设所述跟随在所述下一个游程长度之后的游程与所述下一个游程长度相同,除非所述跟随在所述下一个游程之后的所述游程在等于所述下一个游程长度之前结束或超过所述下一个游程长度。
36.一种在一个计算机系统中预测控制一个转移指令的一个条件的结果的方法,其特征在于该方法包括:
确定所述控制条件在转变为一个第二状态前处于一个第一状态的次数;和
预测在转变为所述第二状态之前所述控制条件保留在所述第一状态相同的次数。
37.如权利要求36所述的方法,其特征在于,对每个条件转移指令执行所述确定和预测步骤。
38.权利要求36所述的方法,其特征在于,还包括根据所述预测步骤执行所述转移指令。
39.如权利要求38所述的方法,其特征在于,所述执行步骤包括:
根据所述控制条件的所述次数的第一状态执行所述转移指令;和
根据所述控制条件的所述第二状态执行所述转移指令。
40.如权利要求39所述的方法,其特征在于,在所述确定步骤中所述次数是有限的。
41.如权利要求40所述的方法,其特征在于,确定步骤包括:
维持所述条件转移指令的当前游程长度的一个第一计数;和
维持响应于所述第一计数和所述条件转移指令的最近完成的游程长度的一个第二计数。
42.如权利要求41所述的方法,其特征在于,所述第一计数是通过在每次正确地执行了所述条件转移指令时递增所述第一计数而保留的。
43.如权利要求41所述的方法,其特征在于,所述第二计数是通过在每次正确地执行了所述条件转移时,递减所述最近完成的游程长度的计数而保留的。
44.如权利要求40所述的方法,其特征在于,所述确定步骤包括:
通过在每次正确地执行了所述条件转移指令时递增所述第一计数维持所述条件转移指令的当前游程长度的一个第一计数;和
通过在每次正确地执行了所述条件转移指令时递减最近完成的所述条件转移指令的游程长度的计数保留响应于所述第一计数和所述最近完成的所述条件转移指令的游程长度的一个第二计数;
其中所述第二状态执行步骤是在所述第二计数达到零时进行的。
45.如权利要求40所述的方法,其特征在于,所述的预测步骤包括:
如果所述控制条件保持在所述第一状态超过了所述限定的次数,预测所述控制条件保持在所述第一状态。
46.如权利要求44所述的方法,其特征在于,所述的预测步骤还包括:
如果当错误地预测了所述执行的转移指令时所述当前游程长度超过了一个预定的限度,重新开始所述第一计数;和
把所述第二计数设置为用于所述条件转移指令的所述最近完成的游程长度的所述先前第一计数。
47.权利要求44所述的方法,其特征在于该方法还包括:
如果所述当前游程长度短于所述最近完成的游程长度,把用于所述条件转移指令的所述最近完成的游程长度的所述第一计数复制为所述第二计数;和
重新开始所述第一计数。
CNB951965549A 1994-12-02 1995-11-20 有限游程转移预测方法 Expired - Fee Related CN1159648C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US34851994A 1994-12-02 1994-12-02
US08/348,519 1994-12-02

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CNB2003101242940A Division CN1306394C (zh) 1994-12-02 1995-11-20 有限游程转移预测的方法

Publications (2)

Publication Number Publication Date
CN1168727A true CN1168727A (zh) 1997-12-24
CN1159648C CN1159648C (zh) 2004-07-28

Family

ID=23368385

Family Applications (3)

Application Number Title Priority Date Filing Date
CNB951965549A Expired - Fee Related CN1159648C (zh) 1994-12-02 1995-11-20 有限游程转移预测方法
CNB2003101242940A Expired - Fee Related CN1306394C (zh) 1994-12-02 1995-11-20 有限游程转移预测的方法
CNB2006100755280A Expired - Fee Related CN100507834C (zh) 1994-12-02 1995-11-20 有限游程转移预测

Family Applications After (2)

Application Number Title Priority Date Filing Date
CNB2003101242940A Expired - Fee Related CN1306394C (zh) 1994-12-02 1995-11-20 有限游程转移预测的方法
CNB2006100755280A Expired - Fee Related CN100507834C (zh) 1994-12-02 1995-11-20 有限游程转移预测

Country Status (7)

Country Link
US (1) US5926634A (zh)
JP (1) JP3725547B2 (zh)
KR (1) KR100371686B1 (zh)
CN (3) CN1159648C (zh)
GB (1) GB2309806B (zh)
TW (1) TW419630B (zh)
WO (1) WO1996017295A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100342326C (zh) * 1999-09-01 2007-10-10 英特尔公司 多线程处理器和操作处理器的方法
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438682B1 (en) * 1998-10-12 2002-08-20 Intel Corporation Method and apparatus for predicting loop exit branches
JP3683439B2 (ja) 1999-08-24 2005-08-17 富士通株式会社 分岐予測を抑止する情報処理装置および方法
US6823446B1 (en) * 2000-04-13 2004-11-23 International Business Machines Corporation Apparatus and method for performing branch predictions using dual branch history tables and for updating such branch history tables
WO2005006184A2 (en) * 2003-07-09 2005-01-20 Koninklijke Philips Electronics N.V. Method and system for branch prediction
US8144156B1 (en) 2003-12-31 2012-03-27 Zii Labs Inc. Ltd. Sequencer with async SIMD array
JP2007109116A (ja) * 2005-10-17 2007-04-26 Fukuoka Pref Gov Sangyo Kagaku Gijutsu Shinko Zaidan 推定装置、テーブル管理装置、選択装置、テーブル管理方法、そのテーブル管理方法をコンピュータに実現させるプログラム、及び、そのプログラムを記録する記憶媒体
US8640005B2 (en) 2010-05-21 2014-01-28 Intel Corporation Method and apparatus for using cache memory in a system that supports a low power state
US10007524B2 (en) * 2014-11-14 2018-06-26 Cavium, Inc. Managing history information for branch prediction
EP3933597A1 (en) * 2020-06-30 2022-01-05 Microsoft Technology Licensing, LLC Code flow trace compression employing branch prediction for implicit code flow data encoding in a processor

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4764861A (en) * 1984-02-08 1988-08-16 Nec Corporation Instruction fpefetching device with prediction of a branch destination for each branch count instruction
US5440704A (en) * 1986-08-26 1995-08-08 Mitsubishi Denki Kabushiki Kaisha Data processor having branch predicting function
GB8728493D0 (en) * 1987-12-05 1988-01-13 Int Computers Ltd Jump prediction
EP0463965B1 (en) * 1990-06-29 1998-09-09 Digital Equipment Corporation Branch prediction unit for high-performance processor
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
TW261676B (zh) * 1993-11-02 1995-11-01 Motorola Inc

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100342326C (zh) * 1999-09-01 2007-10-10 英特尔公司 多线程处理器和操作处理器的方法
CN100377078C (zh) * 2004-02-04 2008-03-26 威盛电子股份有限公司 修正管线作业微处理器中分支指令预测错误的装置

Also Published As

Publication number Publication date
JPH10510076A (ja) 1998-09-29
TW419630B (en) 2001-01-21
WO1996017295A1 (en) 1996-06-06
CN1881177A (zh) 2006-12-20
KR960025144A (ko) 1996-07-20
JP3725547B2 (ja) 2005-12-14
CN1306394C (zh) 2007-03-21
CN1159648C (zh) 2004-07-28
GB2309806A (en) 1997-08-06
US5926634A (en) 1999-07-20
CN100507834C (zh) 2009-07-01
CN1619488A (zh) 2005-05-25
KR100371686B1 (ko) 2003-03-31
GB2309806B (en) 2000-02-23
GB9710868D0 (en) 1997-07-23

Similar Documents

Publication Publication Date Title
CN1302376C (zh) 利用第二级分支预测表的分支预测的方法和设备
CN1150455C (zh) 强静态预测分支指令的优化执行
CN1109967C (zh) 多线程处理器中指令和关联读取请求的后台完成
US5553253A (en) Correlation-based branch prediction in digital computers
CN1138205C (zh) 以不同等待时间调度指令
CN1045024C (zh) 在超标量处理机系统中提高指令调度效率的方法
CN100557570C (zh) 多处理器系统
CN106990941A (zh) 使用寄存器重命名处理移动指令
CN1159648C (zh) 有限游程转移预测方法
CN101449238A (zh) 本地和全局分支预测信息存储
CN103250131A (zh) 包括用于早期远分支预测的影子缓存的单周期多分支预测
CN1492319A (zh) 计算机系统内部处理指令的装置
CN101356487B (zh) 动态自行衰变装置架构
CN102566976A (zh) 管理重命名寄存器的寄存器重命名系统和方法
CN1390329A (zh) 控制使用动态反馈的指令转换
CN102662640A (zh) 双重分支目标缓冲器和分支目标处理系统及处理方法
CN1873611A (zh) 分支预测控制
CN101211256A (zh) 一种专用双流水线risc指令系统及其操作方法
CN101156135A (zh) 用于管理返回堆栈的方法和设备
CN1512325B (zh) 一种计算机及一种产生并使用计算历史的方法
CN1761940A (zh) 具有数据旁路的流水线指令处理器
CN100524207C (zh) 多指令集数据处理系统内的条件分支指令编码
CN1124546C (zh) 一种超标量处理器及在该超标量处理器中完成指令的方法
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
CN1555005A (zh) 动态循环流水线的交叠式命令提交方法

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20040728

Termination date: 20131120