用于流水线指令流的控制方法和控制设备与流程

文档序号:17719534发布日期:2019-05-22 02:03阅读:322来源:国知局
用于流水线指令流的控制方法和控制设备与流程

本公开涉及一种用于流水线指令流的控制方法和控制设备。



背景技术:

为提高处理器执行指令的效率,引入了流水线技术。这时,在处理器中不再仅运行一条指令,每一级流水线在同一时刻都运行着不同的指令。例如,典型的五级流水线分为五个阶段,即:1.取指(fetch)阶段:从存储器获取指令;2.指令解码/读寄存器(decode)阶段:从寄存器堆读出寄存器的值;3.执行操作/计算地址(excute)阶段:进行算术逻辑运算、计算存储器的地址;4.访存(memory)阶段:从存储器读出数据/将数据写入存储器;5.写回(write-back)阶段:将数据写回寄存器堆。由于流水线技术增大了处理器的指令吞吐量—即单位时间执行指令的条数,因此大大加速了程序运行的过程。

处理器等待(即,停顿)的时间被称为流水线气泡(bubble)。分支指令会给处理器的流水线引入气泡,降低处理器的性能。分支指令给处理器的流水线引入的气泡由两部分组成,即,跳转预测引入的气泡和地址重定向引入的气泡。当包含流水线技术的处理器处理分支指令时,根据判定条件的真/假的不同,处理器有可能要执行跳转操作,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令是什么,直到分支指令执行完毕(跳转预测引入的气泡)。已经在流水线上的顺序指令就是无效的,需要被清空,处理器重新形成流水线需要时间,即,处理器必须等待分支指令处理完毕,才能确定下一条进入流水线的指令(地址重定向引入的气泡)。这影响了处理器的效率。

目前引入了分支指令预测技术。该技术是处理器预测分支指令的处理结果,提前得出跳转地址,从而将跳转地址对应的指令加载到流水线上,在一定程度上缓解了上述由于地址重定向引入的气泡。



技术实现要素:

本公开的至少一个实施例提供了一种用于流水线指令流的控制方法和控制设备,其针对连续跳转的指令流,能够提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡。

第一方面,本公开提供了一种用于流水线指令流的控制方法,该控制方法包括:确定当前指令是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令;如果确定该当前指令是单一跳转的分支指令,基于该当前指令所对应的指令地址访问当前分支预测表和超前分支预测表;根据所述当前分支预测表确定该当前指令是否发生跳转,并根据所述超前分支预测表确定该指令地址所关联的第一关联指令是否发生跳转;在确定该当前指令发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令,并且获取与所述第一关联指令对应的操作指令地址以执行控制。

结合第一方面,在第一方面的一种实现方式中,所述控制方法还包括:如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括从所述分支指令追踪高速缓存获取所述第一关联指令的跳转指令地址;以及如果确定所述第一关联指令不发生跳转,存获取与所述第一关联指令对应的操作指令地址包括从所述分支指令追踪高速缓存获取所述第一关联指令的顺序指令地址。

结合第一方面及其上述实现方式,在第一方面的另一实现方式中,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令包括:在获取当前指令之前对该指令进行预解码;根据预解码的结果来确定该当前指令是否是单一跳转的分支指令。

结合第一方面及其上述实现方式,在第一方面的另一实现方式中,所述控制方法还包括:如果根据预解码的结果确定该当前指令不是单一跳转的分支指令,则不执行所述控制方法。

结合第一方面及其上述实现方式,在第一方面的另一实现方式中,所述控制方法还包括:如果在确定该当前指令发生跳转时,无法从所述分支指令追踪高速缓存获取所述第一关联指令,则建立与该当前指令相关的条目。

结合第一方面及其上述实现方式,在第一方面的另一实现方式中,所述建立与该当前指令相关的条目包括:在所述分支指令追踪高速缓存中存储所述第一关联指令;在所述分支指令追踪高速缓存中存储所述第一关联指令的顺序指令地址;如果所述第一关联指令是单一跳转的分支指令,在所述分支指令追踪高速缓存中存储所述第一关联指令的跳转指令地址。

结合第一方面及其上述实现方式,在第一方面的另一实现方式中,所述控制方法还包括:根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。

