用于处理原子更新操作的装置和方法与流程

文档序号:12733530阅读:224来源:国知局
用于处理原子更新操作的装置和方法与流程

本技术涉及用于执行原子更新操作的装置和方法。



背景技术:

当处理电路发布指定存储器地址的原子更新操作时,通常将要求获取该存储器地址处的数据、使用该获取的数据执行某些计算、然后根据该计算的结果将数据值写回所指定的存储器地址。该步骤序列需要被原子地执行以便当执行更新操作时,数据不被另一操作访问。

许多现代数据处理系统在处理电路和存储器之间包括一个或多个级别的缓存器,其中,某些存储器地址处缓存的数据副本可以被保持以提升相关联的处理电路访问该数据的速度。一个或多个级别的缓存器可被提供用于相关联处理电路的互斥使用,这类缓存器通常被称为本地缓存器,而其他级别的缓存器可在多个处理电路之间共享,通常被称为共享缓存器。

考虑前面提到的原子更新操作,当确定指定地址与已被缓存在本地缓存器中的数据有关时,可能使用本地缓存内容来执行该原子更新操作,在这种情况下,原子更新操作被称为近原子操作。然而,在近原子操作可以被执行之前,可能需要完成某些未决缓存访问操作,而且这在原子更新操作的处理中会产生性能影响。期望提供用于减轻该性能影响的机制。



技术实现要素:

在第一示例配置中,提供了一种装置,包括:缓存存储装置,用于存储由处理电路访问的数据,该缓存存储装置具有多个缓存线;原子更新处理电路,用于处理关于指定地址处的数据的原子更新操作的执行,原子更新处理电路被布置为当指定地址处的数据被存储在缓存存储装置的缓存线中时,对来自该缓存线的数据执行原子更新操作;冒险检测电路,用于在检测到缓存存储装置的线填充(linefill)操作是未决的将使得所选缓存线将被包括指定地址处数据的数据填充时,触发原子更新操作的执行的延迟,线填充操作使得装置接收数据部分的序列,该数据部分的序列共同形成用于存储在所选缓存线中的数据;部分线填充通知电路,用于在线填充操作期间向原子更新处理电路提供部分线填充信息;并且原子更新处理电路被布置为响应于从部分线填充信息检测到指定地址处的数据对于所选缓存线是可用的而发起原子更新操作。

在第二示例配置中,提供了一种在装置中处理原子更新操作的方法,该装置具有用于存储由处理电路访问的数据的缓存存储装置,缓存存储装置具有多个缓存线,该方法包括:采用原子更新处理电路来处理关于指定位置处的数据的原子更新操作的执行,原子更新处理电路被布置为当指定位置处的数据被存储在缓存存储装置的缓存线中时,对来自该缓存线的数据执行原子更新操作;当检测到缓存存储装置的线填充操作是未决的将使得所选缓存线将被包括指定地址处数据的数据填充时,触发原子更新操作的执行的延迟;执行线填充操作以使得装置接收数据部分的序列,该数据部分的序列共同形成用于存储在所选缓存线中的数据;在线填充操作期间向原子更新处理电路提供部分线填充信息;以及响应于原子更新处理电路从部分线填充信息检测到指定地址处的数据对于所选缓存线是可用的而发起原子更新操作。

在进一步的示例配置中,提供了一种装置,包括:缓存存储装置,用于存储由处理电路访问的数据,该缓存存储装置具有多个缓存线;原子更新处理装置,用于处理关于指定地址处的数据的原子更新操作的执行,当指定地址处的数据被存储在缓存存储装置的缓存线中时,原子更新处理装置对来自该缓存线的数据执行原子更新操作;冒险检测装置,用于当检测到缓存存储装置的线填充操作是未决的将使得所选缓存线将被包括指定地址处数据的数据填充时,触发原子更新操作的执行的延迟,线填充操作使得装置接收数据部分的序列,该数据部分的序列共同形成用于存储在所选缓存线中的数据;部分线填充通知装置,用于在线填充操作期间向原子更新处理装置提供部分线填充信息;并且原子更新处理装置响应于从部分线填充信息检测到指定地址处的数据对于所选缓存线是可用的而发起原子更新操作。

附图说明

本技术将参考附图中示出的其实施例仅通过示例被进一步描述,其中:

图1是所描述的实施例的技术在其中可被采用的系统的框图;

图2是根据一个实施例更详细地示出了与级别1数据缓存器相关联被提供的组件的框图;

图3根据一个实施例示意性地示出了线填充操作可如何使用多个缓存访问被执行;

图4是根据一个实施例示出了图2的原子更新操作处理机的操作的流程图;

图5A是根据一个实施例示出了原子更新操作处理机中提供的组件的框图;

图5B根据一个实施例示意性地示出了图5A的原子更新操作处理机的缓冲器的每个槽中提供的字段;

图6根据替代实施例示出了到原子更新操作处理机的转发路径可如何被使用;

图7是根据图6的实施例示出了原子更新操作处理机的操作的流程图;

图8根据图6的实施例示意性地示出了部分线填充数据可如何被提供给原子更新操作处理机;以及

图9是根据一个实施例示出了可被用作级别1数据缓存器的虚拟索引、物理标记的缓存器的操作的示图。

示例实施例

在参考附图讨论实施例之前,提供下列实施例的描述。

在一个实施例中,提供了一种装置,该装置具有缓存存储装置,用于存储由相关联的处理电路访问的数据,缓存存储装置具有多个缓存线。原子更新处理电路然后用于处理关于指定地址处的数据的原子更新操作的执行。原子更新处理电路被布置为当确定该指定地址处的数据被存储在缓存存储装置的缓存线中时,对来自该缓存线的数据执行原子更新操作。

