基于可替换信息值的编码来识别读取集信息的制作方法

文档序号:20029096发布日期:2020-02-28 10:10阅读:145来源:国知局
基于可替换信息值的编码来识别读取集信息的制作方法



背景技术:

本技术涉及数据处理领域。更具体地,本技术涉及事务内存。

技术背景

数据处理系统可以执行多个数据处理线程。有时,线程可能需要访问共享资源,并且数据处理操作的性质可能是这样的:一旦线程开始与共享资源交互,可能有必要使用资源以原子方式完成一组操作,而在此期间没有另一线程访问资源。

处理线程之间的这种冲突的一种技术可以是使用锁来控制对至少一个目标资源的过度访问。例如,当一个线程开始访问特定地址区中的数据时,线程可以设置锁变量来声明锁的所有权,然后,当拥有线程的锁具有锁的所有权时,检查锁变量的其他线程可以确定锁已经被声明,因此可能不会进入与该地址区交互的代码段。这种基于锁的方法可以被视为悲观,因为默认情况下每个线程都假定它不能进入访问共享资源的代码段,因为可能会与另一线程发生冲突,除非它拥有保证不会发生冲突的锁的所有权。然而,锁标识符通常可以控制对多个资源(例如一系列地址)的独占访问,因此,无法保证当一个线程正在访问受锁变量保护的资源集中的某些资源时,另一线程肯定访问同一资源。因此,在线程之间的冲突很少的情况下,基于锁的方法可能导致性能损失,因为线程可能在进入使用共享资源的关键代码段之前不必要地等待锁被释放。

处理访问共享资源的线程之间冲突的更乐观方法可以是使用事务内存支持。数据处理系统可以具有支持处理电路在数据处理线程内执行事务的电路。该事务可以是在标记事务开始的事务开始指令和标记事务结束的事务结束指令之间执行的线程的那些指令。在事务开始指令和事务结束指令之间,处理电路可以推测性地执行干预指令并且防止提交那些推测性执行的指令结果,直到达到事务结束指令。在执行事务开始指令之后(但在到达事务结束指令之前)发生中止事件可能导致事务被中止并且推测结果被丢弃。中止事务可能有许多原因,但一个原因可能是检测到与另一线程进行的内存访问冲突。

因此,通过这种方法,每个线程可以乐观地开始处理关键代码段,假设不与其他线程发生冲突,然后如果在没有检测到任何冲突的情况下到达关键代码段的末尾,则可以提交事务的结果。在冲突很少的情况下,使用事务内存支持可以通过允许更多线程同时处理其关键代码段来提高性能。



技术实现要素:

至少一些实施例提供了一种设备,所述设备包括:处理电路,所述处理电路用于处理数据处理的线程;事务内存支持电路,所述事务内存支持电路用于支持在所述处理电路处理的线程内执行事务,所述事务包括在事务开始指令和事务结束指令之间推测性地执行的线程的指令,对于所述事务,所述处理电路被配置为防止提交推测性地执行的指令结果,直到达到所述事务结束指令,其中,所述事务内存支持电路被配置为响应于检测到从另一线程到为所述事务跟踪的地址读取集之一的写入访问而触发所述事务的中止;以及具有多个条目的缓存,每个条目与多个地址之一相关联并指定与所述地址相关联的可替换信息值,所述可替换信息值包含即使信息不正确也能在所述事务处理之外在功能上正确的信息;

其中,当所述事务处于待决状态时,所述事务内存支持电路被配置为基于所述可替换信息值的编码来识别读取集信息,所述读取集信息识别针对所述事务跟踪的地址读取集中的地址。

至少一些实施例提供了一种数据处理方法,所述方法包括:在具有多个条目的缓存中识别与多个地址之一相关联的每个条目、用于每个地址的可替换信息值,其中所述可替换信息值包含即使信息不正确也能在所述事务处理之外在功能上正确的信息;当所述事务处于待决状态时,基于所述可替换信息值的编码来识别读取集信息,所述读取集信息识别针对所述事务跟踪的地址读取集中的地址;其中所述事务包括在事务开始指令和事务结束指令之间推测性地执行的线程的指令,对于所述事务,提交推测性地执行的指令结果被防止,直到达到所述事务结束指令,并且响应于检测到从另一线程到针对所述事务跟踪的地址读取集之一的写入访问而触发所述事务的中止。

至少一些实施例提供了一种设备,所述设备包括:用于处理数据处理线程的装置;用于支持在由所述用于处理的装置处理的线程内执行事务的装置,所述事务包括在事务开始指令和事务结束指令之间推测性地执行的线程的指令,对于所述事务,所述用于处理的装置被配置为防止提交推测性地执行的指令结果,直到达到所述事务结束指令,其中,所述用于支持的装置被配置为响应于检测到从另一线程到为所述事务跟踪的地址读取集之一的写入访问而触发所述事务的中止;以及用于缓存数据的装置,包括多个条目,每个条目与多个地址之一相关联并指定与所述地址相关联的可替换信息值,所述可替换信息值包含即使信息不正确也能在所述事务之外在功能上正确处理的信息;其中,当所述事务处于待决状态时,所述用于支持的装置被配置为基于所述可替换信息值的编码来识别读取集信息,所述读取集信息识别针对所述事务跟踪的地址读取集中的地址。

从以下结合附图阅读的实施例的描述中,本技术的其他方面、特征和优点将变得明显。

附图说明

图1示意性地示出了具有事务内存支持电路的数据处理设备的实施例;

图2示出了在具有事务内存支持的系统中处理事务的实施例;

图3示出了用于在基于锁的模式下对图2的事务执行等效操作的替代代码序列;

图4示出了四路集相关缓存结构的实施例,其中可以应用本技术的方法;

图5是示出缓存逐出策略在缓存结构中起作用的实施例的流程图;

图6是示出事务的实施例的处理的流程图;