第二方面,本公开提供了一种用于流水线指令流的控制设备,该控制设备包括存储器、处理器和分支指令追踪高速缓存,其中,所述存储器用于存储程序代码;所述处理器用于在执行所述程序代码时执行如下操作:确定当前指令是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令;如果确定该当前指令是单一跳转的分支指令,基于该当前指令所对应的指令地址访问当前分支预测表和超前分支预测表;根据所述当前分支预测表确定该当前指令是否发生跳转,并根据所述超前分支预测表确定该指令地址所关联的第一关联指令是否发生跳转;在确定该当前指令发生跳转时,从所述分支指令追踪高速缓存获取所述第一关联指令,并且获取与所述第一关联指令对应的操作指令地址以执行控制;和所述分支指令追踪高速缓存用于存储所述第一关联指令、与所述第一关联指令对应的操作指令地址。

结合第二方面,在第二方面的一种实现方式中,如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述处理器从所述分支指令追踪高速缓存获取所述第一关联指令的跳转指令地址;以及如果确定所述第一关联指令不发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述处理器从所述分支指令追踪高速缓存获取所述第一关联指令的顺序指令地址。

结合第二方面及其上述实现方式,在第二方面的另一实现方式中,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令包括:所述处理器在获取当前指令之前对该指令进行预解码;所述处理器根据预解码的结果来确定该当前指令是否是单一跳转的分支指令。

结合第二方面及其上述实现方式,在第二方面的另一实现方式中,如果根据预解码的结果确定该当前指令不是单一跳转的分支指令,则所述处理器不执行所述操作。

结合第二方面及其上述实现方式,在第二方面的另一实现方式中,如果所述处理器在确定该当前指令发生跳转时,无法从所述分支指令追踪高速缓存获取所述第一关联指令,则所述处理器建立与该当前指令相关的条目。

结合第二方面及其上述实现方式,在第二方面的另一实现方式中,所述处理器建立与该当前指令相关的条目包括:所述处理器在所述分支指令追踪高速缓存中存储所述第一关联指令;所述处理器在所述分支指令追踪高速缓存中存储所述第一关联指令的顺序指令地址;如果所述第一关联指令是单一跳转的分支指令,所述处理器在所述分支指令追踪高速缓存中存储所述第一关联指令的跳转指令地址。

结合第二方面及其上述实现方式,在第二方面的另一实现方式中,所述处理器还根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。

第三方面,本公开提供了一种用于流水线指令流的控制设备,该控制设备包括:指令确定单元,用于确定当前指令是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令;访问单元,用于在指令确定单元确定该当前指令是单一跳转的分支指令时,基于该当前指令所对应的指令地址访问当前分支预测表和超前分支预测表;跳转确定单元,用于根据所述当前分支预测表确定该当前指令是否发生跳转,并根据所述超前分支预测表确定该指令地址所关联的第一关联指令是否发生跳转;获取单元,用于在跳转确定单元确定该当前指令发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令,并且获取与所述第一关联指令对应的操作指令地址以执行控制。

结合第三方面,在第三方面的一种实现方式中,如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述获取单元从所述分支指令追踪高速缓存获取所述第一关联指令的跳转指令地址;以及如果确定所述第一关联指令不发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述获取单元从所述分支指令追踪高速缓存获取所述第一关联指令的顺序指令地址。

结合第三方面及其上述实现方式,在第三方面的另一实现方式中,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令包括:所述指令确定单元在获取当前指令之前对该指令进行预解码;所述指令确定单元根据预解码的结果来确定该当前指令是否是单一跳转的分支指令。

结合第三方面及其上述实现方式,在第三方面的另一实现方式中,如果所述指令确定单元根据预解码的结果确定该当前指令不是单一跳转的分支指令,则所述访问单元不访问当前分支预测表和超前分支预测表,所述跳转确定单元不进行跳转确定操作,并且所述获取单元不进行获取操作。

结合第三方面及其上述实现方式,在第三方面的另一实现方式中,所述控制设备还包括建立单元,如果所述获取单元在确定该当前指令发生跳转时,无法从所述分支指令追踪高速缓存获取所述第一关联指令,则所述建立单元建立与该当前指令相关的条目。

结合第三方面及其上述实现方式,在第三方面的另一实现方式中,所述建立单元建立与该当前指令相关的条目包括:在所述分支指令追踪高速缓存中存储所述第一关联指令;在所述分支指令追踪高速缓存中存储所述第一关联指令的顺序指令地址;如果所述第一关联指令是单一跳转的分支指令,在所述分支指令追踪高速缓存中存储所述第一关联指令的跳转指令地址。

