使用可丢弃状态的执行电路的制作方法

文档序号:25542960发布日期:2021-06-18 20:39阅读:85来源:国知局
使用可丢弃状态的执行电路的制作方法

本技术涉及数据处理,特别涉及在流水线中可以发现的执行电路的使用。



背景技术:

在数据处理设备中,可能希望允许用户扩展指令集,以支持其他执行单元。此类执行单元可以用来提供专用处理的高效硬件实现,否则其使用通用执行单元可能是耗时的。例如,可以扩展指令集以提供加密指令,该加密指令使用密钥对数据进行加密。使用传统的通用alu可能需要许多处理器周期。然而,可以通过提供专用加密单元来改进处理时间,该专用加密单元被专门设计为比通用alu快得多地执行加密操作,该通用alu通常被设计为能够完成许多其他操作。然后可以提供加密指令以具体使用加密单元而不是alu。然而,这样做的一个局限在于执行单元存储状态是有问题的。特别地,此类状态可能必须作为上下文切换的一部分被保存和恢复,这不仅增加了执行上下文切换所花费的时间,而且还增加了其复杂度,因为必须确定待存储和恢复的数据。在为此类执行单元提供对存储器的访问方面还存在困难,因为这需要各种安全性检查和权限检查。这些困难可以通过防止执行单元存储状态来减少,但是这对执行单元的复杂度造成了限制,并且可能阻止执行许多功能。



技术实现要素:

从第一示例性配置来看,提供了执行电路,该执行电路包括:存储电路,用于保持执行电路的存储状态;操作接收电路,用于从发布电路接收与要执行的操作相对应的操作信号,该要执行的操作从存储电路访问执行电路的存储状态;功能电路,用于通过从存储电路访问执行电路的存储状态来寻求响应于操作信号执行操作;删除请求接收电路,用于接收删除信号并响应于删除信号而从存储电路中删除执行电路的存储状态;以及状态丢失指示电路,用于当执行电路的存储状态不存在并且为操作所需要时,通过指示错误来响应操作信号。

从第二示例性配置来看,提供了一种数据处理方法,该数据处理方法包括:保持执行电路的存储状态;以及从发布电路接收与要执行的操作相对应的操作信号,该要执行的操作访问执行电路的存储状态;通过访问执行电路的存储状态来寻求响应于操作信号执行操作;接收删除信号并响应于删除信号而删除执行电路的存储状态;以及当执行电路的存储状态不存在并且为操作所需要时,通过指示错误来对操作信号进行响应。

从第三示例性配置来看,提供了一种计算机程序,用于控制主机数据处理设备提供指令执行环境,该计算机程序包括:数据结构,用于保持存储状态;操作接收编程逻辑,用于从发布编程逻辑接收与要执行的操作相对应的操作信号,该要执行的操作访问存储状态;功能编程逻辑,用于通过从数据结构访问存储状态来寻求响应于操作信号执行操作;删除请求接收编程逻辑,用于接收删除信号并响应于删除信号而从数据结构中删除存储状态;以及状态丢失指示编程逻辑,用于当存储状态不存在并且为操作所需要时,通过指示错误来对操作信号进行响应。

从第四示例性配置来看,提供了一种数据处理设备,该数据处理设备包括:发布电路,用于向执行电路发布操作,其中,该执行电路适于存储在操作的执行期间访问的存储状态;以及错误检测电路,用于检测来自执行电路的错误指示,该错误指示是存储状态是执行该操作所需要的并且所述存储状态不存在。

从第五示例配置来看,提供了一种数据处理方法,该数据处理方法包括:向执行电路发布操作,其中,执行电路存储在操作的执行期间访问的存储状态;以及检测来自执行电路的错误指示,该错误指示是存储状态是操作的执行所需要的并且存储状态不存在。

从第六示例性配置来看,提供了一种计算机程序,用于控制主机数据处理设备提供指令执行环境,该计算机程序包括:发布编程逻辑,用于向执行编程逻辑发布操作,其中执行编程逻辑适于存储在操作的执行期间访问的存储状态;错误检测编程逻辑,用于检测来自执行编程逻辑的错误指示,该错误指示是存储状态是操作的执行所需要的并且存储状态不存在。

附图说明

将仅通过示例的方式,参考如附图所示的本技术的实施例来进一步描述本技术,其中:

图1示出了根据一些实施例的数据处理设备和执行电路;

图2示意性地示出了根据一些实施例的执行电路;

图3示意性地示出了根据一些实施例的缓存形式的执行电路;

图4由图4(a)和图4(b)组成,示出了根据一些实施例的使用存储的状态来实现地址转换的过程;

图5示出了根据一些实施例的示出执行位用于存储状态的过程的流程图;

图6示出了根据一些实施例的用于使用存储的状态来执行值累加的过程;

图7示出了根据一些实施例的用于使用存储状态来执行使用检查点的值累加的过程;

图8示意性地示出了根据一些实施例的用于控制执行电路的管理电路的使用;

图9示出了根据一些实施例的示出在执行环境的改变期间使用管理电路的过程流程图;

图10显示了根据一些实施例的示出在执行电路处使用的数据处理方法的流程图;

