数据结构放弃

文档序号:144439 发布日期:2021-10-22 浏览:12次 >En<

阅读说明:本技术 数据结构放弃 (Data structure abandonment ) 是由 D·H·曼塞尔 N·J·斯蒂芬斯 M·L·艾文斯 于 2020-03-25 设计创作,主要内容包括:本公开提供了一种数据处理装置,该数据处理装置包括:用于储存数据的多个储存电路。执行电路系统响应于指令使用储存电路来执行一或更多个操作。该指令包括放弃指令。该执行电路系统通过指示该多个储存电路中的至少一者为未用储存电路来响应该放弃指令,并且该执行电路系统在执行该放弃指令之后基于该未用储存电路来影响未来指令的执行。(The present disclosure provides a data processing apparatus including: a plurality of storage circuits for storing data. The execution circuitry performs one or more operations using the storage circuitry in response to the instruction. The instruction includes a yield instruction. The execution circuitry responds to the yield instruction by indicating at least one of the plurality of storage circuits as an unused storage circuit, and the execution circuitry affects execution of future instructions based on the unused storage circuit after executing the yield instruction.)

数据结构放弃

技术领域

本公开涉及数据处理。本公开可(例如)与使用储存电路(诸如,寄存器)来储存数据的数据处理设备有关。

背景技术

数据处理装置可包括一或更多个储存电路,诸如,用于在处理期间储存数据值的寄存器。可通过指令来操作这些数据值。然而,在给定时间周期内,将不再使用一些数据值。然而,这些数据值的存在会影响未来指令的执行。例如,如果推测性地采用分支且一条指令试图将寄存器用作目的地寄存器,则可能发生停顿,直至可决定是否正确地推测采用该分支为止。此系因为未采用分支上的指令可能将寄存器用作源,且一旦该寄存器中的值被覆写便不可能“倒回”该推测采用的分支。同时,上下文切换导致保存寄存器的状态,使得彼些寄存器可由不同进程使用。然而,因为可能必须保存每一寄存器,所以每一寄存器的存在会增加发生上下文切换所耗费的时间。需要改良此种数据处理装置的效率。

发明内容

自第一示例配置来看,提供一种数据处理装置,其包括:多个储存电路,用于储存数据;以及执行电路系统,用于响应于指令使用此类储存电路来执行一或更多个操作,其中此类指令包括放弃指令;该执行电路系统经调适以通过指示该多个储存电路中的至少一者为未用储存电路来响应该放弃指令;以及该执行电路系统经调适以在执行该放弃指令之后基于该未用储存电路来影响未来指令的执行。

自第二示例配置来看,提供一种数据处理的方法,其包括:将数据储存在多个储存电路中;响应于指令包括放弃指令而使用此类储存电路执行一或更多个操作;响应于该放弃指令,指示该多个储存电路中的至少一者为未用储存电路;以及在执行该放弃指令之后基于该未用储存电路来影响未来指令的执行。

自第三示例配置来看,提供一种数据处理装置,其包括:用于将数据储存在多个储存电路中的构件;用于响应于指令包括一放弃指令而使用此类储存电路执行一或更多个操作的构件;用于响应于该放弃指令而指示该多个储存电路中的至少一者为一未用储存电路的构件;以及用于在执行该放弃指令之后基于该未用储存电路来影响未来指令的执行的构件。

附图说明

仅借助于示例,将参考在随附说明书附图中所示出的本发明的实施方案来进一步描述本发明。

图1根据一些实施方案示意性地示出数据处理装置。

图2A、图2B和图2C根据一些实施方案示出放弃指令的三个不同示例。

图3根据一些实施方案示出例示推测执行的方法的流程图。

图4根据一些实施方案示出储存电路放弃可如何辅助推测的示例。

图5根据一些实施方案示出例示自错误的推测执行恢复的方法的流程图。

图6根据一些实施方案示出当储存电路(诸如,寄存器)已被放弃时在上下文切换期间保存上下文的示例。

图7根据一些实施方案提供作为上下文切换的一部分保存寄存器(其中一些寄存器已被放弃)的示例。