结合第三方面及其上述实现方式,在第三方面的另一实现方式中,所述建立单元还根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。

根据本公开实施例的用于流水线指令流的控制方法和控制设备,针对连续跳转的指令流,能够获取当前单一跳转的分支指令的跳转目标指令,并可以获取该跳转目标指令所对应的后续的取指地址,能够提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1是图示了根据本公开的实施例所应用于的场景的示意图;

图2(a)是示意性地示出了处理器遇到连续跳转指令时的执行时序图;图2(b)是示意性地示出了采用目前的跳转预测技术之后处理器遇到连续跳转指令时的执行时序图;图2(c)是示意性地示出了根据本公开实施例的用于流水线指令流的控制设备中的处理器遇到连续跳转指令时的执行时序图;

图3是根据本公开实施例的用于流水线指令流的控制方法的流程图;

图4是根据本公开实施例的用于流水线指令流的控制方法中的一个步骤的流程图;

图5是根据本公开实施例的用于流水线指令流的控制方法中建立与当前指令相关的条目的子方法流程图;

图6是示意性图示了根据本公开的实施例的用于流水线指令流的控制设备的一种示例性实现的框图;

图7是示意性图示了根据本公开的实施例的用于流水线指令流的控制设备的另一种示例性实现的框图。

具体实施方式

下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

目前的分支指令预测技术引入了跳转预测,将分支指令跳转的目标指令存入分支指令追踪高速缓存中,当目标指令命中分支指令追踪高速缓存时,能够快速的从分支指令追踪高速缓存中读取所需指令,从而能够缓解地址重定向引入的气泡,但却无法缩减与跳转预测相关的气泡。

本公开的至少一个实施例提供了一种用于流水线指令流的控制方法和控制设备,针对连续跳转的指令流,能够获取当前单一跳转的分支指令的跳转目标指令,并可以获取该跳转目标指令所对应的后续的取指地址,能够提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

图1是图示了根据本公开的实施例所应用于的场景100的示意图。在图1中,示出了根据本公开实施例的用于流水线指令流的控制设备110和具有连续跳转的指令流120。该控制设备110可以是用于处理指令流的任何设备,例如具有处理器和高速缓存等,如笔记本计算机、台式计算机、平板计算机等。如图1所示,指令流120包括两个单一跳转的分支指令instr_0和instr_x,以及非分支指令,即,顺序指令instr_1、instr_2、instr_3、instr_x、instr_x+1、instr_x+2、instr_x+3、instr_t等。

在程序运行到单一跳转的分支指令instr_0时,根据判定条件的真/假,程序跳转到单一的分支目的地址va_x所指向的指令instr_x继续执行或者顺序执行下一条指令instr_1。在程序运行到单一跳转的分支指令instr_x时,根据判定条件的真/假,程序跳转到单一的分支目的地址va_t所指向的指令instr_t继续执行或者顺序执行下一条指令instr_x+1。在图1的示例中,在进行取指操作时,指令流120中出现了两次连续的跳转,即,从instr_0跳转到instr_x,从instr_x跳转到instr_t。分支指令instr_0和instr_x会导致上述流水线气泡,即,由于跳转预测引入的气泡和由于地址重定向引入的气泡。

根据本公开实施例的用于流水线指令流的控制设备110的具体实践示例如下。在上述出现两次连续的跳转的指令流120的情况下,当程序运行到地址va_0所对应的指令instr_0时,控制设备110能够确定当前单一跳转的分支指令instr_0是否跳转,并获取跳转目标指令instr_x(如果跳转的话),此外,控制设备110还能够确定该跳转目标指令instr_x(也是单一跳转的分支指令)是否跳转,并获取该跳转目标指令instr_x所对应的后续的取指地址,即,如果该跳转目标指令instr_x跳转,则获取该跳转目标指令instr_x所对应的后续的取指地址va_t;如果该跳转目标指令instr_x不跳转,则获取该跳转目标指令instr_x所对应的后续的取指地址va_x+1。因此,根据本公开实施例的用于流水线指令流的控制设备110能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