图11示出了根据一些实施例的示出在流水线中使用的数据处理方法的流程图;以及

图12示出了根据一些实施例的示出模拟器实现方式的流程图。

在参考附图讨论实施例之前,提供以下实施例和相关优点的描述。

具体实施例

根据一个示例配置,提供了一种执行电路,该执行电路包括:存储电路,用于保持执行电路的存储状态;操作接收电路,用于从发布电路接收与要执行的操作相对应的操作信号,该要执行的操作从存储电路访问执行电路的存储状态;功能电路,用于通过从存储电路访问执行电路的存储状态来寻求响应于操作信号执行操作;删除请求接收电路,用于接收删除信号并响应于删除信号而从存储电路中删除执行电路的存储状态;和状态丢失指示电路,用于当执行电路的存储状态不存在并且为操作所需要时,通过指示错误来对操作信号进行响应。

执行电路可以是要从发布单元与数据值一起执行的发布操作,该数据值可以作为指令的一部分显式提供,或者可以从寄存器堆中获得。在执行该操作之后,然后可以将数据值提供给写回单元,该写回单元可以将数据存储回到例如寄存器堆。在上述方面中,执行单元能够在内部存储状态。然而,执行单元使得可以通过删除请求接收电路在任何时间删除状态。如果接收到需要使用执行单元中未保存的状态的操作,则发布错误信号。以这种方式,执行电路能够对丢失必要状态的情况(例如,通过删除)进行响应。因此,允许执行电路存储状态,从而使的能够设计比在不能保存状态的情况下可能设计的执行电路更复杂的执行电路。与在执行电路中本地保存该状态相关联的困难由执行电路克服,该执行电路被设计为使得该状态可以被删除。这又通过允许执行电路在执行操作时发信号通知必要状态丢失的事实来进行处理,从而可以采取校正动作来恢复状态或以其他方式补偿被删除的状态。如将认识到,功能电路试图在由于缺少必要状态信息而可能不成功的意义上执行操作,在这种情况下,可以发信号通知错误。

在一些示例中,从执行电路的外部接收删除信号。因此,用于使执行电路经由删除请求接收电路删除其存储状态的删除信号可以源自执行电路外部。例如,在一些情况下,信号可以源自流水线中的其他位置。在其他实施例中,删除信号可以从执行电路本身内部接收,或者可以从执行电路内部或执行电路外部接收。

在一些示例中,要执行的操作使数据被输出;并且通过将要输出的数据作为预定值输出来指示错误。存在指示错误的多种方法。在这些示例中,由执行电路执行的操作使数据由执行电路输出。此类数据通常可以例如经由写回电路被写回到寄存器堆。在这些示例中,可以通过输出数据的预定值来指示错误。预定值使得其被识别为具有错误已经发生的含义。实际上,可以使用任何特定值,但需要与真实数据值区分开。在浮点运算的情况下,适当的候选值可以是nan、无穷大或零。在产生正结果的操作的情况下,零值或另一个负值可用于这种情况。也可以使用其他保留值。

在一些示例中,通过设置结果标记来指示错误。执行单元使用结果标记,以便在指令之间传递信息。例如,可以使用零标记(z)来指示先前指令的结果为零。类似地,可以使用进位标记(c)来指示先前加法运算的结果导致发生溢出。在这些示例中,可以提供专用标记,或者可以使用现有标记,以指示执行电路发信号通知了错误。显然,如果使用现有标记,则其用法不应与该标记的现有含义冲突。例如,如果执行单元采用算术逻辑单元(alu)的形式,则重新使用进位标记(c)可能是不合适的,因为当由alu发布信号时,这已经具有识别的含义。

在一些示例中,存储电路包括缓存;存储状态包括缓存数据;该操作是对缓存数据项的查找操作。执行电路的一种用途是实现缓存。在这样的示例中,存储电路包括缓存,并且存储的数据包括存储在缓存中的缓存数据。然后可以执行操作以提供对缓存的查找。存储状态与缓存数据相对应。因此,可以在执行电路的多次调用中保留缓存数据,并使该缓存数据随着时间的推移而被建立。但是,作为发布删除信号的结果,缓存数据也可能在任何时间丢失。但是,由于缓存提供了存储在其他位置的数据的副本,因此可以从其原始源重新填充缓存。

在一些示例中,存储状态包括数据输入集;操作接收电路适于从发布电路接收与进一步的操作相对应的进一步的信号,以提供一些数据输入;以及功能电路适于通过加载来自存储电路的数据输入来寻求响应于操作信号执行操作。在这些示例中,可以重复发布数据提供信号,以便通过多个操作提供一系列数据输入。换句话说,每个数据提供信号都可以仅提供完整的数据输入集的子集。在通过多个数据提供信号提供了所有必要的数据输入之后,使用已提供的完整的数据输入集来执行操作。再次,存储在执行电路中的状态(例如,到目前为止接收到的数据输入)可以在任何时间丢失。在执行操作之后丢失存储状态的后果是有限的。特别是,除非打算第二次执行该操作,否则此类数据的丢失可能是不相关的。如果在接收到完整的输入集之前丢失了状态,则该操作将发生错误。这种情况可以在软件中修复,例如通过在发生错误的情况下重新提供数据输入并重新执行操作。

