CN105867880B - 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 - Google Patents
一种面向间接跳转分支预测的分支目标缓冲器及设计方法 Download PDFInfo
- Publication number
- CN105867880B CN105867880B CN201610203289.6A CN201610203289A CN105867880B CN 105867880 B CN105867880 B CN 105867880B CN 201610203289 A CN201610203289 A CN 201610203289A CN 105867880 B CN105867880 B CN 105867880B
- Authority
- CN
- China
- Prior art keywords
- branch
- branch instruction
- target buffer
- btb
- 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 - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000009191 jumping Effects 0.000 claims abstract description 75
- 230000001419 dependent effect Effects 0.000 claims abstract description 17
- 229920006395 saturated elastomer Polymers 0.000 claims description 29
- 230000006399 behavior Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000011017 operating method Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30061—Multi-way branch instructions, e.g. CASE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明提出一种面向间接跳转分支预测的分支目标缓冲器及设计方法,该方法包括在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器填充操作,否则执行常规分支目标缓冲器填充操作;获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器分支预测操作,否则执行常规分支目标缓冲器预测操作。
Description
技术领域
本发明涉及处理器设计领域,特别涉及一种面向间接跳转分支预测的分支目标缓冲器及设计方法。
背景技术
计算机程序的执行体现为处理器对取指令、分析指令、执行指令和修改存储器几个步骤的重复执行,在处理器指令的分类中,有一类可以改变指令流向的指令称为分支指令,分支指令对于指令流在处理器上的执行效率有着至关重要的影响,对于非分支指令来说,指令执行是顺序的,即将要执行的下一条指令就是存储在当前指令之后的一条指令;对于分支指令来说,由于可能会引起整个指令流向的改变,只有当前分支指令执行完成之后,才能确定将要执行的下一条指令的存储地址。
分支指令分为直接跳转和间接跳转两种,直接跳转的分支指令跳转方向明确,可以根据指令内容直接计算出跳转目的地址;间接跳转的分支指令则需要执行一系列运算,根据运算结果进行条件判断,决定指令的下一步流向,即需要在多个目的地址中选择正确的跳转目的地址。
为了提高处理器执行性能,现代处理器设计都采用了分支预测技术,这种技术在分支指令执行完成之前,根据其跳转的历史记录来预测本次将要跳转的地址,对于分支指令来说,分支预测技术能够有效减少分支指令对流水线的阻塞,提高处理器流水线执行性能。
使用BTB(Branch Target Buffer,分支目标缓冲器)是辅助分支指令预测的常用方法,常见BTB结构如图1所示。BTB表中存放若干项分支指令跳转的历史记录,每项历史记录包括两部分,即标签(TAG)S101和分支指令跳转目的地址历史记录(简称跳转目的地址)S102,在分支预测时,通过当前指令PC(Program Counter)的低位索引BTB表,找到相关项后,比较当前指令PC的高位与TAG是否相等,如果相等则表示当前指令为分支指令且BTB表中有跳转目的地址的历史记录,则使用该跳转目的地址的历史记录作为当前指令的猜测目的地址;如果不相等则表示BTB表中未记录当前指令,该指令可能是分支指令的第一次执行,尚未记录到BTB中,需要等待分支指令条件计算完成,确定实际跳转目的地址后,将该指令的相关记录填写到BTB中。
在常规BTB设计中,仅保留分支指令最后使用的目的地址来辅助当前分支指令的跳转目的地址预测,然而,在间接跳转的分支指令中,其跳转目的地址常常会依赖寄存器的值甚至内存中的值,这种跳转目的地址部分来源于预先存储到寄存器或内存中的值的情况,往往导致每次跳转目的地址之间不存在明显的依赖关系,此时若仍然使用常规BTB的跳转历史分支预测方法,预测精度就会大大降低,从而导致处理器流水线执行效率降低,直接影响处理器性能。
解决上述问题的一个直观想法是简单地在BTB中存储分支指令的多个跳转目的地址,这会导致同一条分支指令PC可能对应多个跳转目的地址,也意味着分支预测时面临多个跳转目的地址可供选择,怎样选择合适的跳转目的地址作为预测地址成为一个问题,而该问题目前尚没有很好的解决方法。
综上所述,当前BTB分支预测方法在执行间接跳转的分支预测时存在局限性,对于分支指令的跳转目的地址部分来源于寄存器或内存中的值的情况,BTB无法精确执行分支预测。
发明内容
针对现有技术的不足,本发明提出一种面向间接跳转分支预测的分支目标缓冲器及设计方法。
本发明提出一种面向间接跳转分支预测的分支目标缓冲器设计方法,包括:分支目标缓冲器改进步骤,构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址,在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
分支目标缓冲器更新步骤,当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器填充操作,否则执行常规分支目标缓冲器填充操作;
分支目标缓冲器预测步骤,获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器分支预测操作,否则执行常规分支目标缓冲器预测操作。
二级硬件表Indirect_BTB包括多个项,每项包含三部分:标签、跳转目的地址以及记录所述跳转目的地址出现频次的饱和计数器。
所述分支目标缓冲器更新步骤中常规分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则更新所述分支指令的跳转目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配所述对应项,并填充相应的标签与所述分支指令的跳转目的地址;
两级分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器中的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据所述分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则将所述分支指令实际跳转目的地址填充到二级硬件表Indirect_BTB的跳转目的地址域中,在二级硬件表Indirect_BTB中找到的对应项的饱和计数器加1,如果在二级硬件表Indirect_BTB中未找到对应项,则在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配对应项,填充相应的标签,并在对应项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引,在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
所述分支目标缓冲器预测步骤中常规分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则获取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后对分支目标缓冲器中的项进行更新。
所述分支目标缓冲器预测步骤中两级分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址,如果在二级硬件表Indirect_BTB中未找到对应项,正常执行所述分支指令,待所述分支指令执行完成后对二级硬件表Indirect_BTB中的项进行更新;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后更新分支目标缓冲器与二级硬件表Indirect_BTB中的项。
本发明还提出一种面向间接跳转分支预测的分支目标缓冲器,包括:分支目标缓冲器改进模块,用于构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址,在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
分支目标缓冲器更新模块,用于当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器填充操作,否则执行常规分支目标缓冲器填充操作;
分支目标缓冲器预测模块,用于获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器分支预测操作,否则执行常规分支目标缓冲器预测操作。
二级硬件表Indirect_BTB包括多个项,每项包含三部分:标签、跳转目的地址以及记录所述跳转目的地址出现频次的饱和计数器。
所述分支目标缓冲器更新模块中常规分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则更新所述分支指令的跳转目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配所述对应项,并填充相应的标签与所述分支指令的跳转目的地址;
两级分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器中的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据所述分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则将所述分支指令实际跳转目的地址填充到二级硬件表Indirect_BTB的跳转目的地址域中,在二级硬件表Indirect_BTB中找到的对应项的饱和计数器加1,如果在二级硬件表Indirect_BTB中未找到对应项,则在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配对应项,填充相应的标签,并在对应项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引,在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
所述分支目标缓冲器预测模块中常规分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则获取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后对分支目标缓冲器中的项进行更新。
所述分支目标缓冲器预测模块中两级分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址,如果在二级硬件表Indirect_BTB中未找到对应项,正常执行所述分支指令,待所述分支指令执行完成后对二级硬件表Indirect_BTB中的项进行更新;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后更新分支目标缓冲器与二级硬件表Indirect_BTB中的项。
由以上方案可知,本发明的优点在于:
本发明通过增加二级寄存器和内存值索引分支指令跳转目的地址表,建立两级目的地址索引机制,解决了现有技术存在的问题,有效提高了间接跳转的分支预测精度,提高了处理器流水线执行性能。
附图说明
图1为常规BTB结构示意图;
图2为本发明中支持具有寄存器或内存依赖的间接跳转分支预测的BTB改进流程示意图;
图3为本发明中增加了Indirect_BTB后的BTB两级目的地址索引机制示意图;
图4为本发明中支持具有寄存器或内存依赖的间接跳转分支预测的BTB项更新流程示意图;
图5为本发明中支持具有寄存器或内存依赖的间接跳转分支预测的BTB预测流程示意图。
具体实施方式
本发明的目的是解决当前BTB分支预测方法在执行间接跳转的分支预测时存在的局限性,即对于间接跳转的分支指令的跳转目的地址依赖于寄存器或内存中的值的情况,BTB无法精确执行分支预测的问题。
为解决上述技术问题,本发明的一种面向间接跳转分支预测的分支目标缓冲器及设计方法,包括支持具有寄存器或内存依赖的间接跳转分支预测的BTB改进方法、支持具有寄存器或内存依赖的间接跳转分支预测的BTB项更新方法和支持具有寄存器或内存依赖的间接跳转分支预测的BTB预测方法三部分。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB改进方法,通过以下技术方案实现:
1.1在BTB结构中,对于间接跳转的分支指令,如果跳转目的地址部分来源于预先存储到寄存器或内存的值,则在BTB对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
1.2构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址。Indirect_BTB结构包括若干项,每项包含三部分:TAG、分支指令跳转目的地址以及记录该跳转目的地址出现频次的两位饱和计数器。其中,TAG域存放与分支指令跳转目的地址相关的寄存器或内存的值;两位饱和计数器记录相应跳转目的地址出现的频次(饱和计数器值介于0~3之间,初始值为0);
1.3在BTB结构中,对于直接跳转的分支指令,以及跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,BTB仍保持传统结构不变。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB项更新方法,通过以下技术方案实现:
2.1当一条分支指令执行完成后,若该分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规BTB填充操作不变,操作方法如下:
2.11如果根据该分支指令的PC索引比较找到了BTB中的对应项,则直接更新其跳转目的地址;
2.12如果根据该分支指令的PC索引比较未找到BTB中的对应项,则在BTB中重新分配该项,并填充相应的TAG和分支指令跳转目的地址。
2.2当一条分支指令执行完成后,若该分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级BTB填充操作,操作方法如下:
2.21如果根据该分支指令的PC索引比较找到了BTB中的对应项,则根据BTB对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB;再根据分支指令跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在Indirect_BTB中找到了对应项,则将该分支指令实际跳转目的地址填充到Indirect_BTB的跳转目的地址域中,对应项饱和计数器加1;如果在Indirect_BTB中未找到对应项,则在Indirect_BTB中顺序添加新项,将分支指令跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
2.22如果根据该分支指令的PC索引比较未找到BTB中的对应项,则在BTB中重新分配该项,填充相应的TAG,并在该项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引。在Indirect_BTB中顺序添加新项,将分支指令跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB预测方法,通过以下技术方案实现:
3.1处理器取值部件完成取指令操作;
3.2译码部件判断取出的指令是否为分支指令,是则查找BTB进行分支预测;否则正常执行该条指令;
3.3查找BTB进行分支预测时,若该分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规BTB分支预测操作不变,操作方法如下:
3.31如果根据该分支指令的PC索引比较找到了BTB中的对应项,则直接取其跳转目的地址作为该分支指令的预测目的地址;
3.32如果根据该分支指令的PC索引比较未找到BTB中的对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后进行BTB项更新。
3.4查找BTB进行分支预测时,若该分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级BTB分支预测操作,操作方法如下:
3.41如果根据该分支指令的PC索引比较找到了BTB中的对应项,则根据BTB对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB;再根据分支指令跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在Indirect_BTB中找到了对应项,则取其跳转目的地址作为该分支指令的预测目的地址;如果在Indirect_BTB中未找到对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后进行Indirect_BTB项更新;
3.42如果根据该分支指令的PC索引比较未找到BTB中的对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后更新BTB和Indirect_BTB项。
下面结合附图和具体实施方式对本发明做进一步详细描述,如下所示:
本发明的一种面向间接跳转分支预测的分支目标缓冲器设计方法,具体实施流程包括支持具有寄存器或内存依赖的间接跳转分支预测的BTB改进流程、支持具有寄存器或内存依赖的间接跳转分支预测的BTB项更新流程和支持具有寄存器或内存依赖的间接跳转分支预测的BTB预测流程三部分。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB改进流程,如图2所示:
步骤S201,在BTB结构中,对于间接跳转的分支指令,如果跳转目的地址部分来源于预先存储到寄存器或内存的值,则在BTB对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
步骤S202,构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址。Indirect_BTB结构包括若干项,每项包含三部分:TAG、分支指令跳转目的地址以及记录该跳转目的地址出现频次的两位饱和计数器。其中,TAG域存放与分支指令跳转目的地址相关的寄存器或内存的值;两位饱和计数器记录相应跳转目的地址出现的频次(饱和计数器值介于0~3之间,初始值为0);
步骤S203,在BTB结构中,对于直接跳转的分支指令,以及跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,BTB保持传统结构不变。
图3给出了增加了Indirect_BTB后BTB两级目的地址索引机制的示例。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB项更新流程,如图4所示:
步骤S401,当一条分支指令执行完成后,判断该分支指令是否为直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,是则转步骤S402;否则转步骤S403。
步骤S402,当分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规BTB填充操作不变,执行步骤如下:
步骤S402-1,根据该分支指令的PC索引比较查找BTB中的对应项,找到对应项则执行步骤S402-2,未找到对应项则执行步骤S402-3。
步骤S402-2,如果根据该分支指令的PC索引比较找到了BTB中的对应项,则直接更新其跳转目的地址。
步骤S402-3,如果根据该分支指令的PC索引比较未找到BTB中的对应项,则在BTB中重新分配该项,并填充相应的TAG和分支指令跳转目的地址。
步骤S403,当分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级BTB填充操作,执行步骤如下:
步骤S403-1,根据该分支指令的PC索引比较查找BTB中的对应项,找到对应项则执行步骤S403-2,未找到对应项则执行步骤S403-6。
步骤S403-2,如果根据该分支指令的PC索引比较找到了BTB中的对应项,则根据BTB对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB。
步骤S403-3,根据分支指令跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB的对应项,找到对应项则执行步骤S403-4,未找到对应项则执行步骤S403-5。
步骤S403-4,如果在Indirect_BTB中找到了对应项,则将该分支指令实际跳转目的地址填充到Indirect_BTB的跳转目的地址域中,对应项饱和计数器加1。
步骤S403-5,如果在Indirect_BTB中未找到对应项,则在Indirect_BTB中顺序添加新项,将分支指令跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
步骤S403-6,如果根据该分支指令的PC索引比较未找到BTB中的对应项,则在BTB中重新分配该项,填充相应的TAG,并在该项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引。
步骤S403-7,在Indirect_BTB中顺序添加新项,将分支指令跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
支持具有寄存器或内存依赖的间接跳转分支预测的BTB预测流程,如图5所示:
步骤S501,处理器取值部件完成取指令操作。
步骤S502,译码部件判断取出的指令是否为分支指令,是则执行步骤S503;否则正常执行该条指令。
步骤S503,判断该分支指令是否为直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,是则转步骤S504;否则转步骤S505。
步骤S504,查找BTB进行分支预测时,若该分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规BTB分支预测操作不变,执行步骤如下:
步骤S504-1,根据该分支指令的PC索引比较查找BTB中的对应项,找到对应项则执行步骤S504-2,未找到对应项则执行步骤S504-3。
步骤S504-2,如果根据该分支指令的PC索引比较找到了BTB中的对应项,则直接取其跳转目的地址作为该分支指令的预测目的地址。
步骤S504-3,如果根据该分支指令的PC索引比较未找到BTB中的对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后进行BTB项更新。
步骤S505,查找BTB进行分支预测时,若该分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级BTB分支预测操作,执行步骤如下:
步骤S505-1,根据该分支指令的PC索引比较查找BTB中的对应项,找到对应项则执行步骤S505-2,未找到对应项则执行步骤S505-6。
步骤S505-2,如果根据该分支指令的PC索引比较找到了BTB中的对应项,则根据BTB对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB。
步骤S505-3,根据分支指令跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB的对应项,找到对应项则执行步骤S505-4,未找到对应项则执行步骤S505-5。
步骤S505-4,如果在Indirect_BTB中找到了对应项,则取其跳转目的地址作为该分支指令的预测目的地址。
步骤S505-5,如果在Indirect_BTB中未找到对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后进行Indirect_BTB项更新。
如果根据该分支指令的PC索引比较未找到BTB中的对应项,则不对该分支指令目的地址进行预测,正常执行该分支指令,待该分支指令执行完成后更新BTB和Indirect_BTB项。
本发明还提出一种面向间接跳转分支预测的分支目标缓冲器,包括:分支目标缓冲器改进模块,用于构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址,在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
分支目标缓冲器更新模块,用于当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器填充操作,否则执行常规分支目标缓冲器填充操作;
分支目标缓冲器预测模块,用于获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器分支预测操作,否则执行常规分支目标缓冲器预测操作。
二级硬件表Indirect_BTB包括多个项,每项包含三部分:标签、跳转目的地址以及记录所述跳转目的地址出现频次的饱和计数器。
所述分支目标缓冲器更新模块中常规分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则更新所述分支指令的跳转目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配所述对应项,并填充相应的标签与所述分支指令的跳转目的地址;
两级分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器中的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据所述分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则将所述分支指令实际跳转目的地址填充到二级硬件表Indirect_BTB的跳转目的地址域中,在二级硬件表Indirect_BTB中找到的对应项的饱和计数器加1,如果在二级硬件表Indirect_BTB中未找到对应项,则在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配对应项,填充相应的标签,并在对应项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引,在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
所述分支目标缓冲器预测模块中常规分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则获取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后对分支目标缓冲器中的项进行更新。
所述分支目标缓冲器预测模块中两级分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址,如果在二级硬件表Indirect_BTB中未找到对应项,正常执行所述分支指令,待所述分支指令执行完成后对二级硬件表Indirect_BTB中的项进行更新;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后更新分支目标缓冲器与二级硬件表Indirect_BTB中的项。
Claims (10)
1.一种面向间接跳转分支预测的分支目标缓冲器设计方法,其特征在于,包括:分支目标缓冲器改进步骤,构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址,在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
分支目标缓冲器更新步骤,当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级分支目标缓冲器填充操作,若该分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器,或内存的值的间接跳转的分支指令,则执行常规分支目标缓冲器填充操作;
分支目标缓冲器预测步骤,获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令,则执行两级分支目标缓冲器分支预测操作,若该分支指令是直接跳转的分支指令,或者该分支指令是跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规分支目标缓冲器预测操作。
2.如权利要求1所述的面向间接跳转分支预测的分支目标缓冲器设计方法,其特征在于,二级硬件表Indirect_BTB包括多个项,每项包含三部分:标签、跳转目的地址以及记录所述跳转目的地址出现频次的饱和计数器。
3.如权利要求1或2所述的面向间接跳转分支预测的分支目标缓冲器设计方法,其特征在于,所述分支目标缓冲器更新步骤中常规分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则更新所述分支指令的跳转目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配所述对应项,并填充相应的标签与所述分支指令的跳转目的地址;
两级分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器中的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据所述分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则将所述分支指令实际跳转目的地址填充到二级硬件表Indirect_BTB的跳转目的地址域中,在二级硬件表Indirect_BTB中找到的对应项的饱和计数器加1,如果在二级硬件表Indirect_BTB中未找到对应项,则在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配对应项,填充相应的标签,并在对应项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引,在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
4.如权利要求1所述的面向间接跳转分支预测的分支目标缓冲器设计方法,其特征在于,所述分支目标缓冲器预测步骤中常规分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则获取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后对分支目标缓冲器中的项进行更新。
5.如权利要求1所述的面向间接跳转分支预测的分支目标缓冲器设计方法,其特征在于,所述分支目标缓冲器预测步骤中两级分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址,如果在二级硬件表Indirect_BTB中未找到对应项,正常执行所述分支指令,待所述分支指令执行完成后对二级硬件表Indirect_BTB中的项进行更新;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后更新分支目标缓冲器与二级硬件表Indirect_BTB中的项。
6.一种面向间接跳转分支预测的分支目标缓冲器,其特征在于,包括:分支目标缓冲器改进模块,用于构造二级硬件表Indirect_BTB,用于记录间接跳转的分支指令的多个跳转目的地址,在分支目标缓冲器中,对于间接跳转的分支指令,如果跳转目的地址来源于预先存储到寄存器或内存的值,则在分支目标缓冲器对应项跳转目的地址中添加指向二级硬件表Indirect_BTB的索引;
分支目标缓冲器更新模块,用于当一条分支指令执行完成后,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器填充操作,若该分支指令是直接跳转的分支指令,或者该分支指令是跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规分支目标缓冲器填充操作;
分支目标缓冲器预测模块,用于获取需要执行的所述分支指令,若所述分支指令是跳转目的地址依赖于寄存器或内存的值的间接跳转的分支指令则执行两级分支目标缓冲器分支预测操作,若该分支指令是直接跳转的分支指令,或者跳转目的地址不依赖于寄存器或内存的值的间接跳转的分支指令,则执行常规分支目标缓冲器预测操作。
7.如权利要求6所述的面向间接跳转分支预测的分支目标缓冲器,其特征在于,二级硬件表Indirect_BTB包括多个项,每项包含三部分:标签、跳转目的地址以及记录所述跳转目的地址出现频次的饱和计数器。
8.如权利要求6或7所述的面向间接跳转分支预测的分支目标缓冲器,其特征在于,所述分支目标缓冲器更新模块中常规分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则更新所述分支指令的跳转目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配所述对应项,并填充相应的标签与所述分支指令的跳转目的地址;
两级分支目标缓冲器填充操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器中的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据所述分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则将所述分支指令实际跳转目的地址填充到二级硬件表Indirect_BTB的跳转目的地址域中,在二级硬件表Indirect_BTB中找到的对应项的饱和计数器加1,如果在二级硬件表Indirect_BTB中未找到对应项,则在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则在分支目标缓冲器中重新分配对应项,填充相应的标签,并在对应项的跳转目的地址域中填充指向二级硬件表Indirect_BTB的索引,在二级硬件表Indirect_BTB中顺序添加新项,将所述分支指令的跳转目的地址及其依赖的寄存器或内存的值分别填充在新项的对应域中,对应项饱和计数器设置为1。
9.如权利要求6所述的面向间接跳转分支预测的分支目标缓冲器,其特征在于,所述分支目标缓冲器预测模块中常规分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则获取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后对分支目标缓冲器中的项进行更新。
10.如权利要求6所述的面向间接跳转分支预测的分支目标缓冲器,其特征在于,所述分支目标缓冲器预测模块中两级分支目标缓冲器分支预测操作包括如果根据所述分支指令的PC索引找到了分支目标缓冲器中的对应项,则根据分支目标缓冲器的对应项的跳转目的地址域中的索引找到二级硬件表Indirect_BTB,再根据分支指令的跳转目的地址依赖的寄存器或内存的值查找二级硬件表Indirect_BTB,如果在二级硬件表Indirect_BTB中找到了对应项,则取所述分支指令的跳转目的地址作为所述分支指令的预测目的地址,如果在二级硬件表Indirect_BTB中未找到对应项,正常执行所述分支指令,待所述分支指令执行完成后对二级硬件表Indirect_BTB中的项进行更新;
如果根据所述分支指令的PC索引未找到分支目标缓冲器中的对应项,则正常执行所述分支指令,待所述分支指令执行完成后更新分支目标缓冲器与二级硬件表Indirect_BTB中的项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610203289.6A CN105867880B (zh) | 2016-04-01 | 2016-04-01 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610203289.6A CN105867880B (zh) | 2016-04-01 | 2016-04-01 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105867880A CN105867880A (zh) | 2016-08-17 |
CN105867880B true CN105867880B (zh) | 2018-12-04 |
Family
ID=56627964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610203289.6A Expired - Fee Related CN105867880B (zh) | 2016-04-01 | 2016-04-01 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105867880B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10592248B2 (en) * | 2016-08-30 | 2020-03-17 | Advanced Micro Devices, Inc. | Branch target buffer compression |
CN111176729A (zh) * | 2018-11-13 | 2020-05-19 | 深圳市中兴微电子技术有限公司 | 一种信息处理方法、装置及计算机可读存储介质 |
WO2020199058A1 (zh) * | 2019-03-30 | 2020-10-08 | 华为技术有限公司 | 分支指令的处理方法、分支预测器及处理器 |
US11182166B2 (en) * | 2019-05-23 | 2021-11-23 | Samsung Electronics Co., Ltd. | Branch prediction throughput by skipping over cachelines without branches |
CN111061512B (zh) * | 2019-12-06 | 2022-11-15 | 湖北文理学院 | 分支指令的处理方法、装置、设备和存储介质 |
CN111898130B (zh) * | 2020-06-28 | 2024-01-19 | 中国科学院信息工程研究所 | 一种细粒度控制流完整性保护实现方法及*** |
CN117093267B (zh) * | 2023-10-17 | 2023-12-22 | 北京开源芯片研究院 | 分支指令跳转地址的存储方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397886A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存 |
CN103150142A (zh) * | 2011-12-07 | 2013-06-12 | 苹果公司 | 具有滞后的下一获取预测器训练 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040014988A (ko) * | 2001-06-29 | 2004-02-18 | 코닌클리즈케 필립스 일렉트로닉스 엔.브이. | 간접 브랜치 타겟 어드레스 예측을 위한 방법, 장치 및컴파일러 |
-
2016
- 2016-04-01 CN CN201610203289.6A patent/CN105867880B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1397886A (zh) * | 2001-05-04 | 2003-02-19 | 智慧第一公司 | 假想分支目标地址高速缓存 |
CN103150142A (zh) * | 2011-12-07 | 2013-06-12 | 苹果公司 | 具有滞后的下一获取预测器训练 |
CN104423929A (zh) * | 2013-08-21 | 2015-03-18 | 华为技术有限公司 | 一种分支预测方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105867880A (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105867880B (zh) | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 | |
US9898299B2 (en) | Dynamic thread sharing in branch prediction structures | |
KR101523020B1 (ko) | 결합된 분기 타깃 및 프레디킷 예측 | |
US6438673B1 (en) | Correlated address prediction | |
JP2018063684A (ja) | 分岐予測器 | |
US8707156B2 (en) | Render engine for spreadsheet | |
US10613869B2 (en) | Branch target address provision | |
CN110069285A (zh) | 一种检测分支预测的方法及处理器 | |
US8719788B2 (en) | Techniques for dynamically determining test platforms | |
CN105022739B (zh) | 数据的存储方法及装置 | |
US10481914B2 (en) | Predicting detected branches as taken when cumulative weight values in a weight table selected by history register bits exceed a threshold value | |
US10108424B2 (en) | Profiling code portions to generate translations | |
JP6796717B2 (ja) | 分岐ターゲットバッファの圧縮 | |
CN109308191B (zh) | 分支预测方法及装置 | |
WO2020199058A1 (zh) | 分支指令的处理方法、分支预测器及处理器 | |
WO2019196880A1 (en) | Accurate early branch prediction in high-performance microprocessors | |
CN109002330A (zh) | 一种识别uefi os启动项的方法、装置及设备 | |
US20190197149A1 (en) | Generating a data lineage record to facilitate source system and destination system mapping | |
US20070162895A1 (en) | Mechanism and method for two level adaptive trace prediction | |
CN110741344A (zh) | 用于分支预测机制的统计校正 | |
JP2015036934A (ja) | 演算処理装置及び演算処理装置の制御方法 | |
US9652245B2 (en) | Branch prediction for indirect jumps by hashing current and previous branch instruction addresses | |
US9086888B2 (en) | Using a plurality of tables for improving performance in predicting branches in processor instructions | |
CN108959454B (zh) | 一种提示子句指定方法、装置、设备及存储介质 | |
CN112527943B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181204 |
|
CF01 | Termination of patent right due to non-payment of annual fee |