程序循环控制的制作方法

文档序号:15884269发布日期:2018-11-09 18:32阅读:500来源:国知局
程序循环控制的制作方法

本公开关于数据处理系统。更具体地,本公开关于在数据处理系统中的程序循环控制。

背景技术

已知提供具有程序指令的数据处理系统以支持程序循环执行。例如,已知提供支持重复程序指令的数据处理系统。该重复程序指令用来指定应多次被执行/遍历的一个或多个指令的后续序列,随后程序的执行进行到超过那个序列外。这提供循环表现。



技术实现要素:

本公开的至少一些示例实施例提供用于处理数据的装置,包括:

处理电路,以执行由程序指令指定的处理操作,该程序指令包括支持与相应向量处理通道相关联的多达nmax个向量元素的处理的至少一个向量处理程序指令;

指令解码器,以解码所述程序指令以生成控制信号来控制所述处理电路执行所述处理操作;其中

所述指令解码器包括预测循环指令解码器电路,以在待执行的程序循环体的多次迭代期间解码具有与其相关联的待处理的多个向量元素nve的预测循环指令;以及

所述处理电路包括预测循环控制电路以当nve/nmax不等于整数时操作,以在一个或多个所述迭代期间至少部分抑制在一个或多个所述向量处理通道中的处理,使得在所述迭代期间处理的向量元素的总数是nve。

本公开的至少一些示例实施例提供用于处理数据的装置,包括:

处理装置,用于执行由程序指令指定的处理操作,该程序指令包括支持与相应向量处理通道相关联的多达nmax个向量元素的处理的至少一个向量处理程序指令;

指令解码装置,用于解码所述程序指令以生成控制信号来控制所述处理装置执行所述处理操作;其中

所述指令解码装置包括预测循环指令解码装置,用于在待执行的程序循环体的多次迭代期间解码具有与其相关联的待处理的多个向量元素nve的预测循环指令;以及

所述处理装置包括预测循环控制装置,用于当nve/nmax不等于整数时操作,以在一个或多个所述迭代期间至少部分抑制在一个或多个所述向量处理通道中的处理,使得在所述迭代期间处理的向量元素的总数是nve。

本公开的至少一些示例实施例提供一种处理数据的方法,包括:

执行由程序指令指定的处理操作,该程序指令包括支持与相应向量处理通道相关联的多达nmax个向量元素的处理的至少一个向量处理程序指令;

解码所述程序指令以生成控制信号来控制所述处理操作的所述执行;其中

所述指令解码器的所述解码包括,在待执行的程序循环体的多次迭代期间解码具有与其相关联的待处理的多个向量元素nve的预测循环指令;以及

当nve/nmax不等于整数时,在一个或多个所述迭代期间至少部分抑制在一个或多个所述向量处理通道中的处理,使得在所述迭代期间被处理的向量元素的总数是nve。

附图说明

示例的实施例现将参考附图以通过仅示例的方式描述,其中:

图1示意地示出数据处理装置;

图2a示意地示出分支未来指令;

图2b示意地示出包括分支未来指令的程序指令序列;

图2c示意地示出具有指示预定指令的可编程参数的不同实施方式的多个分支未来指令;

图2d示意地示出具有可编程分支目标地址的不同实施方式的多个分支未来指令;

图3a示意地示出包括通过处理管线进行的分支未来指令的程序指令序列;

图3b示意地示出包括分支未来指令的指令序列的程序流;

图3c示意地示出包括分支未来和链路指令的指令序列的程序流;

图4示意地示出分支未来处理的方法;

图5示意地示出包括用于响应于数据失效的过程的分支未来处理的另一方法;

图5a示出处理条件分支未来指令的示例;

图5b示出处理对应于相反条件的一对条件分支未来指令的示例;

图6示意地示出零开销循环表现;

图7示意地示出当执行图6的零开销循环表现之后的指令时的处理管线阶段内容;

图8示意地示出包括循环/分支控制电路以控制零开销循环表现和分支未来指令表现的处理管线;

图9示出如何在程序计数器值与循环控制数据字段之间进行比较以标识在程序执行中的点,分支到循环开始位置应该在该点执行;

图10a是示意地示出循环开始程序指令的表现的流程图;

图10b示意地示出循环开始指令的实施方式;

图11是示意地示出循环结束程序指令的表现的流程图;

图12是示意地示出当执行作为零开销循环表现的部分的程序循环体时,循环控制电路的动作的流程图;

图13是示意地示出在程序循环体中控制指令执行以提供预测的流程图,其中向量指令可以在被预测控制的该程序循环体的给定迭代期间,在具有特定的活动向量元素的多个向量元素上操作;

图14a至图14e示出非预测和预测循环的执行的示例;以及

图15示意地示出虚拟机器实施方式。

具体实施方式

本公开意识到,分支指令可以导致降低性能的处理延迟。为解决此问题,本公开提供了分支未来指令解码电路以解码分支未来指令。该分支未来指令包括与分支目标地址相关联的可编程参数。该分支目标地址对应于分支后的可以由处理电路处理的程序指令。该分支未来指令还包括另一可编程分支点数据参数,该参数指示在程序指令序列中该分支未来指令之后的预定指令。通过在分支未来指令中包括另一可编程分支点数据参数,该处理电路可以在该分支点之前准备分支到分支目标地址。因此,当到达分支点时,可以避免或减少处理延迟。

图1示意地示出耦接到存储器102的数据处理装置100的示例。存储器102储存程序指令和运算元数据。指令通过提取单元104提取,并通过指令解码器106解码以生成控制信号120来控制处理电路。处理电路可以包括用于在从存储器102接收的或储存到存储器102的浮点运算元上执行数据处理操作的浮点处理电路108和浮点寄存器110。处理电路还包括用于在从存储器102接收的或储存到存储器102的整数运算元上执行数据处理操作的乘法器112、移位器114、加法器116及整数寄存器117。

由提取单元提取的一些指令可以是分支指令,该分支指令将处理从当前的程序指令序列进行分支到储存在从分支目标地址开始的存储器地址位置的程序指令。为了调节分支指令,数据处理装置100包括可以将程序流重定向到分支目标地址的分支单元119。为加速分支指令的处理,数据处理装置100可以包括分支预测器118。分支预测器118储存状态数据,并且基于该状态数据预测是否将采取分支指令。分支单元119还可以由循环控制数据控制以支持/提供零开销循环表现(替代或附加到其他循环控制电路),如本文将进一步描述的。分支预测器118还可以填充有循环控制,如本文将进一步描述。

第2a图示意地示出分支未来指令bf200的示例。分支未来指令200包括指示分支目标地址254的可编程参数、提供可编程分支点数据252的可编程参数、以及将该指令标识为分支未来指令的编码位258。分支点数据252指示在由数据处理装置待处理的程序指令序列中分支未来指令bf之后的预定指令。分支目标地址254指示当该程序流到达预定指令时处理应该分支到的指令的位置。可保留位数量(x256)用于其他参数。

返回图1,该数据处理装置包括分支未来指令解码电路122,用于响应于通过匹配分支未来编码位258而将指令标识为分支未来以(诸如第2a图所示的)解码分支未来指令。一旦解码该分支未来指令,该分支未来指令解码电路122控制该处理电路以将分支目标地址数据和指示该预定指令的分支点数据储存在分支控制数据缓存器130中。通过此方式储存数据,数据处理装置100可以被提供有从处理程序指令的正常序列分支可以发生时提前的指示、以及该分支将该程序执行点导向至的目标地址。因此,当该程序流到达由分支未来指令指示的预定指令时,该分支可以发生减少延迟或无延迟的处理。该数据处理装置还包括循环结束指令解码电路123以及预测循环开始指令解码电路125(其还用作非预测循环开始指令解码电路)以控制该处理电路响应于循环结束指令dle以及循环开始指令dls(p),如下文将进一步描述。

分支控制数据缓存器130可以将对应于分支点的数据储存为适当的位子集,该适当的位子集指示从在指令的开始储存地址之间区分的存储器储存地址的位的最低有效位末端开始的预定指令的存储器储存地址。为决定程序流什么时候到达预定指令,这些位可以与指示程序计数器的值相比较(例如,见下文所描述的图9)、与指示下一指令提取地址的值相比较、或与指示数据处理装置100的处理活动的值相比较。

图2b示出了包括分支未来指令bf以及程序指令序列(add1、add2、以及bx)的程序代码,其可以由数据处理装置100处理。当程序流以上文所描述的方式到达预定指令bx时,分支未来指令bf最初将数据处理装置100设置为分支到目标地址。在解码该分支未来指令之后,数据处理装置100将继续处理包括add1和add2的程序指令序列。一旦数据处理装置100已经处理了add2,储存在缓存器130中的分支点数据指示分支将发生。此外,分支控制数据缓存器130还储存对应于将要分支到的指令的地址的相应分支目标数据。因此,从对应于分支目标数据的分支目标指令开始分支到处理程序指令,可以发生而不导致处理延迟或将引入处理管线中的气泡(未使用的时槽)。

