一种多线程处理器的返回地址预测方法和装置的制造方法

文档序号:9371900阅读:347来源:国知局
一种多线程处理器的返回地址预测方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种多线程处理器的返回地址预测方法和装置。
【背景技术】
[0002]为了加快处理器的处理效率,目前的CPU大多采用多级流水线的结构,使得顺序执行的指令流可以并行地执行。当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生跳转,而这会打断流水线中指令的处理,因为处理器无法确定该分支指令的下一条指令,需要等待该分支指令执行完成才能够得到指令结果从而获取下一条进入流水线的指令。由于程序中的条件分支是根据程序指令在流水线的处理结果再执行的,所以当CPU等待指令结果时,流水线的前级电路也处于空闲状态等待分支指令,这样必然出现时钟周期的浪费。流水线越长,处理器等待的时间便越长,从而影响了处理器的处理效率。
[0003]分支预测(Branch Predict1n)技术便是为解决这一问题而出现的。分支预测是一种解决处理分支指令(if-then-else)导致流水线失败的数据处理方法,是由CPU来判断程序分支的进行方向,能够加快运算速度。目前,大部分的处理器都采用了不同形式的分支预测机制,让条件分支指令的目标跳转方向和目标跳转地址可以在流水线的前端被预测,使得处理器可以预测性地取指令并执行指令。如果分支预测正确或者正确率较高的话,可以大幅提高处理器的性能,如果分支预测错误的话,意味着预测取出的指令不能被执行,错误的指令需要从缓冲区中清除,然后从正确的地址处再重新取指令并执行。
[0004]现有技术中,分支预测的硬件结构可以包括PHT (Pattern History Table,分支跳转历史表)、BTAC (Branch Target Address Cache,分支跳转目的地址缓存)、BTB (BranchTarget Buffer,分支目的地址缓冲区)和RAS (Return Address Stack,返回地址堆栈)。其中,RAS主要针对函数、子函数调用进行返回地址预测。RAS采用LIF0(Last In First Out,后进先出)结构,每次遇到RET指令(Return,即子程序返回指令)时均需要进行压栈和出栈操作。
[0005]发明人在实现本发明的过程中发现,现有技术存在的返回地址预测方法中,由于每个线程返回地址预测的需求不同,只为某些线程设置RAS,其余的线程则不对RET指令进行分支预测。其余线程在取指时遇到RET指令则停止取指,直到该RET指令执行完成,得到正确的返回地址,该线程才继续到返回地址处进行取指。然而,线程取指与该指令执行完成之间需要多个流水级,在一些处理器中这个延迟甚至可以达到20?30个处理器时钟周期。该方法对没有设置RAS的硬件线程执行RET指令的效率影响非常大。如果为每一个硬件线程均设置独立的RAS,则会带来硬件资源的严重耗费。这是因为,RAS的实现非常复杂,涉及PC (Program Counter,程序计数器)的恢复和堆栈队列指针的记录等操作,一旦RAS预测错误,RAS的恢复也很复杂,因此非常耗费硬件资源。

【发明内容】

