一种没有分支预测损失的分支处理方法与系统与流程

文档序号:13886895阅读:286来源:国知局

本发明涉及电子计算机和微处理器领域。



背景技术:

分支(branch)是处理器流水线性能损失的重要原因。典型的实现在分支成功时需要暂停流水线单数个或复数个周期。为了减少由此带来的性能损失,一个常用的解决方案是分支预测。分支预测猜测执行一条分支指令之后两支(branch)指令中的一支,能消除分支成功时的暂停流水线。如猜测错误,则中止执行猜测执行的一支指令而执行另一支指令。猜测错误导致分支惩罚,造成性能损失。

一个典型的实现如图1所示。图1是现有微处理器处理分支的实施例。图1中11为存储器,12为处理器核,13为分支目标缓冲器(btb),17为选择器。处理器核12输出指令地址19。指令地址19经选择器17控制指令存储器器11输出指令16供处理器核12执行。当处理器核12第一次执行一条分支指令且分支判断为成功分支的,系统将分支指令的地址/分支目标指令地址对,以及成功分支的历史纪录于btb13。

当处理器核12执行分支指令时,19上的分支指令地址也被送到btb13。如果与13中记录的一条分支指令地址匹配,则匹配的指令地址对中的分支目标指令地址15被送到选择器17的一个输入。此时19上为分支指令后的顺序指令地址,送到选择器17的另一个输入。13中的分支历史纪录14控制选择器17。如历史纪录为不分支,选择器17选择19上地址,指令存储器器11输出分支指令后的顺序指令供处理器核12执行。如历史纪录为分支,选择器17选择分支目标地址15,指令存储器器11输出分支目标指令供处理器核12执行。如果处理器核12执行分支指令产生的分支判断与btb中13中的分支历史纪录不同,则为分支预测错误,导致上述分支惩罚。此时也要更新btb13中的分支历史纪录。



技术实现要素:

本发明提出一种分支(branch)处理方法与系统,其特征是由存储器同时向处理器提供分支指令后两个分支的指令,由处理器核产生的分支判断选择,而避免分支预测以及分支预测错误导致的分支惩罚。

有益效果

本发明消除了分支预测错误导致的处理器性能损失。

附图说明

图1是现有微处理器处理分支的实施例;

图2是本发明所述同时提供分支指令后两支指令的实施例;

图3是本发明所述同时提供分支指令后两支指令的另一个实施例;

图4是本发明所述同时提供分支指令后两支指令的另一个实施例。

具体实施方式

以下结合附图和具体实施例对本发明提出的没有分支预测损失的分支处理方法与系统作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。

需说明的是,为了清楚地说明本发明的内容,本发明特举多个实施例以进一步阐释本发明的不同实现方式,其中,该多个实施例是列举式并非穷举式。此外,为了说明的简洁,前实施例中已提及的内容往往在后实施例中予以省略,因此,后实施例中未提及的内容可相应参考前实施例。

虽然该发明可以以多种形式的修改和替换来扩展,说明书中也列出了一些具体的实施图例并进行详细阐述。应当理解的是,发明者的出发点不是将该发明限于所阐述的特定实施例,正相反,发明者的出发点在于保护所有基于由本权利声明定义的精神或范围内进行的改进、等效转换和修改。同样的元器件号码可能被用于所有附图以代表相同的或类似的部分。

此外,在本说明书中以包含处理器核的存储器系统为例进行说明,但本发明技术方案也可以被应用于包含任何合适的处理器(processor)的存储器系统。例如,所述处理器可以是通用处理器(generalprocessor)中央处理器(cpu)、微控制器(mcu)、数字信号处理器(dsp)、图象处理器(gpu)、片上系统(soc)、专用集成电路(asic)等。

本发明所述的指令地址(instructionaddress)指的是指令在主存储器中的存储地址,即可以根据该地址在主存储器中找到这条指令。在此为简单明了起见,均假设虚拟地址等于物理地址,对于需要进行地址映射的情况,本发明所述方法也可适用。在本发明中,当前指令可以指当前正在被处理器核执行或获取的指令;当前指令块可以指含有当前正被处理器执行的指令的指令块

图2是本发明所述同时提供分支指令后两支指令的实施例。此实施例中,31为双读口存储器,32为处理器核,13为分支目标缓冲器(btb)。应当理解的是,这里列出各种部件的目的是为了便于描述,还可以包含其他部件,而某些部件可以被省略。这里的各种部件可以分布在多个系统中,可以是物理上存在的或是虚拟的,可以是硬件实现(如:集成电路)、软件实现或由硬件和软件组合实现。

处理器核32中流水线被分为前端流水线及后端流水线。从产生分支判断的流水线段开始到流水线最后一段为后端流水线,其余的流水线段为前端流水线。32中有两条前端流水线分别处理来自双读口指令存储器31的顺序指令20以及分支目标指令16。32中有一条共用的后端流水线。本发明公开中所述的各存储器各是存储器层次结构中的一个层次。所述存储器可以包含任何合适的存储设备,如:寄存器(register)或寄存器堆(registerfile)、静态存储器(sram)、动态存储器(dram)、闪存存储器(flashmemory)、硬盘、固态磁盘(solidstatedisk)以及任何一种合适的存储器件或未来的新形态存储器。