图2c示出了可编程分支点数据参数的不同示例,该参数指示关于图2b中所示的指令序列的预定指令。在图2c的分支未来指令201中,分支点数据包括指示分支指令bx的地址的数据。图1所示的分支控制电路124可以将指示bx的地址的数据匹配到对应于正提取的下一指令的值。然后,当确定该程序流已到达分支指令bx时,分支控制电路124触发分支到由分支未来指令201的分支目标所指示的指令。

该分支点数据可以替代地是指示指令add2的数据,如图2c的分支未来指令202所示。因此,以与分支未来指令201相同的方式,当该程序流已提取add2并到达bx时,分支控制电路124触发分支到该分支目标。

图2c的分支未来指令203示出了分支点数据,该分支点数据包括从在图2b中的分支未来指令bf到预定指令bx的地址偏移。在图2b的示例中,add1和add2是32位指令。因此,8字节的地址偏移指示预定指令bx。

图2c的分支未来指令204示出指示剩余指令计数的分支点数据。该剩余指令计数指示在到达预定指令之前、在该分支未来指令之后执行的指令数量。在图2b的示例中,这对应于add1和add2。因此,在此示例中剩余指令计数是+2。

图2c的分支未来指令205示出了指示在到达预定指令之前待处理的剩余程序储存位置的数量的剩余大小数据。如果指令add和add2是分别为32位和16位的可变长度指令,则它们的总大小应该是6字节并因此剩余大小值是6。

图2c的分支未来指令211示出分支点数据,该分支点数据包括从在第2b图中的分支未来指令bf到预定指令bx的地址偏移。在图2b的示例中,add1和add2是32位指令。因此,地址偏移是8字节,然而值4用来指示预定指令bx,因为将全部指令对准到至少2字的节边界并因此并不需要值8的最低有效位来唯一地标识预定指令的地址。

图2d示出具有与分支目标地址相关联的可编程参数的不同实施方式的分支未来指令的一些其他示例。如图2d的分支未来指令206所示,该分支目标可以由寄存器区分符<rm>指示,其指定通过处理电路储存该指令将分支到的存储器地址的寄存器位置。

图2d的分支指令207示出另一示例,其中该分支目标由立即偏移值<imm>指示,该立即偏移值通过从关于分支未来指令的存储器地址的点的偏移指示将分支到的指令的地址。

图2d的分支未来指令208和分支未来指令209示出了还包括链路区分符的分支未来指令的示例。该链路区分符控制该处理电路将返回地址储存在链路寄存器lr中。当该程序流完成开始于分支目标的程序指令的处理并且到达返回指令时,将另一分支执行到储存在链路寄存器中的地址。因此,一旦已经处理在分支目标的程序指令,处理可返回至程序指令的原始流。在其他示例中,可以将返回地址储存于由应用于堆栈点寄存器的预定偏移所指定的储存区域中的任何地址。

图2d还示出了条件分支未来指令210。条件分支未来指令210包括一些条件代码:op{cond}。当该条件分支未来指令被处理时,该分支未来指令解码器确定是否已满足该条件代码,并且根据此确定来处理该条件分支未来指令。

图3a示出了指令序列,该指令序列包括处理通过图1的数据处理装置100的处理管线(简单三阶段管线:提取、解码及执行)进行的分支未来指令。在循环0中,将指令i1送入处理管线的提取阶段。在循环1中,将图2b所示的指令序列的第一指令(即,分支未来指令bf)送入该管线中。指令i1还进行到在此循环中的解码阶段。在循环2中,将加法指令add1送入该管线中,并且将分支未来指令bf进行解码。在将分支未来指令bf进行解码时,分支未来指令解码电路122获取指示在程序指令序列中分支未来指令bf之后的预定指令的分支点数据,以及可以储存在分支控制数据缓存器130中的分支目标数据。在该情况下,该分支点数据指示另一分支指令bx。

在循环3中,将另一指令add2送入处理管线中。分支控制电路124标识了程序指令序列已到达该预定指令并且应该触发从分支目标地址开始到处理程序指令的分支。因此,在下一循环(循环4)中,将来自于分支目标地址处的程序指令的第一指令i1bt送入处理管线中。相似地,在循环5和循环6中,将两个其他指令i2bt和i3bt送入处理管线中。

图3b示出了当处理图3a的指令时数据处理装置100的程序流。可以看到,首先由该数据处理装置处理包括i1、bf、add1以及add2的指令的第一序列。由于分支未来指令bf,add2的处理指示分支应该发生在从分支目标地址开始的程序指令的另一序列。该另一序列包括分支目标指令i1bt、i2bt以及i3bt。可以在图3b中看到,该程序流分支离开包括分支未来指令的程序指令的第一序列,并且处理该分支目标指令。i1bt、i2bt以及i3bt可以是算术和逻辑指令、导致存储器操作被执行的数据处置指令、或任何其他类型指令。

如图3b所示,分支未来指令bf使得紧接着绕过分支指令bx的add2指令之后进行分支。分支指令bx可以包括用于以下事件的程序指令序列中:被储存在分支控制数据缓存器130中的分支未来状态数据在分支未来指令bf与bx之间失效。例如,在下列事件中:重所述处理电路被重置;循环控制电路或循环结束指令确定不需要包括所述分支未来指令的程序循环的另一迭代;异常被进入;异常尾链,通过其处理从处理当前异常直接进行到处理下一异常而不恢复在所述当前异常之前的状态;大于预定立即目标地址范围的分支指令的执行;分支指令的执行;循环开始指令;从异常返回;导致该数据处理装置的指令缓存器失效的指令的执行;使得所述控制数据缓存器无效的指令的执行;使得分支预测无效的指令的执行;该处理电路确定在程序循环体中的分支指向不在循环开始指令与循环结束指令之间的地址;在操作的安全模式与操作的非安全模式之间切换;以及一个或多个定义实施方式的条件;对应于分支未来指令的任何储存的分支点数据可以被无效。因此,执行由该分支未来指令指示的分支不再是可行的。因此,分支指令bx作为备份包括在序列程序指令中以分支到目标地址。然而,在正常情况下,分支指令bx将不被处理。

图3c示意地示出包括分支未来和链路指令bfl的程序指令序列。bfl指令导致分支到子常用程序函数:当到达指令mul时。bfl指令还导致返回地址值被储存到链路寄存器lr中,该返回地址值指示当已执行该子常用程序函数时所返回的cmp指令的地址。在一些实施例中,bfl指令可以将返回地址值储存到链路寄存器lr中。在其他实施例中,bfl指令可以将链路指示符标志存储存在分支控制数据缓存器130中,并且如果设置该链路指示符标志,则当触发分支到该分支目标地址时,分支控制电路124可将返回地址值储存到链路寄存器lr。

图4示出了一种用于分支未来处理的方法的示例。在步骤401中,分支未来指令被解码。该分支未来指令包括分别指示分支目标地址的可编程参数以及指示在程序指令序列中该分支未来指令之后的预定指令的分支点数据。该方法随后进行到步骤402,此处确定该程序指令序列是否已到达该预定指令。当确定该程序指令序列已到达该预定指令时,该方法进行到步骤403,此处触发从该分支目标地址分支到程序指令处理。

图5示出了一种用于分支未来处理的方法的另一示例。在步骤501中,解码分支未来指令。如先前所述,该分支未来指令包括分支目标地址以及指示在该程序指令序列中该分支未来指令之后的预定指令的分支点数据。在步骤502中,将分支点数据和分支目标地址储存在循环/分支控制缓存器中。在具有链路指令的分支未来情形中,该返回地址还可以利用链路寄存器lr来储存,在替代实施例中,具有链路指令的分支未来将导致储存链路指示符标志。处理随后进行到步骤503,此处对正在处理的程序指令序列是否到达该预定指令进行监控。若尚未到达预定指令,则在步骤504中检查该分支目标地址和该分支点数据是否已无效。在于步骤504的无效事件中,处理移动到步骤506,此处忽略该分支未来指令,并且正常程序流前进。然而,如果确定该数据仍是有效,则处理返回步骤503。当确定了该预定指令已经到达时,处理进行到步骤505,此处触发从该分支目标地址开始的程序指令处理的分支。在步骤502中储存链路指示符标志的实施例中,该处理电路应该检查以查看在步骤505中是否设置该标志,并且一旦确定已设置该标志时,将该返回地址储存在链路寄存器lr中。