图7-9示出了被解释为读取集信息的编码可替换信息值的实施例;

图10示出了用于存储缓存结构的读取集信息的组标识符和多个条目指示符的实施例;

图11示出了编码可替换信息值以被解释为包括组标识符和条目指示符的读取集信息的实施例;并且

图12示出了将可替换信息值编码为读取集信息的实施例。

具体实施方式

在处理事务期间,可以在由事务内的指令触发的访问之后跟踪地址作为地址读取集或地址写入集的一部分。当指令从内存中的地址读取数据时,该地址被标记为读取集的一部分;当指令将数据写入内存中的地址时,该地址被标记为写入集的一部分。如果在事务开始指令和事务结束指令之间的某一点,来自事务之外的另一指令触发对写入集中任何地址的读取或写入访问,则这可能触发中止。类似地,如果事务之外的任何指令对读取集中的任何地址执行写入访问,则这也可能触发事务的中止。因此,记录识别哪些地址在读取集中的读取集信息是有用的。

根据本技术的设备包括处理数据处理线程的处理电路,以及支持在处理电路处理的线程内执行事务的事务内存支持电路。该事务包括在事务开始指令和事务结束指令之间推测性地执行的线程的指令,并且处理电路被布置成防止提交推测性地执行的指令的结果,直到到达事务结束指令。如上所述,事务内存支持电路响应于检测到从另一线程到为事务跟踪的地址读取集之一的写入访问而触发事务的中止。该设备还包括具有多个条目的缓存,其中每个条目与多个地址中的一个相关联,并指定与该地址相关联的可替换信息值。可替换信息值是即使信息本身不正确,但在事务处理之外将在功能上正确的信息。当事务处于待决状态时,事务内存支持电路被配置为基于可替换信息值的编码来识别读取集信息,读取集信息识别针对事务跟踪的地址读取集中的地址。

应该注意的是,虽然可替换信息值表示当它们不被解释为读取集信息(在事务之外)时可能丢失而不影响功能正确性的信息,读取集信息中的错误可能影响功能正确性(并且在一些实施例中,可以提供错误检测码以使得能够检测到这样的错误)。

该方法可以提供用于将读取集信息存储在数据缓存中的高效技术。这种技术不需要单独的存储器位置来存储读取集信息或数据缓存中的附加字段,而是在缓存中需要很少或不需要额外的空间来存储读取集信息。对于技术人员来说,以这种方式替换可替换信息值似乎违反直觉,因为这意指在编码读取集信息时丢失了一些信息。但是,只要在事务之外被识别为可替换信息值的值不需要确保处理电路执行的处理的功能正确性,也就是说,可替换信息值是即使值本身不正确也会在功能上正确处理的值,对这些值进行重新编码以代替读取集信息将不会影响处理电路执行的处理的整体功能正确性。本技术的发明人意识到尽管可能(在一些实施例中)由于这些值的移除或重新编码而具有轻微的性能影响,由于减少了存储读取集信息所需的存储量,硬件效率的提高可能会超过这一点。在任何情况下,一些实施方式可以通过利用可替换信息值的编码中的冗余来避免性能损失。

在本技术的一些实施例中,事务内存支持电路通过设置可替换信息值的编码以识别读取集信息来响应事务开始指令(或响应事务开始指令之后的后续事件,诸如,由于事务开始指令而第一次访问相关缓存集)。在具有多个嵌套事务的事务中(例如,在遇到事务结束指令之前遇到多个事务开始指令),可以响应于之外(例如,第一)事务开始指令而发生用于标识读取集信息的可替换信息值的编码的设置。因此,事务内存支持电路可以在进入待决事务时或之后更新可替换信息值的编码以指示这些值现在表示事务的读取集信息,而不是(或除此之外)在事务变为待决之前由这些值先前表示的其他信息。

在一些实施例中,事务之外的可替换信息值的允许编码的数量被限制为某个最大值。然后,在事务开始指令之后,将可替换信息值的编码设置为非允许编码之一,以便识别读取集信息。

以这种方式,保留可替换信息值的一些编码以用于识别读取集信息值,提供用于编码可替换信息值的简单技术,并且确保事务外侧的可替换信息值的有效编码不会被误认为事务内的读取集信息。

在一些实施例中,被选择以识别读取集信息的非允许编码是向另一允许编码提供功能上等同的结果的冗余编码。

这利用了在可替换信息值的编码中经常存在的冗余,因此允许保留一些编码以用于识别读取集信息而不会对事务之外的系统性能产生负面影响。

在一些实施例中,确保在事务开始指令之后的编码集与事务之外的任何允许编码之间存在至少为三的汉明距离(hammingdistance)。

一对值的汉明距离是需要改变状态以便从一个值改变为另一值的位数。例如,如本技术的一些实施例所要求的,最小汉明距离为3意味着需要改变或翻转至少三个位以便使值从一个值变为另一值。更具体地,在该实施例中,响应于事务开始指令的编码集与指令之外的任何允许编码之间的汉明距离至少为3意味着为了从第一编码集切换到第二编码集,需要至少改变三个位。这允许实现双重错误检测,这确保了系统的安全性并允许其符合某些功能安全要求。

在一些实施例中,非允许编码是其中可替换信息值的子集中的多于预定数量的可替换信息值具有一些预定值的编码。

上面提到的可替换信息值的子集可以只是与集相关缓存中的集合的条目相关联的有限数量的可替换信息值,或者,它可以是与该集合相关联的所有可替换信息值。在这些实施例中,当采用特定值的子集中的值的数量高于某个阈值时,可替换信息值被解释为读取集信息。同样,处理电路确定如果可替换信息值的数量低于或等于第二阈值(可以根据所需的错误检测水平等于或低于第一阈值),编码应解释为可替换信息值。在第一和第二阈值不同的情况下,它们在一些实施例中可以足够不同以在两个编码之间给出特定的期望汉明距离——诸如汉明距离为3。这提供了用于编码可替换信息值而不需要缓存中的额外存储空间的高效技术。