冒险检测电路用于检测某些冒险条件,并且关于原子更新操作被布置为当检测到缓存存储装置的线填充操作是未决的时(在这种情况下线填充操作将使得所选缓存线将被包括指定地址处数据的数据填充),触发该原子更新操作的执行的延迟。在这种情况下,将理解的是,一旦线填充操作已完成,缓存器然后将包含指定地址处的数据,允许直接对来自缓存线的数据执行原子更新操作。

然而,由于在线填充操作期间整个缓存线的数据被写入缓存器中,可能需要相当长的一段时间来完成线填充操作。特别地,在线填充操作期间装置将从存储器系统(从缓存层级中的较低级别或从主存储器)接收数据部分的序列,该数据部分的序列共同形成用于存储在所选缓存线中的数据,而且可能需要大量时间来接收所有要求的数据部分并将那些部分存储到缓存线以便完成线填充操作。

根据所描述的实施例,不同于必须等待线填充操作完成并且冒险条件因此被移除,在执行原子更新处理电路之前,提供部分线填充通知电路,其在线填充操作期间向原子更新处理电路提供部分线填充信息。原子更新处理电路然后被布置为响应于从部分线填充信息检测到指定地址处的数据对于所选缓存线是可用的而发起原子更新操作。

在许多情况下,这将使得原子更新操作在线填充操作已被完成之前被发起,因此减轻了否则必须等待从冒险检测电路确认线填充操作已完成并且冒险因此不再存在将导致的潜在性能影响。

指定地址处的数据被确定对于所选缓存线是可用的时刻根据实施例可能发生变化。在一个实施例中,一旦指定地址处的数据已被存储在所选缓存线中,该指定地址处的数据对于所选缓存线是可用的。在这类实施例的一个具体示例中,独立的数据部分在从存储器系统被接收时被写到缓存线,且因此部分线填充信息可以基于每个数据部分到缓存线中的存储。

然而,在替代实施例中,一旦指定地址处的数据已被本地缓冲在装置中用于存储在所选缓存线中,该指定地址处的数据即被认为对于所选缓存线是可用的。在一个这类实施例中,数据部分仍然从存储器系统按顺序被接收,但它们被本地缓冲以便多个数据部分然后在可同一时刻被写入所选缓存线(在一个具体实施例中,整个缓存线的数据使用缓冲的数据部分在同一时刻被更新)。当采取这类方法时,部分线填充信息可能是基于本地缓冲器中数据部分的可用性,而不需要等待缓存线在线填充操作期间被实际地写入。

部分线填充信息可采取各种形式。在一个实施例中,部分线填充通知电路被布置为向原子更新处理电路提供部分线填充信息以标识每个数据部分在线填充操作期间何时对于所选缓存线是可用的,并且原子更新处理电路被布置为从部分线填充信息确定线填充操作何时已前进到指定位置处的数据对于所选缓存线是可用的时刻。

因此,在该实施例中,每次数据部分在线填充操作期间对于所选缓存线变为可用的,原子更新处理电路被通知。基于此信息,原子更新处理电路然后可以确定与原子更新操作有关的指定地址处的数据何时对于所选缓存线是可用的,并且即使线填充操作可能尚未完成,在该时刻可发起原子更新操作。

作为以上方法的替代,部分线填充通知电路可被布置为确定线填充操作何时已前进到对于所选缓存线可用的数据部分包括指定地址处的数据的时刻,然后作为部分线填充信息,发布指定地址处的数据对于所选缓存线是可用的指示。因此,在此实施例中,不同于当每个数据部分对于所选缓存线变为可用时通知原子更新处理电路,部分线填充通知电路跟踪线填充操作的进度,并确定何时已到达原子更新操作所要求的指定地址处的数据对于所选缓存是可用的时刻,并且在该时刻向原子更新处理电路提供部分线填充通知。原子更新处理电路然后可通过发起原子更新操作的执行来响应该部分线填充信息的接收。

部分线填充信息根据实施例可包括各种各样的信息。在一个实施例中,部分线填充信息包括地址部分,在线填充操作期间指示对于所选缓存线可用的相应数据部分。因此,基于地址部分信息,原子更新处理电路然后可确定对于所选缓存线可用的相应数据部分是否包括与原子更新操作有关的指定地址处的数据。

在一个实施例中,原子更新处理电路可包括具有多个缓冲条目的缓冲器,其中每个缓冲条目可用于存储与未决操作有关的信息。部分线填充通知电路可被提供关于任意具体的未决原子更新操作与哪个缓冲条目相关的信息,并且在一个实施例中,部分线填充信息然后包括对正向其提供部分线填充信息的缓冲条目的指示。这使得原子更新处理电路容易地确定部分线填充信息正针对哪个原子更新操作被提供。

在一个实施例中,一旦原子更新处理电路响应于部分线填充信息检测到可以发起原子更新操作,将发布请求以访问所要求的数据,随后对所要求的数据的更新操作将被执行,通常使得更新的数据被写回缓存线。

然而,在替代实施例中,数据转发路径可被耦合到原子更新处理电路,可用于向原子更新处理电路提供对于所选缓存线可用的相应数据部分作为部分线填充信息的至少一部分。因此,在这类实施例中,可以避免需要(从缓存器或本地缓冲器)读取数据,并且可以使用通过数据转发路径被直接提供的数据。

在一个实施例中,专用数据转发路径可针对原子更新处理电路被提供。然而,在替代实施例中,原子更新处理电路可被合并在已经具有到它的这类数据转发路径的组件中。例如,在一个实施例中,原子更新处理电路可被合并在处理电路的加载/存储管道中,并且通常加载/存储管道将被提供转发路径以使得经由线填充操作取回的数据被直接提供到处理器。该转发路径然后可被原子更新处理电路重新使用。