图8根据一些实施方案示出当寄存器已被放弃时在上下文切换期间加载上下文的示例。

图9根据一些实施方案示出例示数据处理的方法的流程图。

具体实施方式

在参考随附诸图论述实施方案之前,提供对实施方案的以下描述。

根据一些示例配置,提供一种数据处理装置,其包括:多个储存电路,用于储存数据;以及执行电路系统,用于响应于指令使用此类储存电路来执行一或更多个操作,其中此类指令包括一放弃指令;该执行电路系统经调适以通过指示该多个储存电路中的至少一者为未用储存电路来响应该放弃指令;以及该执行电路系统经调适以在执行该放弃指令之后基于该未用储存电路来影响未来指令的执行。

在以上示例配置中,放弃指令用于指示储存在特定储存电路中的值(例如,储存在彼储存电路中的数据值)不再被使用。此“不被使用”状态一直持续至储存电路下一次被存取(例如,写入)为止,此时值改变,且因此储存电路的状态再次变成“使用”。在一些实施方案中,可能会提供显式指令来指示储存电路现“在使用中”。无论如何,基于具有此状态的储存电路影响(例如,修改)了至少一些未来指令的执行。应注意,未来指令实际上可能会由于(例如)分支或其他控制流指令而在程序中更早出现。放弃指令不必为专用指令,而是可系执行放弃存储电路的功能的常规指令。以此方式,可如此指示不再使用的储存电路,且因此通过虑及这些储存电路可使得未来指令的执行更高效。可通过编译程序和/或通过程序员来执行决定给定储存电路是否不再使用的进程。假定在编译/程序化时,可分析整个程序以决定是否不再使用给定值,则有可能将此信息作为数据处理装置的程序的一部分来提供。

根据一些示例配置,数据处理装置包括上下文保存电路系统,以响应于上下文切换来保存储存电路的集合,其中未来指令包括一或更多个上下文切换指令以执行上下文切换。可在上下文切换期间使用上下文保存电路系统,其中(例如)数据处理装置自一个应用程序的执行切换至另一应用程序。在上下文切换期间,有必要保存(例如,保存至主存储器)与储存电路的集合相关联的内容,以使得后续应用程序可利用彼些储存电路,而不会使当前储存在彼些储存电路中的数据丢失。

在一些示例中,上下文保存电路系统经调适以抑制保存该未用储存电路。通过抑制保存该未用储存电路,执行上下文保存的进程由可于要储存较少数据而加快。因此,提高了上下文保存的效率,以及减少了为储存当前上下文所必要的储存量。

在一些示例中,上下文保存电路系统经调适以保存除了未用储存电路以外的该多个储存电路。在这些实施方案中,保存排除未用储存电路以外的储存电路的集合。

在一些示例中,上下文保存电路系统经调适以保存未用储存电路或此类储存电路中除了未用的以外的彼些的标识符。因此,保存了未用储存电路的标识符,或保存了使用的储存电路的标识符。在任一情形下,有可能决定在恢复应用程序时如何以及在何处将保存的值插入回储存电路中。在存在诸多未用储存电路的情况下,可储存未用储存电路中的每一者的标识符,以使得保存的值中的每一者可恢复至其正确位置。作为恢复进程的初始步骤,可重设储存电路的集合的当前值,以使得将抹除未恢复的彼些储存电路。因此,即使被切换掉的应用程序所使用的数据表现出异常,还无法被切换到的应用程序读取。

在一些示例中,数据处理装置包括发布电路系统,用于以串流顺序接收指令,且以不同于该流顺序的修订顺序将此类指令发布给执行电路系统。发布电路系统可用于无序地执行指令。特定而言,发布电路系统可以串流顺序接收指令,且接着将指令(或对应于彼些指令的操作/控制信号)提供给队列,在该队列中,此类指令可按指令之间的数据依赖性以任何顺序执行。以此方式,倘如果存在多个执行电路,则可并行地执行指令。另外,通过无序地执行指令,有可能限制指令之间数据依赖性的影响,以使得指令不需要由于其他指令之间的数据依赖性而停止执行。