在一些示例中,该操作是密码操作。一种情况是通过多个操作进行数据值的累加,随后对完整的数据输入集执行操作,其中要对多个数据项进行加密或解密。如果要加密或解密的数据不适合寄存器,则可能有必要通过多个操作来加载此数据。如前所述,一些数据的丢失可能导致操作产生错误,这又导致将数据项集被重新加载到执行电路中。通过在执行电路的形式的“黑盒”内提供加密操作,可以使加密密钥更安全,即通过使其难以访问。

在一些示例中,该操作是累积操作。其中可以提供多个数据值且接着对其进行操作的情形的另一示例是在累加操作中。例如,乘法累加运算执行多个乘法,其结果被加在一起。同样,如果在提供完整的值集之前删除了可以由部分累加值或到目前为止接收到的值组成的状态,则产生错误。

在一些示例中,存储状态包括一组配置位;该操作具有多种操作模式,并且操作模式的选择受该组配置位的影响。此类操作模式可以影响执行电路执行其操作的方式。例如,在媒体编码场景中,操作模式可以涉及要在媒体上执行的压缩级别。高压缩可能是耗时的,并且产生较少量的压缩数据,但是质量低于低压缩,该低压缩可能更快并且产生更大量的数据。要使用哪种操作模式(例如,哪种压缩设置)可以根据情况而不同,并且可以由配置位来规定。在压缩操作完成之前丢失配置位的情况下,压缩操作将失败,引发错误,并且可以重新加载和重试配置。

根据一个示例配置,提供了一种数据处理设备,该数据处理设备包括:发布电路,用于向执行电路发布操作,其中,执行电路适于存储在操作的执行期间访问的存储状态;以及错误检测电路,用于检测来自执行电路的错误指示,该错误指示是存储状态是执行操作所需要并且存储状态不存在。

上述方面可以针对一种数据处理设备,该数据处理设备可以采取流水线的至少一部分的形式,在该流水线中不包括前述执行电路。该数据处理设备包括发布电路,该发布电路使操作被发布到执行电路。执行电路适于内部存储在操作期间访问的状态。如前所述,当执行电路尝试执行该操作时,可能不存在必要状态。因此,执行电路可能产生错误。作为数据处理设备的一部分的错误检测电路能够检测错误,并且能够引起响应的发生。以此方式,数据处理设备能够向被允许内部存储状态的执行单元提供指令。但是,执行单元可以在任何时间丢失此状态,在这种情况下,错误被指示。数据处理设备能够检测到该错误的发生,在这种情况下可以采取响应动作。

在一些示例中,数据处理设备包括删除信令电路,用于向执行电路发布信号以删除存储状态。因此,数据处理设备能够发布删除信号,以使执行电路删除存储状态。这可能发生在期望或需要擦除状态的情况下,例如,在这种情况下,可以改进要擦除的状态的安全性。作为附加机制或不同机制,执行电路可能能够删除其自身的状态。

在一些示例中,删除信令电路适于响应于由数据处理设备执行的指令的执行环境的改变而向执行电路发布信号。如前所述,数据处理设备可以形成其中执行指令的流水线的至少一部分。指令可以作为执行环境的一部分执行,例如指令在其中执行的系统的划分部分。当此类环境改变时,可以适当地发布删除信号以使状态被删除,从而保持安全性。执行环境可以被认为是例如线程、进程、操作系统或虚拟机。执行环境的改变可以是从一个环境到另一个环境的改变,或者可以是关于该执行环境的参数的改变,例如线程从特权模式到非特权模式的改变。

在一些示例中,执行环境的改变是上下文切换、安全级别的改变、安全模式的改变和特权模式的改变中的任何一项。在这些示例的每一个示例中,正在发生的执行环境的改变可能使得期望擦除执行电路内的状态以维持安全性。例如,如果当操作系统将其安全模式或级别改变为更高级别时在执行电路内保持状态,则可以使执行电路在特权模式下执行用于非特权进程的指令。这可能是不希望的,因为这可能使执行电路能够执行通常不允许的操作。类似地,当当前执行的执行环境改变时,发生上下文切换。在此类情况下,可能不期望执行电路维持与已被换出的执行环境相关的状态,因为这将使不同的进程能够访问彼此的数据。通过发处导致状态被删除的信号,可以防止此类安全性破坏。

在一些示例中,数据处理设备包括:管理电路,用于响应于执行环境的改变而禁用执行电路。另一选项是响应于执行环境的改变而使执行电路被禁用。这具有以下优点:不仅可以不立即访问执行电路内的数据,但是由于执行电路被禁用而降低了功耗。

在一些示例中,管理电路适于存储在执行环境改变之前使用执行电路的先前执行环境的标识,并且响应于执行环境进一步改变回先前的执行环境而重新启用执行电路。在禁用执行电路之后,管理电路能够在恢复先前的执行环境时重新启用执行电路。例如,在上下文切换的情况下,管理电路存储在上下文切换发生之前执行的处理器线程的先前标识。一旦发生上下文切换,管理电路使执行电路被禁用。该禁用将一直发生,直到前一线程或进程被换回,此时执行电路被重新启用。