图2(a)是示意性地示出了处理器遇到连续跳转指令时的执行时序图;图2(b)是示意性地示出了采用目前的跳转预测技术之后处理器遇到连续跳转指令时的执行时序图;图2(c)是示意性地示出了根据本公开实施例的用于流水线指令流的控制设备中的处理器遇到连续跳转指令时的执行时序图。结合图1中示出的指令流120来对图2(a)-(c)进行分析。如图2(a)所示,图1中示出的指令流120中的分支指令instr_0和instr_x会给处理器的指令流水线引入两种气泡,即,跳转预测引入的气泡和地址重定向引入的气泡。如图2(b)所示,目前的跳转预测技术能够将分支指令的跳转目标指令存储在高速缓存中,当分支指令命中高速缓存后,能够快速的从高速缓存中读取所需指令,从而能够缩减当前分支中由于地址重定向引入的气泡。如图2(c)所示,根据本公开实施例的用于流水线指令流的控制方法和设备能够获取第一次跳转中的分支指令instr_0的跳转目标指令instr_x,从而能够缩减当前分支的地址重定向引入的气泡;根据本公开实施例的用于流水线指令流的控制方法和设备还能够获取第二次跳转中的跳转目标指令instr_x所对应的后续的取指地址(va_x+1或va_t),从而能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

图3是根据本公开实施例的用于流水线指令流的控制方法200的流程图。该用于流水线指令流的控制方法200应用于如图1所示的用于流水线指令流的控制设备110。下面结合图1中的指令流120来对该控制方法200进行描述。

如图3所示,该控制方法200包括:在s210,确定当前指令instr_0是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令;在s220,如果确定该当前指令instr_0是单一跳转的分支指令,基于该当前指令instr_0所对应的指令地址va_0访问当前分支预测表和超前分支预测表;在s230,根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转;在s240,在确定该当前指令instr_0发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令instr_x,并且获取与所述第一关联指令(instr_x)对应的操作指令地址以执行控制。

在本公开实施例中,确定当前指令instr_0是否是单一跳转的分支指令。单一跳转的分支指令是指在跳转时仅能够跳转到单一的分支目的地址的指令,即,该分支指令的分支目的地址只有一个,而不是多个。在发生跳转时,程序仅能够跳转到该分支指令指向的单一的分支目的地址所对应的指令(即,跳转目标指令)继续执行。例如,参考指令流120,在程序运行到单一跳转的分支指令instr_0时,根据判定条件的真/假,程序要么跳转到单一的分支目的地址va_x所对应的指令instr_x继续执行,要么顺序执行下一条指令instr_1。

在本公开实施例中,如果确定该当前指令instr_0是单一跳转的分支指令,基于该当前指令instr_0所对应的指令地址va_0同时访问当前分支预测表和超前分支预测表。根据本公开的一个示例性实现,当前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)是否会发生跳转。例如,用数值0来表示对应的单一分支指令不会发生跳转,用数值1来表示对应的单一分支指令会发生跳转。根据本公开的一个示例性实现,超前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)的跳转目标指令(例如,instr_x)是否会发生跳转。例如,用数值0来表示跳转目标指令不会发生跳转,用数值1来表示跳转目标指令会发生跳转。可以理解的是,当前分支预测表和超前分支预测表也可以采用其它方式来表示相应的指令是否发生跳转,本公开对此不做限制。

与指令地址对应的单一分支指令的跳转目标指令又被称为该指令地址所关联的第一关联指令。

在本公开实施例中,根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转,在确定该当前指令instr_0发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令instr_x,并且获取与所述第一关联指令instr_x对应的操作指令地址以执行控制。根据本公开实施例的控制方法200针对当前分支,即,第一分支(第一次跳转),在确定当前指令instr_0发生跳转时,能够从分支指令追踪高速缓存快速获取所述第一关联指令instr_x,这使得提高了取指效率,缩减了当前分支中地址重定向引入的气泡(对照图2(a)和图2(c)中instr_x对应的气泡)。根据本公开实施例的控制方法200针对下一分支,即,第二分支(第二次跳转),在确定当前分支的预测结果(instr_0是否跳转)的同时,还能够确定下一分支的预测结果(instr_x是否跳转),并且能够确定下一分支的操作指令地址(va_x+1或va_t),这使得缩减了下一分支中跳转预测引入的气泡(对照图2(a)和图2(c)中instr_t对应的气泡)。

根据本公开实施例的用于流水线指令流的控制方法能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

根据本公开的一个示例性实现,所述控制方法200还包括:如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括从所述分支指令追踪高速缓存获取所述第一关联指令的跳转指令地址va_t;以及如果确定所述第一关联指令不发生跳转,存获取与所述第一关联指令对应的操作指令地址包括从所述分支指令追踪高速缓存获取所述第一关联指令的顺序指令地址va_x+1。