图5a示出了指令的示例序列以示出可随着条件分支未来指令出现的问题及用于解决此问题的技术。如果满足相应条件(例如,相等eq),则指令的序列包括用于分支到某些目标地址的条件分支beq。指定与分支beq相同的条件eq并且还指定参数‘func(函数)’的相应条件分支未来指令bfcsel被包括,该参数‘func’指示该分支目标地址及用于标识地址bp的分支点数据bp,该地址bp之前应该进行该分支。因此,如果满足eq条件,仅当处理在点bp之前到达该指令add2时,将触发到分支目标指令i1bt的分支。正常情况下,如果不满足与条件分支相关联的条件,则不应进行分支并且替代地程序流顺序地继续。将期望分支未来指令bf以相似方式表现,使得若不满足针对分支未来指令bfcsel的条件,则在add2指令之后,不应该发生到分支目标地址‘func’的分支,而是应该执行于分支点bp处在指令add2之后的下一指令。

然而,在add2之后的指令是对应于分支未来指令bfcsel的条件分支beq,并且由于已知针对分支未来指令bfcsel而言不满足eq条件,分支beq将还不满足其条件。因此,当不满足该条件时,存在引入该处理管线中的两种‘wasted(浪费)’指令(分支未来指令bfcsel和分支指令beq),该‘wasted’指令占据提取/解码/发布/执行时槽而不触发任何实际处理操作(失败分支实质上表现为无操作(nop)指令)。因此,尽管在分支条件被通过的情形中包括分支未来指令bfcsel可改良性能,当不通过该条件时,包括分支未来指令bfcsel实际上导致性能损失,因为现在存在两种浪费指令(分支未来指令bfcsel和分支beq),而不是如果不包括分支未来指令bfcsel时的存在一种浪费指令(分支beq)。这使得针对编译器而言难以确定包括分支未来指令bfcsel是否合理,是否这样操作的决定可以取决于满足该条件的概率,该概率可能是数据依赖的并且可能是编译时间很难预测的。

图5a示出了该问题可以如何解决。除了条件代码eq、分支点信息bp和目标地址信息‘func’的外,条件分支未来指令bfcsel还可以指定分支旁路参数‘end(结束)’,该分支旁路参数‘end’指示分支旁路指令i2的地址,该分支旁路指令i2与分支未来指令bfcsel相关联的在随后分支指令beqx之后的指令。如果满足与分支未来指令bfcsel相关联的条件,则分支未来指令解码电路122控制该处理电路以将分支目标地址数据和指示仅在点bp之前的预定指令add2的分支点数据储存在分支控制数据缓存器130中。另一方面,若不满足与分支未来指令bfcsel相关联的条件,分支未来指令解码电路122控制该处理电路以将标识分支点bp的分支控制数据和分支旁路指令储存在分支控制数据缓存器130中。因此,当处理到达分支点bp时,如果不满足该条件,则不是顺序进行到下一指令beq,分支控制电路124触发到分支旁路指令i2的分支。

这意指无论是否满足与条件分支未来指令相关联的条件,都未到达分支指令beq本身,除非在到达分支点bp之前该分支控制数据无效。因此,不存在由引入分支未来指令bfcsel导致的损失,因为无论是否满足该条件并且无论该分支未来指令是否包括在内,与分支控制相关联的指令时槽的数量仍是1。因此,这意指编译器可以使用分支未来指令而无需评估包括该分支未来指令是否经倾向于引入性能损失,并因此使得分支未来指令利用率更可能地使得当实际执行程序代码时,能够更经常实现在分支点处减少分支延迟的性能益处。

分支旁路参数‘end’可以以各种方式被编码在条件分支指令中,或可以是隐含的并因此可能完全不需要编码。例如,‘end’地址可以被指定在寄存器中或被指定为立即值,并且可以被指定为绝对值或相对于分支未来指令本身bfcsel的程序计数器地址。然而,事实上,由于分支旁路指令i2将通常仅遵循来自分支点bp的少数指令,则可以更有效地将该分支旁路参数编码为相对于分支点处的预定指令add2的地址指定的地址,以减少编码该分支旁路参数所需的位的数量。一些实施例可以允许分支点bp被指定在分支指令beq前面的任意数量的指令。例如,这可以允许,诸如用于评估与当从该分支点以及分支本身进行分支时将绕过的分支beq相关联的条件的比较指令之类的控制指令。在该情况下,该分支旁路参数可以是指定该分支旁路指令相对于在分支点处的预定指令的偏移的二进制数值,该二进制数值是某地址步长值的倍数(例如,2或4字节)。

然而,其他实施例可以假设分支点bp是紧接在分支bx之前的指令add2,并且分支旁路指令i2是紧接在该分支之后的指令,因此在add2与i2之间存在一个指令。如果全部分支指令具有某固定指令长度,则在分支点bp处的指令add2与分支旁路指令i2的地址之间的偏移可以与某些已知偏移分开,并因此在该分支未来指令中可以完全不需要编码分支旁路参数‘end’。

另一方面,即使假设分支指令bx是分支点bp处将分支旁路指令i2与指令add2分开的唯一指令,一些实施方式可以支持可变指令长度,并因此插入分支指令beq可以具有多个指令长度中的一个。在该情况下,在条件分支未来指令bfcsel中旁路参数‘end’可以通过指定随后分支指令beq的长度来标识该分支旁路指令而不需要提取并确定分支指令beq的长度,例如,如果存在针对分支指令的两种可能的指令长度(例如,16位或32位),则该旁路参数‘end’可由1-位标志表示。

图5b示出了指令的另一示例序列,其示出了使用对应于相反条件的一对分支未来指令bfcsel。相对常见的是,程序在程序流中需要‘fork(分叉)’,如果满足条件则需要分支到第一段代码,以及如果不满足条件则需要分支到第二段代码(例如,用于处置if-then-else(如果-则-否则)构造)。因此,该程序指令序列可以包括对应于相反条件(例如,相等eq和不相等ne)的一对分支指令beq和bnq。为了在处置该分支时减少延迟,相应条件分支未来指令bfcsel可以分别包括相反条件eq和ne。因此,无论是否满足eq或ne条件,应该进行到‘func1’或‘func2’中的一个的分支。

如果该对分支未来指令的第一个bfcseleq未通过其条件,则分支未来指令解码电路122控制该处理电路将分支控制数据储存在分支控制数据缓存器130中,该分支控制数据指定在旁路地址‘end’处的分支旁路指令,如上文所描述。第二分支未来指令bfcselne将随后通过其条件,并因此不是在到达第一分支点bp时分支到‘end’,而是所需程序流实际上需要在分支点bp处分支到函数‘func2’。因此,如果当分支控制数据缓存器130已包含响应于较早分支未来指令设置的有效分支控制数据时分支未来指令通过其条件,则分支未来指令解码器电路122控制该处理电路以重写先前设置的分支控制数据。

然而,如果该对分支未来指令的第一个bfcseleq通过其条件,则当处理到达该分支点bp时,将数据储存到分支控制数据缓存器130中以控制分支到分支目标地址‘func1’。然而,该对分支未来指令的第二个bfcselne将未通过其条件并且将一般将对在分支控制数据缓存器130中的数据进行设置以指示在分支点bp处到分支旁路地址‘end’的分支。然而,在该情况下,重写先前设置的分支控制数据将导致错误结果,因为在分支点bp之后的地址‘end’处分支到指令i2将导致两个函数‘func1’和‘func2’都不被执行。为防止此情况,如果当分支控制数据缓存器130已包含响应于较早分支未来指令设置的有效分支控制数据时,分支未来指令未通过其条件,则分支未来指令解码器电路122控制该处理电路将先前设置的分支控制数据保留在分支控制数据缓存器130中。

总之,‘条件真(conditiontrue)’分支未来指令重写响应于先前分支未来指令设置的有效分支控制数据,但‘条件假(conditionfalse)’分支未来指令不重写响应于先前分支未来指令设置的有效分支控制数据。甚至当在程序流控制中需要‘fork’时,这确保可正确使用分支未来指令,其中该程序取决于条件的结果而分支到两个替代的函数之一。

图6示意地示出了零开销程序循环表现。应当了解,零开销程序循环表现不意指不存在与支持循环表现相关联的开销,而是减少这种开销,诸如,例如通过需要循环控制程序指令以在程序循环体的第一次通过期间占用在程序执行管线中的时槽,其中不需要分开执行那些循环控制程序指令而控制随后的通过。

程序流正常地线性进行直到遇到程序分支。在图6所示的示例中,程序流通过指令ix以到达循环开始指令dls[p]。此循环开始指令dls[p]可呈现预测和非预测表现两者。如果包括循环开始指令dls[p]之后的指令i0、i1、i2、i3的程序循环体将作为向量程序循环体执行,其中针对该程序循环体的每次通过处理多个向量元素,则该循环开始指令将指定待用于预测的向量元素大小。当该待使用的向量元素大小小于下层处理系统的最大数据路径宽度时,则这指示多个向量元素将在该程序循环体的每次通过时被处理。相反地,如果指定的向量元素大小等于最大数据路径宽度,或数据元素大小未被指定,则这指示处理将以标量的方式进行,以这种方式针对该程序循环体的每次通过处理一个元素。当在该程序循环体的一次通过期间处理多个向量元素时,这种通过可以被视作对应于针对由在该程序循环体的通过期间处理的向量元素的数量给出的多次迭代而言已执行该程序循环体。例如,待执行的程序可以需要处理8个元素,即,程序循环体的8次迭代。这可以由该程序循环体的两次通过而实现,其每次通过对与对应于循环的4次迭代的该程序循环体的每次通过并行的4个元素执行所需处理。在其他实施例中,在该循环的8次通过期间(每次通过对应于一次迭代),可分开处理该元素。