在本技术的一些实施例中,编码指示符字段包括在缓存中。该字段存储编码指示符值,以向处理电路指示可替换信息值的编码。

这是可替换信息值的高效编码形式的另一实施例,其中有少量附加位(即,编码指示符字段)被添加到缓存存储器以指示应如何解释可替换信息值的编码。尽管与其他实施例不同,这确实需要缓存中的少量额外存储空间,但是仅需要少量的附加位。此外,这种方法的优点是,当编码指示符字段指示值应该如此解释时,它使所有可替换信息值可用于存储读取集信息或其他有用信息。

在一些实施例中,响应于事务开始指令,事务内存支持电路被配置为选择可替换信息值的编码以减少用于信息的位数,即使信息不正确,对信息的处理在功能上也是正确的。

因此,在改变值的编码时,与可替换信息值相关的所有性能益处并非都丢失,但是即使在编码读取集信息时仍然提供一些性能益处。也就是说,通过利用这种方法,即使在待决事务中,除了表示读取集信息之外,可替换信息值也仍然指示在事务开始之前存在的一些可替换信息,但是利用较少数量的位以提供较低精度。

在一些实施例中,读取集信息的第一部分包括用于检测读取集信息中的错误的错误检测信息。

通过在读取集信息中包括错误检测信息,可以通过提供可用于检查读取集信息的正确性的位来提供对抗故障的鲁棒性。

当错误检测信息包括在读取集信息中时,在一些实施方式中,这可能意味着在可替换信息值中剩余的位不足以针对每个缓存条目分别表示该条目是否对应于事务的读取集中的地址的指示。在某些实施例中,这可能不是问题,因为可以控制对缓存的数据分配,以便将读取集中的地址分配给读取集信息能够识别为读取集的一部分的条目,并且如果读取集变得足够大以包括读取集信息中没有足够空间的地址以指示该地址作为读取集的一部分,则可以中止该事务。因此,在一些实施例中,可以被指示为读取集的一部分的缓存条目的最大数量(或者集相关缓存的给定集合内的缓存条目的最大数量)可以小于条目的总数(或集相关缓存的给定集合中的条目总数)。

然而,其他实施例可以对读取集信息进行编码,使得缓存的n个位置是否或并非每一个与读取集中的地址有关可以使用少于n个位进行编码,使得即使可替换信息值的一部分用于错误检测信息,仍然可以编码缓存的每个位置是否是读取集的一部分。

在一些实施例中,读取集信息的第二部分的所选编码识别与缓存中的一组条目相关联的组指示符,该组标识符指示关联组是否是仅包括读取集中的条目的完整组或包括不在读取集中的至少一个条目的不完整组。第二部分还包括与不完整组中的至少一个条目相关联的至少一个条目指示符,条目标识符指示相关条目是否在读取集中。

以这种方式,即使在可替换信息值中没有足够的空间来为缓存中的每个条目提供指示符,也可以为缓存中的所有条目提供读取集信息。这提供了一种于记录缓存中所有条目的读取集信息的节省空间的技术。

在一些实施例中,基于可替换信息值的编码,事务内存支持电路可以识别用于多个事务的读取集信息。

因此,本技术非常通用,可用于为多个事务提供读取集信息,而在缓存中需要很少或不需要额外的存储空间。

在一些实施例中,多个事务中的每个事务的读取集信息共享错误检测码。

这是为使用有限量存储的多个事务提供错误检测能力的高效方式。

在一些实施例中,响应于事务结束指令的执行或事务的中止,处理电路被配置为将多个条目的可替换信息值解释为即使信息不正确也将在功能上正确处理的信息。

以这种方式,可替换信息值的编码识别出这些值在事务完成之后将返回到其原始函数。因此,同一组值可以根据其编码提供两种功能——提供其原始功能,或识别一个或多个事务的读取集信息。

在一些实施例中,在事务完成之后,事务内存支持电路用与对应的可替换信息值不相关的值替换多个条目中的每个可替换信息值。

以这种方式替换所有可替换信息值允许通过移除之外实体可用于确定事务已访问哪些地址的任何信息来确保系统的安全性。与对应的可替换信息值不相关的值例如可以是随机值;或者,该值可以是默认值,例如,所有值都可以设置为00或10等。

在一些实施例中,可替换信息值包括缓存逐出策略信息。

缓存逐出策略信息是允许处理电路或缓存控制电路在将新条目分配给缓存时确定应该逐出多个条目中的哪一个的信息。这意味着可替换信息值可用于改善系统的性能,但就确保系统的功能正确性而言,它们在功能上并不重要。也就是说,如果可替换信息值在事务之外是不正确的,则系统仍然按要求运行,尽管可能存在一些性能影响。因此,重新使用这些值来识别读取集信息不影响处理电路执行的处理的功能正确性。

在一些实施例中,当事务处于待决状态并且可替换信息值用于识别事务的读取集信息时,处理电路独立于可替换信息值从缓存中选择用于逐出的缓存行。

如果可替换信息值是缓存逐出策略信息,则在处理事务期间可能需要实现替代的缓存逐出策略。可以使用许多缓存逐出策略,其中一个涉及随机选择要替换的缓存的行,另一可以是循环法替换策略。这不是最高效的缓存逐出策略,因为它可能导致从缓存中移除频繁访问的缓存行,这对系统的性能产生负面影响,然而,随机或循环法替换是功能上正确的缓存逐出策略。随机替换缓存行不会影响系统的整体功能正确性。因此,通过在事务待决时默认为随机替换缓存策略,可替换信息值可以被重新编码为读取集信息,同时仍然能够实现一些形式的缓存逐出策略。