原子更新操作可采取各种形式,但在一个实施例中,包括读取-修改-写入操作,其中,指定地址处的数据在对于所选缓存线可用时被获取,执行计算以产生修改的数据值,并且修改的数据值被写回所选缓存线。

这类原子更新操作可采取各种形式,例如,允许由不同形式的原子更新操作指定若干不同的计算。此外,原子更新操作可被标识为是存储操作或加载操作。

在一个实施例中,当原子更新操作是原子加载操作时,则除了执行上述读取-修改-写入操作,所获取的指定地址处的数据被输出到处理电路。因此,处理电路在原始数据被读取-修改-写入操作修改之前接收原始数据。

通过使用部分线填充信息以使得原子更新操作在若其等待相关线填充操作的完成而能被执行之前被执行可实现的上面的性能改善,与原子加载操作相结合可以是特别有用的,这是由于通常情况下处理电路将要执行的后续操作将等待该数据从原子加载操作的接收。通过减少原子加载操作的延迟,减少了对取决于所加载数据的后续操作的性能影响。

尽管原子更新操作可以是读取-修改-写入操作,可替代地采取其他形式。例如,在一个实施例中,原子更新操作包括当指定地址处的数据对于所选缓存线可用时获取该指定地址处的数据,执行计算以生成结果值,并根据结果值可选择地将修改的数据值写回所选缓存线。这类原子更新操作的一个示例将是比较和交换操作,其中,从指定地址获取的数据值与原子更新操作指定的另一值(例如,指定寄存器的内容)相比较,然后根据比较的结果,存储在指定地址处的数据值可被交换为不同的数据值。此外,通过采用上述技术来减少原子更新操作的延迟,可产生显著的性能益处。

在一个实施例中,缓存访问电路用于在线填充操作期间将数据存储到所选缓存线中。当每个数据部分变为可用时,缓存访问电路可每次更新缓存线一个数据部分,或替代地,数据部分可被本地缓冲,然后缓存访问电路可一次将多个数据部分(在一个实施例中,构成缓存线的数据的所有数据部分)写入缓存线。

在一个实施例中,缓存访问电路可被布置为当原子更新操作正被执行时,至少针对可危害(compromise)原子更新操作的原子性的任意操作来锁定所选缓存线不被访问。

在一个实施例中,线填充操作的任意剩余部分被允许继续,这是因为它们将不涉及作为原子更新操作的主题的数据,并因此不包含原子性。此外,针对由相关联的处理电路发布的访问请求的冒险检查机制可足够确保任何可能包含原子性的访问请求被暂停,等待原子更新操作完成,因此不要求缓存线被特别地锁定。然而,某些类型的操作可潜在地危害原子更新操作的原子性。一个示例是监听操作,该监听操作从包含该装置的系统中的监听电路被发布到该装置。监听电路实际上是缓存结构的访问请求(以监听请求的形式)的外部来源。根据上述实施例,缓存访问电路被布置为当原子更新操作关于该缓存线正被执行时,防止这类监听请求访问所选缓存线。一旦原子更新操作完成,则缓存访问电路将允许监听操作继续。

原子更新处理电路可以是单纯用于处理原子更新操作的专用电路。然而,在替代实施例中,原子更新处理电路可被提供作为现有结构的一部分以便利用该现有结构的某些组件。在一个具体实施例中,原子更新处理电路被提供在用于处理由处理电路请求的存储操作的存储缓冲电路中。作为处理标准存储操作所要求的处理的一部分,存储缓冲电路将能够访问缓存器以便将数据写入所选缓存线。当处理原子更新操作时该功能可被原子更新处理电路利用,如从上面的讨论将是显而易见的,这是由于这些通常将不仅涉及从缓存器读取数据,还涉及(在数据已被修改之后)将数据写回缓存器。

在一个实施例中,原子更新处理电路被布置为当确定指定地址处的数据未被存储在缓存存储装置的缓存线中,并且不存在将导致所选缓存将被包括指定地址处数据的数据填充的缓存存储装置的未决线填充操作时,输出原子更新操作用于由装置外部的组件处理。相比于使用缓存存储装置的内容可直接执行原子更新操作(在本文将被称为近原子操作),被输出用于由装置外部的组件处理的原子更新操作将被称为远原子操作。

现在将参考附图描述具体实施例。

图1示出了所描述的实施例的装置在其中可被采用的系统的示例。为了便于说明,系统包括仅包括两个处理器核心100、120,但额外的处理器核心可被提供,实际上可以包括可包括或可不包括它们自己的本地缓存器的其他主设备。核心100具有各种处理器管道105,其中的一个是用于处理加载和存储操作的加载/存储管道110。加载/存储管道110可通过发布指定存储器地址的访问请求来访问核心100中本地提供的一个或多个缓存级别115。核心120被类似地构建,具有包括加载/存储管道130的管道125,该加载/存储管道130可向核心120中本地提供的一个或多个缓存级别135发布指定存储器地址的访问请求。在本文描述的实施例中,将假设一个或多个缓存级别115、135包括级别1数据缓存器。更低级别的缓存器可被提供在方框115、135中,例如,本地级别2缓存器。不管是存在额外级别的缓存器或是仅级别1缓存器,在每个方框115、135中,在本地缓存级别中未命中的情况下,线填充请求将与存储器地址一起被向外传播到一致性互联140。一致性互联140包括监听电路155,其用于实现缓存一致性协议以便确保可由分离的处理器核心的本地存储器保持的各种数据备份之间存在数据一致性。特别地,通过示例,处理器核心120在其本地缓存135中具有比任意共享的较低层级缓存级别145和/或存储器150中保持的数据更新的数据值是重要的,则若处理器核心100请求访问该数据并在其本地缓存115中检测到未命中,可确保处理器核心100将访问最新的数据。

