有限游程转移预测方法

文档序号:80474阅读:517来源:国知局
专利名称:有限游程转移预测方法
发明领域本发明一般涉及流水线计算机系统,特别涉及一种计算机系统所采用的用于预测条件转移指令的方向的转移预测方法。
背景技术
执行条件转移所需的时间严重地限制了流水线处理器的性能。处理器一般是以顺序方式取出和执行指令的;即,在从地址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%的精度。



图1示出了现有技术中的转移预测机构的状态机图;图2示出了本发明的一个实施例的转移预测机构的框图;图3示出了图2中的预测模块的电路图;图4示出了图2中的更新模块运行的算法的流程图;图5说明了用于根据本发明的采用具有恒定游程长度的条件转移指令的一组指令的移动预测机构的运行;图6说明了用于根据本发明的采用具有变量游程长度的条件转移指令的一组指令的移动预测机构的运行。
具体实施方式
本发明的优选实施例与一种超标量处理器(superscalarprocessor)有关。一个超标量处理器每时钟周期取出并向流水线发布多个——在本例中多达四个——指令。由于并不是所有的处理器元件都与本发明相关,因此这些元件中的某些元件没有包括在本发明的说明中。Popescu等1990年12月5日申请的题为“处理器构造(ProcessorArchitecture)”序列号为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)确定指令解码FIFO25中的每个指令与先前发布的指令的关系。如何执行这些任务的具体细节与本发明无关。
当指令发布逻辑电路向后续流水线阶段发布指令时,它将那些指令从指令解码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把上计数器重新初始化为零。
图5显示了在一个恒定游程长度是3的转移上的转移预测器的稳态行为。最左边的列指示转移预测器的状态,“上”列指出上计数器的值,“下”列是下计数器的值,“预测”列是来自转移预测器的预测比特。最右边的列显示了转移的实际方向,其中1表示执行的转移,0表示未执行的转移(不过颠倒这些值也可获得同样的行为)。这一列显示了一个0后面跟随着三个1的反复模式。在这个场合,由于主要的方向是1,所以该四状态预测器总是预测1。它的预测是该状态的最重要的比特;由于相反的0的游程不长于1,所以只有这个状态机的状态的最不重要的比特不断变化。
如图5的第一行所示,下计数器是0,上计数器等于游程的长度,3。下计数器的零值使得转移预测器状态机给出的预测——它的预测是1——要由预测模块 16A-16D进行求补。当这个0转移被发布并写入转移储层20中时,更新模块38,响应上计数器小于最大值和下计数器是零的事实,在步骤109把上计数器复制到下计数器,并在步骤110把上计数器复位为零。
下一次取出这个转移时,从转移储层20或转移预测RAM 10读取图5的第二行中给出的值。这次预测模块16A-16D将看到一个非零下计数器值,并因此恢复1的不变更状态机预测。当发布这个转移时,更新模块38见到小于最大值的上计数器,和在零与最大值之间的中间值的下计数器。因此,该模块只是在步骤107简单递减下计数器的值,和在步骤108增加上计数器的值。在下两次取出和发布转移时重复这种相同的行为。如图5的行5所示,在这个1的游程的终点,下计数器再次达到零,并因此再次对预测求补和再初始化计数器,以便为下一个游程计数。
图6显示了当一个长度为3的游程后面紧跟着一个较短的游程时的行为,在长度为2的场合,它后面又跟随着一个长度为4的较长的游程。在图6的行1所示的状态中,已经正确地预测了前面的长度为3的游程的终点,如图5中所示。在假设下一个游程也是长度3的基础上重新初始化两个计数器(行2)。通过行3和4递增上计数器的值和递减下计数器的值。在行4中,由于预测的游程尚未完成,所以预测仍然是1,但实际方向是0。
在一个后续的时间,在行4中发布的转移的正确方向成为已知。转移修复机构放弃该转移和它后面的所有指令的效果。然后将重新取出和再发布该转移。重新取出的状态机和计数器的值(行4’所示)与它们的原始取出值(行4所示)相同。这是正确的,因为转移修复机构已经清除了包括对转移储层20的任何修改在内的原始发布的效果;由于该转移尚未被分辨,所以那些修改决不会写入转移预测RAM10中。
当修复后再发布转移时,更新模块38把再次成为1的预测与已知的0的正确方向相比较,以确定预测是错误的。在步骤101后沿路径210进行。由于上计数器小于最大值和下计数器不为零,更新模块38把上计数器值复制到下计数器,并把上计数器复位到0,如图6的行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。
如果没有转移游程预测器,图6中所示的例子中的所有转移都会被预测为1。因此,行4和9中的转移会被不正确地预测,但行7中的转移会被正确地预测。也就是说,每当一个比7短的游程后面跟随着一个较长的游程时,产生一个额外的转移修复。当一个长度为7或比7小的长度的游程后面跟随着一个较短的游程时,如行4中的例子,有或没有转移游程预测器都会发生一个修复。每当一个短的游程后面跟随着一个同样长度的游程时,转移游程预测器避开一个转移修复。
通过利用本发明,可以显著地改善对于恒定或缓变游程长度的转移的转移预测速率。速变游程长度的转移可能有较坏的性能,这取决于游程长度的恰当分布。
尽管以上是对本发明的优选实施例的完整的说明,但也可以使用各种不同的替代,更改和等同物。显而易见,通过对上述实施例进行适当的修改,本发明也同样适用。因此,上述的说明不应限制权利要求
所定义的本发明的范围。
权利要求
1.一种操作计算机系统从指令存储器取出在计算机系统中执行的指令序列的方法,所述序列包括无条件和条件控制转移指令,所述方法包括在每个时钟周期中,从所述的指令存储器在程序计数器中的地址读取至少一个指令;把来自所述的指令存储器中的每个转移指令分类为无条件的,条件的且已知被执行的,条件的且已知不被执行的,推测的;通过在转变为另一个状态之前计算保留在一个状态中的推测的转移指令的控制条件的次数,在所述序列中为每个推测的转移指令预测等于比所述控制条件游程长度大的最新游程长度的游程长度,以确定所述的推测的转移指令的游程长度达到了预定的数值;如果存在对应所述的预测步骤被分为无条件的,已知被执行的,或是预测被执行的第一转移指令的指示,则为随后的时钟周期的读取步骤替换所述程序计数器;由此如果所述的条件显示一种一致的循环行为,所述的操作方法正确地预测控制存储在所述指令存储器中的条件转移的控制条件。
2.根据权利要求
1所述的操作方法,其中所述预测步骤用于预测,当所述推测的条件转移指令的当前游程长度等于或超过所述预定数值时,控制推测的转移指令的条件对于所述推测的转移指令的最后两次或更多次数的取出操作是相同的。
3.根据权利要求
1所述的操作方法,其中所述程序计数器执行的计数子步骤包括从所述推测的转移指令的具有条件的从指令存储器的最后取出起计算它的取出次数,该最后取出具有的条件是一个已知或预测为是对于所述的推测的转移指令的最后两次或更多次的连续取出保持不变的条件求补的条件。
4.根据权利要求
3所述的操作方法,其中所述预测步骤包括从所述推测的转移指令的具有条件的从指令存储器的最后取出起存储它的取出次数,该最后取出具有的条件是一个已知或预测为是对于所述推测的转移指令的最后两次或更多次的取出保持不变的条件求补的条件。
5.根据权利要求
4所述的操作方法,其中所述预测步骤包括把以前的游程长度与所述推测的转移指令的当前取出次数进行比较,并假设所述控制条件对于所述推测的转移指令的最后两次或更多次的取出是相同的,除非所述以前的游程长度等于所述当前取出次数。
6.根据权利要求
5所述的操作方法,其中所述预测步骤包括确定所述以前的游程长度是否等于或超过预定数值。
7.根据权利要求
6所述的操作方法,其中所述假设子步骤假设所述控制条件对于所述推测的转移指令的最后两次或更多次的取出是相同的,除非所述以前的游程长度小于所述预定数值和等于所述当前取出次数。
8.根据权利要求
1所述的操作方法,其中所述预测步骤包括使第一二进制计数器与每个条件转移指令相关;当取出条件转移指令时,如果所述转移指令不是所述转移指令的再取出并且已知或被预测为具有对于所述转移指令的最靠近的前面的取出控制条件的求补控制条件,或者是再取出并且已经被预测具有与所述转移指令的最靠近的前面的取出控制条件相同的控制条件,初始化相关的计数器;和如果所述计数器的值没有达到预定的最大计数,在所述转移指令的每次后续取出把所述计数器增1。
9.根据权利要求
8所述的操作方法,其中所述预测步骤还包括使第二二进制计数器与每个条件转移指令相关,所述第二计数器的最大计数与所述第一二进制计数器相同;当且仅当所述第二计数器保持零计数时,预测相关的转移指令的所述控制条件是对于所述转移指令的最靠近的前面的取出控制条件的求补条件;和响应所述取出操作是由于所述转移指令的较早取出的不正确预测而必需的再取出操作时,在所述转移指令的每次取出操作时修改所述第二二进制计数器。
10.根据权利要求
9所述的操作方法,其中如果所述转移指令的取出操作不是所述转移指令的再取出操作,对所述第二二进制计数器修改的步骤还包括如果第一二进制计数器保持在所述最大计数,设置所述第二二进制计数器为所述最大计数;否则如果第二二进制计数器不是保持一个零计数,则将所述第二二进制计数器的值减1;和如果所述第二二进制计数器保持一个零计数,把第一二进制计数器中的计数复制到所述第二二进制计数器中。
11.根据权利要求
9所述的操作方法,其中如果所述转移指令的取出操作是所述转移指令的再取出操作,对所述第二二进制计数器修改的步骤还包括如果所述转移指令的较早的取出操作的控制条件没有被预测为是对所述条件转移指令的最后两次或更多次的取出保持不变的控制条件的求补控制条件,则将所述第一二进制计数器中的在较早取出时的计数复制到第二二进制计数器中;和如果所述转移指令的较早的取出操作的控制条件已经被预测为是对所述条件转移指令的最后两次或更多次的取出保持不变的控制条件的求补控制条件,则将所述第二二进制计数器设置为所述最大计数。
12.根据权利要求
11所述的操作方法,其中所述预测步骤包括恢复对于条件转移指令的最后两次或更多次数的取出保持不变的所述转移指令的控制条件,和在所述第一和第二二进制计数器中的,用于最靠近正被再取出的所述转移指令的取出之前的所述转移指令的计数。
13.根据权利要求
12所述的操作方法,其中所述预测步骤包括在所述转移指令每次被取出时,存储对于条件转移指令的最后两次或更多次的取出操作保持不变的所述转移指令的控制条件,存储在所述第一和第二二进制计数器中的用于所述转移指令的取出操作的计数,和存储所述转移指令的指令存储器地址。
14.根据权利要求
1所述的操作方法,其中所述的预定数值由七个组成。
专利摘要
本发明提供了一种可以提高正确地预测一个条件转移指令的方向的可能性的转移预测技术。本技术基于观察到许多转移都具有恒定的或缓变的游程长度,即几个连续的1的游程的长度是相同的这种事实。本技术利用每个转移的存储历史,两个小计数器(102,113),一个上计数器(102)和一个下计数器(113)增强了该历史。为了很准确的预测,这两个计数器(102,113)与一个现有技术的状态机转移预测器(101)协同操作。
文档编号G06F9/38GKCN1159648SQ95196554
公开日2004年7月28日 申请日期1995年11月20日
发明者戴维·L·伊萨曼, 戴维 L 伊萨曼 申请人:现代电子美国公司, 美塔福路技术公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1