在一些示例中,删除信令电路适于响应于不同于先前执行环境的执行环境尝试使用执行电路而重新启用执行电路并向执行电路发布信号。当执行电路被禁用时,例如,不同于先前的执行环境的另一执行环境可以通过向执行电路发布操作来尝试使用执行电路。这可能是访问存储在执行电路中的数据的恶意尝试,或者可能是通过不同的执行环境简单地利用执行电路的无害尝试。在任何一种情况下,管理电路可以通过将执行电路从其禁用状态重新激活并通过发布适当的删除信号以使存储在执行电路内的状态被删除来响应此请求。因此,存储状态被丢失。然而,状态的丢失使得执行电路可以被不同的执行环境使用,而不提供对先前执行环境所使用的状态的访问,这可能导致安全性破坏。

在一些示例中,响应于该错误,发布电路被使得发布一个或多个其他操作,以使至少一些存储状态被恢复到执行电路。当发生错误时,这可能导致发布一个或多个指令,其使至少某些存储状态被恢复到执行电路。实际上,这可以通过检测到错误而发生,即产生陷阱,该陷阱使程序代码的用户定义部分被执行以对错误进行响应,或者可以导致到提供恢复子例程的程序代码的预定义部分的分支出现。这是其中软件使发布电路发布进一步的操作的两个示例。但是,也可以使用专用的硬件单元来检测错误状态,并通过发布适当的操作进行响应以恢复存储状态。在任何情况下,可以从例如备用存储器恢复存储状态,该备用存储器容纳存储状态的原始副本。在一些实施例中,发布的操作还可以使原始操作被重新发布,或者可以在恢复状态的同时直接寻址原始操作。

在一些示例中,数据处理设备包括寄存器堆,该寄存器堆包括用于存储数据处理设备的操作状态的架构寄存器集,,其中,响应于上下文切换,架构寄存器被保存到存储电路中,并且架构寄存器的新值从存储电路中被加载,而不将存储的状态保存到存储电路中。在上下文切换期间,可以将存储数据处理设备的用于指令的执行的操作状态的架构寄存器保存到诸如主存储器的存储电路。但是,这些架构寄存器不包括执行电路内部的存储状态。因此,在这些示例中,存储到存储电路的操作状态明确地排除了存储在执行电路内的存储状态。因此,在上下文切换期间,上下文切换过程不需要知道执行电路和执行电路内的存储状态。

现在将参考附图描述特定实施例。

图1示意性地示出了根据一些实施例的执行电路120和数据处理设备110。在这种情况下,数据处理设备采用具有到执行电路120的接口的流水线的一部分的形式。指令由提取电路145提取到流水线中,该提取电路145从位于流水线外部的存储器180中检索指令。指令由解码电路150解码并传递到发布电路155,发布电路155将与指令相对应的操作发布到执行单元,例如算术逻辑单元(alu)160和加载/存储单元165。发布单元155从寄存器堆170获得将由执行单元160、165操作的数据值。一旦这些执行单元160、165执行了请求的操作,它们就可以将一个或多个数据值输出到写回电路175,该写回电路将提供的数据值写回到寄存器堆170中的适当位置。

通常希望这种系统的用户能够提供附加的执行电路。这可以通过使用所谓的扩展指令来实现,扩展指令由解码电路150和发布电路155识别,并使得适当的操作被发布给用户提供的执行电路120。随着此类执行电路120的使用而出现的问题是这些电路是否可以包含它们自己的内部状态。如果此类电路120不包含内部状态,则执行电路120的能力受到限制。特别地,执行电路120不可能跨多个调用来存储数据。但是,如果执行电路120确实包含状态,则在诸如上下文切换或执行环境中的其他改变的情况下,可能需要将该状态保存到存储器180。这增强了安全性,使得属于一个进程的数据无法被另一进程访问,并且还保留进程已经生成的数据,使得其不会被另一进程覆写。

在本实施例中,执行电路120被允许存储内部状态185。然而,执行电路120使得该状态可以在任何时间被擦除。有多种方法可以擦除此状态。在一些示例中,在流水线的一部分中提供了删除信令电路140,使得执行电路120外部的信号可以使执行电路删除其状态185。除此之外或作为其替代,执行电路120可以删除其自己的状态。应该理解,删除信令电路140可以不是专用硬件。实际上,删除信令电路可以是发布电路155,其向执行电路120发信号通知作为设备100上软件执行的结果的删除操作。

除此之外,设备100包括错误检测电路130。在要求执行电路120执行必要状态不在执行电路中的操作的情况下(例如,在该状态已被删除的情况下),产生错误。该错误可以由错误检测电路130检测到,使得可以适当地采取校正动作。再次,应该理解,错误检测电路130不需要是专用于检测此类错误的专用硬件。实际上,可以通过在设备100上执行的软件的结果来检测错误。在这种情况下,通过确定标记的值或寄存器的值是否对应于已知对应于由执行电路120产生的错误的特定状态,其他执行单元之一(例如alu160)可以充当错误检测电路130。