在一些实施例中,修改的逐出策略信息在可替换信息值内与读取信息一起编码,同时事务处于待决状态,并且当分配新条目时,处理电路使用该修改的逐出策略信息以从缓存中选择用于逐出的缓存行。

以这种方式,仍然可以实现比简单随机替换更高效的缓存逐出策略,同时还将一些可替换信息值解释为读取集信息。

图1示出了具有硬件事务内存(htm)支持的数据处理设备2的实施例。该设备具有处理逻辑4,用于执行指令以执行数据处理操作。例如,处理逻辑4(处理电路)可以包括:用于执行各种类型的处理操作的执行单元,诸如用于执行算术或逻辑运算(诸如加、乘、与、或等)的算术/逻辑单元(alu)。用于对浮点操作数执行操作的浮点单元;或者矢量处理单元,用于对包括多个数据元素的矢量操作数进行矢量处理。提供一组架构寄存器6,用于存储由处理逻辑4执行的指令的操作数,并用于存储执行的指令的结果。指令解码器8对从指令缓存10取出的指令进行解码,以产生用于控制处理逻辑4或数据处理设备2的其他元件以执行相关操作的控制信号。还提供加载/存储单元12以执行加载操作(响应于由指令解码器8解码的加载指令)以将数据值从数据缓存14或主内存16加载到架构寄存器6中,并且存储操作(响应于由指令解码器8解码的存储指令)将来自架构寄存器6的数据值存储到数据缓存14或内存16。

设备2还具有事务内存支持电路20,该事务内存支持电路提供用于支持硬件事务内存(htm)的各种资源。事务内存支持电路20中的htm资源支持由处理逻辑4处理事务,其中事务是一系列指令,对于这些指令,处理逻辑4在事务完成之前不提交推测性执行的指令的任何结果。事务内存支持电路20可以包括:推测结果存储器22,例如用于存储事务的推测结果;地址跟踪电路24,用于跟踪事务访问的地址;冲突检测电路26,用于检测由事务进行的数据访问和由其他线程进行的数据访问之间的冲突,使得当检测到冲突时可以中止事务;以及恢复状态存储电路28,用于在事务开始时存储来自架构寄存器6的架构状态数据的快照,使得当事务中止时,可以恢复此状态以覆盖事务的推测结果。另外,资源可以包括用于强锁标识符的锁存储结构30和嵌套深度寄存器32。尽管地址跟踪电路24在图1中单独指示,如下所述,在一些实施方式中,这可以与数据缓存14组合,使得数据缓存包括哪些地址处于针对事务跟踪的读取集或写入集中的指示。

在处理逻辑4处理事务期间,一些推测性地执行的指令(例如用于将数据存储到缓存14或内存16的存储指令)的结果临时存储在推测结果存储器22中,以便一旦事务完成(假设没有中止)就提交。当冲突检测电路26确定地址读取集中的地址(例如,内存中已经受到由事务中的指令触发的读访问的位置的地址)已经由事务之外的指令写入时,可以触发事务的中止。在中止的情况下,恢复状态存储器28用于在开始处理事务之前将架构寄存器6的状态恢复到它们的状态。

能够嵌套事务,以便在遇到对应于前一个事务开始指令的事务结束指令之前并且在早期事务仍然待决并且尚未中止时接收到另一事务开始指令。嵌套深度寄存器32可以跟踪事务的当前嵌套深度,以区分以下情况:何时没有事务已经开始,何时仅单个事务开始,或者何时另外嵌套的事务已经在前一个事务内开始。当尚未启动任何事务时,嵌套深度可以为0。响应于第一事务开始指令,嵌套深度可以递增到1。如果另外嵌套的事务开始,则嵌套深度可以再次递增到2,依此类推。在提交事务时,嵌套深度可以递减。因此,当每个相应的嵌套事务提交时,嵌套深度逐渐展开,直到所有事务都已提交并且嵌套深度再次返回到0。

图2示出了使用事务内存支持电路20和处理逻辑4在给定线程内执行事务的实施例。事务是一段程序代码,该程序代码由事务开始指令(tstart)和事务结束指令(tend)限定。在一些实施例中,事务结束指令反而被称为tcommit-这与tend相同。如图2所示,响应于事务开始指令,架构寄存器6中的当前架构状态被捕获并存储在恢复状态存储电路28中。处理逻辑4开始在tstart指令之后执行后续指令的推测性执行,并且当执行这些指令时,由地址跟踪电路24跟踪这些指令访问的地址,并且冲突检测电路26响应于其他线程,使用加载/存储单元12检测所跟踪的地址与访问的地址之间的冲突。事务中的指令的至少一些推测结果存储在推测结果存储电路22中。例如,响应于存储指令str存储在缓存或内存中的值可以保留在推测结果存储器22中,同时事务保持待决。如果在没有同时发生中止事件的情况下到达事务结束指令(tend),则响应于事务结束指令,提交推测结果。在提交事务时,存储在该线程的推测结果存储器22中的任何结果可以被写入数据缓存14或内存16,并且恢复状态28可以被丢弃或允许被覆盖,因为不再需要将架构状态倒回到遇到事务开始指令之前的那一点。

另一方面,如果发生中止事件,例如当另一线程访问事务已经访问的地址时由冲突检测电路26检测到冲突时,则触发事务的中止,并且恢复状态存储器28的恢复状态被恢复到架构寄存器6。中止事件的其他原因可以例如包括执行不允许在事务内执行的指令、在用于处理给定事务所需的推测结果或地址的推测结果存储器22或地址跟踪电路24内的资源不足或者在事务期间接收的中断。