监听电路155试图维护指示它理解的具有缓存的数据备份的那些核心的记录,该记录跟踪数据的存储器地址及其相信已本地缓存该数据的核心。因此,在线填充请求与存储器地址一起从一个处理器核心被传播的情况下,监听电路155可检查其本地记录以查看该存储器地址是否在其记录中被标识,以及如果被标识,哪些处理器核心被指示为具有该数据的备份。监听电路155然后可向(一个或多个)相关处理器核心发布监听请求以便使得每个这类处理器核心访问其本地缓存器,并执行所要求的关于其数据备份的一致性动作。这可涉及使本地备份无效,和/或可涉及处理器核心将其数据备份输出回监听电路,以便数据备份然后可被返回到请求处理器核心。通过示例,因此将理解的是,若针对处理器核心100做出的访问请求在一个或多个缓存级别115中发生未命中,并且该地址处的最新版本的数据驻留在处理器核心120的本地缓存层级135中,这将由监听电路155检测,并且经由监听请求该数据可被取回并然后被提供回处理器核心100。

除了向相关联的缓存级别发布标准加载或存储操作,加载/存储管道110、130还可发布要求执行存储器访问的其他类型的操作。一个具体示例是之前讨论的原子更新操作。这类原子更新操作通常将要求访问指定存储器地址处的数据、使用该数据执行某些操作、以及然后将更新的数据值写回存储器地址。在原子更新操作的某些替代示例中,在操作之后将数据值写回存储器地址可取决于该操作的结果。

当这类原子更新操作由加载/存储管道发布时,与相关联的本地缓存级别115、135中第一级别的缓存器相关联的电路将确定原子更新操作的指定地址处的数据值是否被互斥地缓存在本地缓存器中。若指定地址处的数据值当前未被互斥地缓存在本地缓存器中,可使用监听功能来将本地缓存器的备份呈现(render)为互斥备份。若正在讨论的数据值被互斥地缓存在本地缓存器中,则原子更新操作可关于缓存器的内容被本地执行,这类原子更新操作被称为近原子操作。此外,若检测到感兴趣的数据值当前不在缓存器中,但该感兴趣的数据值是缓存器的未决线填充操作的主题并因此在适当的时候将出现在缓存器中,则原子更新操作可被延迟并等待线填充操作的执行。这再次使得原子更新操作作为近原子操作被处理。如参考下面的实施例将被更详细地讨论的,不同于必须等待整个线填充操作完成,使用此后描述的实施例的技术,在许多情况下原子更新操作可能在全部线填充操作已完成之前开始,因此提供性能改善。

若确定原子更新操作的指定地址未将其相关联的数据缓存在本地缓存结构中,并且不是未决线填充操作的主题,则该原子更新操作从相关处理器核心100、120被传播用于在较低缓存级别145或存储器150处执行。需要以这种方式处理的原子更新操作可被称为远原子操作。

图2是根据一个示例实施例示出了与级别1数据缓存器相关联被提供的组件的框图,并且具体地,示出了原子更新操作如何被处理。级别1数据缓存阵列220在可从各种来源接收缓存访问请求的缓存访问仲裁器210的控制下被访问。例如,对于加载访问请求,加载/存储管道200可向缓存访问仲裁器发布访问请求以使得在级别1缓存阵列220中执行查找。在缓存器命中的情况下,所请求的数据可从级别1缓存阵列220被返回到加载/存储管道200。一旦存储操作到达管道的提交阶段,通常仅由加载/存储管道输出,并且在该时刻被转发到存储缓冲器。尽管存储缓冲器在图2中未被分离地示出,在一个实施例中,原子更新操作处理机230实际上被提供作为存储缓冲电路的一部分。对于存储操作,存储缓冲器然后可使得缓冲访问仲裁器210执行缓存查找以便确定作为存储操作主题的数据是否在缓存器中,并且若在缓存器中,则针对存储操作提供的写入数据可被直接写入缓存器中(假设存储操作与可缓存存储请求有关)。

如路径212所示,总线接口单元(BIU)240能够监测缓存访问仲裁器210做出的各种缓存访问及响应。若针对缓存访问检测到未命中,则BIU240可通过路径242向较低级别的缓存层级发布线填充请求,以便使得所请求的数据作为线填充数据通过路径244被返回。当线填充数据被返回时,可通过路径246被转发到缓存访问仲裁器210以便使得所请求的数据被存储在缓存阵列的所选缓存线中。若被要求,数据还可经由数据转发路径248被直接传送回加载/存储管道200。

通常,缓存线宽度超过路径244上的数据总线宽度。因此,当从较低级别的缓存层级取回缓存线的数据以便执行线填充操作时,该数据通常将作为数据部分的序列被返回。在一个实施例中,当每个数据部分被返回时,可通过路径246被传送以使得缓存访问仲裁器210执行到相关的缓存阵列的缓存线的访问,以便将该数据部分写入缓存线。根据这类方法,对于缓存阵列的多个缓存访问将由缓存访问仲裁器210执行,以便在线填充操作期间填充全部的缓存线的数据。

在替代实施例中,本地缓冲器211可由缓存访问仲裁器维护,以便当线填充的每个数据部分被返回时,被存储在缓冲器211中,然后当全部的缓存线的数据是可用的时,执行到缓存阵列的访问以便将缓存线的数据存储在所选缓存线中。

由于BIU 240意识到关于缓存阵列220的各种访问经由通过路径212传送的缓存访问信息正被执行,BIU可以跟踪可能出现的潜在冒险,并且具体地,可被提供冒险监测电路250以跟踪那些冒险并在检测到冒险的情况下发布适当的控制信号。作为冒险的一个示例,当线填充操作是未决的时,可能是下列情况:缓存访问仲裁器发布关于存储器地址的访问请求,该存储器地址被包含在作为线填充操作的主题的地址的范围内。若数据尚未被写入缓存器中,这将导致在缓存器中检测到未命中,但若BIU检测到一旦线填充操作完成数据将是可用的,则BIU可通知相关组件以便使得该组件忽略缓存访问结果,并且该组件稍后重试缓存访问。