作为上述结果,执行电路120可以获得具有内部状态185的好处。例如,执行电路120能够完成比否则可能不允许任何状态时更复杂的操作。然而,由于执行电路120被设计为入如下方式:其状态可以在任何时间被擦除并且发信号通知给流水线的其余部分使得可以采取校正动作,因此有可能克服否则可能与例如执行环境中的改变相关联的问题。

图2以示意的形式更详细地示出了执行电路120的示例。特别地,执行电路120包括操作接收电路200,该操作接收电路200负责从流水线的其余部分中的发布电路155接收请求的操作。接收到的操作被传送到功能电路230,该功能电路负责执行所请求的操作。功能电路230访问存储状态185,以便执行所请求的操作。功能电路230输出两个信号。第一信号是与试图被执行的操作的结果相对应的结果信号。这被传送到复用器240,复用器240也接收错误信号作为输入。由功能电路230输出的第二信号(丢失)是错误是否应当产生的指示。换句话说,丢失信号指示所需状态是否既是所需要的又是不存在的。这主要用作到复用器240的切换信号,使得复用器240将错误信号或结果信号作为输出信号输出,取决于操作是否正确地发生。应当理解,也可以例如以结果标记的形式直接输出丢失信号。以这种方式,可以发信号通知无法执行所请求的操作。错误信号可以是预定值。适当的预定输出值将取决于功能电路230的操作。例如,如果功能电路230产生浮点数,则浮点规范已经定义了许多特别保留的值,这些保留的值可以用于指示错误。例如,值nan(非数字)可以作为一个此类值输出。在其他情况下,功能电路230可以使得输出非零值。在这种情况下,可以输出零值以指示出现了错误。

在图2的示例中,设置了删除请求接收电路210,以便接收对要删除的状态的请求。此类请求可以源自执行单元120本身,例如来自功能电路230。然而,在一些实施例中,信号可以源自执行电路120的外部。

图3以存储缓存的形式示出了执行电路120的示例。在这种情况下,接收到的操作是查找操作,虽然可以理解,也可以接收和处理诸如存储操作之类的其他操作。查找操作由操作接收电路200接收,操作接收电路200使用查找电路300形式的功能电路来在存储电路310中执行查找,这是先前描述的状态电路185的示例。如果所请求的值无法位于存储电路310中(即如果发生未命中),则查找电路300将输出“1”作为丢失信号,以指示所需状态不是存储电路310的一部分。这被复用器240用来输出错误作为输出信号。结果信号的值是不相关的,因为在这种情况下,复用器240将优先选择错误信号。作为替代或除此之外,可以设置特殊的结果标记以指示发生了错误。

在该示例中,作为例如上下文切换的结果,可以从执行电路外部发布刷新信号,使得存储在存储电路310中的缓存数据无法被另一进程使用。在这些示例中,执行电路120能够受益于存储在存储电路310中的状态。换句话说,在大多数情况下,可以利用缓存的数据。但是,通过在发生上下文切换时使数据被刷新,来防止数据必须被存储为上下文切换操作的一部分的情况。由于缓存充当存储在其他位置的信息的快速存储库,因此缓存中的数据丢失并不重要,随着时间的推移,可以从备用存储器(例如主存储器)中重新填充。实际上,错误信号的发布可以用作从备用存储器重新加载缓存的信号。

可以使用此类缓存的一个示例是在地址映射过程中。此类过程可以在动态指令代码转换期间发生,在动态指令代码转换中,一系列指令从一种形式转换为可以由数据处理设备执行的另一种形式。例如,这可能发生在实时(jit)编译中。在图4(a)中,示出了由多个编程块400、410、420、430组成的程序流。控制流程可以是使得可以通过不同的分支指令b1、b2从块1400到达块2410或块3420中的任何一个。然后,这些块中的每个块前进到块4430。在地址映射过程中,期望将这些块转换为可以由数据处理设备执行的指令集。这些在图4(b)中示出,其中块1’440经由分支b1’或b2’流到块2’450或块3’460。然后,这些块450、460中的每个块流向块4’470。然而,在指令的转换版本中,指令在存储器中的位置将不同于未转换的块的位置。例如,块1400到块1’440的转换将导致块1’440位于不同于块1400的存储器部分中。块2’450和块3’460以及块4’470也是如此。因此,在要从分支指令b1’分支的块1’440处,希望控制流跳转到块2’450,而不是跳转到原始未转换代码中的块2410。可以通过提供原始块位置与经转换的块位置之间的映射的哈希映射来实现此过程。因此,这可以被存储为如图3所示的存储电路310的一部分。当要执行查找时,这可以通过所提供的执行电路120来查找,以便实现原始块与经转换的块之间的快速转换。如果所请求的转换丢失,例如在转换过程中发生了上下文切换,则可以从主存储器中访问转换,并在稍后将其重新加载到存储电路310中。

可以使用缓存结构的另一示例是在解码场景中,如可以与解码字节码、网络分组、跟踪分组等一起使用。在此类情况下,可以通过基于要转换的输入将索引提供到跳转表中来提供转换。这可以通过使用并行映射结构(例如cam)来实现。此类硬件结构可用于在代码中实现复杂的切换语句。在这些情况下,缓存存储结构可用于存储并行映射结构的条目。然而,在由于不存在映射(即状态)而导致转换失败的情况下,可能产生错误,从而导致使用软件而不是硬件结构来确定解码。同时,可以使用相关模式更新硬件结构,使得可以对输入的未来实例进行解码。针对很少遇到的输入模式,数据可被存储结构以逐出的形式删除。这使得可以将更常用的模式插入到硬件结构中,但是更频繁遇到的输入可以受益于实现的硬件加速。