应了解,在通常的向量实施方式中,通过在该程序循环体的通过期间并行处理该向量元素来实现性能增加。然而,一些实施例可以牺牲并行执行的能力,用于通过顺序执行不同向量元素来降低硬件开销/复杂度,尽管从程序开发者的角度,这似乎对应于单一并行向量处理指令。

在具有多个向量元素的向量处理的情形中,该不同向量元素在向量处理的不同通道中处理,并且可以对这些通道的每个执行预测。在一个层面,该预测可以用于在可用于相关元素位宽度的数据通道的给定可用数量的情况下,匹配执行的处理与在程序循环体的每次通过期间要处理的向量元素的数量。例如,如果该处理将在7个向量元素上执行并且该向量元素大小使得4个向量元素可以在程序循环体的每次通过期间处理,则可以通过执行程序循环体的一次通过,其中4个向量元素被并行处理,然后是循环体的最后通过,其中3个元素被并行处理,并且由于对程序循环体中程序指令的预测,在其操作中抑制该向量处理的一个通道,而实现全部处理。

这种预测将经过程序循环体的迭代数量与该处理的数据路径宽度及向量元素大小进行匹配。出于关于正在执行的计算的其他原因(例如由程序指令所指定的),这种预测可以被添加到用于抑制在程序循环体的给定通过期间在该处理通道中的处理。两个该预测可以被结合以提供向量元素在通过程序循环体的执行时的全部预测。

返回图6,循环开始指令具有与其相关联的参数,该参数指定程序循环体将被执行的次数(如果不执行向量化,则对应于标量循环迭代的数量),该次数由储存在寄存器rn中的由dls(p)指令复制到寄存器lr的值指示。寄存器lr可以是还用作链路寄存器以储存在程序呼叫返回时将使用的返回地址的寄存器,并且因此可以期望在执行dls(p)指令之前将该链路寄存器的内容保存到程序堆栈。循环开始指令dls(p)还具有相关联的参数“loopend(循环结束)”,该参数指示零开销循环的结束的程序地址并且是紧跟循环结束指令dle的指令。

在循环开始指令dls(p)之后,发现一个或多个程序指令(例如,i0、i1、i2、i3),该程序指令形成程序循环体。应当了解,程序循环体可以是短且简单或长且复杂(例如,可以包含另一循环或分支)并且可以在一些情况中仅包括单一指令。事实上,短程序循环体成比例地更多地获益于零开销循环的使用,由于如果程序循环体本身长度较短,在程序循环体的每次通过上执行传统循环控制指令的开销是较大的。

在程序循环体的结束处存在循环结束指令dle。该循环结束指令dle将用作控制其表现的循环开始参数,该循环开始参数指定在循环开始指令dls[p]之后该指令的存储器地址。dle指令检查储存在寄存器lr中的值,该值指示待执行的剩余迭代的数量。当已执行程序循环体的最后通过时,处理进行到执行在该循环结束指令dle之后的程序指令,即指令iz。这可以通过直接分支到指令iz或通过首先执行dle指令作为nop并且随后执行iz来完成。

图6的右部分示意地示出在哪次通过程序循环体期间执行什么指令。在该程序循环体的第一次通过时,执行循环开始指令dls[p]和循环结束指令dle两者。在执行循环开始指令和循环结束指令两者之后,设置循环控制数据并且由该系统硬件储存该循环控制数据。当该循环表现被允许不受中断地进行时,这允许了随后程序循环体的通过将被执行而无需分开执行循环开始指令dls[p]或循环结束指令dle。这在图6的右部分中,通过追踪执行的程序指令的实线和指示程序流的跳/分支的虚线而指示。如所示,在程序循环体的最后通过的结束处,该程序执行点可以从程序循环体的最后指令i3跳到循环结束指令之后的指令iz而不执行循环结束指令dle。在其他实施例中,该程序流可以通过该循环结束指令dle,其中由于通过该点该链路寄存器lr储存指示已执行该程序循环体的全部所需的迭代的值,仅其动作被抑制。

在程序循环体的结束处循环结束指令dle的位置和在设置并储存循环控制数据方面的动作,得出以下内容:如果(诸如由于出现异常)该程序循环体的通过被中断且循环控制数据无效,则当继续进行由该程序循环体的处理时,可以再次执行循环结束指令dle以恢复必需的循环控制数据。更具体地,在出现异常时不需要保留该循环控制数据(微架构状态),而是将会维持链路寄存器值lr(架构状态),该链路寄存器值lr指示已执行了多少次该程序循环体迭代。当执行部分地经过该程序循环体继续时,则将再次执行循环结束指令(尽管中断尚未出现时,也将会抑制其执行)并且将用于恢复该循环控制数据,使得在该程序循环体的随后通过时,继续进行零开销循环表现并且可以在该随后通过上避免执行循环结束指令。

如上文所提及,当在零开销循环处理期间出现异常/中断时,控制零开销循环表现的循环控制数据可能无效。在至少一些情况中,当该处理继续进行时,其他事件还可以触发循环控制数据的无效,其中该循环控制数据随后被恢复。可以导致循环控制数据无效的事件的示例包括:重置该处理电路;该循环控制电路或该循环结束指令标识不需要该程序循环体的另一迭代;进入异常;异常尾链,用于处理从处理当前异常直接进行到处理下一异常而不恢复当前异常之前的状态;执行具有大于预定立即目标地址范围的分支指令;从异常返回;执行使得装置的指令缓存器被无效的指令;执行使得高速缓存该循环控制数据无效的指令;执行使得分支预测器或分支预测的指令(经修改的分支预测器可以被用来部分发挥循环控制电路的作用);该处理电路确定在该程序循环体中的分支的目标不是在该程序循环体的开始指令与循环结束指令之间的地址;在操作的安全模式与操作的非安全模式之间切换;以及具体实施方式可用于使得该循环控制数据无效的一个或多个实施方式定义条件。

图7示意地示出当执行图6所示出的示例的零开销程序循环表现时处理管线的各个处理阶段的内容。在该示例中,该处理管线包含六个阶段,即,提取、解码、和执行。图6所示出的程序指令被提供/提取到该处理管线。如图所示,该程序循环体的第一次通过包括执行循环开始指令dls[p]和循环结束指令dle两者。因此,存在在第一次通过时执行的六个指令(dls(p)、i0、i1、i2、i3和dle)。在该程序循环体的随后三次通过时,不需要执行循环开始指令dls[p]和循环结束指令dle,而是替代地在循环控制数据控制下操作的循环控制电路可以用于追踪通过已执行的程序循环体的数量,标识什么时候已将在该程序循环体中的最后指令放置于该提取阶段中,并且标识当分支返回该程序循环体的开始阶段时将使用的分支点。在此示例中,指令i0是该程序循环体的开始指令并且指令i3是在该程序循环体中的最后/最后指令。在程序循环的零开销通过的每一个时,4个程序指令(i0、i1、i2以及i3)流过该处理管线。在该程序循环体的第4次通过时执行最后指令i3之后,储存在链路寄存器lr中的循环迭代计数器指示已执行全部所需迭代并且因此当到达最后指令i3时,该循环控制电路将不触发返回到开始指令i0的分支,而是替代地将触发到紧跟循环结束指令dle的指令iz的分支。在其他实施例中,该循环控制电路不触发到指令iz的分支,而是替代地允许程序流继续到dle。由于所储存的迭代计数器是将指示不需要更多迭代的链路寄存器lr,该dle指令将不执行任何操作并且程序流将在指令iz的上继续。在一些实施例中,此方法将更容易实现,并且由于当到达循环结束时仅执行一个其他dle指令,所以对性能的影响可以是最小的。

第8图示意地示出与指令管线的提取阶段1002相关联的循环/分支控制电路1000的一个示例的形式及操作。该循环/分支控制电路至少部分地由储存在循环/分支控制缓存器1004中的循环/分支控制数据而控制。应当理解,可以使用相同或相似电路来控制其他地方的零开销循环表现和分支未来表现。例如,当该系统处于其中未设置doloop(do循环)标志(其指示零开销循环表现是活动的)并且仍将该循环/分支控制数据标志为有效的状态时,可以使用该循环控制数据(或与其相似的数据)和循环/分支控制电路1000来支持分支未来表现。