可以用多种方式向存储器提供所述分支指令后两支的地址。在本实施例中基于现有的功能块,以处理器核提供顺序指令地址,以顺序指令地址与btb中的分支指令地址匹配获得分支目标地址。处理器核32产生的指令地址19寻址指令存储器31的第一读口20向处理器核32中顺序前端流水线提供顺序指令。指令地址19也与btb中指令地址匹配。如匹配,以匹配所得到的分支目标地址15寻址指令存储器31的第二读口16向处理器核32中分支目标前端流水线提供分支目标指令。当分支判断尚未产生时,处理器核32继续经19提供分支指令后的顺序指令地址。19上的顺序指令地址寻址指令存储器31的第一读口20向处理器核32中顺序前端流水线提供顺序指令。两条前端流水线分别处理相应指令。当后端流水线中分支判断流水线段产生分支判断时,该分支判断选择两条前端流水线产生的两个中间结果中的一个供共用的后端流水线执行。后端流水线产生的指令地址19控制指令存储器31中第一读口20提供后续指令供处理器核32中顺序前端流水线及后端流水线执行直到下一条发自指令。

图3是本发明所述同时提供分支指令后两支指令的另一个实施例。此实施例中,11为指令存储器,32为处理器核,13为分支目标缓冲器(btb),17为选择器,21为指令读缓冲器irb。此实施例中指令存储器11只有一个读口。指令读缓冲器21中存储部分指令,起到指令存储器的另一个读口的作用。指令读缓冲可以用上述各种存储设备实现。存储器11与指令读缓冲21组合,等效于一个双读口存储器。指令读缓冲器21的容量可以是指令存储器中单数个指令块的一部分,单数个指令块或复数个指令块,甚至是等于存储器11。以下以单数个指令块为例说明,其余情形可以依此类推。前端流水线的流水线段数可以是‘0’段至复数段,以下以单数段为例说明。

irb21中内容为当前指令块。处理器核32输出的指令地址19中的块内偏移地址(offset)18寻址irb21。irb21向处理器核32中顺序前端流水线提供当前指令20。当当前指令为分支指令时,指令地址19也与btb中指令地址匹配。选择器17默认选择匹配所得到的分支目标地址15。15寻址指令存储器11的读口16向处理器核32中分支目标前端流水线提供分支目标指令16。此时指令地址19提供分支指令后一条,顺序指令的地址。顺序指令地址中的块内偏移地址18寻址irb21,irb21向处理器核32中顺序前端流水线提供顺序指令20。两条前端流水线分别处理相应指令。当后端流水线中分支判断流水线段产生分支判断时,该分支判断选择分支判断选择两条前端流水线产生的两个中间结果中的一个供共用的后端流水线执行。

如分支判断为不分支,分支判断选择顺序前端流水线产生的中间结果供后端流水线执行。存储器系统继续以指令地址19中的块内偏移地址18控制irb21向处理器核32顺序前端流水线提供顺序指令。当存储器系统检测到块内偏移地址18到达其最大值,即当18指向irb21中最后一条指令时,控制选择器17选择指令地址19。选择器17选择指令地址19上的顺序下一指令块地址。以19上地址寻址指令存储器11读出指令块经读口16存入irb21。块内偏移地址18控制irb21向处理器核32中顺序前端流水线提供顺序指令20。

如分支判断为分支,分支判断选择分支目标前端流水线产生的中间结果供后端流水线执行。分支判断也控制将指令存储器11经读口16输出的分支目标指令块存入irb21。块内偏移地址18(此时地址为分支目标指令之后一条指令的地址)控制irb21向处理器核32中顺序前端流水线提供顺序指令(此时为分支目标指令后的指令)。因为前段流水线段数为单数,因此前端流水线选择信号在一个周期后复原,选择顺序前端流水线产生的中间结果供后端流水线执行。

如处理器核32前端流水线的流水线段数是复数段,则可以在btb13输出的分支目标指令地址路径15中增添一个加法器,在分支目标指令地址基础上加上等于一条指令的字节数,向指令存储器11提供分支目标指令的后续指令地址。如此使得分支目标指令及其后续指令填满分支目标前端流水线。当分支判断为成功分支时,其选择分支目标前端流水线的周期数也等于前端流水线的段数,使得分支目标前端流水线中的复数条指令都被后端执行之后,再选择顺序指令流水线。

图4是本发明所述同时提供分支指令后两支指令的另一个实施例。此实施例中,11为指令存储器,12为处理器核,13为分支目标缓冲器(btb),17与22为选择器,21为指令读缓冲器irb。此为图3实施例中前端流水线段数为‘0’的实施例。图4处理器核12中分支判断23在流水线的第一段产生,因此不需要前端流水线,只需要单数条后端流水线,或者说单数条流水线不分前后端。

当处理器核12产生的分支判断23为不分支,23控制选择器22选择irb的21输出。块内偏移地址18寻址irb21向处理器核12提供顺序指令20供执行。当处理器核12产生的分支判断23为成功分支,23控制选择器22选择指令存储器11的输出16。btb13匹配指令地址19提供分支目标地址15。经选择器17寻址后15寻址指令存储器11向处理器核12提供分支目标指令16供执行。其余操作与图3实施例相同,不再赘述。图2实施例也可以使用图4实施例中前端流水线段数为‘0’的实施方式,以简化处理器核。

需要说明的是,本发明所述全部技术方案还可以被扩展到更多层次的存储系统中。根据本发明技术方案和构思,还可以有其他任何合适的改动。对于本领域普通技术人员来说,所有这些替换、调整和改进都应属于本发明所附权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1