考虑原子更新操作,通常将经由加载/存储管道200通过路径202被路由到原子更新操作处理机230。当原子更新操作处理机230可能是与缓存器相关联的分离的功能块时,在一个实施例中,其可被合并为存储缓冲电路的一部分,并利用已被提供在存储缓冲电路中的某些组件。例如,存储缓冲电路通常将包括若干缓冲槽用于存储未决存储操作,并且那些缓冲槽还可用于存储未决原子更新操作。假设原子更新操作可以作为近原子操作被处理,原子更新操作具有与存储操作相类似的某些属性,这是由于作为其功能的一部分,原子更新操作通常将要求执行对缓存阵列中的缓存线的写入。由于在原子更新操作的执行期间执行写入,则一旦已到达加载/存储管道的提交阶段,这类原子更新操作通常还将仅通过路径202从加载/存储管道被路由。

当原子更新操作处理机确定其要执行原子更新操作时,可向缓存访问仲裁器210发布请求以使得缓存访问仲裁器在级别1缓存阵列220中执行查找。在命中的情况下,所请求的数据可被返回到原子更新操作处理机,其中,然后可对该数据执行原子更新操作。这通常将涉及使用所取回的数据来执行更新操作,导致结果数据的生成。在一个实施例中,结果数据然后经由向缓存访问仲裁器210发布写入请求的原子更新操作处理机230被写回级别1缓存阵列,以访问相关的缓存线并写入数据。根据原子更新操作的类型,在某些实例中,可能的情况是更新操作的结果首先被分析,并根据该结果的值,然后可指定缓存线的当前内容是否作为原子更新操作的最后步骤被更新。

由于之前讨论的BIU 240的功能,若当缓存访问仲裁器210响应于原子更新操作处理机的请求执行初始查找操作时,在级别1缓存阵列中检测到未命中,则BIU可参考冒险监测功能来检测是否存在覆盖原子更新操作的指定地址的未决线填充请求。在该情况下,冒险监测电路250被布置为通过路径252向原子更新操作处理机230发送控制信号以触发原子更新操作的执行的延迟。实际上,原子更新操作处理机然后忽略从缓存访问仲裁器210返回的未命中结果,并在重启原子更新操作的执行之前等待来自BIU 240的进一步的控制信号。

由于线填充数据通常在多个周期中通过路径244被接收(每次一个数据部分)的事实,将理解的是,线填充操作潜在地花费大量时间来执行。若原子更新操作处理机230将等待线填充操作完成(在该时刻冒险然后将被移除),并且该结果的通知可从冒险监测器250被传送到原子更新操作处理机230,这可潜在地使得原子更新操作被暂停相当长的一段时间。在参考图2描述的实施例中,通过使用部分线填充通知方框260来减轻此问题。特别地,在一个实施例中,当线填充操作的每个数据部分通过路径244被返回并通过路径246被路由到缓存访问仲裁器210时,然后该事实的通知可通过路径262被发布到原子更新操作处理机230。

通过路径262被路由到原子更新操作处理机230的部分线填充信息可采取各种形式,但在一个实施例中,提供了足够标识与数据部分相关联的地址的范围的某些地址信息。在一个实施例中,部分线填充信息还被布置为标识由于未决线填充操作而已被暂停的相关原子更新操作所在的缓冲槽。特别地,槽信息可在检测到原始冒险的时刻被传送到BIU 240,以便BIU可将槽标识符与未决线填充相关联,因此部分线填充通知器260可通过路径262发布特定于槽的部分线填充通知。

当每条部分线填充信息通过路径262被返回到原子更新操作处理机230时,可评估已被提供到缓存访问仲裁器210的相关联的数据部分是否包括作为暂停的原子更新操作的主题的数据(即,与该数据部分相关联的地址范围是否包括正在讨论的原子更新操作的指定地址)。

因此,将理解的是,即使在线填充操作完成之前,可能检测到作为线填充操作的一部分已被返回的数据部分已包括原子更新操作需要的数据的情况。在该时刻,原子更新操作处理机230可向缓存访问仲裁器210重新发布其访问请求。在每个数据部分在被缓存访问仲裁器接收时被直接写入所选缓存线的实施例中,将理解的是,在该时刻将在缓存阵列的相关缓存线中检测到命中。类似地,若缓冲器211用于当数据部分被返回时将其暂时地缓冲直到完整的缓存线的数据已被接收,则在将数据写入缓存线之前仍可检测到命中,这是由于在一个实施例中,作为缓存访问查找操作的一部分,缓存访问仲裁器210还将在缓冲器211中查找。因此,在该时刻,所要求的数据可被返回到原子更新操作处理机以使得原子更新操作然后可被执行。

在适当的时候,一旦原子更新操作的修改步骤已被执行,通常将存在数据来写回所选缓存线中,并且在该时刻,原子更新操作处理机将与待写入的数据一起向缓存访问仲裁器210发布适当的请求。若在该阶段原始数据已被存储在级别1缓存阵列中,则缓存访问仲裁器210可以仅访问相关的缓存线并更新有关数据。若相关的数据仍在缓冲器211中,则在缓冲器中其可被来自原子更新操作处理机230的新提供的数据覆盖,以便在适当的时候一旦数据被写入缓存阵列,将包括由原子更新操作处理机生成的经更新的数据。