根据第一关联指令是否发生跳转来确定与所述第一关联指令对应的操作指令地址,即,下一分支的后续取指地址,该后续取指地址应当是该第一关联指令的跳转目标指令或顺序执行指令所对应的地址中的一个,这有利于缩减下一分支的跳转预测引入的气泡。

图4是根据本公开实施例的用于流水线指令流的控制方法200的步骤s210的流程图。如图4所示,根据本公开的一个示例性实现,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令(s210)包括:在获取当前指令之前对该指令进行预解码(s211);以及根据预解码的结果来确定该当前指令是否是单一跳转的分支指令(s212)。

根据本公开的上述示例性实现,在预编码阶段对单一跳转的分支指令进行预编码,在获取当前指令之前(取指前)对指令进行预解码,识别出需要应用根据本公开的实施例的控制方法的指令。

根据本公开的一个示例性实现,所述控制方法200还包括:如果根据预解码的结果确定该当前指令不是单一跳转的分支指令,则不执行所述控制方法。

根据本公开的上述示例性实现,仅对于单一跳转的分支指令应用根据本公开的实施例的控制方法,不对不满足条件的指令应用该控制方法,可以提升效率、降低功耗。

根据本公开的一个示例性实现,所述控制方法200还包括:如果在上述步骤s230确定该当前指令发生跳转,在步骤s240无法从所述分支指令追踪高速缓存获取所述第一关联指令,则建立与该当前指令相关的条目。即,如果所述分支指令追踪高速缓存中没有与该当前指令相关的历史分支信息,则建立与该当前指令相关的条目,便于后续的流水线操作。

图5是根据本公开实施例的用于流水线指令流的控制方法200中建立与当前指令相关的条目的子方法300流程图。如图5所示,根据本公开的一个示例性实现,建立与该当前指令相关的条目的子方法300包括:在所述分支指令追踪高速缓存中存储所述第一关联指令(s310);在所述分支指令追踪高速缓存中存储所述第一关联指令的顺序指令地址(s320);如果所述第一关联指令是单一跳转的分支指令,在所述分支指令追踪高速缓存中存储所述第一关联指令的跳转指令地址(s330)。

根据本公开的上述示例性实现,在分支指令追踪高速缓存中没有与当前指令相关的历史分支信息的情况下,在分支指令追踪高速缓存中建立与该当前指令相关的条目,以便于后续流水线指令流中再次出现该指令时,针对与该指令相关的当前分支,能够快速进行取指操作,获取该指令跳转后的后续指令(即,跳转目标指令,第一关联指令),并且针对与该指令相关的下一分支,能够快速确定后续取指地址,从而缩减流水线气泡。

根据本公开的一个示例性实现,所述控制方法200在建立与该当前指令相关的条目之后,还根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。在分支指令追踪高速缓存中建立与该当前指令相关的条目之后,对应更新当前分支预测表和超前分支预测表,这使得在后续流水线指令流中再次出现该指令时,能够确定该指令是否跳转以及确定与其相关的第一关联指令是否跳转,从而缩减流水线气泡。

图6是示意性图示了根据本公开的实施例的用于流水线指令流的控制设备110的一种示例性实现的框图。该控制设备110可以是用于处理指令流的任何设备,例如是笔记本计算机、台式计算机、平板计算机等。设备110的类型不构成对本公开的限制。如图6所示,该控制设备110包括存储器111、处理器112和分支指令追踪高速缓存113。所述存储器111用于存储程序代码。所述处理器112用于在执行所述程序代码时执行如下操作:确定当前指令instr_0是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令;如果确定该当前指令instr_0是单一跳转的分支指令,基于该当前指令所对应的指令地址va_0访问当前分支预测表和超前分支预测表;根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转;在确定该当前指令instr_0发生跳转时,从所述分支指令追踪高速缓存获取所述第一关联指令instr_x,并且获取与所述第一关联指令instr_x对应的操作指令地址以执行控制。所述分支指令追踪高速缓存113用于存储所述第一关联指令instr_x、与所述第一关联指令instr_x对应的操作指令地址。

在本公开实施例中,处理器112确定当前指令instr_0是否是单一跳转的分支指令。单一跳转的分支指令是指在跳转时仅能够跳转到单一的分支目的地址的指令,即,该分支指令的分支目的地址只有一个,而不是多个。在发生跳转时,程序仅能够跳转到该分支指令指向的单一的分支目的地址所对应的指令(即,跳转目标指令)继续执行。例如,参考图1中的指令流120,在程序运行到单一跳转的分支指令instr_0时,根据判定条件的真/假,程序要么跳转到单一的分支目的地址va_x所对应的指令instr_x继续执行,要么顺序执行下一条指令instr_1。