图2示出了如何使用事务开始和结束指令在事务模式中可以执行要执行的某组处理操作。如图3所示,也可以使用基于锁的机制在非事务模式中执行同一组处理操作。在这种情况下,在开始代码段之前,至少一个锁检查指令40检查由锁定地址#addlock标识的锁变量,并检查锁变量是否指示另一线程已经保持锁。如果另一线程保持锁,则处理不会超过锁检查指令40,直到锁被释放。一旦确定锁可用,则通过将给定值(例如二进制1)写入锁地址#addlock来声明锁。例如,锁定检查指令40可以使用原子比较和交换指令来实现,该指令比较存储在指定地址的当前值以确定是否保持锁,并且如果锁未被声明则更新锁变量以声明锁。可替代地,可以使用一系列多指令来实现锁检查以读取锁,测试锁的值,并且如果已经声明锁,则导致处理延迟,或者如果当前未声明锁,则通过更新锁变量来声明锁。在完成由锁保护的代码段之后,一旦不再需要对由锁保护的对资源的独占访问,另一指令42就可以释放锁。例如,由锁保护的资源可以是由在干预代码段期间访问的各种地址标识的数据位置。

如上所述的基于锁的方法在例如如果使用事务模式可能发生频繁中止的情况下可能是有用的。此外,如果在事务期间确实发生频繁中止,则编写为使用事务内存的代码可以默认返回到基于锁的系统,以便允许指令序列完成。但是,当基于事务内存的代码序列的执行成功并且提交事务时,这通常比基于锁的系统更高效。

如上所述,能够跟踪读取集中的地址(通过事务内的读取请求访问的地址)是有用的。图4示出了如何能够在四向集相关缓存44中跟踪读取集中的地址的实施例。如图4所示,集合48内的每个路46包括指定缓存逐出策略信息的至少一个字段50。这是使得处理电路4能够在分配新行时选择从缓存中逐出的缓存行的信息,并且在这种情况下是两位值。缓存44还可用于跟踪读取集信息。这样做一种方法是在缓存44的每个集合48的每个路46内包括附加字段52、54以记录事务信息,例如读取集信息。图4所示的实施例记录了两个事务的事务信息,字段52中记录的事务1(t1)和字段54中记录的事务2(t2)。应当注意,尽管在图3中仅示出路0以包括附加字段52、54、50,但是四路集相关缓存44中的所有四路46可以包括这些字段。

如图所示,将事务信息存储在数据缓存44中的优点在于,事务信息与它被标记的地址一起存储在读取集内。然而,缺点是在缓存内需要额外的空间以存储该信息。下面描述的实施例有助于减少将读取集信息存储在缓存44内所需的存储量。

如上面关于图4所提到的,缓存44通常包括字段50,该字段记录缓存逐出策略信息,用于在分配新行时选择缓存的哪一行被逐出。图5示出了使用所述信息的实施例过程,在这种情况下使用重新参考区间预测(rrip)策略。在这样的实施例中,存储在缓存44的字段50中的信息是rrip值。

如图5所示,当(在步骤56)处理电路请求给定地址的数据时,针对给定地址检查缓存44(步骤58)。具体地,针对处理电路提供的地址检查存储在缓存44中的数据的标签。在步骤60,确定数据是否在缓存44中可用。如果数据在缓存中可用,则该方法前进到步骤62,其中从缓存中提取数据。此时,条目的字段50中的rrip值被重置为其默认值,表示此条目中的数据最近已被访问——例如,默认值可以是0(00,在图4中的两位实施例中)。这种rrip值的重置指示该条目最近已被访问,因此不应该是从缓存中逐出的高优先级候选者。

另一方面,如果在步骤60中未在缓存中找到地址,则替代地从内存或从另外的缓存中取出数据(步骤66)。例如,如果正在检查地址的缓存44是一级缓存,则接下来可以检查二级缓存,随后检查任何低级缓存。一旦检查了所有缓存,如果仍未找到数据,则处理电路将从内存中检索数据。此过程适用于任意数量的缓存级别。

图5的后续步骤示出了用于选择缓存的哪个条目以分配用于从内存或另外的缓存中提取的数据的过程。在执行这些步骤之前,不必等待实际从内存或另外的缓存返回数据——可以在接收返回的数据之前分配用于存储返回数据的条目。在步骤68,处理电路确定原始缓存44中是否存在无效条目,该无效条目可被选择为由所获取的数据覆盖。当选择要替换的无效条目时,如果缓存44是集相关缓存,则所选条目必须在基于分配给缓存的数据的地址选择的特定条目集内。如果找到可以替换的无效条目,则过程进行到步骤70,其中用所提取的数据替换(覆盖)无效条目,并且无效条目过渡为有效。

另一方面,如果没有找到适当的无效条目,则该方法前进到步骤72,其中处理电路识别具有最高rrip值的一个或多个缓存条目(在适当的集合内)。在该实施例中,较高的rrip值指示该条目长时间未被访问,因此是用于在缓存逐出策略内替换的良好候选者。对于两位rrip值,处理电路将寻求识别rrip值为3(11)的任何条目。如果没有条目具有此rrip值,则处理电路将查找具有下一个最高值的条目-2(10)-依此类推。

一旦识别出具有最高值的一个或多个条目,该方法就前进到步骤74,其中识别具有所述最高值的条目数量。如果只有一个条目具有所述最高值,则从高速缓存中逐出该条目并用所提取的数据替换(步骤76)。另一方面,如果多缓存条目具有相同的最高rrip值,则该方法前进到步骤78,其中处理电路通过随机选择这些条目之一来选择要逐出的条目。然而,在其他实施例中,不是随机选择条目,而是处理电路可以选择下一个条目(即,集合48中的下一种方式46)。

具有相同rrip值的多条目指示系统内存在冗余级别,因为具有最高rrip值的任何缓存条目对于要逐出的缓存是同等有效的选择。因此,在字段50中存储了不必要的额外冗余信息。