执行电路120可以使用该状态的另一种情况是提供配置位。特别地,功能电路130可以具有可以用于控制功能电路230的操作方式的多个不同的操作模式或操作设置。发生这种情况的一种情况是在执行压缩的媒体编码器的情况下。特别地,配置位可用于指示要应用的压缩级别,这可能影响执行压缩所需的时间量、得到的压缩媒体的大小以及压缩媒体的质量。因此,取决于用户偏好,可以在逐个情况的基础上控制要执行的压缩量。在这些场景中,执行电路120可以加载有特定配置,该特定配置然后可以被应用于多个操作(例如,压缩操作)。结果,可能不需要将配置连续加载到执行电路中。如果配置的加载导致执行可能需要多个处理周期来完成的初始化,则这可能是特别有效的。在这些情况下,状态丢失仅导致配置被重新插入到执行电路120中。同时,只要配置保持存在,就可以受益于不必重复插入和初始化的配置。

图5示出了如何使用配置位的示例。这以流程图500的形式提供。该过程开始于步骤510,在步骤510处,获得配置位。在步骤520处,确定是否存在任何位。如果否,则在步骤525处产生错误。这可以通过使配置被重新加载(例如,通过软件)进行响应。如果存在位,则在步骤530处,确定位是否指示将使用第一操作模式。如果是,则在步骤535处,使功能电路230以第一操作模式执行。如果否,则在步骤540处,确定这些位是否指示要使用第二操作模式。如果是,则使功能电路230以第二操作模式操作。如果否,则在步骤550处,确定这些位是否指示要使用第三操作模式。如果是,则在步骤555处使功能电路230以第三模式执行。如果在步骤550处位没有指示要使用第三模式,则在步骤560处,产生错误。这表示配置位不对应于任何已知操作模式的情况。发生这种情况的原因可能是配置位已损坏,在这种情况下可以重新加载配置位。可替代地,它可以对应于用户提供了与任何已知配置不对应的配置位的情况。在这种情况下,在步骤560处的错误的产生可以用于向用户发信号通知所提供的配置是无效的配置。然后可以提示用户提供不同的配置,或者软件可以使得能够提供默认配置。

可以使用执行电路120的另一方式是累加器或加密系统的形式,其中通过多个操作而不是全部同时向执行电路120提供输入。这可能是指令集可以在单个指令中允许的有限数量的输入的结果。在这些示例中,存储状态对应于到目前为止已经提供的输入集和/或基于到目前为止提供的输入集计算出的中间工作产品。该错误响应于在提供完整的输入集之前丢失中间工作产品或输入集的情况。这可以通过重新提供输入集来响应。图6示出了为了提供累加器而可以实现此的方式。在描述程序之前,先总结一下寄存器的功能:

·r0是循环计数器的当前值

·r1是要累加的值在存储器中的基地址

·r2用作下一个要累加的值的临时存储装置

·r3用作累加结果的临时存储装置

在该示例中,在出现错误的情况下,设置特殊标记‘v’。程序的第一行指定分支可以跳转到的标签“重试”。第二行将值loop_count存储在寄存器r0中。值loop_count对应于为对一组值进行累加而应迭代循环的次数。因此,loop_count指示要累加的值的数量。第三行使累加器设置为零。这具有标记要执行新的累加操作的效果。它还具有重置指示发生了错误的指示符的作用。第四行提供标签“循环”,稍后的分支可以跳转到该循环。第五行获取数据值并将其存储在寄存器r2中。通过获取基地址(存储在寄存器r1中)和偏移量(存储在寄存器r0中),并将两个地址组合以提供存储器位置来获取数据值。然后,检索存储在该存储器单元中的数据值并将其存储在寄存器r2中。在第六行,然后使用新获取的值r2执行累加操作。该指令表示扩展指令,该扩展指令以累加器的形式传递给执行电路120。因此,执行电路120存储作为其状态的一部分的传入的r2的值或累加(到目前为止)传入的r2的值的结果。在第七行,存储在寄存器r0中的索引被递减四。因此,这将偏移计数器移动到下一个位置。在第八行,确定在第七行上执行的减法的结果是否导致值为零。如果否,则该过程返回到第四行的标签“循环”,从而使另一值被传递给累加器。否则,如果减法导致值为零,则在第九行,获取累加器的值并将其存储在寄存器r3中。因此,第九行的指令代表另一个扩展指令,该扩展指令以累加器的形式提供给执行电路120。该指令使执行电路120输出其累加值。在第十行,进行测试以确定结果标记‘v’是否被设置。在这里,结果标记‘v’用于指示错误。如果检测到错误,则第十行上的指令使程序返回到第1行上的重试标签,在该处重新启用过程。否则,在累加操作已经完成的情况下,该过程在第十一行继续。