返回参考图8和其在控制零开销循环表现方面的使用,将循环控制数据作为循环结束指令dle的结果加载到循环控制缓存器1004。该循环结束指令由图1所示的循环结束解码电路123来解码。还可以通过执行分支未来指令bf将数据加在到该缓存器1004中,该分支未来指令bf使用图1所示出的分支未来指令解码电路122来解码。

循环控制缓存器1004可以在一些实施例中重新使用储存设备,该储存设备还用作故障症状寄存器或寄存器以在出现故障时储存故障症状数据。该寄存器可以具有与其相关联的至少一个有效位fv,该有效位指示储存在其中的任何数据是否是有效故障症状数据。当相关寄存器替代地储存循环控制数据或分支未来数据时,循环/分支控制电路1000和循环开始与循环结束指令的动作可以用于将与故障症状数据相关联的这种故障寄存器有效位fv设置为无效状态。在一些实施例中,可能认为保留故障症状数据更为有效,其允许零开销循环表现进行并因此任何故障症状寄存器储存了故障症状数据(由故障寄存器有效位fv指示),则循环结束指令的解码不允许重写此有效故障症状数据并且零开销循环表现将被抑制(尽管循环开始和循环结指令的存在仍将确保由其明确执行来进行正确数量的程序循环体迭代)。

出于诊断/分析目的,循环控制电路1000还生成追踪输出以用来形成追踪数据。尽管已经避免执行该循环结束指令并且在程序循环体的第一次通过之后的零开销循环操作期间尚还明确(分别地)发生,当执行零开销循环时,循环控制电路在执行此指令时或在循环/分支控制电路1000的控制下对分支的控制返回该开始指令时,生成对应于循环结束指令dle的执行的追踪输出。尽管传统意义上循环结束指令尚未明确/分别地执行,提供包括指示对应于循环结束指令执行的事件的追踪数据的追踪输出,使得当执行诊断及分析操作时该追踪输出较为容易遵循并理解。

储存在循环控制缓存器1004中的循环控制数据可以具有各种形式并且包括不同类型的用于控制零开销循环表现和分支未来表现的数据。具体地,该循环控制数据可以例如包括以下中一个或多个:循环开始数据,指示开始指令的地址(直接地或经由具有从该地址到开始指令的预定偏移的地址来指示此地址);循环开始偏移地址,指示在立即进行到循环结束指令的程序循环体的最后指令与该程序循环体的开始指令之间的距离;循环结束数据,指示立即进行到循环结束指令的程序循环体的最后指令的地址;循环剩余指令数据,指示在到达立即进行到循环结束指令的程序循环体的最后指令之前待处理的剩余指令的数量;循环剩余大小数据,指示在到达立即进行到循环结束指令的程序循环体的最后指令之前储存待处理的剩余程序指令的程序储存存储器位置的数量;以及循环控制有效数据v,指示该循环控制数据是有效的,例如,尚未发生如先前描述的无效事件。

在一些示例实施例中,循环控制缓存器1004可以包含多个条目,使得可以同时支持多个操作。在循环控制缓存器1004中的这些条目的每一个还具有与其相关联的有效位v,该有效位指示其是否是当前储存的有效循环控制数据。一旦上文所述的各种失效事件中的一个发生,该循环控制数据的有效位v可以被清除以指示失效。在这个示例实施例中,示出循环控制缓存器1004具有两个条目。这允许同时支持零开销循环和分支未来表现两者。在其他实施例中,对于仅单一条目的足够的储存可以提供在循环控制缓存器1004中并因此可以在给定时间仅支持零开销循环表现或分支未来表现中的一个。应当了解,循环控制缓存器1004还用作分支控制缓存器。相同双函数还由循环控制电路1000提供。

如图8所示,循环控制电路1000用于监控与从指令缓存器1006加载到提取阶段1002中的程序指令相关联的存储器地址。当所加载的程序指令地址匹配(或具有预定关系,例如,具有预定偏移)由储存在循环控制缓存器104中的循环控制数据指示作为在零开销循环的程序循环体中的最后指令的程序指令的地址时,循环控制电路1000确定是否存在待由系统经过程序循环体执行的剩余通过(如在链路寄存器lr中的值指示的),并且如果存在这种剩余通过,则触发到该程序循环体的开始指令的分支。以这种方式,在储存在循环控制缓存器1004中的循环控制数据的控制下作用的循环控制电路1000能够确定是否需要另一循环迭代,并且如果需要另一循环迭代(待处理的给定元件的程序循环体的通过),则控制该处理电路(指令管线和执行由该处理管线执行的指令的系统的其他元件)以执行由该程序指令指定的(一个或多个)处理操作或在循环结束指令之前的程序循环体,但不包括循环结束指令(在除第一次通过之外的程序循环体的通过时其本身不需要分开执行,遭受尚未发生的循环控制数据无效事件)。

图9示意地示出循环控制电路1000的一个示例形式可以怎样使用循环控制数据的一部分以与取决于与由提取阶段1002待提取的下一指令(可能不是指令存储器地址本身,例如,可以具有固定偏移)相关联的当前程序计数器值的数据相比较,以确定是否需要到该程序循环体的开始指令的分支。更具体地,该循环控制数据可以包括位的适当子集,其指示循环结束指令的存储器储存地址。例如,该循环控制数据可以包括从正常32位的位2延伸至位x的位字段、对应于存储器储存位置的字节寻址的存储器地址。这与在存储器地址中的相应位位置相比较,该存储器地址与由提取阶段1002提供的待提取的下一指令相关联。在此示例的实施例中程序指令是32位程序指令,该指令在字节寻址的存储器地址空间中被对准使得至少两个有效位1:0是不变的,并因此不需要经受该比较以标识分支到循环开始地址的需要。应当了解,图9的示例仅是这样一种方式,其中循环控制电路1000可以标识在正在被提取到提取阶段1002中的程序循环体中的最后指令并因此标识到循环开始地址的分支的需要,即,到程序循环体的开始指令的分支。执行分支的这种需要可以以另一方式实现,诸如对如通过程序循环体进行提取的指令数量进行计数、对通过提取程序循环体指令的储存位置的数量进行计数(此技术可适用于采用可变长度指令的实施例)、或其他技术。

图10a是示意地示出在解码循环开始指令时的表现的流程图。在步骤2000处,处理等待直到由循环开始指令解码器电路对循环开始指令dls(p)进行解码。步骤2002确定储存在由参数rn指定的寄存器中的迭代计数是否等于零。如果该迭代计数等于零,则这指示不需要通过(迭代)该程序循环体并且处理进行到步骤2004,在该处执行分支到循环结束指令dle之后的指令或利用抑制每个经受的指令遍历该程序循环体,诸如通过抑制写回和来自那些指令的其他副效应。

如果在步骤2002处确定该迭代计数不为零,则处理进行到步骤2003,在该处确定在步骤2000处解码的指令是否是所预测的循环开始指令dlsp。如果是,则处理直接进行到步骤2006。如果否,则步骤2005将元素大小设置为在处理再次进行到步骤2006之前的全部向量大小,在步骤2006处生成指示可以在程序循环体的一次通过中处理的向量元素的最大数量的值nmax。在其他实施例中,nmax的计算无需作为dls(p)指令的一部分进行,例如,其可以作为在如第13图示出的doloop中处理的指令的部分完成。这个值nmax取决于与由循环开始指令指定的向量元素大小相比处理管线的处理电路的数据宽度。整体零开销循环表现的执行中,nmax值是静态的,并因此所生成的值不必明确被储存,而是仅需要并且当需要时用于控制该向量表现。

步骤2008用于设置标志,该标志指示doloop状态是有效的并且该系统当前正在处理doloop(即,零开销循环表现是活动的),循环迭代计数还被复制到链路寄存器lr,其中该循环迭代计数将由循环控制电路使用。处理随后进行到步骤2010,在该处提前提取并且执行程序循环体的开始指令。

图10b示意地示出循环开始指令dls(p)。这包括将该指令标识为dls(p)指令的作业码字段enc。还包括参数字段以指定包含下列内容的寄存器:迭代计数rn(以转移到链路寄存器lr)、定位该循环结束指令的指示符(可以以各种方式指定为用于指定先前描述的分支目标地址的bf)、以及元素大小值。如果将该元素大小值设置为数据路径的全部向量大小,则该指令将被处理为非预测,即,dls指令。如果该元素大小小于数据路径的全部向量大小,则这指示该循环应该使用指定的向量大小的元素来向量化并且被处理为预测循环开始指令。

向量元素大小ve宽度储存在浮点控制数据寄存器中,当浮点数据值是可存取的时候该寄存器是可存取的,并且当浮点数据值是不可存取的时该该寄存器是不可存取的。当该浮点数据值是可存取的时候,从该循环开始指令被解码的向量元素大小ve宽度被储存在浮点控制数据寄存器中并且控制在数据路径中的向量化。如果该循环开始指令是非预测的,则将该向量元素大小设置为向量寄存器宽度vr宽度。