在一些示例中,串流顺序包括放弃指令,其后为分支指令,再后为生产者指令;预测分支指令为被采用的;生产者指令将第二数据值存储在未用储存电路中;且修订顺序导致生产者指令在分支完成之前发布。在这些示例中,使用放弃指令来指示保持第一数据值的储存电路不再被使用。由此,有可能当分支仍为推测性(例如,尚未完成)时生产者指令(在分支目标处)开始执行。此系因为放弃指令已指示储存有第一数据值的储存电路将不再被使用。因此,保持彼数据的储存电路可由生产者指令用于储存第二数据值。通常,如果控制流不确定(例如,由于有条件的分支),则处理器将无法推测性地执行生产者指令,因为如果分支的预测不正确,则在读取旧值的正确程序流上可能仍存在消费者指令。放弃机制使得有可能说明情况并非如此,且因此使得能够进行推测。在一些示例中,自未用储存电路读取第一数据值的消费者指令在放弃指令之前。消费者指令可被视为利用特定数据值的指令(与生产者指令相反,生产者指令可被视为提供供消费者指令使用的数据值的指令)。因而,在消费者指令在放弃指令之前的情况下,生产者指令在消费者指令完成读取作为放弃指令的制品的寄存器之后执行。

在一些示例中,消费者指令在多个处理器周期内执行。在消费者指令在多个处理器周期内执行的情况下,在消费者指令完成之前执行其他指令(诸如,生产者指令)的能力使得执行其他操作成为可能,而非进行停顿直至消费者指令完成为止。

在一些示例中,消费者指令为矩阵运算指令。在诸多处理器周期内执行的指令的其他示例可包括除法指令及内存存取指令。

在一些示例中,多个储存电路中的每一者为可同时寻址的。由于多个储存电路为可同时寻址的,因此有可能在任何一个时间存取彼些储存电路中的任一者。此对于一些算法(诸如,矩阵乘法)有用,其效率可通过添加可寻址储存电路系统来提高。此并非在所有架构中总是有可能的。特定而言,特定架构可能具有大量可用的储存电路,在任一时刻只可寻址其中的一个子集。此导致数据处理装置产生增大的储存电路可用性的错觉。例如,如果多个指令将数据储存在寄存器(储存电路)R3中,则会提供寄存器R3的多个复本,使得对于每一推测流,可分配新的R3寄存器。如果推测证实不正确,则可“恢复”R3的先前复本。此技术称为重命名。重命名需要使大量资源可用,且由于所需电路系统的量,对于特别大的寄存而言,重命名可能被视为不切实际的。通过提供更多可寻址的储存器而非使用相同的储存空间来提供重命名寄存器,可提高诸如矩阵乘法的算法的效率。继而通过能够“放弃”未用的寄存器,可减少上下文切换期间需要保存的寄存器的数目。

在一些示例中,多个储存电路中的每一者经调适以储存多个数据值,多个储存电路中的每一者经调适以储存多个数据值。通过提供经调适以储存多个数据值的储存电路,可满足复杂的数据结构。例如,这些储存电路可经配置以储存与矩阵有关的所有数据值,以使得可一次对整个矩阵执行运算。

在一些示例中,多个储存电路中的每一者具有至少1KiB的容量。换句话讲,多个储存电路中的每一者可具有1024个字节的容量。可使用这些储存电路,以便储存多个数据值。特定而言,个别数据值的大小可变化。例如,可储存1024个8位的值,或可储存256个32位的值。

在一些示例中,执行电路系统经调适以通过执行一或更多个操作中的至少一些来响应放弃指令,并指示多个储存电路中的该者作为未用储存电路。因此,放弃指令可执行诸多不同目的。例如,放弃指令可为常规指令,其利用储存在储存电路中的一或更多个数据值,以及指示不再使用彼些储存电路中的一或更多者。以此方式,不需要将专用放弃指令作为指令集合的一部分来提供。另外,通过使储存电路的放弃作为另一指令的一部分,可使程序更高效。