如上所述,在该示例中,在累加过程期间发生错误时,设置标记‘v’。状态丢失可以由累加器120通过执行电路120中的单个位来检测,该位在删除执行电路120的状态时被设置。该状态可以由第三行上的set_accumulator_to_zero指令重置,并响应第九行上的get_accumulator指令而输出(如果已设置)。

尽管该过程是有功能的,但如果状态丢失,则整个过程必须从头开始。如果大量的值被累积并且状态最终丢失,则这可能是耗时的。可以对此过程进行的一个改进是检查点的思想,其中定期保存中间产品,使得在状态丢失的情况下可以重新启用该过程。但是,显然,在保存检查点的次数之间存在折衷,因为连续保存检查点降低了系统的效率,从而在状态丢失的情况下提供了更多的恢复点。

图7示出了使用检查点的示例。此处,寄存器r0、r1、r2和r3用于与参考图6所述的相同的目的。程序的第一行到第三行与图6相同。在第四行处,第九行的标签“inner_loop”出现了分支。在第五行处,定义了标签“restart_inner_loop”,当要从检查点重新启用内部循环时将执行该标签。在第六行处,可以存储在存储器中的检查点被加载到寄存器r3中。在第七行处,寄存器r3的值被传递到执行电路120的形式的累加器。在第八行处,可以存储在存储器中的检查点索引被存储在寄存器r0中。然后,第九行定义了“inner_loop”标签的开始。第十至十二行与图6的第五行至第七行相对应,并导致下一个值的累加以及循环计数器的递减。在第十三行处,测试r0中的值以确定循环是否完成或是否需要检查点。在该示例中(与图6一样),当r0的值等于零时,循环将结束。检查点的数量取决于前面提到的折衷。在第十四行处,确定是否满足先前的测试。如果循环未完成,并且如果不需要检查点,则不设置零标记(z),因此到第九行的标签“inner_loop”的分支出现,在第九行处累加下一个值。在第十五行处,获得累加器的值并将其存储在寄存器r3中。第十六行与图6的第十行相对应,并且在发生错误的情况下使得到第五行的标签“restart_inner_loop”的分支出现。因此,每次确定循环完成或每次确定需要检查点时都进行此测试。该效果是通过从存储器中重新加载检查点并通过重置存储在寄存器r0中的循环计数器的索引来重新启用内部循环。如果未发生错误,则在第十七行处,通过检查寄存器r0中的循环计数器索引来测试以确定循环是否完成。如果是(例如,如果r0的值为零),则到第23行的标签“done”的分支出现。否则,在第十九行处,将创建检查点。这首先通过将寄存器r3中的值存储到“检查点”位置(其可以是如前所述的存储器)来实现。在第20行处,标识循环索引的r0中的值被存储在位置“index_at_checkpoint”,该位置也可以被存储在存储器中。因此,累加器的最新值和表示累积过程已经达到的程度的索引两者被存储,使得它们能够在以后出现错误的情况下被恢复。第21行是使得其他进程发生的让步(yield)命令。第22行使得到第9行的“innerloop”分支发生。因此,一旦创建了检查点,累积操作将继续。然后,第23行提供了标签“done”。

图8示意性地示出了管理电路800的使用。如前所述,可能存在执行电路120中的状态185要被擦除的许多情况。响应于执行环境的改变,此类状态删除可能是适当的。执行环境可以被认为是其中发生设备100执行的当前指令流的环境或“容器”。例如,这可以是操作系统、进程、虚拟机、虚拟处理器、安全模式或安全域。改变可以是执行环境的直接交换,或者可以是执行环境的模式的改变。例如,执行环境中的一个此类改变可以是操作系统从非特权模式到特权模式的改变,即使可能正在执行同一操作系统。作为擦除执行电路120的状态185的替代,可以提供管理电路800以提供更有效的选项。特别地,在该示例中,响应于执行环境的改变,执行电路120被禁用。这意味着执行电路120的状态185不再被访问。管理电路800可以跟踪存储电路810中的先前执行环境。因此,一旦恢复了先前执行环境,就可以重新启用执行电路120,使得可以再次访问状态185。在该过程期间,另一执行环境可以请求访问执行电路120。在一些实施例中,这可以被简单地拒绝,因为它不对应于由管理电路800存储的先前执行环境810。特别地,针对不同的执行环境授予对执行电路120的访问可能导致安全性问题。此外,由先前执行环境使用的状态185可以被覆写。在其他实施例中,不是拒绝对禁用的执行电路120的访问,而是可以通过向执行电路120发布信号来响应该请求,该信号既启用执行电路120又使存储状态被刷新。因此,仅在出现可能发生安全破坏的情况时才在执行电路120中擦除状态185。这相当于“惰性上下文切换”。直到新的执行环境需要执行电路时,执行电路才被禁用,从而限制对尚未擦除的状态185的访问。如果执行电路120由先前的执行环境810使用,则可以恢复使用,而不必擦除状态。可替换地,如果不同的执行环境需要执行电路120,则该状态可以被擦除,并且该情况仅对应于每当执行环境发生任何改变时执行电路120的状态185被擦除的情况。