当浮点数据值是不可存取的时,例如,浮点状态尚未经初始化,对从浮点控制数据寄存器读取ve宽度的尝试返回独立于当前储存在该浮点控制寄存器(同样不可存取)中的任何ve宽度值的vr宽度值。如果部分通过循环的执行使得该浮点值可存取(初始化),则将保存任何现有浮点状态(例如,通过惰性状态保存机制)并且新的浮点状态将被初始化,包括将储存在浮点控制数据寄存器中的ve宽度值初始化为vr宽度(用于特定实施方式的硬连线)。因此未改变在该回路中的向量化。

图11是示意地示出在解码循环结束指令dle时的动作的流程图。在步骤2012处,处理等待直到循环结束指令dle由循环结束指令解码器解码。步骤2014随后确定当前是否设置doloop标志。如果当前不设置doloop标志,则这指示零循环表现当前不是活动的并且处理进行到步骤2016,在该处抑制循环结束指令的执行,诸如通过在步骤2013将其处理为非操作指令(nop)。

如果在步骤2014确定设置了doloop标志,则步骤2018用于将循环控制数据储存到循环控制缓存器1004中。该循环控制数据可以包括例如指示开始指令的指令地址的数据、对应于dle指令的存储器储存地址的位的最低有效位的字段(不包括由于固定指令对准而导致的任何不变的位)、以及指示该循环控制数据是有效的有效位。如先前描述的循环控制数据的其他形式也可以被储存。

步骤2020确定当前迭代计数是否小于或等于先前响应于dls(p)循环开始指令生成的nmax值。如果迭代计数小于或等于nmax值,则这指示已到达循环结束指令的程序循环体的当前通过是该程序循环体的最后需要的通过并且因此处理进行到步骤2016。如果在步骤2020处确定该迭代计数不小于或等于nmax值,则处理进行到步骤2022,在该处迭代计数递减了nmax。

步骤2024随后执行到该程序循环体的开始指令的分支。

图12是示意地示出循环控制电路1000的动作的流程图。在步骤2026处,循环控制电路1000确定是否该循环控制数据当前标记为有效。如果将该循环控制数据当前标志为有效,则处理进行到步骤2028,在该处做出这样的确定:被提供到管线(即,提取到提取阶段1002)的最后指令是否是由匹配该循环控制数据的待提取的下一指令的地址所指示的程序循环体中的最后指令。如果在程序循环体中最后指令的提取被检测到,则处理进行到步骤2030,在该处确定该迭代计数是否当前小于或等于值nmax。如果该迭代计数小于或等于值nmax,则处理进行到步骤2032,在该处清除doloop标志并且清除循环控制数据有效位v。这指示完成了零开销循环表现。针对零开销循环表现实例,随后完成循环控制电路1000的处理。如关于图11的讨论,该循环结束指令将随后被处理,例如,围绕该循环结束指令dle进行分支。

如果在步骤2030处确定当前迭代计数(追踪程序循环体的通过数量)不小于或等于值nmax,则步骤2034用于使得迭代计数减少nmax。步骤2036随后分支到程序循环体的开始指令并且开始程序循环体的下一次通过。

图13是示意地示出在零开销程序循环体中指令执行的控制的流程图,并且具体地如何涉及预测。步骤2038确定是否存在待执行的指令。步骤2040随后确定是否设置doloop标志,该标志指示该执行发生在零开销循环程序循环体中。如果未设置doloop标志,则在步骤2050处正常进行指令的处理。如果步骤2040处确定设置了doloop标志,则步骤2042处确定nmax值是否大于剩余的迭代计数。如果nmax值不大于剩余的迭代计数,则步骤2044将用于待执行的程序指令的活动通道的数量设置为nmax。由于可以在步骤2048待执行的指令或在步骤2048或2050中执行的先前指令中编码的另一预测,活动通道的数量可以事实上降低。如果在步骤2042确定nmax值大于剩余的迭代计数,则步骤2046将用于指令的活动通道的数量设置为剩余的迭代计数值。当不存在需要在该通道中处理的向量元素时,这避免了处理的通道的活动使用。步骤2048随后执行使用设置活动通道的数量在步骤2038处被标识为需要执行的指令。

该指令的向量化性能可取决于正在执行的指令类型。更具体地,由所选择的活动通道的数量指示的预测被实现的方式可取决于正在执行的指令的性质和相关系统的数据路径的性质变化。例如,预测可以通过抑制对数据通道的写回(例如,字节启用)而应用,该数据通道已经由将数据的预测指示为非需要。在该情况下,当生成预测值时所应用的元素大小可以与由处理指令应用的元素大小不同。因此抑制处于较小元素大小的写回可以导致仅部分单一算术操作,诸如将加法进行写回。在不能易于分割的指令情况中,所应用的预测可以在字节层级指定,但取决于仅一个字节预测值(诸如,用于预测执行的数据处理的全部字的最低有效字节)而实现。

如上文所论述,循环控制电路1000可以取决于储存在预定状态寄存器中的控制参数来控制该循环计数器的更新,该控制参数指示响应于程序循环体的一个向量指令处理的向量元素的数量。例如,该控制参数可以是指示由该循环处理的一个向量元素的大小的ve宽度,其允许每个循环迭代处理的元素数量被确定,使得该循环计数器可以通过循环体的遍历所处理的向量元素的数量而在每个迭代上更新。注意到ve宽度是针对循环的处理所定义的一个向量元素的大小。还可以将单独的向量元素大小ive宽度指定为在该循环中向量指令的参数中的一个,该参数通常匹配针对循环整体指定的ve宽度,但不需要相同。允许针对循环整体指定的分别的元素大小和在该循环中的指令可以用于支持这样的情况:其中在该循环中待处理的一个“元素”实际上包含被定位到向量指令的不同向量元素的多个组件。例如,复数可以具有实数和虚数组件,并且可以支持复数算术向量指令,该指令假设一个或多个数字的实数和虚数组件被分配给交替向量元素。在该情况下,即使个别向量指令指定32位元素,例如,该循环整体可以认为一个“元素”具有64位,因为其包括实数和虚数组件两者。因此,本文所提及的ve宽度指由循环控制电路所得知的向量元素大小,其不需要与该循环中向量指令使用的实际元素大小相同。

用于掩盖(nmax-循环计数)在循环的最后迭代上的向量通道的循环尾部预测还可以取决于储存在预定状态寄存器中的参数。例如,该循环尾部预测可以取决于指示是否需要预测的标志,并且当预测被需要时,在最后迭代上执行的活动通道的数量可以从储存在预定状态寄存器中的ve宽度(与储存在链路寄存器中的循环计数器“循环计数”相结合)被推导出。在循环结束处,被应用的任何循环尾部预测可以通过在预定状态寄存器中重置该标志而去能,使得在该循环之后的向量指令将无需尾部预测而操作。或者,预测是否被需要可以直接从循环计数和ve宽度确定,使得可以不需要明确预测标志。此处,循环尾部预测指的是这样的功能:其中,当nve/nmax不等于整数时,其中nve是在程序循环体的一些迭代期间待处理的向量元素的总数量(大小为ve宽度),并且nmax是在程序循环体的一次迭代中待处理的向量元素的最大数量(大小也为ve宽度),循环控制电路1000在一个或多个该迭代期间至少部分抑制在一个或多个所述向量处理通道中的处理,使得在所述迭代期间处理的向量元素的总数是nve。尽管以下示例描述了其中将循环尾部预测应用于最后循环迭代的情况,但其他实施方式还可以在较早循环迭代中应用该循环尾部预测以给出相同结果。注意到,如上文描述的ve宽度>ive宽度的情形中,对于在循环中的个别向量指令,大小为ve宽度的一个元素的预测可以需要大小为ive宽度的多于一个的元素被掩盖。

然而,该预定状态寄存器可以是通常不可存取的寄存器。例如,该预定状态寄存器可以是与浮点内容数据相关的寄存器,例如,浮点控制寄存器1110(参见图8),其是图1所示的浮点寄存器110中的一个。为减少需要在简档切换时被保存的状态的量,默认情况下,不需要浮点运算的过程不会被分配浮点状态,并且被储存在控制寄存器中的浮点状态可存取性标志(或惰性状态保存状态标志)可以指示该浮点简档是否对当前过程是可存取。在简档切换时,如果该状态可存取性标志指示该浮点简档当前不可存取,则该浮点简档不需要被保存到存储器。响应于需要浮点简档的指令,当该浮点简档当前不可存取时,执行惰性状态保存运算以将储存在浮点寄存器中的任何先前简档数据保存到存储器中,并且随后使得该浮点简档寄存器对当前过程为可存取,并且使得状态可存取性标志被更新以指示该浮点简档现在是可存取的。