在本公开实施例中,如果确定该当前指令instr_0是单一跳转的分支指令,基于该当前指令instr_0所对应的指令地址va_0同时访问当前分支预测表和超前分支预测表。根据本公开的一个示例性实现,当前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)是否会发生跳转。例如,用数值0来表示对应的单一分支指令不会发生跳转,用数值1来表示对应的单一分支指令会发生跳转。根据本公开的一个示例性实现,超前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)的跳转目标指令(例如,instr_x)是否会发生跳转。例如,用数值0来表示跳转目标指令不会发生跳转,用数值1来表示跳转目标指令会发生跳转。可以理解的是,当前分支预测表和超前分支预测表也可以采用其它方式来表示相应的指令是否发生跳转,本公开对此不做限制。

与指令地址对应的单一分支指令的跳转目标指令又被称为该指令地址所关联的第一关联指令。

在本公开实施例中,根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转,在确定该当前指令instr_0发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令instr_x,并且获取与所述第一关联指令instr_x对应的操作指令地址以执行控制。根据本公开实施例的控制设备110针对当前分支,即,第一分支(第一次跳转),在确定当前指令instr_0发生跳转时,能够从分支指令追踪高速缓存快速获取所述第一关联指令instr_x,这使得提高了取指效率,缩减了当前分支中地址重定向引入的气泡(对照图2(a)和图2(c)中instr_x对应的气泡)。根据本公开实施例的控制设备110针对下一分支,即,第二分支(第二次跳转),在确定当前分支的预测结果(instr_0是否跳转)的同时,还能够确定下一分支的预测结果(instr_x是否跳转),并且能够确定下一分支的操作指令地址(va_x+1或va_t),这使得缩减了下一分支中跳转预测引入的气泡(对照图2(a)和图2(c)中instr_t对应的气泡)。

根据本公开实施例的用于流水线指令流的控制设备能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

根据本公开的一个示例性实现,如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述处理器112从所述分支指令追踪高速缓存113获取所述第一关联指令的跳转指令地址va_t;以及如果确定所述第一关联指令不发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述处理器112从所述分支指令追踪高速缓存113获取所述第一关联指令的顺序指令地址va_x+1。

根据第一关联指令是否发生跳转来确定与所述第一关联指令对应的操作指令地址,即,下一分支的后续取指地址,该后续取指地址应当是该第一关联指令的跳转目标指令或顺序执行指令所对应的地址中的一个,这有利于缩减下一分支的跳转预测引入的气泡。

根据本公开的一个示例性实现,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令包括:所述处理器112在获取当前指令之前对该指令进行预解码;所述处理器112根据预解码的结果来确定该当前指令是否是单一跳转的分支指令。

根据本公开的上述示例性实现,在预编码阶段对单一跳转的分支指令进行预编码,在获取当前指令之前(取指前)对指令进行预解码,识别出需要应用根据本公开的实施例的控制设备的指令。

根据本公开的一个示例性实现,如果根据预解码的结果确定该当前指令不是单一跳转的分支指令,则所述处理器112不执行所述操作。

根据本公开的上述示例性实现,仅对于单一跳转的分支指令应用根据本公开的实施例的控制设备,不对不满足条件的指令应用该控制设备,可以提升控制设备的效率、降低控制设备的功耗。

根据本公开的一个示例性实现,如果所述处理器112在确定该当前指令发生跳转时,无法从所述分支指令追踪高速缓存113获取所述第一关联指令,则所述处理器112建立与该当前指令相关的条目。

即,如果分支指令追踪高速缓存113中没有与该当前指令相关的历史分支信息,则处理器112建立与该当前指令相关的条目,便于后续的流水线操作。

根据本公开的一个示例性实现,所述处理器112建立与该当前指令相关的条目包括:所述处理器112在所述分支指令追踪高速缓存113中存储所述第一关联指令;所述处理器112在所述分支指令追踪高速缓存113中存储所述第一关联指令的顺序指令地址;如果所述第一关联指令是单一跳转的分支指令,所述处理器112在所述分支指令追踪高速缓存113中存储所述第一关联指令的跳转指令地址。