存在诸多种方式来指示将特定指令用于执行放弃操作。然而,在一些示例中,此类指令中的至少一些包括字段以指示彼指令是否为放弃指令。可将指令编译成由标识要执行的指令的作业码以及一或更多个参数构成的机器语言指令。在这些示例中,参数中的一或更多者为与储存电路(例如,寄存器)引用相关联的单一位,其指示该储存电路是否将被标记为未用。由于设定了机器语言指令中的这些字段中的一或更多者,将该指令识别为放弃指令,且放弃该特定储存电路。

在一些示例中,数据处理装置包括追踪电路系统,以标识包括该未用储存电路的一或更多个未用储存电路。追踪电路系统可因此用于指示未用的(如果干)储存电路的标识符。在仅单个储存电路可被标记为未用的情况下,屏蔽电路系统可简单地编码彼储存电路的标识符。在其他示例中(其中未用储存电路的数目可大于一),可提供屏蔽以编码(例如,使用按位编码)所使用的彼些储存电路。在任一情形下,可使用放弃指令,以便更新储存在追踪电路系统中的值。类似地,也可更新储存在追踪电路系统中的值,以指示特定寄存器由于彼储存电路中的彼值被改变而被使用。

在一些示例中,储存电路为寄存器;以及未用储存电路为此类寄存器中的未用寄存器。

现将参考诸图来描述特定实施方案。

图1根据一些实施方案示意性地示出数据处理装置100。该装置100包括提取器110,该提取器负责自(例如)主存储器或指令高速缓存提取指令。所提取的指令由译码器120存取,该译码器120将所提取的指令译码成表示个别操作的一或更多个控制信号。操作被传递至发布逻辑130,该发布逻辑负责发布并排程构成指令的操作。自此,指令被发布至一或更多个执行电路170。在此示例中,执行单元170包括算术逻辑单元(ALU)170a、第二算术单元(ALU)170b、浮点单元(FPU)170c、加载/储存单元170d、分支单元170e、上下文保存单元170f和矩阵运算单元170g。装置100包括寄存器档案140a、140b。寄存器档案由两部分构成-第一部分140a含有通用寄存器150a且第二部分140b含有特定寄存器150b,在此情形下特定寄存器150b保留用于矩阵运算。此处,寄存器150b为所主张储存电路的示例。在指令执行期间,来自寄存器档案140a中的通用寄存器150a的数据可传递至执行单元170中的任一者。然而,来自特定寄存器150b的数据仅可由加载/储存单元170d及矩阵运算单元170g存取。

执行单元170中的一或更多者(诸如,矩阵运算单元170g)执行与提取器110所提取的指令中的放弃指令相对应的操作。放弃指令用于指示不再需要寄存器档案140b中的一或更多个特定寄存器150b。此种需求缺乏一直持续至新数据值被储存在彼寄存器中的时为止。由执行电路170中的一者执行的放弃指令导致保持在寄存器档案140b内的用法屏蔽160被更新。用法屏蔽160指示当前使用(即,未被放弃)的特定寄存器150b的集合。当然,在其他实施方案中,用法屏蔽160可用于指示特定寄存器150b中的已被放弃的彼些。在此实施方案中,如稍后将指示,出于推测目的,用法屏蔽160也可用于发布逻辑130。

图2A示出放弃指令280的示例。在此情形下,放弃指令采取矩阵乘法指令的形式。即,矩阵乘法指令具有放弃能力,且因此为放弃指令的示例,即使指令实际上执行了矩阵乘法的进一步运算。在此示例中,指令280包括三个参数-对寄存器MC1的第一引用、对寄存器MAP的第二引,及对寄存器MBQ的第三引用。在此指令280中,最后两个引用可用特定符号(^)作为后缀。此指示,在利用了储存在彼些寄存器内的值后,彼些寄存器将被放弃。还在图2A中示出出此指令280的机器语言形式200。特定而言,该指令由作业码210构成,该作业码唯一地标识特定指令(三个寄存器引用230、250、270),其中每一者可以二进制标识寄存器(寄存器230中的一者为运算结果的目的地,且另两个250、270为运算的输入的源)。指令200还包括两个放弃位240、260,其中每一者均与源寄存器引用250、270中的一者相关联。关于这些位中的一者的为“1”的值意谓一旦已发布了指令并已自相关寄存器中提取了数据,便将放弃对应的寄存器。同时,为“0”的值指示将使用数据值且寄存器不会被放弃。在当前示例中,与第一寄存器引用MAP 250相关联的放弃位240的设置而非与第二寄存器引用MBQ 270相关联的第二放弃位260的设置与以下指令相对应:

MATMUL MC1,MAP^,MBQ

图2B示出放弃指令的另一示例。在此示例中,放弃指令290采用不具有进一步操作目的的显式放弃指令的形式。在此,指令290包括显式寄存器引用MA0。因此,当执行此指令时,寄存器MA0将被放弃。

图2C示出放弃指令的第三示例。在此示例中,指令295包括可用于标识诸多不同寄存器的屏蔽。在此示例中,屏蔽为00110111。此屏蔽可解释为意谓立即放弃寄存器编号0、1、2、4和5,而将不放弃寄存器3、6和7。

将了解,也可在不偏离本发明技术的情况下使用放弃指令的其他形式。另外,使用特定位值(诸如1)来指示要放弃的特定寄存器也可反转,以相反表示不应放弃该寄存器的事实。

图3根据一些实施方案示出流程图300,其示出结合已放弃寄存器的集合来使用推测执行的方法。进程以步骤310开始,此处提取(可能的)推测执行。在步骤320处,决定指令的目的地寄存器(例如,结果将被写入的寄存器)是否为发生重命名的寄存器。例如,此可与通用寄存器150a相对应。如果目的地寄存器为重命名的寄存器,则在步骤330处,指派新的物理寄存器以充当指令的目的地寄存器,且在步骤340处,基于该指令使用指派的物理寄存器来执行推测操作。

然而,本发明技术还使得有可能在目的地寄存器并非重命名的寄存器时(即,在该寄存器为特定寄存器150b中的一者的情况下)执行推测。特定而言,如果在步骤320处决定目的地寄存器并非重命名的寄存器,则在步骤350处,决定该目的地寄存器是否为已放弃寄存器。如果非如此,则在步骤360处,无法推测地执行指令,且因而必须以非推测方式执行。或者,如果在步骤350处,决定寄存器为已放弃寄存器,则进程进行至步骤340,此处可执行与彼指令相对应的推测操作。有可能使用已放弃寄存器来执行推测操作,因为已放弃寄存器不再被应用程序使用。因此,应用程序当前对该寄存器无兴趣,且因而在错误推测的情况下,寄存器可安全地返回至被放弃状态,而不会丢失数据。

图4根据一些实施方案示出寄存器放弃可如何辅助推测的示例。特定而言,图4示出其中执行一连串矩阵乘法的程序的示例。在第一行及第二行处,数据值(例如,矩阵)被加载至寄存器MA0及MB0中。接着在指令三至十二之间开始循环。在此循环内,在指令三处,将另一数据值(例如,矩阵)加载至寄存器MB1中。在指令四处,通过将储存在MA0中的矩阵乘以储存在MB0中的矩阵来进行矩阵乘法,其中结果储存在寄存器MC0中。在指令五处,将新矩阵加载至寄存器MA0中,且在指令六处,执行矩阵乘法MA0×MB1=MC1。在指令七处发生至MA0中的另一加载。在指令八处,发生另一矩阵乘法MA1×MB0=MC2。在指令九处,将矩阵加载至寄存器MB0中。在指令十处,发生另一矩阵乘法MA1×MB1=MC3。在指令十一处,变量“count”的值减小一。在第十二行处,测试以查看在指令十一处发生的递减的结果是否导致“count”的值达到零。如果非如此,则流程返回至指令二至三之间的卷标标记的循环。否则,其余程序(未示出)将继续。