图9以流程图900的形式示出了该过程。在步骤910处,确定接收到什么类型的信号。在该信号是对要启用和使用的执行电路120的请求的情况下,则在步骤920处,启用和刷新信号被发送到执行电路,以使执行电路的状态185被擦除并使执行电路120变得可用。接下来,执行电路120然后可以由新的执行环境使用。如果在步骤910处,接收到的信号是执行环境中的改变,例如上下文切换,则在步骤930处,确定正在发生的切换是否是到存储在管理电路800的存储电路810中的先前过程。如果是,则在步骤970处,向执行电路120发布启用信号,使得执行可以继续。在这种情况下,即使执行环境可能已经改变,执行电路120中的状态185也没有丢失。如果在步骤930处,没有切换到先前过程,则在步骤940处,执行电路120被禁用信号禁用。这不仅导致功耗降低,而且意味着状态185无法被不同的执行环境访问。在步骤950处,确定先前的执行环境是否利用了执行电路120。如果是,则在步骤960处,进程的id被存储在管理电路800的存储电路810中。然后,该过程返回到步骤910。如果在步骤950处未使用执行电路,则该过程仅返回到步骤910。在这些情况下,执行电路120被禁用。但是,如果其未被使用,则不存储先前的过程。

图10示出了根据一些实施例的示出执行电路的数据处理方法的流程图1000。在步骤1010处,保持执行电路的存储状态。在步骤1020处,接收信号。在步骤1030处,确定接收到什么类型的信号。如果在步骤1030处接收到删除信号,则在步骤1040处,执行电路的存储状态被删除。如果在步骤1030处接收到操作信号,则在步骤1050处尝试该操作。如果在步骤1060处,尝试的操作使得该状态是所需要的并且不存在,则在步骤1070处发信号通知错误,以指示所需状态不存在。否则,在步骤1080处,不发信号通知此类错误。当然,该操作本身可以基于正在执行的操作来发信号通知其他错误。

图11示出了例示与执行电路接口的流水线的一部分的数据处理方法的流程图1100。在步骤1110处,向执行电路发信号通知操作信号。在步骤1120处,确定是否检测到错误。如果是,则在步骤1130处,可以确定是否需要采取任何校正动作,并且如果需要,可以采取这种动作。如果否,则在步骤1140处,该过程可以继续。

图12示出了可以使用的模拟器实现方式。虽然前面描述的实施例在用于操作支持相关技术的特定处理硬件的设备和方法方面实现了本发明,但是也可以提供根据本文描述的实施例的指令执行环境,其通过使用计算机程序来实现。只要此类计算机程序提供硬件架构的基于软件的实施方式,它们就通常被称为模拟器。各种模拟器计算机程序包括仿真器、虚拟机、模型和二进制转换器,包括动态二进制转换器。通常,模拟器实现方式可在主机处理器1230上运行,可选地运行支持模拟器程序1210的主机操作系统1220。在一些布置中,在硬件与所提供的指令执行环境之间和/或在同一主机处理器上提供的多个不同的指令执行环境之间可以存在多个模拟层。过去,需要功能强大的处理器来提供以合理的速度执行的模拟器实现方式,但是在某些情况下(例如出于兼容性或重用原因而期望运行另一处理器本地的代码时),这种方法可能是合理的。例如,模拟器实现方式可以提供具有主机处理器硬件不支持的附加功能的指令执行环境,或者提供通常与不同硬件架构相关联的指令执行环境。在“someefficientarchitecturesimulationtechniques(一些有效的架构模拟技术)”(1990年冬季usenix会议,robertbedichek,第53-63页)中给出了模拟概述。

就先前已经参考特定硬件构造或特征描述实施例而言,在模拟的实施例中,可以由合适的软件构造或特征提供等效功能。例如,特定电路可以在模拟实施例中实现为计算机程序逻辑。类似地,诸如寄存器或缓存之类的存储器硬件可以在模拟的实施例中被实现为软件数据结构。在主机硬件(例如,主机处理器1230)上存在前述实施例中引用的一个或多个硬件元件的布置中,一些模拟的实施例可以在适当的情况下利用主机硬件。

模拟器程序1210可以存储在计算机可读存储介质(其可以是非暂态介质)上,并且向目标代码1200(其可以包括图1的获取、解码、发布、执行和写回电路中的任何电路)提供程序接口(指令执行环境),该程序接口与由模拟器程序1210建模的硬件架构的应用程序接口相同。因此,可以使用模拟器程序1210从指令执行环境中执行目标代码1200的程序指令,包括执行电路120的操作和/或与上述执行电路120接口的流水线的其余部分,使得实际上不具有上述设备的硬件特征的主机计算机1230可以仿真这些特征。

在本申请中,词语“被配置为……”用来表示设备的元件具有能够执行定义的操作的配置。在本文中,“配置”是指硬件或软件的互连的布置或方式。例如,该设备可以具有提供定义的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“配置为”并不意味着设备元件需要以任何方式改变以提供所定义的操作。

虽然本文已经参考附图详细描述了本发明的示例性实施例,但是应当理解,本发明不限于这些精确的实施例,并且在不脱离由所附权利要求限定的本发明的范围和精神的情况下,本领域的技术人员可以在其中进行各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以将从属权利要求的特征与独立权利要求的特征进行各种组合。

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