返回图5,在步骤78中选择要逐出的具有最高rrip值的条目之后,或者在步骤64或70或76之后,该方法前进到步骤80,其中确定从rrip值的最后一次递增以来是否已经过了预定时间。如上所述,rrip值提供了从处理电路已经访问相关条目以来已经经过多长时间的指示——较高的rrip值意味着从访问条目以来已经经过更长的时间。因此,值周期性地递增。在步骤80之后,如果从上次递增以来还没有经过预定时间,则该方法返回到步骤56并重复。另一方面,如果已经经过预定时间,则该方法反而前进到步骤82,其中rrip值递增。注意,虽然为了便于解释,rrip值的递增显示为访问缓存的方法的一部分,即使没有对数据的缓存访问,也可以在经过预定时间时触发rrip值的递增。因此,对于步骤80,已经执行步骤56至78不是先决条件。另外,虽然步骤80示出了通过经过预定时间而触发增量的实施例,但是在其他实施例中,可以在经过预定数量的处理周期、对缓存进行预定数量的访问或者经过时间的另一度量之后触发增量。

应当注意,在一些实施例中,可以递增的值的数量可以被限制,使得仅特定数量可以达到最大值(例如,对于2位的rrip值,最大值将是11)。稍后将更详细地解释这一点。

以下实施例利用rrip值的编码内的上述冗余,以便高效地存储读取集信息。

图6是说明处理事务的方法的流程图。在步骤84,解码并执行之外事务的事务开始(tstart)指令。之外指令的事务开始指令是在另一事务中没有遇到的事务开始指令(即,它不是嵌套事务)。作为响应,在步骤86,可替换信息值的编码(例如,存储在字段50中的缓存逐出策略信息)被设置成将这些值识别为读取集信息,从而识别构成该事务的地址读取集的一部分的地址。当事务首次启动时,将不会有任何地址作为读取集的一部分,但是,尽管如此,响应于之外事务的tstart指令,可替换信息值可以被设置为在事务之外不被允许的编码,以表示它们指示读取集信息。

在一些实施例中,不是设置编码以响应于遇到之外事务的tstart指令而将可替换信息值识别为读取集信息(步骤86)(步骤84),而是可以根据每个集合来设置可替换信息值。也就是说,当一行被分配给缓存中的特定集合时,然后改变该集合的编码。在这种情况下,步骤86将遵循步骤90。以下附图也是这种情况。因此,可以响应于遇到tstart指令直接设置编码,或者可以响应于在事务开始指令之后被分配给特定缓存集的读取集中的第一行来设置与特定缓存集相关的可替换信息值的编码。在这样的实施例中,在处理事务期间,如果在给定时间,与特定缓存集相关联的可替换信息值的编码未被设置为将可替换信息值标识为读取集信息,则这意味着自从事务开始指令以来没有对该缓存集的访问,并且因此处理电路被配置为确定该缓存集中的地址都不是当时的事务的读取集的一部分。

另请注意,如果使用与集相关缓存的给定缓存集相关联的可替换信息值的相同块指示多个事务的读取集,则有可能在另一事务开始时,另一事务可能已经处于待决状态(例如,在共享相同缓存的不同处理元件上),并且所以可替换信息值的编码可能已经具有用于指示可替换信息值表示读取集信息的编码,在这种情况下,可以不需要再次执行步骤86。

在步骤88中,恢复状态存储器28捕获架构寄存器6中的架构状态的当前快照,作为要为事务维护的恢复状态。应当理解,虽然在某些情况下这可能导致捕获的架构状态被写入单独的寄存器,其他实施方式可以使用物理寄存器文件用于架构寄存器6,架构寄存器具有比指令集架构中支持的寄存器的数量更多的寄存器,寄存器重命名用于重映射哪个特定物理寄存器被认为存储架构所需的特定架构寄存器的数据值。在这样的系统中,寄存器重命名可以用于在遇到事务开始指令时改变从架构寄存器到物理寄存器的映射,使得架构状态的先前捕获的检查点可以有效地维持在与当前架构状态本身相同的物理寄存器文件中,这可以在必要时加速状态的恢复。在这种情况下,恢复状态的捕获可以通过改变寄存器映射来完成,因此可能不需要任何实际传输数据到物理寄存器/任何从物理寄存器实际传输数据。

在步骤90,在事务开始指令之后的指令的推测性地执行开始。虽然在事务中推测性地执行指令,但是一些推测指令的结果可以被分配给推测结果存储电路22(例如,用于将数据存储到内存的存储指令的结果)。由推测性地执行的指令中的读取指令访问的地址通过相应地设置可替换信息值中的值而被标记为地址读取集的一部分(或者通过更新一组集相关缓存的可替换信息值的集合的编码),并且当事务保持待决时,可以监测其他线程对该事务的地址读取集的写入访问。

在步骤92,冲突检测电路26检测是否发生中止事件。例如,中止事件可以是另一线程(或者读取在事务的写入集中跟踪的地址之一的另一线程)写入由存储在缓存44中的读取集信息所跟踪的地址读取集之一、发生中断或异常、执行不允许在事务中执行的指令类型或者可用于地址跟踪或推测结果存储22的资源被充分利用,使得再也不能继续安全地执行事务(因为可能再也无法跟踪某些可能需要存储的附加地址或推测结果)。应当理解,还可以根据指令集架构的约束来定义其他类型的中止。如果发生中止事件,则在步骤94中止事务,并且将存储在恢复状态存储器28中的恢复状态恢复为表示系统的当前架构状态的架构寄存器6。然后,处理可以从由恢复的架构状态表示的较早的执行点恢复。在某些情况下,在中止事务时,微架构可以提供提示,该提示指示事务中止的原因,可以由软件中的异常处理程序使用以确定是否值得尝试将所需的操作作为事务再次执行,或者是否优选退回到执行倒退路径(不使用事务)来执行对应的处理操作。