根据本公开的上述示例性实现,在分支指令追踪高速缓存113中没有与当前指令相关的历史分支信息的情况下,处理器112在分支指令追踪高速缓存113中建立与该当前指令相关的条目,以便于后续流水线指令流中再次出现该指令时,针对与该指令相关的当前分支,能够快速进行取指操作,获取该指令跳转后的后续指令(即,跳转目标指令,第一关联指令),并且针对与该指令相关的下一分支,能够快速确定后续取指地址,从而缩减流水线气泡。

根据本公开的一个示例性实现,所述处理器112还根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。

在处理器112在分支指令追踪高速缓存113中建立与该当前指令相关的条目之后,对应更新当前分支预测表和超前分支预测表,这使得在后续流水线指令流中再次出现该指令时,能够确定该指令是否跳转以及确定与其相关的第一关联指令是否跳转,从而缩减流水线气泡。

根据本公开实施例的用于流水线指令流的控制设备能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

图7是示意性图示了根据本公开的实施例的用于流水线指令流的控制设备110的另一种示例性实现的框图。该控制设备110可以是用于处理指令流的任何设备,例如是笔记本计算机、台式计算机、平板计算机等。设备110的类型不构成对本公开的限制。如图7所示,该控制设备110包括指令确定单元114、访问单元115、跳转确定单元116、获取单元117。该指令确定单元114用于确定当前指令instr_0是否是单一跳转的分支指令,所述单一跳转的分支指令是在跳转时仅能够跳转到单一的分支目的地址的指令。该访问单元115用于在指令确定单元确定该当前指令instr_0是单一跳转的分支指令时,基于该当前指令所对应的指令地址va_0访问当前分支预测表和超前分支预测表。该跳转确定单元116用于根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转。该获取单元117用于在跳转确定单元116确定该当前指令instr_0发生跳转时,从分支指令追踪高速缓存130获取所述第一关联指令instr_x,并且获取与所述第一关联指令instr_x对应的操作指令地址以执行控制。

在本公开实施例中,指令确定单元114确定当前指令instr_0是否是单一跳转的分支指令。单一跳转的分支指令是指在跳转时仅能够跳转到单一的分支目的地址的指令,即,该分支指令的分支目的地址只有一个,而不是多个。在发生跳转时,程序仅能够跳转到该分支指令指向的单一的分支目的地址所对应的指令(即,跳转目标指令)继续执行。例如,参考图1中的指令流120,在程序运行到单一跳转的分支指令instr_0时,根据判定条件的真/假,程序要么跳转到单一的分支目的地址va_x所对应的指令instr_x继续执行,要么顺序执行下一条指令instr_1。

在本公开实施例中,如果确定该当前指令instr_0是单一跳转的分支指令,访问单元115基于该当前指令instr_0所对应的指令地址va_0同时访问当前分支预测表和超前分支预测表。根据本公开的一个示例性实现,当前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)是否会发生跳转。例如,用数值0来表示对应的单一分支指令不会发生跳转,用数值1来表示对应的单一分支指令会发生跳转。根据本公开的一个示例性实现,超前分支预测表中存储与指令地址对应的一系列数值0和1,利用这些数值0和1来表示与各个指令地址(例如,va_0)分别对应的单一分支指令(例如,instr_0)的跳转目标指令(例如,instr_x)是否会发生跳转。例如,用数值0来表示跳转目标指令不会发生跳转,用数值1来表示跳转目标指令会发生跳转。可以理解的是,当前分支预测表和超前分支预测表也可以采用其它方式来表示相应的指令是否发生跳转,本公开对此不做限制。

与指令地址对应的单一分支指令的跳转目标指令又被称为该指令地址所关联的第一关联指令。

在本公开实施例中,跳转确定单元116根据所述当前分支预测表确定该当前指令instr_0是否发生跳转,并根据所述超前分支预测表确定该指令地址va_0所关联的第一关联指令instr_x是否发生跳转,获取单元117在跳转确定单元116确定该当前指令instr_0发生跳转时,从分支指令追踪高速缓存获取所述第一关联指令instr_x,并且获取与所述第一关联指令instr_x对应的操作指令地址以执行控制。根据本公开实施例的控制设备110针对当前分支,即,第一分支(第一次跳转),在确定当前指令instr_0发生跳转时,能够从分支指令追踪高速缓存快速获取所述第一关联指令instr_x,这使得提高了取指效率,缩减了当前分支中地址重定向引入的气泡(对照图2(a)和图2(c)中instr_x对应的气泡)。根据本公开实施例的控制设备110针对下一分支,即,第二分支(第二次跳转),在确定当前分支的预测结果(instr_0是否跳转)的同时,还能够确定下一分支的预测结果(instr_x是否跳转),并且能够确定下一分支的操作指令地址(va_x+1或va_t),这使得缩减了下一分支中跳转预测引入的气泡(对照图2(a)和图2(c)中instr_t对应的气泡)。