预定状态寄存器不可存取的另一情况是,如果已经定义了存取许可,该存取许可禁止当前特权层级或过程存取该寄存器。例如,一些系统可以提供许可检查电路1008(参见图8)以检查用于控制对寄存器的特定子集(包括预定状态寄存器(例如,浮点寄存器))的存取的存取许可数据,并且用于当检测到存取违反该存取许可数据的寄存器的子集中的一个时,触发故障条件。该故障可以触发操作系统以检查该存取许可并且如果需要的话将当前储存在寄存器中的特权数据保存到存储器,使得在改变该存取许可以使寄存器子集对触发该故障的过程/优先层级可存取并将处理返回至非特权过程之前,该特权数据可以对于触发该故障的非特权处理进行隐藏。

即使该浮点简档在该循环的开始处可存取用于设置所需向量元素宽度ve宽度,不能假设该浮点简档在循环的结束处仍是可存取的,因为在导致当前过程的简档无效的循环期间可能出现异常,并且在该异常之后恢复该过程的简档时,该浮点简档将不被恢复直到它实际上被与恢复的过程相关的指令所需要时。

因此,在循环的结束处,储存用于控制循环计数减少和/或循环尾部预测的参数的预定状态寄存器可以是不可存取的。为能够重置该循环尾部预测信息,可以期望提供用于在循环的结束处触发惰性状态保存或故障条件的功能,以允许该预定状态寄存器变得可存取。然而,此途径可能有问题,因为通常不期望从循环控制电路1000触发惰性状态保存操作或故障条件而是不由指令触发,因为用于处置故障或状态保存的架构机制可以假设该操作在特定指令地址处被触发。为改良性能,可能更希望省略在循环的最后迭代上一起执行循环结束指令(使得当该循环控制数据是有效的时响应于检测到不需要另一循环迭代,该循环控制电路被配置为控制该处理电路以继续来自在循环结束指令之后的指令的程序执行)。响应于在循环结束指令之前或之后的指令,触发该故障条件或状态保存可能是不适当的。因此,在循环结束处不存在用于触发惰性状态保存或当需要时使浮点简档可存取的故障条件的适当指令。此外,循环控制电路1000可以与指令管线的提取阶段相关联,该指令管线的提取阶段可以通常不具有用于触发寄存器存取的路径,因此允许该提取阶段以触发状态保存对于电路面积而言可能困难且昂贵的。

这些问题可以通过响应于循环结束指令替代地触发惰性状态保存操作或故障条件来解决,该循环结束指令可以在该循环的第一迭代上或发生异常的迭代的结束处执行(由于异常将使得该循环控制数据无效,该循环结束指令将在迭代的结束处再次被执行)。因此,响应于该循环结束指令,当包括预定状态寄存器的寄存器子集不可存取时,该循环结束指令解码电路可以生成状态保存控制信号以触发保存到储存在寄存器的所述子集中的状态数据的存储器中并且使得寄存器的所述子集可存取。通过响应于循环结束指令而不是在完成该循环时触发该状态保存操作,仅在最后循环迭代的结束处执行该循环结束指令是不必须的,由于预防万一浮点状态已变得不可存取,允许改进性能。类似地,以防该存取许可数据禁止对包括预定状态寄存器的寄存器子集的存取,响应于该循环结束指令,该循环结束指令解码电路可以生成控制信号以触发到寄存器子集的存取。因此,如果许可检查电路1008当前还未允许存取,则将在执行循环结束指令时生成故障,一旦已将任何敏感数据保存到存储器并且在寄存器的该子集中无效,允许该操作系统授权必需许可。响应于循环结束指令的这些操作还确保循环控制电路1000可以存取用于控制循环计数器的减少的ve宽度参数。

在该循环的最后迭代的结束处,响应于检测到在该程序循环体的迭代之后不需要另一循环迭代,该循环控制电路去能在一个或多个所述向量处理通道中处理的抑制。例如,该循环控制电路可以取决于储存在预定状态寄存器中的控制参数来控制在一个或多个所述向量处理通道中处理的抑制,并且响应于检测到在该程序循环体的迭代之后不需要另一循环迭代,循环控制电路1000可以确定该预定状态寄存器是否是可存取的,并且当预定状态寄存器被确定是可存取的时,通过更新储存在该预定状态寄存器中的控制参数来生成用于去能一个或多个所述向量处理通道中处理的抑制的预测去能控制信号(predicationdisablingcontrolsignal)。当确定该预定状态寄存器是不可存取的时,循环控制电路1000抑制预测去能控制信号的生成。

即,当该预定状态寄存器已经是可存取的时,循环控制电路1000仅重置在该预定状态寄存器中的参数以去能循环尾部预测。当该预定状态寄存器不可存取时,将遇到循环结束指令,因为可以导致该寄存器变得不可存取的事件(例如,异常、故障、或简档切换)还将使来自循环控制缓存器1004的循环控制数据失效。因此,不需要循环控制电路1000来触发惰性状态保存或故障触发操作,如果在该循环的结束处需要,这将替代地响应于循环结束指令由循环结束指令解码电路123触发。

出于上文给出的原因,该循环结束指令触发检查储存指定该元素宽度信息和循环尾部预测控制的控制参数的预定状态寄存器是否可存取是非常有用的,并且如果该寄存器是不可存取的,则触发故障条件或惰性状态保存。当所需的预定状态寄存器是不可存取的时,一些实施方式可以通常响应于循环结束指令触发此状态保存或故障条件。

然而,实施上并非全部循环需要在循环尾部的预测通道。例如,如果该循环将使用具有等于该寄存器宽度的元素大小的标量指令或向量指令而处理,则每次迭代仅处理一个元素并且因此元素的全部数量通常是该向量长度的准确倍数。因此,在该循环上,不需要对ve宽度或循环尾部预测控制参数的存取。针对非预测循环而言为了避免导致触发惰性状态保存或故障条件的性能开销,提供循环开始和结束指令的两个版本:

·dls:非预测循环开始指令:指定循环结束地址‘loopend(循环结束)’和迭代数量rn,而不指定向量元素大小,并因此不改变在浮点控制寄存器中ve宽度参数。ve宽度是预设等于在一个向量寄存器ve宽度中的位数量。

·dlsp:预测循环开始指令:指定该循环结束地址‘loopend’和迭代数量rn,并且还指定指示向量指令的元素宽度ve宽度的‘size(大小)’参数。将该元素宽度储存到该浮点控制寄存器中。如果该浮点简档不可存取,则dlsp指令触发惰性状态保存操作以将先前浮点简档保存到存储器,并且在将元素宽度储存到该浮点控制寄存器之前,使该浮点简档对该当前过程不可存取。

·dle:非预测循环结束指令:在dls指令之后使用。如果当该浮点简档是不可存取时被执行,则该循环结束指令解码电路不触发将浮点简档保存到存储器的任何惰性状态。

·dlep:预测循环结束指令;在dlsp指令之后使用。如果当该浮点简档不可存取时执行,则该循环结束指令解码电路生成控制信号以触发将浮点简档保存到存储器,并且使该浮点简档可存取。dlep指令还触发对该浮点简档寄存器中的一个(例如,储存ve宽度的浮点控制寄存器)的存取,以确保如果针对当前过程/特权层级而言不允许存取浮点简档,故障条件由存取许可检查电路1008触发。

在循环的各个迭代的结束处,循环控制电路使得循环计数器减少在那个迭代中处理的元素数量,该数量从该浮点控制寄存器读取的ve宽度推导。因此,针对非预测循环,ve宽度=vr宽度,因此针对每个迭代,该循环计数器减少1。针对预测循环,每个迭代处理的元素数量是vr宽度/ve宽度(vr宽度针对给定硬件实施方式可以是固定的,因此可不需要在控制寄存器中明确指示)。

通过提供该循环结束指令的两个版本,则即使异常在通过预测循环中途时发生,使得清空该简档数据并且在从异常返回之后浮点简档变得对当前过程不可再次存取,因此这将还使该循环控制数据无效,预测循环结束指令将于该循环的结束处执行,并且因此如果需要可触发惰性状态保存操作或故障条件以再次使该浮点简档可存取。然而,针对非预测循环,触发该惰性状态保存操作或故障条件的开销可以通过使用非预测循环结束指令避免。因此,总而言之,取决于循环结束指令是第一类型循环结束指令还是第二类型循环结束指令,该循环结束指令解码电路可以选择是否生成状态保存控制信号。类似地,是否响应于循环结束指令触发存取包括预定状态寄存器的寄存器子集,可以取决于该循环结束指令是第一类型还是第二类型循环结束指令。

图14a至图14e示出非预测和预测循环的执行示例以示出上文描述的特征。

