双调用/返回堆栈分支预测系统技术方案

技术编号:2879028 阅读:183 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种分支预测装置,其使用双调用/返回堆栈(dualcall/return stacks)以预测微处理器中的返回地址,该装置包括一第一调用/返回堆栈,在译码一指令以便知道其是否物理为返回指令之前,基于一指令高速缓存提取地址的一分支目标地址高速缓存(BTAC)中的一返回指令命中,而提供一假想返回地址。该假想返回地址在流水线初期即提供,而微处理器便假想地分支至该假想返回地址。稍后于流水线中,在该指令被译码且确认其为返回指令后,一第二调用/返回堆栈提供一非假想返回地址。一比较器比较该假想返回地址与非假想返回地址,若两个地址不相匹配,则微处理器便分支至非假想返回地址。(*该技术在2022年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及微处理器(microprocessor)的分支预测(branchprediction)的
,尤指分支目标地址(branch target address)的快取技术,特别涉及一种双调用/返回堆栈分支预测系统
技术介绍
计算机指令一般都储存于内存内可寻址的相连位置。中央处理单元(Central Processing Unit,CPU)或处理器由相连的内存位置提取这些指令,并加以执行。CPU从内存每提取一个指令,其内的程序计数器(program counter,简称PC)或指令指针(instruction pointer,简称IP)就会递增,使其内含序列(sequence)中下个指令的地址,此即为下个循序指令指针(next sequential instruction pointer,简称NSIP)。指令的提取、程序计数器的递增以及指令的执行便通过内存呈线性持续进行,直到遇到程控指令(program control instruction)为止。程控指令也称为分支指令(branch instruction),在执行时会改变程序计数器内的地址,并改变控制的流程。换言之,分支指令指定了改变程序计数器内容的条件。因执行一分支指令使程序计数器的值改变,会导致指令执行顺序的中断。这是数字计算机的一项重要特征,因为它提供对程序执行流程的控制,以及分支至程序的不同部分的能力。程控指令的例子包括跳转(jump)、条件跳转(conditional jump)、调用(call)以及返回(return)。跳转指令使CPU无条件地将程序计数器的内容改变至一特定值,这个值就是程序要继续执行的指令所在的目标地址。条件跳转指令使CPU去测试一状态缓存器(status register)的内容,或者可能比较两个值,而后基于测试或比较的结果,不是继续循序执行就是跳转至一新地址,称为目标地址。调用指令使CPU无条件地跳转至一新目标地址,而且储存程序计数器的值以使CPU可返回至先前离开的程序位置。返回指令使CPU去撷取程序计数器于前次调用指令执行时所存的值,并使程序流程返回至所撷取的指令地址。对早期的微处理器而言,程控指令的执行并不会造成处理上显著的延迟,因为这些微处理器被设计为一次只执行一个指令。如果所执行的指令是程控指令,在执行完毕之前,微处理器会知道它是否要分支,而如果是的话,它会知道分支的目标地址为何。因此,不论下个指令是循序的,或是分支的结果,皆会被提取和执行。现代的微处理器则非如此单纯。相反地,对现代的微处理器来说,在微处理器的不同区块或流水线阶段(pipeline stage)内同时处理数个指令乃很平常的事。Hennessy与Patterson将流水线化(pipelining)定义为“一种多个指令得以重叠执行的实作技术。”(引述自Computer ArchitectureA Quantitative Approach,2ndedition,by John L.Hennessy and David A.Patterson,Morgan KaufmannPublishers,San Francisco,CA,1996)作者接着对流水线化做了下列精彩的说明 “一个流水线就像是条装配线。在汽车的装配线上,有许多步骤,每个步骤对汽车的制造都有所贡献。每个步骤与其它步骤同时并行,然而是在不同的汽车上进行。在一计算机流水线中,每个步骤完成一个指令的部分,就像装配线,不同的步骤并行地完成不同指令的不同部分。每个这些步骤称为一管道阶段(pipe stage)或管道区段(pipe segment)。这些阶段一个连接着下一个,形成一个管道——指令从一端进入,历经这些阶段,然后从另一端出去,就像汽车在装配线上一样。” 因此,当指令被提取时,就被导入流水线的一端。指令于微处理器中历史流水线阶段,直到执行完毕。在这种流水线化的微处理器中,一分支指令是否会改变程序流程,通常都得等它到达流水线之后期阶段才能得知。然而在这之前,微处理器已经提取了其它指令,且正于流水线的早期阶段执行。如果一分支指令改变了程序流程,所有在这分支指令之后进入流水线的指令都必须被丢弃。此外,则必须提取此分支指令的目标地址上的指令。丢弃已在执行中的指令及提取目标地址上的指令,会造成微处理器在处理上的延迟,称为分支损失(branch penalty)。为减轻这种延迟问题,许多流水线化的微处理器在流水线的一早期阶段使用分支预测机制来预测分支指令。分支预测机制预测分支指令的结果或方向,即是否要进行分支。分支预测机制也预测分支指令的分支目标地址,即分支指令所要分支到的指令的地址。处理器接着就分支至所预测的分支目标地址,即依据分支预测提取后续的指令,这会比没有分支预测时来得早,因而若确定要进行分支,因此便降低了损失的可能性。这种用来快取先前所执行分支指令的目标地址的分支预测机制,称为分支目标地址高速缓存(branch target address cache,简称BTAC)或者分支目标缓冲器(branch target buffer,简称BTB)。在一简单的BTAC或BTB中,当处理器对一分支指令进行译码后,处理器便提供分支指令的地址给BTAC。若该地址命中BTAC且预测分支会进行,处理器就可以利用BTAC中的快取目标地址开始提取目标地址的指令,而非下个循序(sequential)地址的指令。相较于只预测是否采用分支的预测装置,像是分支历史表(branch history table,简称BHT),BTAC的好处是除了确定是否遇到一分支指令所需的时间外,它节省了计算目标地址所需的时间。典型的做法是分支预测数据(例如被采用/不被采用(taken/not taken))随着目标地址皆储存于BTAC。BTAC运用于流水线的指令译码阶段,这是因为处理器必须先判断分支指令是否存在。处理器使用BTB的一个例子是Intel Pentium II与PentiumIII处理器。现请参阅图1,其绘示Pentium II/III处理器100相关部分的方块图。处理器100包括一BTB134,用来快取分支目标地址。处理器100从一指令高速缓存(instruction cache)102提取指令,该指令高速缓存102快取了指令108与预译码(pre-decoded)分支预测数据104。预译码分支预测数据104可能包括像是指令类型或指令长度这样的讯息。指令从指令高速缓存102提取,并送到指令译码逻辑(instructiondecode logic)132,由其来译码或解译指令。一般是从下个循序提取地址112来提取指令。该下个循序提取地址112是由递增装置(incrementer)118将现行指令高速缓存102的提取地址122直接加上一指令高速缓存102的快取线的大小所得。然而,如果一分支指令已由指令译码逻辑132译码,接着控制逻辑(controllogic)114便选择性地控制一多工器(multiplexer)116选取BTB134所提供的分支目标地址,作为指令高速缓存102的提取地址122,而非选取下个循序提取地址112。控制逻辑114根据指令高速缓存102提供的预译码数据104本文档来自技高网...

【技术保护点】
一种用于一处理器中的装置,用以假想地执行一返回指令,其特征在于,该装置包括: 一第一调用/返回堆栈,提供一第一返回地址; 一第二调用/返回堆栈,提供一第二返回地址; 一比较器,对应至该第一与第二调用/返回堆栈,用以比较该第一与第二返回地址; 一控制逻辑,对应至该比较器,用以控制该处理器分支至该第一返回地址,若比较器显示该第一与第二返回地址不相匹配,则该控制逻辑接着控制处理器分支至该第二返回地址。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:葛兰亨利汤玛斯麦当劳
申请(专利权)人:智慧第一公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利