根据本公开实施例的用于流水线指令流的控制设备能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

根据本公开的一个示例性实现,如果确定所述第一关联指令发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述获取单元117从所述分支指令追踪高速缓存130获取所述第一关联指令的跳转指令地址va_t;以及如果确定所述第一关联指令不发生跳转,获取与所述第一关联指令对应的操作指令地址包括所述获取单元117从所述分支指令追踪高速缓存130获取所述第一关联指令的顺序指令地址va_x+1。

根据第一关联指令是否发生跳转来确定与所述第一关联指令对应的操作指令地址,即,下一分支的后续取指地址,该后续取指地址应当是该第一关联指令的跳转目标指令或顺序执行指令所对应的地址中的一个,这有利于缩减下一分支的跳转预测引入的气泡。

根据本公开的一个示例性实现,所述当前指令是被预编码的指令,所述确定当前指令是否是单一跳转的分支指令包括:所述指令确定单元114在获取当前指令之前对该指令进行预解码;所述指令确定单元114根据预解码的结果来确定该当前指令是否是单一跳转的分支指令。

根据本公开的上述示例性实现,在预编码阶段对单一跳转的分支指令进行预编码,在获取当前指令之前(取指前)对指令进行预解码,识别出需要应用根据本公开的实施例的控制设备的指令。

根据本公开的一个示例性实现,如果所述指令确定单元114根据预解码的结果确定该当前指令不是单一跳转的分支指令,则所述访问单元115不访问当前分支预测表和超前分支预测表,所述跳转确定单元116不进行跳转确定操作,并且所述获取单元117不进行获取操作。

根据本公开的上述示例性实现,仅对于单一跳转的分支指令应用根据本公开的实施例的控制设备,不对不满足条件的指令应用该控制设备,可以提升控制设备的效率、降低控制设备的功耗。

根据本公开的一个示例性实现,所述控制设备110还包括建立单元118,如果所述获取单元117在确定该当前指令发生跳转时,无法从所述分支指令追踪高速缓存130获取所述第一关联指令,则所述建立单元118建立与该当前指令相关的条目。

即,如果分支指令追踪高速缓存130中没有与该当前指令相关的历史分支信息,则建立单元118建立与该当前指令相关的条目,便于后续的流水线操作。

根据本公开的一个示例性实现,所述建立单元118建立与该当前指令相关的条目包括:在所述分支指令追踪高速缓存130中存储所述第一关联指令;在所述分支指令追踪高速缓存130中存储所述第一关联指令的顺序指令地址;如果所述第一关联指令是单一跳转的分支指令,在所述分支指令追踪高速缓存130中存储所述第一关联指令的跳转指令地址。

根据本公开的上述示例性实现,在分支指令追踪高速缓存130中没有与当前指令相关的历史分支信息的情况下,建立单元118在分支指令追踪高速缓存130中建立与该当前指令相关的条目,以便于后续流水线指令流中再次出现该指令时,针对与该指令相关的当前分支,能够快速进行取指操作,获取该指令跳转后的后续指令(即,跳转目标指令,第一关联指令),并且针对与该指令相关的下一分支,能够快速确定后续取指地址,从而缩减流水线气泡。

根据本公开的一个示例性实现,所述建立单元118还根据所述当前指令和所述第一关联指令的执行来更新所述当前分支预测表和超前分支预测表。

在建立单元118在分支指令追踪高速缓存130中建立与该当前指令相关的条目之后,对应更新当前分支预测表和超前分支预测表,这使得在后续流水线指令流中再次出现该指令时,能够确定该指令是否跳转以及确定与其相关的第一关联指令是否跳转,从而缩减流水线气泡。

根据本公开实施例的用于流水线指令流的控制设备能够针对连续跳转的指令流提高取指效率,缩减当前分支的地址重定向引入的气泡,并且能够缩减下一分支的跳转预测引入的气泡,从而减少连续跳转所带来的流水线气泡。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本公开各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第三等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。

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