图14a示出非预测循环的示例,其中在执行该循环期间不发生异常。该非预测循环开始指令dls在循环的开始处执行以设置该循环结束地址和待执行的迭代数量。由于这是非预测循环开始指令,在浮点控制寄存器中元素宽度ve宽度参数保持不改变。若当前过程还无法存取浮点简档,则不需要存取并且因此不触发惰性状态保存操作或故障条件。在第一循环迭代的结束处,执行非预测循环结束指令dle以设置用于控制随后迭代的循环开始地址,并且同样不需要存取浮点控制寄存器,因此即使浮点简档可存取性标志指示该浮点简档当前不可存取,不触发惰性状态保存操作或故障条件。在循环的随后迭代上,不执行循环开始和循环结束指令并且程序流进行通过程序循环体的多次迭代。在各个迭代的结束处,由于浮点简档是不可存取的,循环控制电路1000不存取浮点控制寄存器并假设ve宽度=vr宽度,即,每个向量的元素数量是1,并且因此使循环计数器减少1。在最后迭代上,不应用向量循环预测,并且在检测到不需要另一迭代时,循环控制电路1000控制程序流从循环结束指令dle之前的指令跳转到在dle之后的指令,跳过循环结束指令并且继续在该循环之后的随后指令处理。

图14b示出预测循环的示例,其中在执行循环期间不发生异常。此时该循环开始指令是预测循环开始指令dlsp并且因此除了设置指定循环结束地址的循环控制数据和待执行的迭代数量的之外,该循环开始指令解码电路还触发基于由dlsp指令指定的‘size(大小)’参数在浮点控制寄存器中指定的向量元素宽度ve宽度的更新。因此,如果该浮点简档还不可存取,触发惰性状态保存操作或故障条件以使该简档可存取,使得可更新ve宽度。在第一循环迭代的结束处,执行预测循环结束指令dlep以设置该循环开始地址。该循环结束指令解码电路从该状态可存取性标志检测到该浮点简档已可存取,因此不需要惰性状态保存,并且响应于循环结束指令dlep触发的对浮点控制寄存器的存取不会触发故障。随后执行该循环的随后迭代而不执行循环开始/结束指令。在该循环的每个迭代上,循环控制电路1000基于从浮点控制寄存器读取的ve宽度决定在迭代中处理的元素数量,并且使循环计数器减少元素的预定数量。在该循环的最后迭代上,如果如由循环计数器指示的待处理的剩余元素数量小于待由一个向量指令处理的元素数量,循环控制电路1000将预测应用于非必须的向量通道,并且待屏蔽的向量部分由ve宽度和循环计数器决定。在最后迭代的结束处,循环控制电路1000检测到不需要另一迭代并且因此跳过dlep指令。由于该浮点简档已可存取,将在浮点控制寄存器中的ve宽度字段重置为向量寄存器的宽度以针对随后向量指令去能循环尾部预测,并且不需要惰性状态保存或故障条件。

图14c示出当在该循环期间发生异常时非预测循环的示例。非预测循环开始和循环结束指令dls、dle以与图14a描述的相同方式执行,并且如图14a描述在循环的每个迭代上该循环计数器减少1。异常发生在第三迭代上,其触发了中断线程的简档的状态保存。如果指示该浮点简档为可存取,则状态保存包括保存浮点简档,而如果该浮点简档是不可存取的,则该状态保存保存了整数简档数据而非浮点简档数据。在从该异常返回时,恢复整数状态数据并且该浮点简档数据最初是不可存取的。设置惰性状态保留标志以指示惰性状态保留是活动的,使得如果该循环的任何随后指令需要浮点简档数据,则这将触发浮点简档的惰性状态恢复。如果没有遇到需要浮点简档数据的指令,则当到达循环结束指令dle时,浮点简档仍将是不可存取的。由于在出现异常时该循环控制数据被先无效,执行循环结束指令dle以重置该循环控制数据。由于此是非预测循环结束指令dle,该循环结束指令不触发惰性状态保存或到浮点控制寄存器的存取,即使该浮点简档是不可存取的。在恢复该循环控制数据之后,该循环的随后迭代以与图14a相同的方式继续,并且以与图14a相同的方式处置该循环的最后迭代。因此,当没有待处理的剩余迭代时,跳过dle指令,并且因此在最后迭代上不触发惰性状态保留或故障条件,即使该浮点简档是不可存取的。如果自从自异常返回之后仍未清除该惰性状态保留标志,则其保持为活动的并因此在循环之后需要浮点简档的下一指令将触发惰性状态保存。此外,如果从异常返回之后仍未清除该惰性状态保留标志,则该循环控制电路将不尝试将在浮点控制寄存器中的ve宽度重置为向量寄存器的宽度。

图14d示出当在循环期间出现异常时预测循环的示例。在第一迭代上,预测循环开始/结束指令dlsp和dlep以与图14b相同的方式执行。异常出现在循环的第三迭代上。这触发了到异常处置器或另一线程并再次返回的简档切换,其以与图14c相同的方式处置。然而,针对预测循环,在返回到具有设置为活动的惰性状态保留标志(状态可存取性标志)的循环体指令时,解码预测循环结束指令dlep触发了惰性状态保存操作(如果在该循环体中没有较早指令需要浮点简档)并且还触发了存取该浮点控制寄存器,使得如果针对该当前过程的存取许可以不允许对浮点寄存器非存取,则可以生成故障条件以触发操作系统授权所需许可。因此,在遇到预测循环结束指令之后,该浮点简档变得可用并且因此可能读取用于控制循环计数器更新的ve宽度参数并且存取用于控制在循环的最后迭代上的预测的循环尾部预测参数。如果在循环期间出现超过一个异常,则以与图14d所示的一个相似的方式处置各个异常。在最后循环迭代上,应用循环尾部预测以控制掩盖未使用的向量通道来确保在该循环中处理的元素总数量匹配由循环开始指令指定的数量。在最后循环迭代的结束处,循环控制电路1000检测到该惰性状态保存标志是无效的并且因此浮点简档已可存取,并因此将在浮点控制寄存器中的ve宽度重置为向量寄存器的宽度,以去能处理在循环期间预测的那些向量通道的抑制。

图14e示出异常发生在循环的最后迭代上的预测循环的示例。在第一迭代上,循环开始/结束指令dlsp和dlep以与图14b或图14d相同的方式处置,并且还以相同方式处置在各个迭代上循环计数器的减少。然而,在点*2处,异常发生在最后迭代上,这触发简档切换。将先前浮点简档(包括预测元素宽度ve宽度)保存到存储器并随后处理该异常。在从异常返回时,恢复与运行该循环的线程相关联的整数简档,但未恢复浮点简档并因此将惰性状态保存标志设置为活动的。在该示例中,在从异常返回之后执行的第一指令是不需要浮点状态的标量指令si1并且因此不触发惰性状态保存。尽管在浮点控制寄存器中预测元素宽度ve宽度是不可存取的,由于该指令是标量指令因此没影响,所以不需要预测。当在点*3处遇到第一向量指令vi2时,该指令被认为是需要浮点简档的指令(除了需要来自浮点控制寄存器的预测元素宽度ve宽度的之外,在一些架构中,该向量寄存器可以与浮点寄存器重叠并且因此当惰性状态保存标志是活动的时向量指令的执行可以无论如何都导致惰性状态保留发生以使该向量寄存器可存取)。由于该延迟状态保存标志是活动的,向量指令vi2触发了惰性状态保存操作,该操作使浮点简档可存取并且允许恢复ve宽度使得针对该循环的最后迭代的剩余部分再次使能预测。

在一些实施例中,该惰性状态保留过程仅保留了在该寄存器中的浮点简档并且不恢复与触发惰性状态保留的线程相关联的浮点简档。在该实施例中,该操作系统对存取许可进行配置使得除触发惰性状态保留的外,尝试存取浮点状态还触发了故障,该操作系统可响应于该故障并恢复与触发了该故障的线程相关联的浮点简档。

图15示意地示出在一些示例实施例中适用于实施本文描述的技术的虚拟机器实施例。尽管前面描述的实施例根据用于操作支持相关技术的具体处理硬件的设备和方法来实施本发明,但还有可能提供硬件元件的所谓虚拟机器实施方式。该虚拟机器实施方式在主处理机530上运行,该主处理机530运行支持虚拟机器程序510的主机操作系统520。通常,需要大型高效处理器以提供按合理速度执行的虚拟机器实施方式,但这种方法在某些环境中可以是合理的,诸如当需要运行另一处理器本地的代码以获得兼容性时或出于再使用的原因。虚拟机器程序510向应用程序500提供应用程序介面,该介面与将由实际硬件提供的应用程序介面相同,该实际硬件是通过虚拟机器程序510模型化的元件。因此,程序指令(包括上述对存储器存取的控制)可以通过使用虚拟机器程序510而在应用程序500内执行以对指令与虚拟机器硬件的互动进行建模。

尽管参考附图在本文中详细描述了说明性实施例,但应理解,权利要求的范围不限于那些精确实施例,并且得益于该技术的本领域技术人员可以在本发明中实现各种变化、添加和修改,而不偏离所附权利要求的范围和精神。例如,可以用独立权利要求的特征对从属权利要求的特征进行各种组合。

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