《对零谓词分支误预测的分支误预测行为抑制.pdf》由会员分享,可在线阅读,更多相关《对零谓词分支误预测的分支误预测行为抑制.pdf(27页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103353834 A(43)申请公布日 2013.10.16CN103353834A*CN103353834A*(21)申请号 201310175278.8(22)申请日 2013.02.2213/404,362 2012.02.24 USG06F 9/38(2006.01)(71)申请人苹果公司地址美国加利福尼亚(72)发明人 JE高宁恩(74)专利代理机构中国国际贸易促进委员会专利商标事务所 11038代理人鲍进(54) 发明名称对零谓词分支误预测的分支误预测行为抑制(57) 摘要本发明涉及一种用于抑制分支误预测行为的方法和系统,其中使得控制流响应于确定谓词矢量。
2、为空而转向指令周围的分支的条件分支指令被预测为不被采用。然而,响应于检测到该预测是不正确的,禁止误预测行为。(30)优先权数据(51)Int.Cl.权利要求书3页 说明书15页 附图8页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书3页 说明书15页 附图8页(10)申请公布号 CN 103353834 ACN 103353834 A1/3页21.一种方法,包括:生成预测程序指令执行的控制流没有响应于条件流控制指令的执行而被改变的预测,其中所述条件流控制指令响应于确定谓词矢量的一个或多个元素中的每一个都为空而改变所述控制流;检测所述预测是不正确的;以及响应于检测到所述预测是。
3、不正确的而禁止误预测行为。2.如权利要求1所述的方法,其中禁止误预测行为包括:执行落入所述条件流控制指令的误预测路径中的程序指令。3.如权利要求1所述的方法,其中禁止误预测行为包括:禁止从处理器的执行管道中刷新在所述条件流控制指令和指令目标之间的按程序顺序的程序指令。4.如权利要求1所述的方法,其中所述谓词矢量的一个或多个元素中的每一个都控制对应的矢量元素将接收特定矢量指令的结果,还是将在所述特定矢量指令的执行期间保持不被修改。5.如权利要求4所述的方法,其中禁止所述误预测行为进一步依赖于接收到对于由所述条件流控制指令指定的条件代码标志的状态是谓词生成指令的结果的确定。6.如权利要求4所述的方。
4、法,其中禁止所述误预测行为进一步依赖于接收到对于落入在所述条件流控制指令和所述条件流控制指令的指令目标之间的误预测路径中的程序指令依赖于所述谓词矢量中的谓词元素的确定。7.如权利要求4所述的方法,其中禁止所述误预测行为进一步依赖于接收到对于落入在所述条件流控制指令和所述条件流控制指令的指令目标之间的误预测路径中的程序指令依赖于通过所述谓词矢量从调零断定中得出的谓词矢量。8.一种处理器,包括:包括多个执行管道的执行单元,所述多个执行管道被配置成对矢量程序指令的矢量操作数的不同元素进行并发操作;耦合至所述执行单元的预测单元,被配置成生成流控制指令将不改变程序指令执行的控制流的预测,其中所述流控制指。
5、令响应于确定谓词矢量的一个或者多个元素中的每一个都为空而改变所述控制流;以及误预测检测单元,被配置成检测所述预测是不正确的;其中所述误预测检测单元进一步被配置成响应于检测到所述预测是不正确的而禁止所述执行管道的误预测行为。9.如权利要求8所述的处理器,其中为了禁止误预测行为,所述误预测检测单元被配置成允许所述执行单元执行落入所述流控制指令的误预测路径中的程序指令。10.如权利要求8所述的处理器,其中所述谓词矢量的一个或者多个元素中的每一个都控制对应的矢量元素将接收特定矢量指令的结果、还是将在所述特定矢量指令的执行期间保特不被修改。11.如权利要求10所述的处理器,其中所述误预测检测单元进一步被。
6、配置成响应于接收到对于由所述流控制指令指定的条件代码标志的状态是谓词生成指令的结果的确定而禁止误预测行为。权 利 要 求 书CN 103353834 A2/3页312.如权利要求11所述的处理器,其中所述误预测检测单元进一步被配置成响应于接收到对于落入在所述流控制指令和所述流控制指令的指令目标之间的误预测路径中的程序指令是依赖于谓词矢量中的谓词元素、还是依赖于通过所述谓词矢量从调零断定中得出的谓词矢量的确定而禁止误预测行为。13.一种方法,包括:生成程序指令执行的控制流没有响应于条件流控制指令的执行而被改变的预测,其中所述条件流控制指令响应于确定谓词矢量的一个或多个元素中的每一个都为空而改变所。
7、述控制流;检测所述预测是不正确的;以及响应于检测到所述预测是不正确的,执行落入在所述条件流控制指令和所述条件流控制指令的目标指令之间的误预测路径中的程序指令。14.如权利要求13所述的方法,进一步包括:响应于检测到所述预测是不正确的,应用所述谓词矢量以丢弃落入在所述条件流控制指令和所述条件流控制指令的目标指令之间的误预测路径中的程序指令的执行结果。15.如权利要求13所述的方法,其中所述谓词矢量的每个元素的值控制对应的矢量元素将接收特定矢量指令的结果、还是将在特定矢量指令的执行期间保持不被修改。16.如权利要求13所述的方法,进一步包括:响应于接收到对于由所述条件流控制指令指定的条件代码标志的。
8、状态为谓词生成指令的结果的确定而执行落入在所述条件流控制指令和所述目标指令之间的误预测路径中的程序指令。17.一种处理器,包括:包括多个执行管道的执行单元,所述多个执行管道被配置成对矢量程序指令的矢量操作数的不同元素进行并发操作;耦合至所述执行单元的分支预测单元,被配置成生成分支指令的执行将不导致分支被采用的预测,其中所述分支指令的执行导致响应于确定谓词矢量的一个或多个元素中的每一个都为空而采用所述分支;以及误预测检测单元,被配置成检测所述预测是不正确的;其中,响应于检测到所述预测是不正确的,所述误预测检测单元被配置成禁止所述执行管道的一个或者多个管道段的刷新,以使得所述执行单元执行落入所述分。
9、支指令的误预测路径中的程序指令。18.如权利要求17所述的处理器,其中所述谓词矢量的每个元素的值控制对应的程序变量矢量元素将接收特定矢量指令的结果,还是将在特定矢量指令的执行期间保持不被修改。19.如权利要求18所述的处理器,其中所述预测单元被配置成禁止响应于接收到对于由所述分支指令指定的条件代码标志的状态是谓词生成指令的结果的确定而刷新所述执行管道的一个或者多个管道段。20.一种系统,包括:存储器,被配置成存储程序指令;以及耦合至所述存储器的处理器,其中所述处理器包括:权 利 要 求 书CN 103353834 A3/3页4包括多个执行管道的执行单元,所述多个执行管道被配置成对矢量程序指令的。
10、矢量操作数的不同元素进行并发操作;耦合至所述执行单元的预测单元,被配置成生成流控制指令将不改变程序指令执行的控制流的预测,其中所述流控制指令响应于确定谓词矢量的一个或者多个元素中的每一个都为空而改变所述控制流;以及误预测检测单元,被配置成检测所述预测是不正确的;其中所述误预测检测单元被配置成响应于检测到所述预测是不正确的而禁止所述执行管道的误预测行为。权 利 要 求 书CN 103353834 A1/15页5对零谓词分支误预测的分支误预测行为抑制技术领域0001 本发明公开涉及处理器,尤其是,涉及在所断定分支指令(predicated branch instruction)的分支误预测期间的矢。
11、量指令执行。背景技术0002 在大多数现代处理器中分支预测已经变得很常见。当后向分支是可以高度预测的时,依赖于正在处理的数据的性质,前向分支可以或者不可以被很好地预测。0003 在执行计算时,处理矢量指令的一些处理器使用掩蔽断定(masking predication)来控制是否修改矢量中的元素或保持它们的值不被修改。尤其是,谓词矢量(predicate vector)可以控制是否修改矢量的各个元素。在一些情况下,在该谓词矢量包含全零时,分支指令可以用于该所断定指令周围的分支。在该分支被准确地预测的情况下,这通常可以改进功率和性能。0004 在常规矢量处理器中,当分支被误预测时,处理器管道(p。
12、rocessor pipeline)通常可以被刷新(flush),并且新指令从诸如分支目标地址的不同地址被取出。然而,这种类型的常规分支误预测行为可能是不必要的和浪费的。发明内容0005 公开了用于抑制分支误预测行为的方法的各种实施例。一般来说,设想了一种方法,其中使得控制流响应于确定谓词矢量为空(null)而转向指令周围的分支的条件分支指令被预测为不被采用。然而,响应于检测到该预测不正确,禁止误预测行为。0006 在一实施例中,所述方法包括生成预测程序指令执行的控制流没有响应于条件流控制指令的执行而被改变的预测。所述条件流控制指令响应于确定谓词矢量的一个或多个元素中的每一个都为空而改变所述控。
13、制流。此外,所述方法还可以包括检测所述预测是不正确的,并且响应于检测到所述预测是不正确的而禁止误预测行为。0007 在一特定实现中,禁止该误预测行为可以包括执行落入在该条件流控制指令的误预测路径(mispredicted path)中的程序指令。0008 在另一特定实现中,禁止该误预测行为可以包括禁止从处理器的执行管道刷新在流控制指令和指令目标之间的按程序顺序的程序指令。附图说明0009 图1是计算机系统的一个实施例的框图。0010 图2是图解图1所示的处理器的一个实施例的附加细节的框图。0011 图3是图解程序代码循环的示例并行化的图。0012 图4A是图解例子1中所示的循环的标量执行期间各。
14、种状态序列的图。0013 图4B是图解例子1的循环的宏标量矢量化程序代码的执行进展(progression)的图。说 明 书CN 103353834 A2/15页60014 图5A和图5B是图解程序源代码的矢量化的一个实施例的图。0015 图6A是图解非推测性矢量化程序代码的一个实施例的图。0016 图6B是图解推测性矢量化程序代码的另一个实施例的图。0017 图7是描绘在所断定分支指令的分支误预测期间图2的处理器的一个实施例的操作的流程图。0018 特定实施例通过附图中的例子被示出并且将在这里详细地描述。然而,可以理解的是,附图和详细描述并非意图将权利要求限制到所公开的特定实施例,即使在这里。
15、针对特定特征仅仅描述了单个实施例也是如此。相反,意图要覆盖对受益于本公开的本领域技术人员显而易见的所有改变、等同和替换。除非另有说明,在本公开中提供的特征的示例意图是说明性的而非限制性的。0019 如在整个本申请中使用的那样,词“可以”是在允许的意义下(即,意味着有可能)使用的,而不是在强制的意义下(即,意味着必须)使用的。相似地,词“包括”、“包含”意味着包括但不限制于此。0020 各种单元、电路、或其他组件可以被描述为“被配置成”执行一个或多个任务。在这种背景下,“被配置成”是通常意味着“具有在操作期间执行该一个或多个任务的电路”的结构的广义记载。同样地,该单元/电路/组件能够被被配置成执。
16、行该任务,即使在该单元/电路/组件当前并不存在时也是如此。一般来说,形成对应于“被配置成”的结构的电路可以包括硬件电路。类似地,为了便于描述,各种单元/电路/组件可以被描述为执行一个或多个任务。这种描述应被解释为包括短语“被配置成”。记载被配置成执行一个或者多个任务的单元/电路/组件明显不是要调用35U.S.C.112第6段对于该单元/电路/组件的解释。0021 本公开的范围包括这里公开(明确地或者隐含地)的任意特征或各特征的组合,或其任何概括,不论其是否减轻本文所要解决的任意或所有问题。因此,新权利要求可以在本申请(或者要求了其优先权的申请)的审查进行期间整理成为特征的任意这种组合。具体地,。
17、参考所附权利要求,来自从属权利要求的特征可以与独立权利要求的特征组合,并且可以以任意恰当的方式,而不仅仅是以在所附权利要求中列举的特定组合,来组合来自各个独立权利要求的特征。具体实施方式0022 计算机系统概述0023 现在转向图1,示出了计算机系统一个实施例的框图。计算机系统100包括处理器102、二级(L2)高速缓存106、存储器108、以及海量存储装置110。如图所示,处理器102包括一级(L1)高速缓存104。值得注意的是虽然在计算机系统100中显示并描述了特定组件,但是在可替换实施例中,在计算机系统100中可以存在不同组件以及不同数量的组件。例如,计算机系统100可以不包含一些存储器。
18、分级体系(例如,存储器108和/或海量存储装置110)。可替换地,虽然L2高速缓存106被图示在处理器102外部,但是设想了在其他实施例中,L2高速缓存106可以在处理器102内部。进一步注意到:在这样的实施例中,可以使用三级(L3)高速缓存(未图示)。此外,计算机系统100可以包含图形处理器、视频卡、视频捕获装置、用户接口装置、网卡、光驱动器和/或使用总线、网络、或其他合适的通信渠说 明 书CN 103353834 A3/15页7道(为了简化都未示出)耦合至处理器102的其他外围装置。0024 在各种实施例中,处理器102可以是执行计算操作的通用处理器的代表。例如,处理器102可以为中央处理。
19、单元(CPU),诸如微处理器、微控制器、专用集成电路(ASIC)、或现场可编程门阵列(FPGA)。然而,如下面进一步描述的,处理器102可以包含一个或者多个用于矢量处理的机构(例如,矢量执行单元)。处理器102的示例矢量执行单元结合图2的描述在下面将被更加详细地描述。0025 海量存储装置110、存储器108、L2高速缓存106与L1高速缓存104为存储装置,其一起形成了存储处理器102的数据和指令的存储器分级体系。更具体地,海量存储装置110可以是高容量、非易失性存储器,诸如磁盘驱动器或具有长存取时间的大闪存单元,同时L1高速缓存104、L2高速缓存106以及存储器108可以较小,具有较短的。
20、存取时间。这些较快的半导体存储器存储频繁使用的数据的副本。存储器108可以是存储装置的动态随机存取存储器(DRAM)族中的存储装置的代表。存储器108的大小通常大于L1高速缓存104和L2高速缓存106,而L1高速缓存104和L2高速缓存106通常使用存储装置的静态随机存取存储器(SRAM)族中的较小装置来实现。在一些实施例中,L2高速缓存106、存储器108以及海量存储装置110在计算机系统100中的一个或者多个处理器之间共享。0026 在一些实施例中,存储器分级体系中的装置(即,L1高速缓存104等)能够每个周期存取(即,读和/或写)多个高速缓存线。这些实施例能够更加有效地处理基于到非连续。
21、存储器地址的指针或数组索引的矢量进行的存储器存取。0027 值得注意的是,下面描述的数据结构和程序指令(即,代码)可以被存储在非暂时性计算机可读存储装置上,该非暂时性计算机可读存储装置可以是能够存储由计算机系统(例如,计算机系统100)使用的代码和/或数据的任何装置或存储介质。一般来说,非暂时性计算机可读存储装置包括,但不限于,易失性存储器、非易失性存储器、磁性和光学存储装置,诸如盘驱动器、磁带、光盘(CD)、数字万用盘或数字视频盘(DVD)、或现在已知的或以后开发的能够存储计算机可读介质的其他介质。这样,海量存储装置110、存储器108、L2高速缓存106、和L1高速缓存104是非暂时性计算。
22、机可读存储装置的所有示例。0028 处理器0029 参照图2,示出了图示了图1的处理器的一个实施例的其他细节的框图。在图2所示的实施例中,处理器102可以包括多个管道段,虽然为了简便起见图2并未示出全部。因此,如图所示,处理器102包括L1高速缓存104、指令获取单元201、分支预测单元210、误预测单元212、整数执行单元202、浮点执行单元206以及矢量执行单元204。值得注意的是整数执行单元202、浮点执行单元206和矢量执行单元204作为一个组可以被互换地称作“执行单元”。0030 在各种实施例中,执行单元可以,例如,对于相关类型的操作数,执行可计算操作,诸如逻辑运算、数学运算或按位运。
23、算。更具体地,整数执行单元202可以执行涉及整数操作数的计算操作,浮点执行单元206可以执行涉及浮点操作数的计算操作,以及矢量执行单元204可以执行涉及矢量操作数的计算操作。整数执行单元和浮点执行单元通常被本领域所公知以及出于简便起见不再进一步描述。如上所述,虽然图2所示的处理器102的实施例包括组件的特定集合,可以设想的是在可替换实施例中处理器102可以包括不同数量或不同类型的执行单元、功能单元和管道段,诸如指令解码单元、调度器或保留站(reservation 说 明 书CN 103353834 A4/15页8station)、重排缓冲区、存储器管理单元、I/O接口等,其可以耦合到执行单元。。
24、0031 矢量执行单元204可以表示经典意义上的单指令多数据(SIMD)执行单元,其中它可以对多个数据元素并行地执行相同的操作。然而,值得注意的是在一些实施例中,这里描述的矢量指令可以与SIMD指令的其他实现不同。例如,在一个实施例中,由矢量指令对其进行操作的矢量元素可以具有不随矢量中的元素的数量变化的大小。相反,在一些SIMD实现中,数据元素大小随对其执行操作的数据元素的数量(例如,SIMD架构可以支持对8个8位元素的操作,而不仅仅是4个16位元素、2个32位元素等。)而变化。在一个实施例中,矢量执行单元204可以对包括在操作数的矢量中的数据元素中的一些或者全部进行操作。更具体地,矢量执行单。
25、元204可以被配置成对矢量程序指令的矢量操作数的不同元素进行并发操作。0032 在一个实施例中,矢量执行单元204可以包含矢量注册文件(未示出),其可以包括能够保持用于矢量执行单元204的操作数矢量和结果矢量的矢量寄存器。在一些实施例中,在矢量注册文件中有32个矢量寄存器,并且每个矢量寄存器可以包括128比特。然而,在可替换实施例中,可以有不同数量的矢量寄存器和/或每个寄存器有不同数量的比特。0033 矢量执行单元204可被配置成从矢量寄存器检索操作数和执行使得矢量执行单元204对操作数矢量中的一些或全部数据元素并行地执行操作的矢量指令。例如,矢量执行单元204能对矢量中的元素执行逻辑运算、数。
26、学运算或按位运算。矢量执行单元204可以在每个指令周期中执行一个矢量操作(虽然如上所述,但是“周期”可以包括多于一个用于触发、同步和/或控制矢量执行单元204的可计算操作的时钟周期)。0034 在一个实施例中,矢量执行单元204可以支持具有N个数据元素(例如,字节、字、双字等)的矢量,其中N可以是任何正整数。在这些实施例中,矢量执行单元204可以对操作数矢量中的N个或更少个数据元素并行地执行操作。例如,在矢量的长度为256位的实施例中,被操作的数据元素是四字节元素,并且该操作为将数据元素与一值相加,这些实施例可以将该值与矢量中的任意数量的元素相加。值得注意的是对于处理器102的不同实现,N可以。
27、不同。0035 在各种实施例中,矢量执行单元204可以包括至少一个控制信号,该控制信号使能操作数矢量中的数据元素的动态限制,矢量执行单元204对所述操作数矢量进行操作。特别地,依赖于控制信号的状态,矢量执行单元204可对矢量中的任意或全部数据元素进行选择性操作。例如,在矢量为512比特长并且被操作的数据元素为4字节元素的实施例中,控制信号被断言(assert)以防止操作对该操作数矢量中的16个数据元素中的一些或全部执行。注意:“动态”限制在对其执行操作的操作数矢量中的数据元素可以包括在运行时在每个周期单独地断言控制信号。0036 在一些实施例中,如下更加详细地描述的,基于包含在谓词的矢量或一个。
28、或者多个标量谓词中的值,矢量执行单元204将矢量操作仅应用于所选择的矢量数据元素。在一些实施例中,结果矢量中的剩余数据元素保持不受影响(其也可以被称作“断定(predication)”)或被强迫为零(其也可以被称作“调零(zeroing)”或“调零断定” )。在一些实施例中,用于该数据元素处理子系统(“航道(lane)”)的时钟,所述时钟由于矢量执行单元204中的断定或调零而没有被使用,能是有效的(power)和/或时钟门控的(clock-gated),从而降低在矢量执行单元204中的动态功率消耗。说 明 书CN 103353834 A5/15页90037 在各种实施例中,该架构可以为矢量长度。
29、不可知的以允许它在运行时适应并行性。更具体地,在指令或操作是失量长度不可知的时,可以使用任意长度的矢量执行该操作(即,指令等),直到由支持硬件强加的限制。例如,在矢量执行硬件支持能包括8个单独的4字节元素(因此具有8个元素的矢量长度)的矢量的实施例中,矢量长度不可知操作能对矢量中的8个元素中的任意数量元素进行操作。在支持不同矢量长度(例如,四元素)的不同硬件实现上,矢量长度不可知操作可以对不同数量的元素进行操作,由底层硬件使得该操作可得到所述元素。因此,编译器或程序员不需要明确知道由底层硬件(例如,矢量执行单元204)支持的矢量长度。在这样的实施例中,编译器生成或者程序员书写不需要依赖(或使用。
30、)特定矢量长度的程序代码。在一些实施例中,可以禁止在程序代码中指定特定矢量大小。因此,在这些实施例中的编译代码(即,二进制代码)在其他执行单元上运行,所述执行单元可以具有不同的矢量长度,同时从支持更长矢量的处理器中可能实现性能增益。在这样的实施例中,矢量长度可以用于给定的硬件单元,诸如可以在运行时期间从系统寄存器读取的处理器。因此,由于处理技术允许更长的矢量,遗留二进制代码的执行简单地加速而不需要软件开发人员的任何劳动。0038 一般来说,矢量长度可以被实现为2的幂(例如,2、4、8等)。然而,在一些实施例中,矢量长度不需为2的幂。具体地,3、7或者另一数量的数据元素的矢量能够以和2的幂个数据。
31、元素的矢量一样的方式使用。0039 在各种实施例中,矢量中的每个数据元素能包含一地址,矢量执行单元204使用该地址用于并行地执行一组存储器存取。在这样的实施例中,如果该矢量的一个或者多个元素包含无效的存储器地址,会发生无效的存储器读操作。因此,无效的存储器读操作,其否则将使得程序终止,可以替代地使得含有有效地址的任意元素被读取并且具有无效地址的元素可被标记,从而允许程序执行在面对推测性的且事后得知为非法的读取操作时继续。0040 在一些实施例中,处理器102(并且因此,矢量执行单元204)能对指针矢量进行操作并使用指针矢量。在这样的实施例中,每个矢量的数据元素的数量与每个矢量的指针的数量相同,。
32、而不用考虑数据类型的大小。对存储器操作的指令可以具有指示存储器存取的大小的变量,但是在处理器寄存器中的元素应该和指针大小相同。在这些实施例中,支持32位和64位寻址模式的处理器可以选择允许在32位模式下每个矢量的多个元素的2倍,因而获得更大的吞吐量。假设相同宽度数据路径,这意味着给32位寻址带来了显著的吞吐量优势。使用特定于实现的技术以放松要求。例如,通过注册器配对或一些其他特定机制,在32位模式下能支持双精度浮点数。0041 在一个实施例中,分支预测单元210可被配置成为条件分支指令生成用于获取单位201的分支目标程序计算器地址(PC)。更具体地,对于条件分支指令,分支预测单元210可以预测。
33、分支是将被采用或不被采用,并且控制逻辑(未示出)可以基于该预测生成用于获取单元201的PC。然后,可以依赖于该分支的所预测结果以推测性方式,获取、发布、和执行指令。在各种实施例中,分支预测单元210可以使用各种预测机制中的任一种生成该预测。例如,分支预测单元210可以使用维持各个分支的预测状态(例如,状态机、表格、计数器或其他数据结构)的本地预测器,在总体上考虑的多个分支上执行预测的全局预测器,组合本地和全局预测器的各元素的混合预测器,或其他合适的方法。在一些实施例中,分支说 明 书CN 103353834 A6/15页10预测单元210可以使用预测器,其动态地适应在执行期间变化的分支行为(例。
34、如,检测何时根据一种技术被较好地预测的分支根据不同技术将被更好地预测并适应)。0042 在一个实施例中,误预测单元212被配置成检测何时分支预测是不正确的(例如,其在此时执行的分支的实际行为不同于该分支的预测行为,这指示了误预测该分支。)此外,误预测单元212可以被配置成为执行单元202、206和204以及分支预测单元210提供误预测指示。值得注意的是虽然误预测单元212作为单独的单元示出,但是可以在其他实施例中设想误预测单元212可以是分支预测单元210的一部分,或者它可以是获取单元201的一部分,或者它可以是各种执行单元(例如,202、204和206)的任意或全部的一部分。0043 如上所。
35、述,在常规处理器误预测分支指令时,刷新管道以清除误预测路径中的指令,这是因为不应该允许这些推测性发布的指令根据不正确的推测修改处理器的状态。然后获取单元能获取正确的、非推测性路径的指令。但是,对于这个刷新和填充操作有如下惩罚:在重新开始有用的工作之前可能需要数百个执行周期。因而,如下面联系附图7的描述而详细地描述的,存在某种分支指令,其在被误预测时,可以不需要刷新在误预测路径中的指令以保证正确的处理器操作,例如,因为断定可以使得误预测路径中的指令即使被执行也没有影响。这样的分支指令所导致的对于执行误预测路径中的指令的惩罚轻于允许刷新误预测路径中的指令和从不同分支目标中获取指令的常规误预测行为所。
36、造成的惩罚。更具体地,存在在下面描述的宏标量架构中的某些指令,其在支持允许执行误预测路径中的指令的情况下可以抑制常规误预测行为。0044 宏标量架构概述0045 指令集架构(也称为宏标量架构)与支持硬件可以允许编译器生成用于循环的程序代码,而不必完全确定编译时的并行性,以及不用丢弃有用的静态分析信息。现在将描述宏标量架构的各种实施例。具体地,如下面将进一步描述的,提供一指令集,其不要规定循环具有并行性,而是替代地,如果动态条件允许的话,使得能够在运行时利用并行性。因此,该架构包括指令,该指令使得由编辑器生成的代码能够依赖于运行时条件通过切换所使用的并行性的量来在非并行(标量)和并行(矢量)之间。
37、动态切换。0046 因此,该架构提供了指令,所述指令使不确定量的矢量并行性用于循环迭代,而不需要在运行时使用该并行性。更具体地,该架构包括一组矢量长度不可知指令,其有效矢量长度依赖于运行时条件而变化。因此,如果运行时依赖需要代码的非并行执行,那么执行针对一个元素的有效矢量长度进行。类似地,如果运行时条件允许并行执行,以运行时依赖(以及底层硬件的矢量长度)所允许的任何程度的矢量并行方式执行相同的代码。例如,如果矢量的8个元素中的2个能安全地并行执行,那么诸如处理器102的处理器可以并行执行这两个元素。在这些实施例中,以矢量长度不可知格式表示程序代码使得能够有在现有系统中不存在的大范围的矢量化机会。0047 在各种实施例中,在编译期间,编译器首先分析程序代码中给定循环的循环结构并且执行静态依赖分析。然后,编译器生成程序代码,其保持静态分析信息并指令诸如处理器102的处理器例如如何解决运行时依赖以及如何以最大可能数量的并行性处理该程序代码。更具体地,编译器可以提供用于并行地执行对应的循环迭代集合的矢量指令,并且可以提供矢量控制指令,其用于动态限制矢量指令的执行以避免循环迭代之间的数据依赖导致错误。这个方法将并行化的确定推迟到运行时,在那里可以获得关于运行时依赖的信息,说 明 书CN 103353834 A10。