如果在步骤92没有发生中止事件,则在步骤96确定是否已经解码并执行任何事务结束(tend)指令(同样,由于嵌套,步骤96可以基于嵌套深度寄存器32检查之外事务的tend指令)。如果不是,则该方法循环回到步骤92,以等待中止事件或执行事务结束指令。应当理解,指令的推测性地执行和地址工作集的跟踪以及潜在冲突在整个步骤90至96中继续,直到发生中止事件或达到事务结束指令。

当执行最之外事务结束指令时,则在步骤98,将事务的任何推测结果提交到状态,并且丢弃或允许覆盖先前捕获的恢复状态。一旦事务完成,在步骤100中,可替换信息值的编码被设置以根据它们的原始用途识别这些值——即使值不正确,对其处理在功能上也是正确的信息,诸如缓存逐出策略信息。

应当注意,步骤100不一定需要立即跟随集合94或步骤98。可以在处理系统不执行事务时的任何时间发生编码的这种改变。如果没有事务处于待决状态,但仍然对可替换信息值进行编码以指示事务读取集,则可以基于在事务期间使用的相同默认替换策略来控制缓存替换(例如,当在事务期间根本没有编码的替换策略信息时的随机/轮循选择,或者在事务期间以减少的位数保留替换策略信息,则基于减少的信息修改替换策略)。在事务结束后重置可替换信息值的编码可能需要一些时间,因为它可能需要缓存擦除来重置与相对大量的缓存集相关联的可替换信息,这可能花费一些时间并且可能不及时执行tend指令。因此,通常这可以在tend指令之后,但是可以同时处理tend指令之后的其他指令,同时重置可替换信息值的编码在后台进行。

图7示出了可替换信息值(诸如缓存逐出策略信息)可以如何被重新编码以被解释为读取集信息。在图7中,可替换信息值最初被解释为rrip值102。例如,通过使用此编码,使用rrip替换策略,如图5所示。在图7中,示出了16个字段以识别16路集相关缓存的16个路的可替换信息值。应当理解,该图仅示出了一个缓存集的rrip值,并且将为每个其他组集相关缓存提供类似的rrip值组。当可替换信息值被解释为缓存逐出策略信息102时,十六个可替换信息值中的每一个给出16路集相关缓存中给定集合的十六个路之一的缓存逐出策略。在该实施例中,虽然可替换信息值被认为表示rrip值102,但是条目(在这种情况下,条目0、3、6、9和12)的子集中保持的值受到限制,使得不超过这些条目的预定最大数量可以具有值3(0b11)。例如,在这种情况下,最大数量是2,并且因此该子集中不超过两个条目可以存储值11,而这些值表示rrip值。

