发明内容
本发明提供了一种分支预测控制方法,降低了译码时分支预测的误预测损失,提高了分支指令的执行效率。
为解决上述技术问题,本发明采用下述技术方案予以实现:
本发明提出了一种分支预测控制方法,所述方法包括:
取指时对分支指令进行分支预测,并对分支目标进行取指;
译码时对分支指令再次进行分支预测;
当需要由译码时的分支预测结果对取指时的分支预测结果进行修正时:
记录当前取指PC至重新取指PC寄存器,对译码时分支预测的分支目标进行取指;
当分支指令执行完分支判定时,根据分支判定结果判断修正是否正确;
若是,则继续译码时分支预测的分支目标及其后续指令的取指操作,冲刷分支指令的后续指令;
若否,则取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中的PC进行取指。
进一步的,在对译码时分支预测的分支目标进行取指时,所述方法还包括:在流水线中取指时间n1小于分支判定时间n2时:将译码时分支预测的分支目标取指返回后的指令写入预取缓存单元中,且写在预取缓存单元中原指令的后面。
又进一步的,在对译码时分支预测的分支目标进行取指时,所述方法还包括:在流水线中取指时间n1小于分支判定时间n2时:将译码时分支预测的分支目标取指返回后的指令写入备用缓存单元。
又进一步的,在对译码时分支预测的分支目标进行取指时,所述方法还包括:在流水线中取指时间n1小于分支判定时间n2时:将预取缓存单元中的首条指令的PC保存至重新取指PC寄存器,清空预取缓存单元,将分支目标取指返回后的指令写入预取缓存单元。
更进一步的,在需要由译码时的分支预测结果对取指时的分支预测结果进行修正时,对译码时分支预测的分支目标及其后续指令进行流水级标记。
本发明还提出了一种分支预测控制装置,所述装置包括:取指单元,用于将取指PC输入取指时分支预测单元,并发送取指请求至流水线;取指时分支预测单元,用于根据取指单元的取指PC进行分支预测,给出预测分支目标;取指流水寄存器,用于记录取指请求的信息,并将取指返回后的指令写入预取缓存单元;预取缓存单元:用于保存取指返回后的指令;译码单元,用于对指令进行译码,译码后的指令发送至执行流水单元和译码时分支预测单元;执行流水单元,用于执行译码单元发送的指令;译码时分支预测单元,用于根据译码单元发送的指令进行分支预测,给出预测分支目标;当需要对取指时的分支预测结果进行修正时,将预测分支目标的取指PC发送至取指单元;重新取指PC寄存器,用于记录当前取指PC;分支判定单元,用于判定分支指令目标,并根据判定结果判断修正是否正确;若是,则申请流水线控制器冲刷分支指令的后续指令;若否,则申请流水线控制器取消译码时分支预测的分支目标及其后续指令,控制取指单元按照重新取指PC寄存器中的PC进行取指;流水线控制器,根据分支判定单元的申请,对流水线进行冲刷。
进一步的,所述装置还包括:备用缓存单元,用于在流水线中取指时间n1小于分支判定时间n2时,保存分支目标取指返回后的指令。
又进一步的,所述装置还包括:预测流水级标记单元,用于在需要由译码时的分支预测结果对取指时的分支预测结果进行修正时,对译码时分支预测的分支目标及其后续指令进行流水级标记。
与现有技术相比,本发明的优点和积极效果是:本发明的分支预测控制方法及装置,取指时对分支指令进行分支预测,并对分支目标进行取指;译码时对分支指令再次进行分支预测;当需要由译码时的分支预测结果对取指时的分支预测结果进行修正时:记录当前取指PC至重新取指PC寄存器,对译码时分支预测的分支目标进行取指;当分支指令执行完分支判定时,根据分支判定结果判断修正是否正确;若是,则继续译码时分支预测的分支目标及其后续指令的取指操作,冲刷分支指令的后续指令;若否,则取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中的PC进行取指;降低了译码时分支预测的误预测损失,提高了分支指令的执行效率。
结合附图阅读本发明的具体实施方式后,本发明的其他特点和优点将变得更加清楚。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下将结合附图和实施例,对本发明作进一步详细说明。
在现有技术中,如果译码时分支预测结果认为当前流水线上或缓存中所取指令不是该分支指令的目标指令,会将这些指令进行冲刷并重新取指,而一旦误预测,就导致原本正确的取指被强制重复操作,降低了处理器的性能。
针对上述问题,本发明提出了一种分支预测控制方法,在对译码时预测的分支目标进行取指的同时,并不对已经取指、发射的指令进行冲刷,而是让其继续执行,若最终分支指令判定结果证实译码时分支预测正确,才将这部分指令进行冲刷,对处理器性能没有影响;若最终分支指令判定结果证实译码时分支预测错误,由于这部分后续指令继续执行,所以基本没有误预测的性能损失,换言之,该方法将大大提高处理器对分支指令的执行效率,使得处理器性能具有较大提升。
下面,结合附图,对本实施例的分支预测控制方法进行详细说明。
本实施例的分支预测控制方法,具体包括下述步骤,参见图1所示。
步骤S1:取指时进行分支预测,并对分支目标进行取指。
在取指时,对指令进行分支预测,对分支目标进行取指,取指返回后的指令写入预取缓存单元。
步骤S2:译码时对分支指令再次进行分支预测。
在指令译码后,若指令是分支指令,则再次进行分支预测。
步骤S3:判断是否需要由译码时的分支预测结果对取指时的分支预测结果进行修正。
即判断译码时的分支预测结果与取指时的分支预测结果是否不同。
若否,即译码时的分支预测结果与取指时的分支预测结果相同,不需要进行修正,则执行步骤S4。
若是,即译码时的分支预测结果与取指时的分支预测结果不同,需要进行修正,则执行步骤S7。
步骤S4:随着流水线的前进,分支指令执行至分支判定。
步骤S5:当分支指令执行完分支判定时,根据分支判定结果判断取指时的分支预测是否正确。
若是,即取指时的分支预测正确,无需特殊操作,随着流水线前进即可。
若否,即取指时的分支预测错误,则执行步骤S6。
步骤S6:冲刷分支指令后续的所有指令,按照分支判定结果确定的分支目标进行取指,返回步骤S1。
步骤S7:在需要由译码时的分支预测结果对取指时的分支预测结果进行修正时,记录当前取指PC至重新取指PC寄存器,对译码时分支预测的分支目标进行取指。
为了便于区分哪些指令需要冲刷,对译码时分支预测的分支目标及其后续指令进行流水级标记。
步骤S8:分支指令及其后续指令、对分支目标的取指操作都随流水线前进,分支指令执行至分支判定。
步骤S9:当分支指令执行完分支判定时,根据分支判定结果判断修正是否正确。
若是,即修正正确,即译码时的分支预测正确,则执行步骤S10。
若否,即修正错误,即译码时的分支预测错误,则执行步骤S11。
步骤S10:当译码时的分支预测正确时,冲刷分支指令的后续指令,继续译码时分支预测的分支目标及其后续指令的取指操作。
即在冲刷分支指令的后续指令时,不影响译码时分支预测的分支目标及其后续指令的取指操作。也即,只冲刷不具有流水级标记的指令。
步骤S11:当译码时的分支预测错误时,不影响分支指令后续指令的执行,取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中记录的PC进行取指。也即,只冲刷具有流水级标记的指令。
本实施例的分支预测控制方法,取指时对分支指令进行分支预测,并对分支目标进行取指;译码时对分支指令再次进行分支预测;当需要由译码时的分支预测结果对取指时的分支预测结果进行修正时:记录当前取指PC至重新取指PC寄存器,对译码时分支预测的分支目标进行取指;当分支指令执行完分支判定时,根据分支判定结果判断修正是否正确;若是,则继续译码时分支预测的分支目标及其后续指令的取指操作,冲刷分支指令的后续指令;若否,则取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中的PC进行取指;降低了译码时分支预测的误预测损失,提高了分支指令的执行效率。
也就是说,在对译码时分支预测的分支目标进行取指的同时,并不对已经取指、发射的指令进行冲刷,而是让其继续执行,若最终分支指令判定结果证实译码时分支预测正确,才将这部分已经取指、发射的指令进行冲刷,对处理器性能没有影响;若最终分支指令判定结果证实译码时分支预测错误,由于这部分已经取指、发射的指令继续执行,所以基本没有误预测的性能损失,换言之,该方法将大大提高处理器对分支指令的执行效率,使得处理器性能具有较大提升。
在步骤S7中,在一些具有灵活周期的流水线中,在对译码时分支预测的分支目标进行取指时,还需要判断流水线中取指时间n1与分支判定时间n2的大小关系,根据n1与n2的大小关系确定分支目标取指返回后的指令存储方式。
分支判定时间n2,即分支指令执行完分支判定、确定分支判定结果的时间。
(1)若n1≥n2,则取指返回前已经确定分支判定的结果,无需特殊处理。
(2)若n1<n2,则增加备用缓存单元,深度为n2-n1,备用缓存单元中的指令优先发射,将译码时分支预测的分支目标取指返回后的指令写入备用缓存单元,以减小存储等待时间,避免拥堵,提高流水线效率。
当译码时的分支预测正确、需要冲刷分支指令的后续指令时,冲刷预取缓存单元、不冲刷备用缓存单元。当译码时的分支预测错误、需要取消译码时分支预测的分支目标及其后续指令时,冲刷备用缓存单元、不冲刷预取缓存单元。
(3)若n1<n2,还可以将译码时分支预测的分支目标取指返回后的指令写入预取缓存单元中,且写在预取缓存单元中原指令的后面。即取指时分支预测的分支目标取指返回后的指令写入预取缓存单元,译码时分支预测的分支目标取指返回后的指令也写入预取缓存单元,可通过流水级标记对两种指令进行区分。
(4)若n1<n2,将预取缓存单元中的首条指令的PC保存至重新取指PC寄存器,清空预取缓存单元,将分支目标取指返回后的指令写入预取缓存单元,分支目标将在下一周期正常发射。采用该种方案,当执行至步骤S11时,当译码时的分支预测错误时,不影响分支指令后续指令的执行,取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中记录的PC进行取指。分支指令发射并执行至分支判断的这段时间内,必然存在多条指令已经发射,已经发射的指令在此处并不会被冲刷,因此不影响分支指令后续指令的执行。
具体来说:
如果n1大于等于n2,则在取指完成前或完成时,即可确定是否分支,所以在预取指令缓存单元中,译码时分支预测的分支目标取指返回后的指令与取指时分支预测的分支目标取指返回后的指令是互斥的。
如果n1小于n2,说明取指返回指令时,仍不能确定是否需要分支,此时根据实际需求,对译码时分支预测的分支目标取指返回后的指令以及当前处于预取缓存单元中的指令有两种处理方法:
第一种:预取缓存单元中的指令优先。在分支判定之前,优先发射预取缓存单元中的指令,译码时分支预测的分支目标取指返回的指令按顺序写入预取缓存单元中。当原处于预取缓存单元中的指令发射完毕时,才发射译码时分支预测的分支目标取指返回的指令。
第二种:译码时分支预测的分支目标优先。在分支判定前,优先发射译码时分支预测的分支目标取指返回的指令。在资源允许的情况下,可以增设备用缓存单元,译码时分支预测的分支目标取指返回的指令将通过备用缓存单元发射指令。原预取缓存单元中的指令暂时不发射,在分支判定后,再发射(修正失败)或者冲刷(修正成功)。可以发现,当n1与n2差值较小的情况下,增加较少的备用缓存单元即可达到较好的效果。若设计资源有限,不增设备用缓存单元,而是在译码时分支预测的分支目标取指返回的指令进入预取缓存单元的同时冲刷当前处于指令预取缓存单元中的指令,即译码时分支预测的分支目标取指返回的指令与取指时分支预测的分支目标取指返回的指令是互斥的。若指令预取缓存单元中原先存在指令,则取其即将发射的指令PC保存至重新取指PC寄存器中。
在一般情况下,译码时分支预测具有较高的预测准确度,所以以译码时分支预测的分支目标优先的方式进行设计更为合理。而在以译码时分支预测的分支目标优先的方式中,使用备用缓存单元可以达到最好的性能提高,不使用备用缓存可以在几乎不增加资源使用的情况下,适当的降低预测失败的损失。
在较多的系统中,n1由于Cache的原因,导致取指延时不确定,而n2也有可能根据不同的分支指令类型而不同。当运行时n1与n2之间的差值不确定的情况下,可根据实际情况选择指令缓冲的设计方式。
当一条指令在步骤S3处判断为需要进行修正,但是还未执行完S10(或S11)时,则视为该条指令占用了相关控制单元,后续指令无法使用相关控制单元,在这种情况下,若存在其他指令执行至S3时,则一律判断为不需要修正,向S4方向执行,避免造成流水线拥堵。
基于上述方法的设计,本实施例还提出了一种分支预测控制装置,所述装置包括取指单元201、取指时分支预测单元202、取指流水寄存器203、预取缓存单元204、指令发射单元205、译码单元206、译码时分支预测单元207、执行流水单元208、分支判定单元209、重新取指PC寄存器210、流水线控制器211、预测流水级标记单元212、备用缓存单元213等,参见图2所示。
取指单元201,用于将取指PC输入取指时分支预测单元202,并发送取指请求至流水线;取指请求随流水前进,由取指流水寄存器203记录相关信息。
取指时分支预测单元202,用于根据取指单元201的取指PC进行分支预测,若预测转移,则给出预测分支目标,由取指单元201在下一周期对分支目标进行取指。
取指流水寄存器203,用于记录取指请求的信息,取指请求在取指流水寄存器203上进行流水,取指返回后的指令由取指流水寄存器203的相关控制信号写入预取缓存单元204。
预取缓存单元204:用于保存取指返回后的指令。
指令发射单元205,用于从预取缓存单元204中取出指令后发射至译码单元206。
译码单元206,用于对指令进行译码,译码后的指令发送至执行流水单元208和译码时分支预测单元207。若指令是分支指令,则通过译码时分支预测单元207进行再次预测。
译码时分支预测单元207,用于根据译码单元206发送的指令进行分支预测,给出预测分支目标;当译码时分支预测单元207的预测结果与取指时分支预测单元202的预测结果不同时,需要对取指时的分支预测结果进行修正,将预测分支目标的取指PC发送至取指单元201,预测流水级标记单元212开始将对应操作的流水级进行标记,对译码时分支预测的分支目标及其后续指令进行流水级标记;同时通知重新取指PC寄存器210记录当前取指PC。
预测流水级标记单元212,用于在需要由译码时的分支预测结果对取指时的分支预测结果进行修正时,对译码时分支预测的分支目标及其后续指令进行流水级标记。
备用缓存单元213,在对译码时分支预测的分支目标进行取指时,如果流水线中取指时间n1小于分支判定时间n2时,分支目标取指返回后的指令由取指流水寄存器203写入备用缓存单元213。
执行流水单元208,用于执行译码单元206发送的指令。
重新取指PC寄存器210,用于记录当前取指PC。
分支判定单元209,用于判定分支指令目标,并根据判定结果判断修正是否正确;若是,则申请流水线控制器211冲刷分支指令的后续指令;若否,则申请流水线控制器211取消译码时分支预测的分支目标及其后续指令,控制取指单元201按照重新取指PC寄存器210中的PC进行取指。
分支判定单元209根据判定结果决定是否申请流水线控制器211进行流水级冲刷、进行何种方式的冲刷、以及是否进行重新取指,具体来说:
(a)若译码时分支预测进行修正成功,即修正正确,则冲刷分支指令的后续指令,但不影响对分支目标及其后续指令的取指。因此分支判定单元209向流水线控制器211发送信号01。
(b)若译码时分支预测进行修正失败,即修正错误,首先不影响分支指令后续指令的执行,取消译码时分支预测的分支目标及其后续指令,按照重新取指PC寄存器中记录的PC进行取指。因此分支判定单元209向流水线控制器211发送两位10。
(c)若取指时分支预测的结果与译码时分支预测的结果相同,且预测正确,即不需要进行修正且预测正确时,则分支判定后无需操作,随着流水线前进即可。因此分支判定单元209向流水线控制器211发送信号00。
(d)若取指时分支预测的结果与译码时分支预测的结果相同,则预测错误,即不需要进行修正且预测错误时,则分支判定后冲刷后续的所有指令,按照分支判定结果确定的分支目标进行取指。因此分支判定单元209向流水线控制器211发送信号11。
流水线控制器211根据分支判定单元209的发送的申请信号,对流水线进行冲刷。
如果流水线控制器211接收到分支判定单元209发送的信号00,则无请求,无需进行特殊操作。
如果流水线控制器211接收到分支判定单元209发送的信号01,则冲刷请求所在流水级之前没有预测流水级标记的流水级。
如果流水线控制器211接收到分支判定单元209发送的信号10,则冲刷请求所在流水级之前具有预测流水级标记的流水级。
如果流水线控制器211接收到分支判定单元209发送的信号11,则冲刷请求所在流水级之前所有流水级。
具体的分支预测控制装置的工作过程,已经在上述分支预测控制方法中详述,此处不予赘述。
本实施例的分支预测控制装置,取指时分支预测单元根据取指单元的取指PC进行分支预测,若预测转移则给出下一周期取指请求;取指请求在取指流水寄存器上进行流水,待指令返回之后将指令写入预取缓存单元;指令发射单元将预取缓存单元中的指令发射至译码单元;译码单元对指令进行译码,译码后的指令给至执行流水单元,若指令是分支指令,则通过译码时分支预测单元进行再次预测;当译码时分支预测单元的预测结果与取指时分支预测单元的预测结果不同时,需要对取指时的分支预测结果进行修正,将预测分支目标的取指PC发送至取指单元,预测流水级标记单元开始将对应操作的流水级进行标记,对译码时分支预测的分支目标及其后续指令进行流水级标记;同时通知重新取指PC寄存器记录当前取指PC。当指令执行至分支判定单元时,分支判定单元判定分支指令目标,根据判定结果向流水线控制器发送申请信号,流水线控制器根据分支判定单元的发送的申请信号,对流水线进行冲刷;因此,本实施例的控制装置降低了译码时分支预测的误预测损失,提高了分支指令的执行效率。
本实施例的分支预测控制方法及装置,适用于多种流水线结构,可普遍应用于不同的处理器设计中。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管参照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。