在当初始请求针对具体的原子更新操作从原子更新操作处理器230被发送到缓存访问仲裁器210时,级别1缓存阵列220中检测到未命中并且BIU 240未检测到任何未决线填充操作的情况下,在一个实施例中,原子更新操作然后将作为远原子操作被处理。因此,原子更新操作的细节将通过路径232从原子更新操作处理器230被输出到BIU 240,该远原子请求然后将通过路径242从BIU 240被发布到较低级别的缓存层级。

对于在级别1缓存器中未命中的标准存储操作,还可作为存储请求经由BIU 240通过路径242被传播到较低级别的缓存层级上。

图3示意性地示出了构成缓存线的独立的数据部分如何被接收和处理。如方框300所示,独立的数据部分将通过路径244由BIU 240接收。在缓存器针对每个数据部分被独立地访问的实施例中,当每个数据部分被接收时缓存线305将被多次写入以便填充各个缓存线部分310、315、320、325。在该具体示例中,假设缓存线具有512位的长度,并且通过路径244接收的数据部分的长度是128位,因此要求四次不同的缓存线访问以便完全填充缓存线数据。当使用缓存访问仲裁器中的缓冲器布置211时,将理解的是,将类似地需要四次不同的操作来用缓存线的数据填充缓冲器211,在该时刻然后可经由单个缓存访问被直接写入所选缓存线,假设缓存访问仲裁器210和级别1缓存阵列220之间的路径的带宽支持整个缓存线的数据在一个周期内写入。

图4是根据一个实施例示出了原子更新操作处理机230的操作的流程图。在步骤350处,确定是否存在原子更新操作要处理。当存在时,处理然后前进到步骤355,其中,通过向缓存访问仲裁器210发布适当的信号来请求缓存查找。这将使得缓存访问仲裁器在级别1缓存阵列220中执行查找,并在适当的时候将响应提供回原子更新操作处理器。

在步骤360处,等待该响应,并在接收时确定响应是否指示在缓存阵列中已检测到命中。若响应指示在缓存阵列中已检测到命中,数据通常还将作为响应的一部分被返回到原子更新操作处理机,使得所要求的数据在步骤370处从缓存器被取回。在步骤375处,更新操作可被执行,更新操作的具体形式取决于原子更新操作的类型。例如,这可涉及使用从缓存器取回的数据以及指定为原子更新操作的一部分的一个或多个其他值来执行的某些算术逻辑计算。这导致结果数据的生成,然后可在步骤380处作为更新的数据被写回相关的缓存线。在一个实施例中,这涉及原子更新操作处理机向缓存访问仲裁器210发布写入访问请求,以使得相关的缓存线被写入更新的数据。

如图4所指示的,在步骤370、375、380的执行期间,相关的缓存线可被缓存访问仲裁器210锁定以防止发生到可包括原子更新操作的原子性的该线的任何冲突访问。对于由加载/存储管道200直接请求的访问,缓存访问仲裁器通常将不要求具体的动作,这是由于通常情况下将检查存储缓冲条目(包括由原子更新操作处理器维护的条目)的内容以便检测是否存在覆盖将由加载/存储管道请求的访问的地址的任何未决请求,并且在该情况下访问将被暂停(或参考存储缓冲器内容被访问)。然而,存在由相关处理器核心外部的组件请求的某些访问,并且确实需要经由缓存访问仲裁器210来防止这些访问发生。一个示例是图1的监听电路155发布的监听请求,通常将被转发到缓存访问仲裁器210以便在缓存器中执行查找。通过在执行步骤370、375、380的期间锁定相关的缓存线,将防止在执行原子更新操作时处理试图访问该相关缓存线的监听请求。当缓存线跟随步骤380的完成随后被解锁时,监听请求可被处理。

若在步骤365处未在缓存中检测到命中,则在步骤385处确定是否BIU 240通过路径252已引起冒险。如前面讨论的,情况将是冒险监测器是否检测到存在对包括原子更新操作的指定地址的一系列地址的未决线填充操作。若BIU已引起冒险,则处理前进到步骤387,其中通过路径262等待部分线填充信息。当在步骤387处检测到部分线填充通知,则在步骤390处确定部分线填充通知是否与针对原子更新操作被要求的数据的部分有关。如前面讨论的,原子更新操作处理机可使用作为线填充通知的一部分被提供的地址信息来检测该情况。特别地,该地址信息将指定与通过路径244取回的数据部分相关联的地址的范围,然后可确定是否包括原子更新操作的指定地址。若不包括,则处理返回步骤387以等待下一部分线填充通知。

然而,一旦在步骤390处确定与部分线填充通知相关联的数据部分包括与原子更新操作有关的数据,则处理前进到步骤355,其中原子更新操作处理机向缓存访问仲裁器210重新发布其请求。此时将检测到命中(直接在级别1缓存阵列中,或在缓冲器211中),并因此处理将经由步骤370、375、380前进以便使得原子更新操作被执行。处理然后返回步骤350。

若在步骤385处未检测到冒险,这表示原子操作应通过路径232被输出用于经由BIU 240通过路径242转发,用于在较低级别的缓存层级处处理。因此,处理前进到步骤395,其中,原子更新操作处理机230向BIU 240发布信号以使得原子更新操作由较低级别的缓存层级处理。通常,这可使得操作作为远原子操作由较低级别的缓存器145中的一个处理。

在上面的示例布置中,部分线填充通知器260被布置为当每个数据部分通过路径244被接收并通过路径246被路由到缓存访问仲裁器210中时发布部分线填充通知,在替代实施例中,关于数据部分是否与原子更新操作的感兴趣的地址有关的分析可在BIU中被执行。在该情况下,一旦确定已被取回的数据部分包括原子更新操作的感兴趣的数据,部分线填充通知器260将仅需要通过路径262向原子更新操作处理机发布部分线填充通知。当考虑图4的处理时,将移除决策步骤390作为原子更新操作处理机的操作的一部分。替代地,基于与路径262上的部分线填充通知相关联的槽信息,相关的原子更新操作可被标识,然后处理返回步骤355。

