CN1270233C - 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法 - Google Patents

远跳跃及远呼叫指令的退回分支预测机制的处理器及方法 Download PDF

Info

Publication number
CN1270233C
CN1270233C CN 200310123596 CN200310123596A CN1270233C CN 1270233 C CN1270233 C CN 1270233C CN 200310123596 CN200310123596 CN 200310123596 CN 200310123596 A CN200310123596 A CN 200310123596A CN 1270233 C CN1270233 C CN 1270233C
Authority
CN
China
Prior art keywords
far away
instruction
jump
microprocessor
destination address
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 - Lifetime
Application number
CN 200310123596
Other languages
English (en)
Other versions
CN1555006A (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.)
INTELLIGENCE FIRST CO
Original Assignee
INTELLIGENCE FIRST CO
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 INTELLIGENCE FIRST CO filed Critical INTELLIGENCE FIRST CO
Priority to CN 200310123596 priority Critical patent/CN1270233C/zh
Publication of CN1555006A publication Critical patent/CN1555006A/zh
Application granted granted Critical
Publication of CN1270233C publication Critical patent/CN1270233C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

远跳跃-呼叫分支指令的退回分支预测机制的处理器及方法,可减少微处理器于管线中发生暂停。微处理器包括远跳跃-呼叫分支目标缓冲器,可储存微处理器管线执行过的远跳跃-呼叫分支指令中的程序段基础与偏移量。若微处理器自存储器提取现行远跳跃-呼叫指令时命中,则索引指令产生于分支目标缓冲器中,且主推测性目标地址产生,且后续指令自主推测性目标地址处继续执行。若未中,该程序段基础与远跳跃目标偏移量产生退回推测性目标地址,该程序段基础与偏移量自现行远跳跃-呼叫指令中撷取。管线在没重新清洗下可继续执行。若远跳跃-呼叫指令被分解后,实际目标地址与推测性目标地址相同,则流程可继续执行。否则该管线需清洗,流程将重新开始。

Description