预期矩阵乘法指令耗费诸多处理器周期来执行。为了防止停顿,在指令十的执行期间,可执行其余指令,预测分支指令十二的结果。然而,此在指令三执行时会造成潜在的问题。特定而言,指令三将导致储存在寄存器MB1中的值被覆写。因而,如果预测不正确,则储存在寄存器MB1中的值将丢失。显然此系不可接受的,因为在循环之后某一指令可能会读取MB1。在一定程度上,此可使用寄存器重命名(先前所提及)得到解决。此会将不同寄存器指派给有冲突的指令,诸如,指令三。因而,如果不正确地预测了分支,则仅有必要丢弃供应给循环中指令三的彼特定调用的物理寄存器的内容。然而,寄存器重命名需要提供寄存器的多个复本。在提供大寄存器的情况下(诸如,此种情况),寄存器重命名的成本变得过高。因此,通常必须在提供大量大寄存器或在分支指令上停顿之间做出选择。

放弃指令的使用可用于抑制此种停顿,而无需增大寄存器的数目。特定而言,通过在指令十一及十二之间插入放弃指令以明确指示不再需要寄存器MB1,指令三可不受惩罚地执行。特定而言,如果决定该分支不应被采用,且寄存器MB1的内容已被指令三覆写,则可简单地擦除寄存器MB1的内容。此系因为MB1的内容不再被程序所需要,且因而可被设定为任何值。实务上,此信息通常可供编译程序和/或程序员或程序使用。此系因为编译程序/程序员具有对程序的全面了解,且可决定哪些指令将在稍后执行。当然,重要的在于,在已指示不再需要寄存器MB1的情况下,程序不会再试图自该寄存器进行读取,直至对彼寄存器进行了另外写入为止(由此指示对该寄存器的放弃已结束)。

图5根据一些实施方案示出流程图500,其示出了自不正确地发生的推测执行中恢复的方法。特定而言,在图5中,假设推测系由于(例如)不正确的分支预测而发生的。在步骤510处,决定推测已不正确地发生。在步骤520处,决定已不正确地执行的指令中所引用的寄存器是否为重命名的寄存器。如果如此,则在步骤540处,恢复逻辑寄存器至物理寄存器的旧映像。即,寄存器的旧值重新映像为寄存器的当前值。在步骤550处,接着释放用于储存该值的推测寄存器(例如,将其重新添加至可用物理寄存器池中)。在步骤520处,如果寄存器并非重命名的寄存器,则在步骤530处,恢复放弃位。即,如果寄存器被写入由此导致放弃位被擦除,则恢复放弃位以指示寄存器仍被放弃。例如,在图4的示例中,在指令十一及十二之间设定寄存器MB1的放弃位。如果错误推测发生且循环重新不正确地执行,则在指令三处,寄存器MB1中的值的设置将导致放弃位被擦除。接着,一旦检测到推测已不正确地发生,则必须恢复放弃位,因为彼寄存器仍被放弃且自被放弃以来尚未被写入。

放弃指令也可用于辅助上下文切换。当切换系统上运行的活动线程或应用程序时,会发生上下文切换。此要求储存寄存器的当前值,并将与切换到的线程或应用程序相关联的寄存器的已储存值储存回寄存器中,以使得自挂起的线程(现已切换到)离开时起,执行可继续。

图6根据一些实施方案示出当寄存器已被放弃时可如何在上下文切换期间保存上下文的示例。特定而言,在指令一处,将指示已被放弃的寄存器集合的用法屏蔽160的值储存在寄存器x0中。在指令二处,接着将寄存器x0的值储存在context_ptr中,该context_ptr为内存中正在储存寄存器的当前值的位置。感叹号“!”指示context_ptr的值接着递增。指令三决定用法屏蔽160中是否表示值一。换句话讲,指令三决定是否放弃寄存器一。如果寄存器一(MA0)被放弃,则执行跳转至标记not_ma0。否则,指令四会导致寄存器MA0中所储存的数据被储存在context_ptr中,该context_ptr接着递增。无论如何,在指令五处,决定用法屏蔽160是否指示第二寄存器(MA1)。如果如此,则程序跳转至not_ma1。否则,在指令六处,将寄存器MA1的值储存在context_ptr处,且context_ptr递增。无论如何,在指令七处,决定用法屏蔽160是否指示第三寄存器(MB0)。如果如此,则进程跳转至not_mb0。否则,在指令八处,将寄存器MB0的值储存在context_ptr处,且context_ptr接着递增。针对可由用法屏蔽160指示的每一寄存器重复此进程。实际上,每一寄存器皆在用法屏蔽160中进行了测试。如果列出了该寄存器(表明该寄存器已被放弃,且因此未用),则将跳过该寄存器的保存。否则,在context_ptr处执行彼寄存器的保存。除此以外,保存用法屏蔽160自身,以使得所保存值的标识符在未来系已知的。