图5A是根据一个实施例示出了可在原子更新操作处理机230中被提供的组件的框图。控制电路400用于控制独立的原子更新操作的整体操作和处理。当每个原子更新操作通过路径202从加载/存储管道被接收时,被分配到缓冲器405的一个槽中。任意数目的已知技术可用于决定执行包含在缓冲器的各个槽中的操作的顺序。例如,在一个实施例中,系统可被约束为确保原子操作必须以其原始程序顺序来完成。然而,在替代实施例中,在不存在潜在的排序约束的情况下,系统可允许操作被重新排序(例如,若两个原子操作正在访问同一地址,或在两个原子操作之间存在被插入的障碍,将迫使它们按顺序被执行)。一旦控制电路已决定处理具体的原子更新操作,则向缓存访问仲裁器210发送缓存访问请求并等待指示缓存器中是否已检测到命中或未命中的响应。当所要求的数据经由缓存访问仲裁器被取回时,所要求的更新操作将由原子更新操作处理器中的适当组件执行。在一个实施例中,算术逻辑单元(ALU)410被提供用于执行可能被原子更新操作要求的各种算术逻辑运算。通常这些运算将涉及对从缓存线取回的数据结合被提供作为原子更新操作的一部分的一个或多个其他值执行某些操作。例如,加法运算可被标识,其中原子更新操作指定的值被与从缓存器取回的值相加以便生成结果数据值用于存储回缓存器。当结果数据是可用的时,可经由向缓存访问仲裁器210发布适当的控制信号来被写回相关的缓存线中。

如图5A所示,通过路径252的冒险控制信号以及通知通过路径262的部分线填充通知也被路由到控制电路400。因此,在冒险控制信号252使得具体原子更新操作被延迟的情况下,当指定该被延迟的原子更新操作的槽数目的每个部分线填充通知通过路径262被接收时,可使用部分线填充通知中的剩余信息来执行分析,以确定与部分线填充通知有关的相关联数据部分是否包括作为原子更新操作的主题的数据。如前面讨论的,为了使能此分析,部分线填充通知可包括地址部分标识符(在图5A中被标注为“部分Y”),并且基于该地址信息,然后可确定相应的数据部分是否包括原子更新操作的指定地址处的数据。若包括,原子更新操作可被重新开始。

图5B示意性地示出了可被维护在缓冲器405的槽中的信息。在每个槽415中,地址部分420将被提供以提供与原子更新操作有关的地址的指示。在一个实施例中,该地址字段将包括物理地址,但在缓冲器被虚拟索引并被物理标记的一个具体实施例中,地址部分可额外地包括所要求的若干虚拟地址位,以便确定到缓存器的适当的索引。数据字段425被提供还用于存储与原子更新操作有关的任意相关数据,例如,将结合从缓存线取回的数据被使用以便执行更新操作的数据。此外,每个槽可包括指示相关联的原子更新操作的状态的各种状态位430。

在一个实施例中,原子更新操作处理机230可实际上被合并在存储缓冲电路中,在该情况下缓冲器405还可用于存储标准存储操作。对于存储操作,槽415将仍本质上提供相同的字段420、425、430,但在存储操作的情况下数据字段425用于保持将被存储在缓存线中的数据。

图6示出了之前参考图2讨论的实施例的替代实施例,其中,转发路径440还被提供以使得独立的线填充操作的数据部分将被直接转发到原子更新操作处理机230。该数据路径通常还将伴随由部分线填充通知器260生成的并指定与该数据部分相关联的地址的边带信息,以及原子更新操作处理机中包含由于相关未决线填充操作而已被暂停的原子更新操作的槽。

该实施例由于需要提供转发路径440而添加了某些成本和复杂度,它确实使得原子更新操作处理机能被直接提供数据,因此避免了需要向缓存访问仲裁器重新发布访问请求。

这参考图7被示意性地示出,图7是图4的流程图的替代版本。在图6和7中,与之前参考图2和4讨论的组件/步骤相同的组件/步骤使用相同的参考标号被标记,并且此处不再讨论。

从图7和图4的比较可以看出,图4的步骤387被替换为图7的步骤450,其中确定部分线填充数据是否已被接收。使用相关联的边带信息,然后可在步骤390处确定通过转发路径接收的数据部分是否包括原子更新操作所要求的数据。若包括,则处理可高效地直接前进到步骤375以执行更新操作,然后在步骤380处使用相关的缓存数据向缓存线执行写回操作。然而,尽管单独的访问请求在执行步骤375和380之前不需要被发布到缓存访问仲裁器210,在一个实施例中,控制信号仍被发布到缓存访问仲裁器以通知缓存访问仲裁器相关的原子更新操作已被重新开始,以便缓存访问仲裁器在原子更新操作正在进行时可以锁定相关的缓存线。

在图6的部分线填充数据通过路径440被直接转发的实施例中,该方法还可用于下列情况:不同于将数据本地缓冲在缓存访问仲裁器的缓冲器211中,BIU 240将线填充的各个数据部分缓冲在缓冲器241中,并且仅当所有数据是可用的时,然后请求缓存访问仲裁器210来将缓存线的数据存储在缓存器中。原子更新操作处理机230仍可经由转发路径440被通知BIU 240中数据的存在,尽管该数据尚未被转发到缓存访问仲裁器。当到达步骤380并且数据正在被写回受影响的缓存线时,若该受影响的缓存线的数据尚未从缓冲器241被转发到缓存访问仲裁器210,则BIU 240被通知原子更新操作处理机关于具体的数据块已执行写入,并且该数据块在BIU缓冲器241中被清除。这确保当BIU缓冲器内容被随后发布到缓存访问仲裁器210以使得写入缓存线时,该写入将不会覆盖原子更新操作处理器已写入缓存器中的写入数据。