远跳跃及远呼叫指令的退回分支预测机制的处理器及方法
技术领域
本发明涉及微处理器(microprocessors)的领域,尤其是涉及一种用来执行具有远跳跃(far jump)及远呼叫(far call)指令的分支预测的装置与方法。
背景技术
在信息处理系统中,计算机指令(instructions)传统上储存于一存储器中的连续可寻址的位置上。当中央处理单元(Central Processing Unit,CPU)进行运算时,这些计算机指令将会自该连续的存储地址中被提取(fetched)出来并被加以执行(executed)。每一次的指令存取,位于中央处理单元内的一程序计数器(program counter)将会增加其计数以记录序列中下一个指令的地址。此即所谓的指令指针(Instruction Pointer,IP)。指令的存取、程序计数器的计数以及指令的执行是线性地连续通过存储单元,直到有一程控指令,例如有条件跳跃(jump on conditional)、无条件跳跃(nonconditional jump)或是呼叫指令出现为止。
当一程控指令被执行时,将改变位于程序计数器内的地址,并将导致控制流程改变。换句话说,程控指令详细记载了各种条件以改变程序计数器的内容。程序计数器的数值的改变是执行程控指令的结果,可中止后续其它指令的执行。这正是数字计算机重要的特点之一,其除了可控制整个程序执行的流程外,还可提供自一程序中分支出不同部分的功能。其中所谓的程控指令包括有:跳跃(Jump)、条件式地测试与跳跃(Test and Jump conditionally)、呼叫(Call)以及返回(Return)等,而这些指令也称为分支指令。
跳跃(Jump)指令可使中央处理单元无条件地改变程序计数器的内容而成为一特定的值,也就是改变为该程序可继续执行指令的目标地址值。条件式的测试与跳跃(Test and Jump conditionally)指令可有条件地使中央处理单元测试一状态缓存器(status register)的内容或比较两个值,由此测试或比较的结果,条件式测试与跳跃(Test and Jump conditionally)指令可以决定继续后续的执行或是跳跃至一新的地址,其中该新的地址称为目标地址(target address)。呼叫(Call)指令除了可使中央处理单元无条件地跳跃至一新的目标地址外,也可保留程序计数器的计数值以使中央处理单元回到其离开的程序位置。退回(Return)指令则可令中央处理单元找回(retrieve)上一次呼叫指令所保留的程序计数器的计数值,并使程序流程退回至其所找回到的指令地址。
早期的微处理器中,程控指令的执行并不会造成明显的延迟处理现象,这是因为早期微处理器的设计是每次只执行单一指令。若被执行的指令为一程控指令,则在其执行完毕前,微处理器便可知道该指令是否需要分支,且若其确定需要分支,微处理器也可知道该分支的目标地址。如此一来,下一个指令无论是否为接续,也无论其分支结果,指令的执行与提取自然不会有明显的延迟出现。
然而现今的微处理器已不再如此单纯,在微理器内的不同的区块(block)与管线阶段(pipeline stage)中同时处理数个指令,对新一代的微处理器来说已是非常普遍且容易的。Hennessy与Patterson定义管线操作技术(pipelining)为“一种实用技术,可在执行时使多重指令重叠”,摘录自John L.Hennessy与David A.Patterson所著的Computer Architecture:A Quantitative Approach,second edition(Morgan Kaufmann Publishers,San Francisco,Calif.,1996)。此外,作者还于下列的例子中阐明管线操作技术:
“管线(pipeline)就像一条生产线。在一条汽车的装配生产线上包括有许多步骤,于整个汽车的组装过程中,其每一个步骤均提供了相当的贡献。步骤与步骤之间是以并行的方式进行,即便在不同的汽车中也是如此。在计算机系统的管线中,其管线内的每一个步骤可完成一指令的某一部分。如同生产线一般,不同的步骤可并行地完成不同指令中的不同部分。其中每一个不同的步骤称为一个管道阶层(pipe stage)或称为管道分段(pipe segment)。而其中每个阶层均与下一个阶层相连以串成一管线,因此整个管线的流程为:指令自一端输入,经过每一个阶层后再自另一端输出,正如同汽车于装配生产线的过程一般。”
因此,当指令被提取后将被导入整个管线的其中一端。接着进入微处理器中进行各个管道阶层的运算,直到所有运算均结束为止。在此种管线结构的微处理器中,常无法预知一分支指令是否会改变整个程序流程,其往往需等到指令进入下一个阶层时才能确定。但此时微处理器早已提取其它指令,并已在执行管线中较前面阶层的其它指令了。若一分支指令真的导致了程序流程的改变,则该分支指令后续管线上的所有指令将会被放弃或清除(flushed)。此外,由该分支指令中的目标地址(target address)所记载的指令将必须被提取。只有此种放弃中间阶层指令,并由目标地址中提取指令的操作将会造成处理时的延迟现象。因此为了减轻此一延迟问题,许多管线结构的微处理器就在一管线内的前面阶层中使用分支预测机制,可预测分支指令的结果,并根据其分支预测结果提取下一个指令。
若分支预测逻辑正确地预测到分支的结果,则整个流程可从其所提取的该分支的目标地址继续下去。然而,如果其预测结果是错的,则整个管线将必须重新清除(flush),并从前面的分支指令重新开始执行。这种因错误预测所造成管线重新清除的情况是不期望发生的,因其所造成的管线重新激活势必将造成一定程度的时间延误。
如前所述,条件式或非条件式分支是由跳跃(jump)指令所执行。其中若跳跃指令所跳至的地址为同一个数据分段(data segment),则此跳跃指令称为近跳跃(near jumps),若其所跳至的地址为不同的数据分段,则此跳跃指令称为远跳跃(far jumps)。同理,若呼叫(call)的地址位于同一个数据分段,则此呼叫指令称为近呼叫(near calls),若是位于不同的数据分段,则此呼叫指令便称为远呼叫(far calls)。
在旧的x86管线结构微处理器中,当一远跳跃(far jump)或远呼叫(far call)被执行时,其管线将被清除并重新填写(refilled)。这个清除的操作会减慢微处理器一定程度的操作效能。具体而言,远跳跃或远呼叫指令的执行时,需要将一新程序段描述符(code segment descriptor)加载微处理器的程序段描述符缓存器(code segment descriptor register)中。下面所述的名词远跳跃-呼叫(far jump-call)为远跳跃(far jump)与远呼叫(far call)指令的缩写。远跳跃-呼叫(far jump-call)指令可用来指定带有一偏移量的新程序段描述符(code segmentdescriptor)。此一程序段描述符(code segment descriptor)包括有一新的程序段基地址(code segment base address),而此程序段基地址则可加上该偏移量以决定远跳跃呼叫(far jump-call)的目标地址(target address)。而当目标地址(targetaddress)被运算得出后,其可提供给下一个指令指针(Instruction Pointer,IP)以便于管线可提取和执行后续起始于目标地址(target address)的指令。
现在的x86管线结构的微处理器中,则是(1)不执行任何形式的用于远跳跃-呼叫(far jump-call)的推测性分支,或(2)利用分支目标缓冲器(branch targetbuffer,BTB)来预测远跳跃目标地址。(1)的情况下,当远跳跃(far jump)指令被执行时,其通常是在一较后级的管线阶层中,与远呼叫指令段相对应的新程序段描述符(code segment descriptor)将自存储器中被载出,并且远呼叫(farcall)的目标地址将可计算得出。只是如此一来,此一远跳跃(far jump)将造成一损失(penalty),其大约等于介于远跳跃指令被提取(fetched)和被分解(resolved)阶层(stage)间的管线内的阶层数目。传统管线结构微处理器所拥有的阶层数目不多,因此其损失(penalty)尚不足大到需要任何形式的用于远跳跃-呼叫的推测性分支逻辑。然而为了增快微处理器的处理能力,设计者往往朝向细分管线逻辑以增加更多阶层(stage)的目标迈进。因此,在现今具有多阶层的管线结构微处理中,没有远跳跃预测功能将会使得其于远跳跃呼叫(farjump-call)执行时发生过度的管线延迟现象。
而在(2)中,分支目标缓冲(branch target buffer,BTB)可于前面的管线阶层中提供一小型数组,而该小型数组中则存有相对应于N个(N为整数)最近被执行过的指令的程序段基础信道(code segment base entries)。一现行远跳跃指令的偏移量可用来索引(index)一远跳跃的分支目标缓冲器(BTB)。若有一相对应的信道存在(即BTB命中),则该信道的内容可提供给推测地址计算逻辑以计算出一推测性目标地址。而后续的指令因此可从前面的推测性地址中被提取。但其缺点是,若此一用来预测远跳跃目标位址的分支目标缓冲器(BTB)中并无相对应的信道存在(即所谓的BTB分支目标缓冲器未中,BTB miss),则微处理器将会暂停处理(stalled)直到该现行远跳跃指令被分解(resolved)为止。若其不使用预测逻辑,则同样地将会造成损失(penalty)的发生。
因此本发明提供一种技术,可于远呼叫和远跳跃在降低管线清除损失(penalty)的情况下执行分支预测(branch prediction)。且本发明还可在远跳跃-呼叫发生甚至是分支目标缓冲器发生未中情况时,提供一增加微处理器效能的机制。
发明内容
本发明的目的是提供一微处理器,其包括有一存储器以储存将被执行的指令。此微处理器也包括有一提取阶层,用以自该存储器中提取指令,其中该指令包括一现行程序段基础与偏移量的一现行远跳跃-呼叫分支指令,而该现行远跳跃-呼叫分支指令则是具有一现行程序段基础和偏移量。此外,该微处理器还包括有一远跳跃-呼叫分支目标缓冲器,此缓冲器位于该提取阶层中,其具有一测试机制以用来决定该缓冲器是否包含一命中现行远跳跃-呼叫分支指令的信息。该远跳跃-呼叫分支目标缓冲器是用来储存程序段基础与偏移量,其可提供给已于前面执行过的远跳跃-呼叫分支指令的目标地址。该微处理器还包括有一推测性目标地址产生器,其耦接至该远跳跃-呼叫分支目标缓冲器,该推测性目标地址产生器可在该缓冲器发生现行远跳跃-呼叫分支指令命中情况时,可自该现行程序段基础与偏移量中决定一主要推测性目标地址,其储存于该缓冲器中并与该现行远跳跃-呼叫分支指令相关;在缓冲器发生未中情况时,自相对应于现行远跳跃-呼叫分支指令的现行程序段基础与偏移量中产生一退回远跳跃-呼叫推测性目标地址。
为了达到上述目的,本发明提供一种用于微处理器中的分支预测方法,该微处理器具有一指令管线以执行指令,其中该方法包括:
自一存储器中提取一现行远跳跃-呼叫分支指令,该现行远跳跃-呼叫分支指令包括一现行程序段基础及偏移量。
测试一远跳跃-呼叫分支目标缓冲器以决定该缓冲器是否命中该现行远跳跃-呼叫分支指令,而该缓冲器可储存该现行程序段基础与偏移量以记录前面所执行过的远跳跃-呼叫分支指令的目标地址;以及
当该缓冲器发生现行远跳跃-呼叫分支指令命中情况时,可自该现行程序段基础与偏移量中决定一主要推测性目标地址,其储存于该缓冲器中并与该现行远跳跃-呼叫分支指令相关;
当该缓冲器发生未中情况时,依据该现行远跳跃-呼叫分支指令的该现行程序段基础与偏移量产生一退回远跳跃呼叫推测性目标地址。
本发明的其它特征及优点,在参阅本说明书的其余部分和附图后,可更加清楚。
附图说明
图1为一方框图,说明一传统微处理器中的各项管线阶层。
图2为本发明所揭示的微处理器的一方框示意图。
图3为一流程图,其说明本发明所揭示的微处理器管线中远跳跃分解逻辑的操作流程。
其中,附图标记说明如下:
100管线微处理器结构
105提取                     110转译阶层
112指令转译器               114分支预测逻辑
115暂存阶层                 120地址阶层
125数据/算数逻辑单元执行阶层
130回写阶层
200微处理器                 205提取阶层
210指令提取逻辑             215存储器
220指令指针                 225远跳跃-呼叫指令
230指令缓冲器               235索引产生器
240远跳跃分支目标缓冲器
245推测性目标地址计算器
250现行程序                 255多任务器
260转译阶层                 265暂存阶层
267临时文件                 270地址阶层
275执行阶层(数据/算数逻辑单元执行阶层)
277远跳跃呼叫分解逻辑
280回写阶层
300-360微处理器管线中远跳跃分解逻辑的操作流程
具体实施方式
以下的说明,是在一特定实施例及其必要条件的情况下而提供,可使一般熟悉此项技术人员能够利用本发明。然而,对熟悉此项技术人员而言各种对该较佳实施例所作的修改是显而易见,并且,在此所讨论的一般原理,也可应用至其它实施例。因此,本发明并不限于此处所展示与叙述的特定实施例,而是具有与此处所揭示的原理与新颖特征相符的最大范围。
图1为使用传统分支预测技术的一具有管线结构的微处理器100的方框示意图。微处理器100具有一提取阶层(fetch stage)105、一转译阶层(translatestage)110、一暂存阶层(register stage)115、一地址阶层(address stage)120、一数据/算数逻辑单元执行阶层(Data/ALU execution stage)125以及一回写阶层(write back stage)130。
以操作上来说,提取阶层(fetch stage)105可自一存储器(图标未标明)中提取将被微处理器100所执行的宏指令。转译阶层(translate stage)110则包括有一指令转译器(translator)112,此指令转译器112可用来将已提取的宏指令转译为相关联的微指令。转译阶层(translate stage)110是使用传统的分支预测逻辑114。而由指令转译器(translator)112所产生的每一个微指令则可指引微处理器100产生一特定的子任务(subtask),该子任务(subtask)是有关一被提取的宏指令中所指示的所有运算的完成。暂存阶层(register stage)115可用来找回(retrieve)临时文件(图标未标明)中微指令所指示的运算域(operands)以供管线(pipeline)中后续阶层用。地址阶层(address stage)120可用来计算由微指令所指示的存储器地址,其可用于数据储存与检索操作等。数据/算数逻辑单元执行阶层(Data/ALU execution stage)125则可自临时文件中所撷取的数据上执行算数逻辑单元(ALU),也可从存储器中读取或写入数据,而该存储器的地址是由地址阶层(address stage)120所计算得出。回写阶层(write backstage)130可将一数据操作或一算数逻辑单元(ALU)操作的结果写入临时文件中。因此总而言之,宏指令(macro instructions)是由提取阶层(fetch stage)105提取出来,再通过转译阶层(translate stage)110将其转译成微指令(microinstructions)。最后通过转译的微指令(micro instructions)接着进行后续的115至130阶层以完成所有的运算。此也就是由微处理器100所提供的管线(pipeline)操作的流程。
如前所述,转译阶层(translate stage)110是使用传统分支目标缓冲器(branch target buffer,BTB)以增加其管线的效能。只有此传统的微处理器分支预测技术存在有一明显的缺点,其容易造成管线在很多情况下发生重新清除(flush)的现象。而这些状况主要是因为执行逻辑(execution logic)根据一远跳跃呼叫(far jump-call)指令来计算目标地址(target address)所导致的。当清除(flushing)发生时,将会暂停(stall)微处理器的执行。
再如前所述,目前的x86管线结构化微处理器处理远跳跃-呼叫指令的方法有(1)不执行任何形式的推测性分支预测,或是(2)执行仅就其分支目标地址所指定的推测性分支等两种方式。在(2)的方式中,其使用一分支目标缓冲器(branch target bufier,BTB),此分支目标缓冲器则包含之前所取得的分支目标地址,若此时用于一特定远跳跃或呼叫的一信道不存在于该分支目标缓冲器(BTB)中,即当分支目标缓冲器发生未中(BTB miss)情况时,处理器的管线将会停滞直到该现行远跳跃指令被分解为止。而此一延误的损失结果将与完全不使用分支预测逻辑所造成的结果相当,这个结果称之为管线的清除(flushed)或重置(restarted)。
在传统代码(legacy code)方面,大部分的远跳跃-呼叫指令并不会改变现行程序段基础(current code segment base)。因此,即便发生一远跳跃分支目标缓冲器未中(BTB miss)的情况,此远跳跃指令的目标地址还是会落在与远跳跃指令本身相同的程序段(code segment)上,也就是现行程序段上。本发明揭示的技术是使用一先进的分支目标缓冲机制,当一分支目标缓冲器未中(BTB miss)的情况因一特定的远跳跃呼叫分支指令而发生时,其可提供一第二(secondary)或称为退回(fallback)分支目标地址。在此状态中,管线因为遭遇远跳跃和远呼叫指令所形成的暂停(stalls)现象将可有效的减少。
为提供更详细的说明,请参考图2,为前述的可有效增加管线效能的状态中,以推测方式执行远跳跃与远呼叫的一微处理器200的方框示意图。微处理器200包含一提取阶层(fetch stage)205。此提取阶层(fetch stage)205包括有指令提取逻辑(instruction fetch logic)210,而该指令提取逻辑210可从其所耦接的一存储器215中提取宏指令。具体而言,一指令指针220耦接至指令提取逻辑(instruction fetch logic)210,其可用来告知指令提取逻辑210下一个指令应该被提取的存储器地址。而该被提取的指令定义为远跳跃-呼叫指令225。在一较佳实施例中,指令提取逻辑(instruction fetch logic)210可提取远跳跃-呼叫指令,并将其输送至与指令提取逻辑210相耦接的一指令缓冲器(instruction buffer)230中。指令缓冲器230耦接至一索引产生器(indexgenerator)235,因此自缓冲器(buffer)230中所得的远跳跃呼叫指令就可提供给该索引产生器235。
微处理器200包含一远跳跃分支目标缓冲器(branch target buffer,BTB)240,如图所示,其耦接至索引产生器(index generator)235的远程索引输出端。与每一个自缓冲器230中所接收到的远跳跃呼叫指令相关的一远程索引可提供给分支目标缓冲器(BTB)240,其详细的情况将于后说明。分支目标缓冲器(BTB)240可储存N个最近被执行过的远跳跃-呼叫指令(N为整数)。而其中特别的是,分支目标缓冲器(BTB)240可储存对应于该N个最近被执行过的远跳跃呼叫指令的程序段基础(code segment base,CS Base)与偏移量(offset)。当索引产生器(index generator)235接收到一远跳跃呼叫指令时,其就可依据该指令的偏移量而产生用来输入至分支目标缓冲器(BTB)240所需的索引数据。在一较佳实施例中,索引产生器(index generator)235选自一特定远跳跃-呼叫指令的48位逻辑地址中的最低四个位,并以其做为进入分支目标缓冲器(BTB)240的远程索引。其它较上层的位将被去除。该最低的四个位就组成现行远跳跃指令的偏移量。换言之,该远程索引与现行远跳跃呼叫指令的偏移量一致。本发明的又一实施例中,此四个位的组合可扩增为八种形式以提供一具有八种方式的缓冲器,此八种缓冲器使用分支目标缓冲器(BTB)的逻辑结构(图形未表示),而该逻辑结构可控制进入每一个此八种方式的信道的内容、更新以及充填的操作。换句话说,此又一实施例为利用指令指针(instruction pointer,IP)中较低的四个位为一索引而具有八种形式的实施方式。
若一分支目标缓冲器命中(BTB hit)情况发生时,也就是若有相对应现行远跳跃呼叫指令偏移量的一分支目标缓冲器(BTB)240信道产生时,则分支目标缓冲器(BTB)240便可提供相对应的推测性程序段基础以及推测性偏移量给一推测性目标地址计算器245。推测性目标地址计算器245,如图所示耦接至分支目标缓冲器(BTB)240。而特别的是,分支目标缓冲器(BTB)240中的程序段基础(CS Base)输出、偏移量输出和未中输出(miss output)耦接至其所分别对应的推测性目标地址计算器245的输入端。索引产生器235包括一跳跃偏移输出,其耦接至推测性目标地址计算器245上以便现行远跳跃呼叫指令的偏移量可提供给计算器245。现行远跳跃-呼叫指令的程序段基础(CS Base)在图中以现行程序段基础(current CS base)250表示,其为推测性目标地址计算器245的一输入。
当分支目标缓冲器(BTB)240的未中输出(miss output)为低准位时,其表示一远跳跃-呼叫的分支目标缓冲器未中(BTB miss),也就是现行远跳跃-呼叫指令的偏移量不存在于分支目标缓冲器(BTB)240之中。在此情况下,分支目标缓冲器(BTB)240并无储存任何与现行远跳跃-呼叫指令相关联的目标地址(即程序段基础CS base与偏移量),其中远程索引(far index)已提供给该现行远跳跃-呼叫指令。而当分支目标缓冲器(BTB)240的未中输出(miss output)为高准位时,其表示一远跳跃呼叫的分支目标缓冲器命中(BTB hit),也就是现行远跳跃呼叫指令的偏移量存在于分支目标缓冲器(BTB)240中。在此情况下,分支目标缓冲器(BTB)240储存有与现行远跳跃呼叫指令相关联的目标地址(即程序段基础CS base与偏移量),其中该现行远跳跃呼叫指令可接收远程索引(far index)。当然,上述的高低准位可根据所选择的协议不同而相反。
若为一现行远跳跃-呼叫指令而自分支目标缓冲器(BTB)240中索引,其为分支目标缓冲器命中(BTB hit)情形时,一相对应的推测性程序段基础(codesegment base)以及推测性偏移量将被送至推测性目标地址计算器245中。而此计算器245接着就可利用该程序段基础(CS base)与偏移量而产生一推测性目标地址(speculative target address),此一推测性目标地址称为主推测性目标地址(primary speculative target address)。后续的运算也由此推测性目标地址继续执行。具体而言,推测性目标地址产生器245连接至一三端输入多任务器255的推测目标地址输入端。此多任务器255的输出端则耦接至下一个指针指令220的输入端。至于多任务器255的另外两个输入端则分别为分解目标地址(resolved target address)输入端与下一指令指针(next instruction pointer,NIP)输入端。相对应每一个指令进而可于此三个输入端中进行切换操作的信号,是由下一指令指针控制(NIP CTRL)信号所提供,此下一指令指针控制(NIPCTRL)信号则可提供给多任务器255。
有关分支目标缓冲器(BTB)远跳跃呼叫地址命中(hit)的情况,已于前面讨论过。接着,我们将讨论分支目标缓冲器(BTB)远跳跃呼叫地址未中(miss)的情况。在此情况下,利用现行远跳跃指令的偏移量来索引分支目标缓冲器(BTB)240并无法产生相对应于现行远跳跃呼叫指令的一信道。此时推测性目标地址计算器245可利用现行程序段基础(current code segment base)和远跳跃目标偏移量(far jump target offset)来计算退回(fallback)或次级(secondary)推测地址,而其中该远跳跃目标偏移量(far jump target offset)自现行远跳跃呼叫指令中撷取所得。因此当分支目标缓冲器未中(BTB miss)的情况发生时,一退回(fallback)或次级(secondary)目标地址可推测性地被计算得出,其可避免因无有效的推测目标地址而导致管路的重新清除(flush)。用于远跳跃-呼叫指令的目标地址(即程序段基础CS base与偏移量)极可能落于与该远跳跃指令本身相同的程序段(code segment)中。因此当上述情况发生时,管线重新清除(flushing)与其所造成的微处理器暂停(stalling)等情况将可有效地避免。
提取阶层(fetch stage)205耦接至一转译阶层(translate stage)260,此转译阶层260可将自提取阶层205所提取的每个宏指令转译成相关的微指令,而这些微指令则可完成该宏指令所指示要求的功能。
自转译阶层260所输出的该经转译的微指令放入暂存阶层(registerstage)265中。暂存阶层(register stage)265可找回(retrieve)临时文件267中的每个微指令所规定(specify)的操作数(operands)以供管线中后续的阶层所用。
暂存阶层265向前耦接至一地址阶层270,此地址阶层270具有地址逻辑,其可用来计算自暂存阶层265所接收到的微指令所指示的存储器地址以供数据储存和检索用。
地址阶层270向前耦接至执行阶层(execute stage)275,此执行阶层275也称为数据/算数逻辑单元执行阶层(Data/ALU execution stage)。执行阶层275可于自临时文件267所找回(retrieve)的数据上执行算数逻辑单元(ALU),也可根据地址阶层270中计算所得的存储器地址来读取/写入存储器。
执行阶层(execute stage)275包括远跳跃-呼叫分解逻辑(far jump-callresolution logic)277,此远跳跃-呼叫分解逻辑具有一清洗管线输出(flushpipeline output),当被触发时,其可使指令管线进入清洗状态。而当最后由执行阶层275执行远跳跃-呼叫指令时,远跳跃-呼叫指令的实际目标地址(actualtarget address)就可被加以决定与分解。远跳跃呼叫分解逻辑(far jump-callresolution logic)277可引入一测试信号来判定实际目标地址(actual targetaddress)是否与用于远跳跃呼叫的推测目标地址相同。若实际目标地址的确与推测目标地址相同,则分支预测正确,管线不需重新清除(flush)。此可避免微处理器的暂停(stalling)和延迟(delay)等现象。然而若实际目标地址与推测目标地址不相同时,则分支预测错误,管线将进入重新清洗。
如图所示,一回写阶层(write back stage)280耦接至执行阶层275。回写阶层280可将数据读取或算数逻辑单元(ALU)运算的结果写入临时文件267中。总而言之,宏指令是自存储器215中被提取阶层205所提取,接着被转译阶层260转译为微指令,之后这些微指令进入管线格式中进行后续的265到280的阶层运算。
图3为微处理器200提取阶层205所使用的预先分支预测(advancedbranch prediction)机制的流程示意图。方框300表示将指令指针提前,而方框305则表示在指令指针所指示的地址上提取一指令。在本实施例中,该被提取的指令即为一远跳跃或一远呼叫(远跳跃-呼叫)指令。方框310表示当一远跳跃-呼叫指令出现时,其可产生一索引数据(index)于该远跳跃分支目标缓冲器(BTB)240中进行索引,而此索引数据与特定的远跳跃-呼叫指令的偏移量相关。
判断方框315表示若一分支目标缓冲器命中(BTB hit)时,接着将一测试信号导入。换言之,其导入一测试信号来判断作为一索引(index)的偏移量(offset)是否已存在于分支目标缓冲器(BTB)240中。若该偏移量已存在于分支目标缓冲器(BTB)中,即为分支目标缓冲器命中(BTB hit),此时其相对应的推测性程序段基础(speculative code segment base)与推测性偏移量则由分支目标缓冲器(BTB)240传送至一推测性目标地址计算器(speculative target addresscalculator),其以方框320所表示。而该推测性目标地址计算器于推测性程序段基础上加上该推测性偏移量来得出推测性目标地址,如方框325所示。此推测性目标地址也称为主推测性目标地址(primary speculative targetaddress)。接着如方框330所示,提取位于该推测性目标地址上的指令。方框335则表示自该点开始,于不执行管线清洗的情况下继续后续的指令的执行,其表示一旦远跳跃-呼叫指令于管线内较后面的阶层中被执行与分解后,该远跳跃-呼叫指令最终将可获得。
若在判断方框315上发现作为索引(index)的远跳跃指令的偏移量并不存在于分支目标缓冲器(BTB)240中,即为分支目标缓冲器未中(BTB miss)。在此情形下,一退回(fallback)或次级(secondary)推测目标地址将可计算得出以避免管线的重新清洗。而推测性目标地址计算器则可将现行远跳跃-呼叫(current far jump-call)指令中的远跳跃-呼叫目标偏移量加入现行程序段基础(current code segment base)中而得出一推测目标地址,如方框340所示。而方框345则表示提取位于推测目标地址上的指令。因此,即便发生了分支目标缓冲器未中(BTB miss)的情形,其原本的情况下会导致管线重新清洗(flush),但在本发明的结构中,推测性目标地址仍然可得出,其可以在不重新清洗管线的情况下继续后续的指令执行,如方块350所示。更具体而言,该现行远跳跃呼叫指令可穿越指令管线继续传播直到远跳跃呼叫指令的实际目标地址(actual target address)被最终决定和分解为止,如方框350所示。判断方框355有一由远跳跃分解逻辑所导入的一测试指令,其用来判定远跳跃-呼叫中的实际目标地址是否与用于远跳跃-呼叫的推测目标地址相同。若实际目标地址与退回(fallback)推测目标地址相同,则所有状况良好,其代表分支预测正确且管线不需重新清洗。因此可有效地避免许多时钟轮回(clock cycles)的情况。执行流程也可以继续下去以回到预先指令指针方框(advance instructionpointer block)300。然而,若实际目标地址与退回(fallback)推测目标地址不相同,则分支预测错误且管线将重新清洗(flush),如方框360所示。
配合图2及图3,上述的内容是有关一装置与方法,其可提供具有远跳跃及远呼叫指令的退回分支预测机制的一处理器。而所述的实施例还可减少因执行远跳跃指令所造成的种种损失。此外,虽然本发明的内容以及其目的、特征和优点均已于前面的内容中详细说明,本发明仍包括有其它实施例。除了本发明中使用硬件的实施状态外,本发明也可实施于计算机可读程序代码(例如:软件)(computer readable program code)中,例如可实施于用以储存程序代码的计算机可用(如:可读)媒介(computer usable medium)上。此程序代码可实现本发明所揭示的功能、构成、形式、仿真与/或测试。举例来说,其可利用计算机可读程序代码来完成,而该计算机可读程序代码的形式则可为通用的程序语言(如C,C++等等)、GDSII格式或硬件描述语言(hardwaredescription languages,HDL),如Verilog HDL、VHDL、AHDL等等,也可为公知技术中其它种数据库、程序及/或电路撷存(circuit capture)工具等。而此程序代码也可直接建于任何所知的计算机可用媒介中,其包括有半导体存储器、磁盘与光盘(如CD-ROM,DVD-ROM等),也可内嵌于计算机可用(如:可读)传输媒介中(如:载波或任何其它种包括数字、光学或模拟基础的媒介)。就其本身而言,此程序代码可于通讯网路,如:Internet与Intranet中传输。本发明于前述所提及的功能及/或结构可于一内嵌程序代码(如:HDL,GDSII等等)的处理器中表现出来,也可转译为硬件形式成为整个集成电路上的特定部分。当然本发明还可以结合硬件与程序代码的形式来实施。
本发明的具体实施例已如前所述,但本发明并未受限于此。以上所述,仅为本发明的较佳实施例,不能以此限制本发明的范围,其只是提供给熟悉此项技术人员使用或制造本发明之用。凡依本发明权利要求在不脱离本发明的精神和范围内所做的均等变化及修饰均应视为本发明的进一步实施状况。
虽然本发明实施例是实现本发明的目的的最佳模式,但熟悉此项技术人员应该了解到的是,其在不脱离如权利要求书所定义的本发明的精神及范围内,可使用所揭示的观点及特定的具体实施例当作基础,来进行与本发明的目的相同的设计或修改其它结构。

