CN105094750B - 一种多线程处理器的返回地址预测方法和装置 - Google Patents
一种多线程处理器的返回地址预测方法和装置 Download PDFInfo
- Publication number
- CN105094750B CN105094750B CN201410172663.1A CN201410172663A CN105094750B CN 105094750 B CN105094750 B CN 105094750B CN 201410172663 A CN201410172663 A CN 201410172663A CN 105094750 B CN105094750 B CN 105094750B
- Authority
- CN
- China
- Prior art keywords
- instruction
- return address
- return
- thread
- register
- 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.)
- Active
Links
Landscapes
- Advance Control (AREA)
Abstract
本发明涉及计算机技术领域,特别是一种多线程处理器的返回地址预测方法,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,为第一线程设置与其对应的第一返回地址寄存器,则所述方法包括:当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;其中,所述第一指令与第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整指令执行时刻的处理。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种多线程处理器的返回地址预测方法和装置。
背景技术
为了加快处理器的处理效率,目前的CPU大多采用多级流水线的结构,使得顺序执行的指令流可以并行地执行。当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生跳转,而这会打断流水线中指令的处理,因为处理器无法确定该分支指令的下一条指令,需要等待该分支指令执行完成才能够得到指令结果从而获取下一条进入流水线的指令。由于程序中的条件分支是根据程序指令在流水线的处理结果再执行的,所以当CPU等待指令结果时,流水线的前级电路也处于空闲状态等待分支指令,这样必然出现时钟周期的浪费。流水线越长,处理器等待的时间便越长,从而影响了处理器的处理效率。
分支预测(Branch Prediction)技术便是为解决这一问题而出现的。分支预测是一种解决处理分支指令(if-then-else)导致流水线失败的数据处理方法,是由CPU来判断程序分支的进行方向,能够加快运算速度。目前,大部分的处理器都采用了不同形式的分支预测机制,让条件分支指令的目标跳转方向和目标跳转地址可以在流水线的前端被预测,使得处理器可以预测性地取指令并执行指令。如果分支预测正确或者正确率较高的话,可以大幅提高处理器的性能,如果分支预测错误的话,意味着预测取出的指令不能被执行,错误的指令需要从缓冲区中清除,然后从正确的地址处再重新取指令并执行。
现有技术中,分支预测的硬件结构可以包括PHT(Pattern History Table,分支跳转历史表)、BTAC(Branch Target Address Cache,分支跳转目的地址缓存)、BTB(BranchTarget Buffer,分支目的地址缓冲区)和RAS(Return Address Stack,返回地址堆栈)。其中,RAS主要针对函数、子函数调用进行返回地址预测。RAS采用LIFO(Last In First Out,后进先出)结构,每次遇到RET指令(Return,即子程序返回指令)时均需要进行压栈和出栈操作。
发明人在实现本发明的过程中发现,现有技术存在的返回地址预测方法中,由于每个线程返回地址预测的需求不同,只为某些线程设置RAS,其余的线程则不对RET指令进行分支预测。其余线程在取指时遇到RET指令则停止取指,直到该RET指令执行完成,得到正确的返回地址,该线程才继续到返回地址处进行取指。然而,线程取指与该指令执行完成之间需要多个流水级,在一些处理器中这个延迟甚至可以达到20~30个处理器时钟周期。该方法对没有设置RAS的硬件线程执行RET指令的效率影响非常大。如果为每一个硬件线程均设置独立的RAS,则会带来硬件资源的严重耗费。这是因为,RAS的实现非常复杂,涉及PC(Program Counter,程序计数器)的恢复和堆栈队列指针的记录等操作,一旦RAS预测错误,RAS的恢复也很复杂,因此非常耗费硬件资源。
发明内容
为解决上述技术问题,本发明实施例提供了一种多线程处理器的返回地址预测方法和装置,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。
技术方案如下:
根据本发明实施例的第一方面,公开了一种多线程处理器的返回地址预测方法,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,为所述第一线程设置与其对应的第一返回地址寄存器,则所述方法包括:
当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;
当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;
其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理。
结合本发明实施例的第一方面,本发明实施例还具有第一种可能,其中,将所述执行结果对应的返回地址保存在与所述第一线程对应的第一返回地址寄存器中包括:
将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;
当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
结合本发明实施例的第一方面和本发明实施例的第一种可能,本发明实施例还具有第二种可能,其中,所述当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测包括:
当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;
当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
结合本发明实施例的第一方面和本发明实施例的第二种可能,本发明实施例还具有第三种可能,其中,在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,所述方法还包括:
将所述第一返回地址寄存器的标识位设置为无效。
结合本发明实施例的第一方面和本发明实施例的第二种可能,本发明实施例还具有第四种可能,所述方法还包括:
当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
结合本发明实施例的第一方面,本发明实施例还具有第五种可能,所述方法还包括:
为所述第二线程设置与其对应的第二返回地址寄存器;或者,
为所述第二线程设置与其对应的返回地址堆栈。
根据本发明实施例的第二方面,公开了一种多线程处理器的返回地址预测装置,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,所述第一线程与第一返回地址寄存器相对应,则所述装置包括:
执行单元,用于当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理;
取指单元,用于当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测。
结合本发明实施例的第二方面,本发明实施例还具有第六种可能,其中,所述执行单元包括:
返回指令存储单元,用于将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
标识位设置单元,用于当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;以及,当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
结合本发明实施例的第二方面和本发明实施例的第六种可能,本发明实施例还具有第七种可能,其中,所述取指单元具体用于:
当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
结合本发明实施例的第一方面和本发明实施例的第六种可能,本发明实施例还具有第八种可能,其中,所述标识位设置单元还用于:
在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,将所述第一返回地址寄存器的标识位设置为无效。
结合本发明实施例的第二方面和本发明实施例的第七种可能,本发明实施例还具有第九种可能,所述取指单元还用于:
当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
结合本发明实施例的第二方面,本发明实施例还具有第十种可能,所述装置还包括:
设置单元,用于为所述第二线程设置与其对应的第二返回地址寄存器;或者,为所述第二线程设置与其对应的返回地址堆栈。
本发明实施例的一个方面能够达到的有益效果为:本发明通过为多线程处理器执行的线程设置一个与其具有对应关系的返回地址寄存器(Return Address Register,RAR),将其作为分支返回目的寄存器LR的备份用于存储预测返回地址,从而能够实现利用所述返回地址寄存器RAR实现对硬件线程的返回地址预测,实现复杂度低,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。此外,本发明通过编译器识别出修改分支返回目的寄存器LR的第一指令以及其后的返回指令,并调整所述第一指令的执行时刻,从而使得能利用第一指令的执行结果实现了对所述返回指令的返回地址的预测,提高了预测的准确率,进而提高了处理器的处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的多线程处理器的返回地址预测方法第一实施例示意图;
图2为本发明实施例提供的多线程处理器的返回地址预测方法第二实施例示意图;
图3为本发明实施例提供的多线程处理器的返回地址预测方法应用场景示意图;
图4为本发明实施例提供的多线程处理器的返回地址预测方法应用场景示意图;
图5为本发明实施例提供的多线程处理器的返回地址预测装置一实施例示意图;
图6为本发明实施例提供的多线程处理器的返回地址预测装置另一实施例示意图。
具体实施方式
本发明实施例提供了一种多线程处理器的返回地址预测方法和装置,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。
发明概述和应用场景
下面首先对本发明的思想进行阐述。
发明人在实现本发明的过程中发现,现有技术存在的返回地址预测方法中,由于每个线程返回地址预测的需求不同,只为某些线程设置RAS,其余的线程则不对RET指令进行分支预测。其余线程在取指时遇到RET指令则停止取指,直到该RET指令执行完成,得到正确的返回地址,该线程才继续到返回地址处进行取指。然而,线程取指与该指令执行完成之间需要多个流水级,在一些处理器中这个延迟甚至可以达到20~30个处理器时钟周期。该方法对没有设置RAS的硬件线程执行RET指令的效率影响非常大。如果为每一个硬件线程均设置独立的RAS,则会带来硬件资源的严重耗费。这是因为,RAS的实现非常复杂,涉及PC(Program Counter,程序计数器)的恢复和堆栈队列指针的记录等操作,一旦RAS预测错误,RAS的恢复也很复杂,因此非常耗费硬件资源。
综上所述,多线程处理器中分支返回地址的预测,如果为每个硬件线程单独分配一个RAS消耗很大且不现实,但子程序返回地址的预测对每个线程又非常重要,因此需要一个实现代价小,且能提高硬件线程对于返回指令的执行效率的方法。
发明人经过长期和反复的研究发现:在对Linux内核反汇编源码的统计时,发明人发现大多数子程序返回指令前面都会紧挨着一条修改分支返回目的寄存器(LinkRegister,LR)的指令:以ARMv8为例,85.2%的返回指令(RET)前面都紧挨着一条后增寻址的Load Pair指令(例如ldp post-index),且该指令会修改分支返回目的寄存器(LR,LinkRegister)的值。对SPEC CPU2006测试平台代码统计表明:这一指令对的比例如下:GCC78.25%、astar70%,perlbench85.70%,gobmk78.02%。因此,可以利用修改分支返回目的寄存器的指令和RET指令的配对关系实现对RET指令的返回地址预测。
本发明实施例应用场景在于多线程处理器的RET类指令返回地址预测,多线程处理器一般包括IFU(Instruction Fetch Unit,取指单元)和IB(Instruction Buffer,指令缓存),取指单元IFU取出的每个线程的指令放在IB中等待流水线上的部件执行指令。其中,IFU一般内含BPU(Branch Prediction Unit,分支预测单元)。需要说明的是,以上仅为示例性场景,并不视为对本发明的限制。
本发明通过实施例通过在IFU或BPU中为某些没有RAS的硬件线程增加一个RAR(Return Address Register,返回地址寄存器)寄存器作为LR(link register,分支返回目的寄存器)的一个备份,该RAR能与LR同步更新。这样,利用RAR寄存器能预测这些没有RAS的硬件线程在大多数情况下的返回地址,且该发明不受函数嵌套层数的影响。具体地,本发明实施例提供的多线程处理器的返回地址预测方法和装置,通过在编译阶段识别RET指令前面会影响/修改LR(Link Register)的指令,并把该指令在指令序列中的执行顺序提前,将该提前执行指令的执行结果(即返回地址)同步更新至对应线程的RAR(Return AddressRegister)中,使IFU能在取到RET指令后通过对应的RAR预测返回地址。
示例性方法
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
参见图1,为本发明实施例提供的多线程处理器的返回地址预测方法第一实施例示意图。
一种多线程处理器的返回地址预测方法,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,为所述第一线程设置与其对应的第一返回地址寄存器,则所述方法包括:
S101,当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中。
S102,当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;
其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理。
具体实现时,多线程处理器至少能够同时执行第一线程和第二线程,为所述第一线程设置与所述第一线程具有对应关系的第一返回地址寄存器RAR。需要说明的是,也可以为第二线程设置与所述第二线程具有对应关系的第二返回地址寄存器RAR,或者,为第二线程设置返回地址堆栈RAS。本领域技术人员可以理解的是,当多线程处理器能够同时执行多个硬件线程时,可以为某些线程设置与其对应的RAS,对于其他没有设置RAS的每一个硬件线程均可以为其设置一个与其具有对应关系的返回地址寄存器RAR。当然,也可以根据需要为其中一些硬件设置与其对应的返回地址寄存器RAR。
当多线程处理器在执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将执行结果保存在所述LR中以及与第一线程对应的第一返回地址寄存器RAR中。其中,所述第一指令对应第一线程。其中,第一指令例如可以包括:Load Pair指令、BL指令(Branch and Link)等,只有是会影响或修改LR的指令即可,例如读写LR的指令等,本发明在此不进行限定。需要说明的是,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整指令执行时刻的处理。例如,当编译器进行静态编译处理时,如果能识别出修改LR的第一指令以及在第一指令之后的RET指令组成的指令对,则可以调整所述指令对中的第一指令的执行时刻,例如可以包括:编译器将该指令向指令序列前方移动,直到出现最早的修改LR的指令为止。其中,修改LR的第一指令例如可以包括:当多线程处理器的第一线程执行单元(Funciton Unit)在执行指令序列的指令时,当确定执行的指令类型为修改所述分支返回目的寄存器LR的第一指令时,则在提交所述第一指令的执行结果时,保存所述执行结果对应的返回地址至LR以及与第一硬件线程对应的RAR中。
具体实现时,将所述执行结果对应的返回地址保存在与所述第一线程对应的第一返回地址寄存器中包括:将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
具体实现时,当多线程处理器的取指单元IFU读取到与所述第一线程对应的返回指令时,则利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测。需要说明的是,IFU在取指时可以确定获取到的返回指令RET指令对应的线程,根据所述线程的线程号即可以确定与所述线程对应的返回地址寄存器RAR。然后,可以利用所述返回地址寄存器RAR中保存的返回地址进行返回预测。具体地,当多线程处理器的取指单元IFU在读取到与所述第一线程对应的返回指令时,则判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。而后,所述多线程处理器的取指单元IFU则可以利用所述预测返回地址指向的地址处获取下一条指令。进一步地,所述多线程处理器将所述第一返回地址寄存器的标识位设置为无效。
进一步地,当多线程处理器的取指单元IFU确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
在本发明这一实施例中,通过为多线程处理器执行的线程设置一个与其具有对应关系的返回地址寄存器RAR,将其作为分支返回目的寄存器LR的备份用于存储预测返回地址,从而能够实现利用所述返回地址寄存器RAR实现对硬件线程的返回地址预测,实现复杂度低,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。此外,本发明通过编译器识别出修改分支返回目的寄存器LR的第一指令以及其后的返回指令,并调整所述第一指令的执行时刻,从而使得能利用第一指令的执行结果实现了对所述返回指令的返回地址的预测,提高了预测的准确率,进而提高了处理器的处理效率。
参见图2,为本发明实施例提供的多线程处理器的返回地址预测方法第二实施例示意图。
S201,为硬件线程设置与其对应的RAR寄存器。
具体实现时,可以在每个硬件线程中增加一个RAR寄存器,该寄存器用于记录子程序返回地址的预测值,RAR寄存器实际上是LR的一个备份,也相当于深度为1的RAS,同时每个RAR设置一个有效标识位RAR Valid Bit需要说明的是,在多线程处理器中,可以只针对那些没有RAS的硬件线程设置RAR。
S202,编译器在静态编译识别出“修改分支返回目的寄存器LR的第一指令+返回指令RET指令”的指令对,调整所述指令对中“修改分支返回目的寄存器LR的第一指令”的执行时刻。
具体实现时,以ARMV8为例,所述指令对具体可以为:
(1)ldp x29,x30,[sp],#imm//其中x30是ARMv8种的LR,该指令用于修改分支返回目的寄存器LR。
(2)RET //返回指令
当编译器识别出所述指令对时,调整指令对中“修改分支返回目的寄存器LR的第一指令”执行的时刻,即编译器将该指令向指令序列前方移动,直到出现最早的会读/写LR的指令为止。
S203,硬件线程的执行单元在执行所述修改分支返回目的寄存器LR的第一指令并提交所述指令的执行结果时,将执行结果对应的返回地址存储至LR和所述硬件线程对应的RAR中。
具体实现时,硬件线程的执行单元在提交第一指令后,将执行结果对应的返回地址存储在LR和所述硬件线程对应的RAR中。并判断在指令缓存IB中、所述第一指令之后是否存在返回指令。当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。具体地,当硬件线程的执行单元在判断在该指令(即修改LR的第一指令)之后的RET指令还没有从ICache取出进入指令缓存IB,则设置对应RAR的有效标识位RAR Valid Bit;若该指令之后的RET指令已经进入IB,则不置位RAR有效标识位,因为该RET指令已经过了IFU取指阶段,来不及进行返回地址预测。
S204,多线程处理器的取指单元IFU在取指时确定读取到与所述第一线程对应的返回指令时,根据与第一线程对应的RAR的有效标识位确定是否进行返回地址预测。
S205,当多线程处理器的取指单元IFU确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
具体实现时,若RAR的有效标识位Valid Bit有效,则根据RAR中保存的返回地址预测返回地址,即将RAR保存的返回地址作为所述RET指令的预测返回地址,而后清除RAR的有效标识位Valid Bit,从RAR指向的地址处取下一条指令。
S206,当多线程处理器的取指单元IFU确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
具体地,若第一返回地址寄存器的RAR标识位Valid Bit无效,则IFU不进行预测,直到该RET指令执行完成得到真正的返回地址才继续取指。需要说明的是,需要判断RARValid Bit的原因在于,在有些指令序列中,有可能编译器并不能将LDP指令(即修改LR的指令)前移很长的距离(即LDP和RET指令之间的间隔不够),因此在LDP指令提交时,有可能IFU已经将RET指令取回并放入IB中,该RET指令是不能根据RAR来预测返回地址的。其后的RET指令也不能和该LDP配对,因此不应该改写RAR。
下面参照图3和图4对一具体应用场景实施例进行说明。下面将以ARMv8为例讲述编译器的优化方法及RAR如何设置和使用。
参见图3和图4,为本发明实施例提供的多线程处理器的返回地址预测方法应用场景示意图。其中,IRU为取指单元,BPU为分支预测单元,每个线程具有独立的IB,例如线程0Thr0对应Thr0IB,线程1Thr1对应Thr1IB,线程31Thr31对应Thr31IB等,以此类推。Function Unit为硬件线程的执行单元。
如图3所示,编译器静态编译时识别出“ldp x29,x30,[sp],#176”指令,并将该指令提前至最近的需要修改LR(x30)或X29寄存器的指令之后。在本例中为图示的BL指令(Branch and Link),该指令跳转到目标地址,并将返回地址存入LR中。
如图4所示,该处理器中有32个硬件线程,每个线程有1个独立的IB,只有线程0设置了RAS,对于线程1~31,在IFU中为这些线程增加1个RAR,并包含对应的有效标识位ValidBit。如图3所示,只有线程0Thr0设置了RAS,线程1Thr1至线程31Thr31均分别设置了与之对应的RAR。
对于线程1,在其执行完“ldp x29,x30,[sp],#176”指令提交前,判断线程1的IB中是否有进入新的RET指令,若没有,说明IFU还没有取到该线程的RET,该RET指令仍然来得及进行预测。该ldp指令可以正常提交,更新RAR和相应的Valid Bit标识。
对于线程31,其执行完“ldp x29,x30,[sp],#imm”指令提交前,检测到线程31的IB中已经进了RET指令,该RET指令已经过了BPU的分支预测阶段,来不及进行预测,因此,该ldp的执行结果只更新RAR寄存器,并不置位Valid Bit标识。
最后在IFU取值时,遇到RET指令,则检测RAR Valid Bit,若该比特有效,则根据RAR的值所对应的地址进行取指,若该比特无效,则暂停对该线程的取指,直到该RET指令执行完成,得到正确的返回地址,再恢复对该线程的取指。
示例性装置
参见图5,为本发明实施例提供的多线程处理器的返回地址预测装置一实施例示意图。
一种多线程处理器的返回地址预测装置,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,所述第一线程与第一返回地址寄存器相对应,则所述装置包括:
执行单元501,用于当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理;
取指单元502,用于当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测。
进一步的,所述执行单元包括:
返回指令存储单元,用于将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
标识位设置单元,用于当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;以及,当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
进一步的,所述取指单元具体用于:
当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
进一步的,所述标识位设置单元还用于:
在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,将所述第一返回地址寄存器的标识位设置为无效。
进一步的,所述取指单元还用于:
当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
进一步的,所述装置还包括:
设置单元,用于为所述第二线程设置与其对应的第二返回地址寄存器;或者,为所述第二线程设置与其对应的返回地址堆栈。
参见图6,为本发明实施例提供的多线程处理器的返回地址预测装置另一实施例示意图。
图6描述了本发明另一个实施例提供的多线程处理器的返回地址预测装置的结构,包括至少一个处理器601(例如CPU),存储器602,和至少一个通信总线603,用于实现这些装置之间的连接通信。处理器601用于执行存储器302中存储的可执行模块,例如计算机程序。存储器602可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。
在一些实施方式中,存储器602存储了程序6021,程序6021可以被处理器601执行,这个程序包括:当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理。
其中,所述程序6021还可以包括:将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
其中,所述程序6021还可以包括:当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
其中,所述程序6021还可以包括:在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,将所述第一返回地址寄存器的标识位设置为无效。
其中,所述程序6021还可以包括:当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
其中,所述程序6021还可以包括:为所述第二线程设置与其对应的第二返回地址寄存器;或者,为所述第二线程设置与其对应的返回地址堆栈。
需要说明的是,由于对方法实施例进行详细的阐述,对装置实施例的描述较为简单,本领域技术人员可以理解的是,可以参照方法实施例构造本发明的装置实施例。本领域技术人员在不付出创造性劳动下获取的其他实现方式均属于本发明的保护范围。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种多线程处理器的返回地址预测方法,其特征在于,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,为所述第一线程设置与其对应的第一返回地址寄存器,所述第一线程为未设置返回地址堆栈的线程,则所述方法包括:
当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;
当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;
其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理。
2.根据权利要求1所述的方法,其特征在于,将所述执行结果对应的返回地址保存在与所述第一线程对应的第一返回地址寄存器中包括:
将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;
当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
3.根据权利要求2所述的方法,其特征在于,所述当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测包括:
当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;
当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
4.根据权利要求3所述的方法,其特征在于,在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,所述方法还包括:
将所述第一返回地址寄存器的标识位设置为无效。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为所述第二线程设置与其对应的第二返回地址寄存器;或者,
为所述第二线程设置与其对应的返回地址堆栈。
7.一种多线程处理器的返回地址预测装置,其特征在于,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,所述第一线程与第一返回地址寄存器相对应,所述第一线程为未设置返回地址堆栈的线程,则所述装置包括:
执行单元,用于当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理;
取指单元,用于当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测。
8.根据权利要求7所述的装置,其特征在于,所述执行单元包括:
返回指令存储单元,用于将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
标识位设置单元,用于当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;以及,当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
9.根据权利要求8所述的装置,其特征在于,所述取指单元具体用于:
当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
10.根据权利要求9所述的装置,其特征在于,所述标识位设置单元还用于:
在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,将所述第一返回地址寄存器的标识位设置为无效。
11.根据权利要求9所述的装置,其特征在于,所述取指单元还用于:
当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
设置单元,用于为所述第二线程设置与其对应的第二返回地址寄存器;或者,为所述第二线程设置与其对应的返回地址堆栈。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410172663.1A CN105094750B (zh) | 2014-04-25 | 2014-04-25 | 一种多线程处理器的返回地址预测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410172663.1A CN105094750B (zh) | 2014-04-25 | 2014-04-25 | 一种多线程处理器的返回地址预测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094750A CN105094750A (zh) | 2015-11-25 |
CN105094750B true CN105094750B (zh) | 2018-08-21 |
Family
ID=54575298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410172663.1A Active CN105094750B (zh) | 2014-04-25 | 2014-04-25 | 一种多线程处理器的返回地址预测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094750B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168202B (zh) * | 2021-12-21 | 2023-01-31 | 海光信息技术股份有限公司 | 指令调度方法、指令调度装置、处理器及存储介质 |
CN117055961A (zh) * | 2023-08-15 | 2023-11-14 | 海光信息技术股份有限公司 | 用于多线程的调度方法及调度装置、处理器 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247121B1 (en) * | 1997-12-16 | 2001-06-12 | Intel Corporation | Multithreading processor with thread predictor |
CN103003791A (zh) * | 2010-07-16 | 2013-03-27 | 高通股份有限公司 | 分配共享堆栈的部分的系统和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10338928B2 (en) * | 2011-05-20 | 2019-07-02 | Oracle International Corporation | Utilizing a stack head register with a call return stack for each instruction fetch |
-
2014
- 2014-04-25 CN CN201410172663.1A patent/CN105094750B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247121B1 (en) * | 1997-12-16 | 2001-06-12 | Intel Corporation | Multithreading processor with thread predictor |
CN103003791A (zh) * | 2010-07-16 | 2013-03-27 | 高通股份有限公司 | 分配共享堆栈的部分的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105094750A (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9619233B2 (en) | Computer processor providing exception handling with reduced state storage | |
KR101081674B1 (ko) | 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법 | |
WO2012107737A1 (en) | Controlling the execution of adjacent instructions that are dependent upon a same data condition | |
CN109564508A (zh) | 处理器的事务寄存器文件 | |
US20080215864A1 (en) | Method and apparatus for instruction pointer storage element configuration in a simultaneous multithreaded processor | |
US9658853B2 (en) | Techniques for increasing instruction issue rate and reducing latency in an out-of order processor | |
WO2007107707A3 (en) | Computer architecture | |
US8028180B2 (en) | Method and system for power conservation in a hierarchical branch predictor | |
CN109690536B (zh) | 将多核指令踪迹从虚拟平台仿真器取到性能模拟模型的方法和系统 | |
EP3767462A1 (en) | Detecting a dynamic control flow re-convergence point for conditional branches in hardware | |
CN101371223B (zh) | 运算数的提早有条件选择 | |
US20220035635A1 (en) | Processor with multiple execution pipelines | |
CN105094750B (zh) | 一种多线程处理器的返回地址预测方法和装置 | |
US20190235876A1 (en) | Methods for scheduling micro-instructions and apparatus using the same | |
US11392386B2 (en) | Program counter (PC)-relative load and store addressing for fused instructions | |
US8037366B2 (en) | Issuing instructions in-order in an out-of-order processor using false dependencies | |
US11132198B2 (en) | Instruction handling for accumulation of register results in a microprocessor | |
US11403109B2 (en) | Steering a history buffer entry to a specific recovery port during speculative flush recovery lookup in a processor | |
US20170351524A1 (en) | Operation of a multi-slice processor implementing datapath steering | |
US10929137B2 (en) | Arithmetic processing device and control method for arithmetic processing device | |
KR102379886B1 (ko) | 벡터 명령 처리 | |
US20040128476A1 (en) | Scheme to simplify instruction buffer logic supporting multiple strands | |
CN104765590B (zh) | 一种支持超标量与超长指令字混合架构处理器的分支预测方法 | |
US10740140B2 (en) | Flush-recovery bandwidth in a processor | |
US20230195981A1 (en) | Hazard generating for speculative cores in a microprocessor |
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 |