图8是示出了图6的原子更新操作处理器230中提供的组件的框图。从与之前讨论的图5A的比较将看出的是,原子更新操作处理机本质上未改变。然而,控制电路400现在通过路径440接收部分线填充数据,以及通过路径442接收其他边带信息。在一个实施例中,该边带信息可标识缓冲器405中的槽,以及与通过路径440提供的部分线填充数据相关联的地址部分。

上述实施例中使用的缓存结构可采取各种形式。在一个实施例中,服从近原子操作的缓存结构可采取如图9所示的虚拟索引、物理标记的数据缓存器的形式。缓存器中的每个缓存条目由标签阵列550的一个中的标签条目570以及相应数据阵列560中的数据值的相应缓存线575形成。标签阵列550使用指定虚拟地址510的索引部分520被访问,以便从每个标签阵列标识一个标签条目,标签阵列被提供用于每种方式的缓存器。被访问的标签条目的组被称为集合,如图9中的参考标号555所示。

将理解的是,到标签阵列550的初始访问可在虚拟地址向物理地址的转换之前被执行,这是由于仅来自虚拟地址510的索引部分520被要求。然而,在虚拟索引、物理标记的缓存器中,保持在每个标签条目570中的标签位实际上是物理地址位,并因此物理地址将被要求以便检测缓存器中是否已发生命中或未命中。因此,并行于标签阵列550中的初始查找,转换后备缓冲器(TLB)530可被访问以便生成物理地址535,并因此需要与标签位进行比较的物理地址的相关标签部分540可从标签阵列被访问。如图9中示意性地示出的,每个标签条目可额外地包括某些状态位,例如,指示数据的相关联的缓存线是否存储有效数据的有效位、以及指示数据是否重写(即,比存储在存储器中的数据更新)的重写标志位(dirty bit)。当使用虚拟地址索引520访问标签阵列时,各个标签位将被输出用于任意有效条目,如参考标号585示意性地示出的。这些标签位然后可通过比较方框580与物理地址标签部分540进行比较。在检测到匹配的情况下,命中情况被指示,标识着作为访问请求的主题的数据被存储在数据阵列560中。

对于加载操作,数据阵列560可并行于标签阵列查找被访问,以便访问集合中的各个缓存线,由参考标号565指示。缓存线中的数据然后可被输出,如参考标号590指示,以便在命中的情况下选择电路595然后可选择与引起命中的标签条目相对应的缓存线,来自虚拟地址的偏移位522用于将具体数据值标识为访问的主题。该数据值然后可与虚拟地址从缓存器被输出回发布访问请求的处理电路。将理解的是,存在访问命中缓存线中具体所请求数据值的若干方式,例如,一系列复用器可用于标识将要访问的所请求数据值。

在存储访问请求是可缓存的情况下,数据阵列不并行于标签阵列访问被访问,而是物理地址首先被计算,然后一旦处理电路中的加载/存储管道已确定存储操作可被提交(即,将被写入存储器的写入数据现在可安全地写出到存储器),存储访问请求的条目在存储缓冲器中被替换。一旦写入访问请求与物理地址一起已被存储在存储缓冲器中,则可在标签阵列中执行查找,并且在命中的情况下,指定的写入数据可用于更新缓存器中的相关缓存线。这在互斥写入的情况下可直接发生,其中可确保数据不被另一核心共享。在非互斥写入的情况下,即使在缓存器中存在命中,访问被看作未命中,以便引起外部监听电路使可被保持在其他缓存器中的任意其他数据备份无效,随后数据可被写入缓存器。

如之前提到的,所描述的实施例中使用的原子更新操作还以与存储操作类似的方式被处理,这是由于,当确定是近原子时,它们将涉及关于缓存线将存储操作作为其操作的一部分。

从上述实施例,将理解的是,这类实施例使得近原子更新操作被更有效地处理。特别地,当近原子更新操作由于未决线填充操作而被暂停时,由于上述机制,早于否则等待线填充操作的完成而可能出现的情况来重新开始该原子更新操作的执行是可能的。这在缓存线长度超过缓存线的各个数据部分借以从较低级别的缓存层级被返回的数据宽度的情况下是特别有益的,因为在那些情况下,线填充操作的执行可要求大量时间来完成。

所描述实施例的技术可被应用的原子更新操作可采取各种各样的不同形式。例如,可涉及读取-修改-写入类型操作,其中,数据值从缓存线被读取,算术逻辑运算被应用于从缓存线读取的数据(通常通过将其与原子更新操作指定的其他数据合并),以及然后结果数据被写回相关的缓存线。算术逻辑运算可采取各种形式,例如,添、减等。在其他实施例中,原子更新操作可再次从缓存线读取数据值,并然后执行某些操作以便产生结果。然而,该结果的某些分析然后可被执行以便确定是否需要更新缓存线内容,并因此根据结果的分析来有选择地执行写回缓存线。这类原子更新操作的示例将是比较和交换操作,其中,值从缓存器被读取并与原子更新操作指定的另一值进行比较,然后根据该比较的结果是否指示两个值是相等或不相等的,做出关于是否将值写回缓存器的决定。

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

尽管本发明的说明性的实施例参考附图在本文已被详细描述,将理解的是,本发明不被限制于那些精确的实施例,并且在不脱离如所附权利要求定义的本发明的范围和精神的情况下,本领域技术人员可在其中做出各种改变、添加以及修改。例如,在不脱离本发明的范围的情况下,可以对独立权利要求的特征与从属权利要求的特征进行各种组合。

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