Claims (14)

1.一种微处理器,其中包括:
一存储器,用来储存将被执行的指令;
一提取阶层,用来自该存储器中提取指令,而该指令包括具有一现行程序段基础与偏移量的一现行远跳跃-呼叫分支指令;
一远跳跃-呼叫分支目标缓冲器,位于该提取阶层中,其包括有一测试机制以决定该缓冲器中是否命中该现行远跳跃-呼叫分支指令,而该缓冲器可储存该现行程序段基础与偏移量以记录前面所执行过的远跳跃-呼叫分支指令的目标地址;以及
一推测性目标地址产生器,耦接至该远跳跃-呼叫分支目标缓冲器,并可在该缓冲器发生现行远跳跃-呼叫分支指令命中情况时,可自该现行程序段基础与偏移量中决定一主要推测性目标地址,其储存于该缓冲器中并与该现行远跳跃-呼叫分支指令相关;在该缓冲器发生未中情形时,在该现行远跳跃-呼叫分支指令相关的该现行程序段基础与偏移量中产生一退回远跳跃呼叫推测性目标地址。
2.如权利要求1所述的微处理器,其中该推测性目标地址产生器可将该现行程序段基础与该现行远跳跃-呼叫分支指令的偏移量相加,以算得该退回远跳跃呼叫推测性目标地址。
3.如权利要求1所述的微处理器,其中该微处理器包括一索引产生器,该索引产生器耦接至该远跳跃-呼叫分支目标缓冲器且于该现行远跳跃-呼叫分支指令的地址中移除一特定数目的高阶字节来产生一远索引数据。
4.如权利要求1所述的微处理器,其中该微处理器还包括有耦接至该提取阶层的一多层指令管线,可用来处理被提取的指令。
5.如权利要求4所述的微处理器,其中该指令管线还包括有一执行阶层用来于管线中执行指令。
6.如权利要求5所述的微处理器,其中该执行阶层可执行该现行远跳跃-呼叫分支指令以决定一实际远跳跃呼叫目标地址。
7.如权利要求6所述的微处理器,其中该执行阶层包括远跳跃分解逻辑,可用来比较该退回远跳跃呼叫推测性目标地址与该实际远跳跃呼叫目标地址。
8.如权利要求7所述的微处理器,其中该远跳跃分解逻辑可于该退回远跳跃呼叫推测性目标地址与该实际远跳跃呼叫目标地址不相同时清洗该管线,而若两者相同,则该远跳跃分解逻辑可允许指令的继续执行。
9.一种用于微处理器中的分支预测方法,该微处理器具有一指令管线以执行指令,其中该方法包括:
自一存储器中提取一现行远跳跃-呼叫分支指令,该现行远跳跃-呼叫分支指令包括一现行程序段基础及偏移量。
测试一远跳跃-呼叫分支目标缓冲器以决定该缓冲器是否命中该现行远跳跃-呼叫分支指令,而该缓冲器可储存该现行程序段基础与偏移量以记录前面所执行过的远跳跃-呼叫分支指令的目标地址;以及
当该缓冲器发生现行远跳跃-呼叫分支指令命中情况时,可自该现行程序段基础与偏移量中决定一主要推测性目标地址,其储存于该缓冲器中并与该现行远跳跃-呼叫分支指令相关;
当该缓冲器发生未中情况时,依据该现行远跳跃-呼叫分支指令的该现行程序段基础与偏移量产生一退回远跳跃呼叫推测性目标地址。
10.如权利要求9所述的方法,其中该远跳跃-呼叫分支目标缓冲器储存有一程序段基础及偏移量,以供N个各别的已执行的推测性远跳跃-呼叫分支指令使用,而其中N为整数。
11.如权利要求9所述的方法,于该缓冲器发生未中情况时还包括有一步骤,其可于该退回推测性目标地址中提取一目标指令,并开始执行该目标指令。
12.如权利要求11所述的方法,还包括有一步骤,于不清洗该指令管线的情况下继续该目标指令的执行。
13.如权利要求12所述的方法,还包括有一步骤,继续执行该现行远跳跃-呼叫分支指令,直到该现行远跳跃-呼叫分支指令决定出该现行远跳跃-呼叫分支指令的实际目标地址为止。
14.如权利要求9所述的方法,其中当该缓冲器发生命中的情况时,还包括有一在该主要推测性目标地址中提取一目标指令的步骤。
CN 200310123596 2003-12-24 2003-12-24 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法 Expired - Lifetime CN1270233C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200310123596 CN1270233C (zh) 2003-12-24 2003-12-24 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200310123596 CN1270233C (zh) 2003-12-24 2003-12-24 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法