图7提供将寄存器保存为内存中的数据的示例。储存的第一项为包括四个字节的屏蔽160。在此示例中,屏蔽为值00011010,其表示寄存器MA0、MB0、MC1、MC2和MC3已被放弃,且因此不保存。队列上的下一项为第一已保存寄存器-MA1。此后为第二已保存寄存器-MB1。此后为第三已保存寄存器-MC0。总言的,总共保存3076个字节(寄存器MA1、MB1、MC1中的每一者占用1024个字节)。因此,此在时间及空间两方面产生了显著的节省。特定而言,节省了空间,因为并不保存所有寄存器(其中许多被放弃且因此不使用)。另外,因为并不保存所有寄存器,所以保存及加载寄存器的进程加快。通过以此方式保存寄存器,有可能读取数据并恢复正确的寄存器。

图8示出当寄存器已被放弃时在上下文切换期间加载上下文的示例。特定而言,第一指令kill_all导致所有寄存器被擦除。如此执行系为了防止由于传入线程已放弃寄存器而将数据自一个线程(或应用程序)无意间携载至另一线程(或应用程序)。第二指令接着将context_ptr处的数据加载至寄存器x0中,并使上下文指标递增。如通过图7所示出,此内容将为屏蔽160的已保存的先前值。在此示例中,不直接恢复屏蔽160的先前值,反而恢复为“kill_all”指令的结果,其后恢复活动寄存器。在指令三处,测试屏蔽以查看是否放弃了第一寄存器。如果该寄存器已被放弃,则进程跳转至not_ma0。否则,指令四导致context_ptr处的数据被加载至寄存器MA0中且context_ptr递增。无论如何,在指令五处,测试屏蔽以查看是否放弃了第二寄存器(MA1)。如果如此,则进程跳转至标记not_ma1。否则,在指令六处,将储存在context_ptr处的数据加载至寄存器MA1中。context_ptr接着递增。针对寄存器中的每一者持续此进程,其中测试是否应加载彼特定寄存器,并在适当的情况下执行加载(例如,如果根据屏蔽,则未放弃该寄存器)。如先前所述,因为已放弃的寄存器意谓较少数据被传送,所以用于执行传送的时间可减少。

图9根据一些实施方案示出例示数据处理的方法的流程图。流程图900以步骤910开始,此处将数据储存在一或更多个寄存器中。在步骤920处,使用彼些寄存器中的一或更多者来执行操作。在步骤930处,使用放弃指令来指示彼些寄存器中的一或更多者现未用。在步骤940处,未来指令的执行受到彼些寄存器中的一些未用的指示影响。例如,此可采取上下文切换的形式,由于寄存器被放弃,因此可更高效地执行上下文切换或使用更少的空间。此情形的另一示例系由于放弃了彼些寄存器中的一些而推测地执行指令(即使在无重命名电路系统的情况下还如此)的能力。

在本专利申请中,词语“经配置以...”用于意谓装置的组件具有能够执行所定义操作的配置。在此上下文中,“配置”意谓硬件或软件的互连的布置或方式。例如,装置可具有提供已定义操作的专用硬件,或处理器或其他处理组件可经程序化以执行该功能。“经配置以...”并不暗示装置组件需要以任何方式改变以提供已定义操作。

尽管本文中已参考随附说明书附图详细描述了本发明的说明性实施方案,但应理解,本发明并不限于彼些精确实施方案,且熟习此项技术者可在不脱离如由附加权利要求书所限定的本发明的范围及精神的情况下在其中进行各种改变、添加及修改。例如,在不脱离本发明的范围的情况下可进行从属项的特征与独立项的特征的各种组合。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:分支指令的处理方法、分支预测器及处理器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!