当对应于读取集中的地址的缓存行首先被分配给集合104时——或者当遇到tstart指令时——改变可替换信息值的编码,使得它识别出现在将值解释为读取集信息106。在图7所示的实施例中,通过用值11替换上述子集中的所有条目(条目0、3、6、9和12)来设置编码。只要子集中的所有5个条目都显示此值,则可替换信息值将被解释为读取集信息,并且因此用该值替换子集中的所有条目指示可替换信息值将被解释为读取集信息。在替代实施例中,条目的子集可以替代地是整个条目集。将3或4的条目子集(例如,0、3、6、9和12)设置为0b11的编码被认为是无效的,所以如果检测到这些编码之一,则中止事务。这确保了事务之外使用的有效替换策略编码与事务内部的有效读取集编码之间的汉明距离为3,使得存在双重错误检测能力(即使条目0、3、6、9和12中的两个位由于α粒子撞击或其他单事件扰乱而改变状态,仍然可以检测到错误,即使条目0、3、6、9和12不使用错误检测/纠正码进行错误保护。

一旦编码已经被改变以将可替换信息值识别为读取集信息,在图7的实施例中,缓存逐出策略切换到替换策略,该策略独立于可替换信息值的内容,例如随机替换策略,其中随机或以轮询替换策略选择要被逐出的缓存条目,其中被选择作为受害者条目的条目以特定序列循环通过该集合的每个条目。这可能比考虑有关条目的最近使用的信息的其他替换策略(例如rrip)效率低,但它仍然在功能上是正确的。

如图7所示,未用于指示可替换信息值的编码的附加位将被解释为读取集信息——在这种情况下,字段1、2、4、5、7、8、10、11和13至15中的位现在可用于存储错误校验位108和读取集信息110。尽管在该实施例中,已经分别描述了读取集信息和错误校验位,但是应该理解,在本申请的上下文中,“读取集信息”旨在覆盖读取集值和错误校验位。如该图所示,该特定配置还留下备用位112,备用位可用于存储附加信息。

响应于遇到的tend指令114,这指示应该重置编码以将值识别为rrip值。这将涉及用不是11的那些值替换上面讨论的子集中的至少一些可替换信息值,但是也可以可选地包括改变rrip值的其他值。在该图所示的实施例中,所有的值116都被替换为相同的值10,以便隐藏在替换之前可从读取集信息中确定的任何敏感信息。然而,在一些其他实施例中,读取集信息可以替代地用随机值集替换(假设取最高值的值的数量不高于预定最大值)。此时,处理电路返回到rrip替换策略,并且随着时间的推移,将更新这些值以更准确地反映应在缓存逐出策略内替换哪些条目。

上述特定实施例给出了用于存储读取集信息的节省空间的技术。这是因为不需要额外的位来存储编码,因为通过将一定数量的可替换信息值设置为最大可能值来简单地设置读取集编码。然而,这种方法的权衡是可用于存储读取集信息的值较少,因为通过提供编码来获取一些值。另一方面,图8中所示的实施例使用三个附加位118来标记可替换信息值的编码。最初,虽然可替换信息值用于缓存逐出策略信息值120,但是附加位118被设置为000。这是编码,该编码向处理电路4指示应该如此解释可替换信息值。当对应于读取集中的地址的缓存行首先被分配给集合122时-或者当遇到tstart指令时-附加位118被替换为位111,并且处理电路4被配置为当附加位118被设置为111时将可替换信息值解释为读取集信息。在这种情况124下,每个条目识别16路集相关缓存的多个路之一的读取集信息。然后,响应于遇到的tend指令126,将附加位118重置为000,并且将可替换信息值再次解释为缓存逐出策略信息128。可替换信息值也可以用随机值(或与图7的实施例中相同的值)替换。

通过使用三个附加位而不是例如字段118中的两个附加位允许提供双错误检测。这是因为为了从编码000改变到编码111,需要汉明距离为3;也就是说,需要替换三个位以便从一个值转到另一值。由于3个位改变状态的概率在实践中可能极低,这是对可替换信息值进行编码的特别安全的方式。

以图8中所示的方式对可替换信息值进行编码在缓存中需要更多空间,但是可以允许存储附加信息。例如,图9示出了一旦遇到tstart指令130仍然保留一些缓存逐出策略信息的实施例。在该实施例中,可替换信息值再次最初表示rrip值132。然而,与先前的实施例不同,当与读取集中的地址相对应的缓存行首先被分配给集合130时——或者当遇到tstart指令时——仅将字段118之后的一半位替换为读取集信息(其包括错误校验位)。因此,缓存逐出策略信息被减少到单个位而不是最初为132的两个位,使得每对位的另一位可以用于识别读取集信息134。因此,缓存逐出策略信息的最高有效位保留并且可以在改变的rrip替换策略中使用,以指示在分配新缓存行时应该逐出哪个缓存行。同时继续识别读取集并提供错误检查代码。

响应于遇到的tend指令136,已经用作错误校验位和读取集信息的位被重写,并且返回的值被解释为读取集信息值138。当然,这也意味着附加位118返回到值000。

图9中所示的技术具有以下优点:可以以简化形式维护缓存逐出策略信息,但是其缺点在于可用于读取集信息的位较少。这可能意味着只有缓存中的某些条目可用于存储事务中使用的信息。

然而,图10示出了总共仅九个位可用于识别16路集相关缓存的所有16个条目的读取集信息的实施例。在该实施例中,每个集合144被认为分成两组,第一组145包括条目0至7,第二组147包括条目8至15。然而,这仅是如何将集合144分成两组的一个实施例-也可以使用其他实施例。每个条目指示符142根据组标识符140的值对应于第一集合中的条目之一或第二集合中的条目之一。在该实施例中,处理电路最初仅将读取集地址分配给第一组缓存144。因此,条目指示符均识别这些前8个条目之一的读取集信息。当这些条目中的所有8个都满时,将组标识符被设置为预定值(例如1),以便识别第一组中的所有条目包括读取集内的地址。此时,条目指示符142被重置为它们的默认值(例如0)。处理电路4现在开始将读取集地址分配给缓存144中的第二组条目-条目8到15。条目指示符现在识别该第二组中的条目之一的读取集信息。因此,通过仅使用9个位-组标识符140的1个位和条目指示符142的8个位-读取集信息可以被提供用于16路集相关缓存144的所有16个路。例如,如果组标识符140的值是1并且前两个条目指示符中的值也是1,则这表示第一组145中的所有条目都在读取集中,并且第二组147中的前两个条目(条目8和9)也在读取集中。这也可以通过提供两个组标识符来提供,每个组一个,并且只有七个条目指示符。在这种情况下,如果第一组145中的所有条目都在读取集中,则七个条目指示符被重置为0并且两个组标识符中的第一个被设置为1。

图11示出了如何在图9的实施例中实现图10中所示的条目指示符142和组标识符140。在这种情况下,由于每个条目的一个位被保留用于缓存逐出策略信息,所以总共剩余16个位用于存储读取集信息。为了允许四个位用作错误校验位108,可以仅使用十二个位来存储读取集值的其余部分。

在图11的实施例中,条目5至12中有八个条目指示符142,条目4中有组标识符140。在条目0到3中还有错误校验位108,并且在条目13到15中也有三个备用位200。所有这些都完成,同时仍然允许来自这些条目中的每一个的一个位用作缓存逐出策略信息。

在其他实施例中,可以通过将该集合划分为多于2个组来进一步减少用于表示给定集合中的每个位置的读取集信息的位数。例如,集合内的4组4个条目的读取集信息可以用7个位(4个组标识符140和3个条目指示符142,或3个组标识符140和4个条目指示符142)表示。因此,通常,对于m*n个缓存条目的集合的编码读取信息(包括每组n个条目的m组)可以用m+n-1个位表示。

在本发明的一些实施例中,可以在可替换信息值的编码内识别多个事务的读取集信息。图12示出了这样的实施例。如该实施例中所示,在对应于读取集中的地址的缓存行首先被分配给集合201之前,或者在遇到tstart指令之前,这些值再次初始地识别rrip值202。然后,以与图7中相同的方式,改变可替换信息值的编码以识别这些值应被识别为读取集信息208。

在该实施例中,通过使用组标识符210、212和在图10中描述的条目指示符214、216的技术,两个事务-事务1(t1)和事务2(t2)-可以在通过可替换信息值的编码释放在这些位内传送的它们的读取集信息,同时仍然留有用于错误校验位218的空间。实际上,除了图7中已经剩余的备用位220之外,该实施例还留下了两个备用位220,即总共三个备用位220。在该实施例中,两个事务的读取集信息共享错误代码218,并且每个事务的读取集信息用四个条目指示符214、216和三个组标识符210、212表示,从而允许16路集相关缓存的十六个路在每个事务中仅以七个位表示。同样,在遇到tend指令222之后,可替换信息值全部被重置为值10,并且它们再次被解释为缓存逐出策略信息224。

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

尽管本文中已经参考附图详细描述了本发明的说明性实施方式,但是应当理解,本发明不限于那些精确的实施方式,并且本领域技术人员可以在不脱离由所附权利要求限定的本发明的范围的情况下在其中实现各种改变和修改。

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