Publications (2)

Publication Number Publication Date
CN1555006A CN1555006A (zh) 2004-12-15
CN1270233C true CN1270233C (zh) 2006-08-16

Family

ID=34338895

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200310123596 Expired - Lifetime CN1270233C (zh) 2003-12-24 2003-12-24 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法

Country Status (1)

Country Link
CN (1) CN1270233C (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8006070B2 (en) * 2007-12-05 2011-08-23 International Business Machines Corporation Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system
US8245017B2 (en) * 2009-02-12 2012-08-14 Via Technologies, Inc. Pipelined microprocessor with normal and fast conditional branch instructions
US8521996B2 (en) * 2009-02-12 2013-08-27 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
US9146739B2 (en) * 2012-06-14 2015-09-29 International Business Machines Corporation Branch prediction preloading
KR102635965B1 (ko) * 2015-06-26 2024-02-13 삼성전자주식회사 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법

Also Published As

Publication number Publication date
CN1555006A (zh) 2004-12-15

Similar Documents

Publication Publication Date Title
TWI621065B (zh) 處理器和將架構指令轉譯成微指令的方法
CN1296827C (zh) 一种使用数据地址增加组相关存储器的访问速度的方法
CN1147794C (zh) 具有静态转移预测支持的去耦取指令-执行引擎
US7117347B2 (en) Processor including fallback branch prediction mechanism for far jump and far call instructions
TWI574155B (zh) 資料預取方法、電腦程式產品以及微處理器
CN103699362B (zh) 微处理器及其执行的方法
EP1889152B1 (en) A method and apparatus for predicting branch instructions
JP3739491B2 (ja) プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御
US20050278505A1 (en) Microprocessor architecture including zero impact predictive data pre-fetch mechanism for pipeline data memory
JP3683808B2 (ja) 命令履歴情報を持つ基本キャッシュ・ブロック・マイクロプロセッサ
US7516312B2 (en) Presbyopic branch target prefetch method and apparatus
CN1127899A (zh) 具有推测指令取指的数据处理器及操作方法
JPH02234229A (ja) ソース・リスト、ポインタ・キューおよび結果キュー
JP2001297000A (ja) 1次発行キューと2次発行キューを持つマイクロプロセッサ
JP2002525741A (ja) 間接分岐ターゲットを計算するための方法
CN1716188A (zh) 具有预取指令的微处理器及预取至其高速缓存的方法
JP5579694B2 (ja) 復帰スタックを管理する方法および装置
CN112579175B (zh) 分支预测方法、分支预测装置和处理器核
WO2023165185A1 (zh) 分支预测方法、装置、处理器、介质及设备
KR20070001081A (ko) 분기 타겟 버퍼에서 엔트리들을 할당하는 방법 및 장치
TW201405425A (zh) 微處理器中存取及管理程式碼轉譯
CN1270233C (zh) 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法
JP3629551B2 (ja) 基本キャッシュ・ブロックを利用したマイクロプロセッサ
JPH0764862A (ja) 高速キャッシュ・ミス予測のための方法及び装置
CN110825442B (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
CX01 Expiry of patent term

Granted publication date: 20060816

CX01 Expiry of patent term