[0006]为解决上述技术问题,本发明实施例提供了一种多线程处理器的返回地址预测方法和装置,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。
[0007]技术方案如下:
[0008]根据本发明实施例的第一方面,公开了一种多线程处理器的返回地址预测方法,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,为所述第一线程设置与其对应的第一返回地址寄存器,则所述方法包括:
[0009]当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;
[0010]当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测;
[0011]其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理。
[0012]结合本发明实施例的第一方面,本发明实施例还具有第一种可能,其中,将所述执行结果对应的返回地址保存在与所述第一线程对应的第一返回地址寄存器中包括:
[0013]将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
[0014]当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;
[0015]当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
[0016]结合本发明实施例的第一方面和本发明实施例的第一种可能,本发明实施例还具有第二种可能,其中,所述当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测包括:
[0017]当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;
[0018]当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
[0019]结合本发明实施例的第一方面和本发明实施例的第二种可能,本发明实施例还具有第三种可能,其中,在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,所述方法还包括:
[0020]将所述第一返回地址寄存器的标识位设置为无效。
[0021]结合本发明实施例的第一方面和本发明实施例的第二种可能,本发明实施例还具有第四种可能,所述方法还包括:
[0022]当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
[0023]结合本发明实施例的第一方面,本发明实施例还具有第五种可能,所述方法还包括:
[0024]为所述第二线程设置与其对应的第二返回地址寄存器;或者,
[0025]为所述第二线程设置与其对应的返回地址堆栈。
[0026]根据本发明实施例的第二方面,公开了一种多线程处理器的返回地址预测装置,应用于多线程处理器,所述多线程处理器至少能同时执行第一线程和第二线程,所述第一线程与第一返回地址寄存器相对应,则所述装置包括:
[0027]执行单元,用于当执行修改分支返回目的寄存器LR的第一指令并提交所述第一指令的执行结果时,将所述执行结果对应的返回地址保存在所述分支返回目的寄存器LR中以及与所述第一线程对应的第一返回地址寄存器中;其中,所述第一指令与所述第一线程对应,所述第一指令经过编译器在识别出返回指令和所述第一指令后调整所述第一指令的指令执行时刻的处理;
[0028]取指单元,用于当读取到与所述第一线程对应的返回指令时,利用与所述第一线程对应的第一返回地址寄存器中保存的返回地址进行返回地址预测。
[0029]结合本发明实施例的第二方面,本发明实施例还具有第六种可能,其中,所述执行单元包括:
[0030]返回指令存储单元,用于将所述执行结果对应的返回地址保存在所述第一返回地址寄存器中;
[0031]标识位设置单元,用于当判断在指令缓存中、所述第一指令之后不存在返回指令时,设置所述第一返回地址寄存器的标识位为有效;以及,当判断在指令缓存中、所述第一指令之后存在返回指令时,设置所述第一返回地址寄存器的标识位为无效。
[0032]结合本发明实施例的第二方面和本发明实施例的第六种可能,本发明实施例还具有第七种可能,其中,所述取指单元具体用于:
[0033]当读取到与所述第一线程对应的返回指令时,判断所述第一线程对应的第一返回地址寄存器的标识位是否有效;当确定所述第一线程对应的第一返回地址寄存器的标识位有效时,将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址。
[0034]结合本发明实施例的第一方面和本发明实施例的第六种可能,本发明实施例还具有第八种可能,其中,所述标识位设置单元还用于:
[0035]在将所述第一返回地址寄存器中保存的返回地址作为所述返回指令的预测返回地址之后,将所述第一返回地址寄存器的标识位设置为无效。
[0036]结合本发明实施例的第二方面和本发明实施例的第七种可能,本发明实施例还具有第九种可能,所述取指单元还用于:
[0037]当确定所述第一线程对应的第一返回地址寄存器的标识位无效时,停止取指,直到所述返回指令执行完成获得所述返回指令的返回地址时才继续取指。
[0038]结合本发明实施例的第二方面,本发明实施例还具有第十种可能,所述装置还包括:
[0039]设置单元,用于为所述第二线程设置与其对应的第二返回地址寄存器;或者,为所述第二线程设置与其对应的返回地址堆栈。
[0040]本发明实施例的一个方面能够达到的有益效果为:本发明通过为多线程处理器执行的线程设置一个与其具有对应关系的返回地址寄存器(Return Address Register,RAR),将其作为分支返回目的寄存器LR的备份用于存储预测返回地址,从而能够实现利用所述返回地址寄存器RAR实现对硬件线程的返回地址预测,实现复杂度低,以较小的硬件成本提高了处理器硬件线程对返回指令的处理效率。此外,本发明通过编译器识别出修改分支返回目的寄存器LR的第一指令以及其后的返回指令,并调整所述第一指令的执行时亥IJ,从而使得能利用第一指令的执行结果实现了对所述返回指令的返回地址的预测,提高了
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1