用于促进高速缓存中的管线化读取
‑
修改
‑
写入支持的方法和设备
技术领域
1.本说明书大体上涉及计算机架构,并且更具体地说,涉及用于使用存储队列和数据转发促进1级数据高速缓存中的完全管线化读取
‑
修改
‑
写入支持的方法和设备。
背景技术:2.计算系统包含一或多个处理核心,用于通过存取存储在存储器中的数据来执行指令。但是,处理核心从存储器存取数据所花费的时间可能非常长。因此,大部分计算系统包含高速缓存,其存储来自存储器的一定量的数据(例如,通常小于存储器中的总数据量),这些数据将来有很高概率被处理核心存取。因此,当处理核心调用数据时,高速缓存可以比处理核心从存储器检索数据更快地向处理核心提供数据,从而提高计算系统的速度和效率。
附图说明
3.图1是结合本文中所描述的实例描述的实例计算系统。
4.图2是图1的实例计算系统的实例一级高速缓存的框图。
5.图3a
‑
3d示出图1的实例计算系统的一级高速缓存的实例电路实施方案。
6.图4a是图3a
‑
3d的主要高速缓存存储队列的实例电路实施方案。
7.图4b是结合图3a
‑
4a的主要高速缓存存储队列实施的实例数据转发逻辑的实例电路实施方案。
8.图4c是主要高速缓存存储队列和/或受害者高速缓存存储队列的额外实例电路实施方案。
9.图4d是图4a的合并电路的实例硬件实施方案。
10.图5示出图3a
‑
3d的一级高速缓存的实例基于受害者高速缓存的区段。
11.图6示出用于实施图3a
‑
3d和5的实例替代策略组件的实例第一表和实例第二表。
12.图7a示出包含受害者高速缓存存储队列和受害者存储区的实例经包封数据高速缓存系统。
13.图7b示出包含主要高速缓存存储队列和主存储区的另一实例经包封数据高速缓存系统。
14.图7c示出实例受害者高速缓存组结构。
15.图7d示出实例主要高速缓存组结构。
16.图7e示出实例统一高速缓存组结构。
17.图8a示出受害者高速缓存标签随机存取存储器的实例实施方案的示意性图示。
18.图8b示出图8a的受害者高速缓存标签随机存取存储器的实例实施方案的另一示意性图示。
19.图9a
‑
9b(统称为图9)示出实例指令服务工作流。
20.图10a
‑
1和10a
‑
2(统称为图10a)示出实例数据高速缓存系统。
21.图10b
‑
1和10b
‑
2(统称为图10b)示出第二实例数据高速缓存系统。
22.图11a是图3a
‑
3d的受害者高速缓存存储队列的实例电路实施方案。
23.图11b
‑
1和11b
‑
2(统称为图11b)是实例统一高速缓存存储队列的实例电路实施方案。
24.图12
‑
33是表示可经执行以实施图1
‑
3d的一级高速缓存的机器可读指令的流程图。
25.图34是经结构化以执行图3a
‑
3d的指令从而实施图1
‑
3d的一级高速缓存的实例处理平台的框图。
具体实施方式
26.这些图不是按比例绘制的。相反,可以在附图中放大层或区域的厚度。通常,贯穿附图和随附的书面描述将使用相同的附图标记来指代相同或相似的部分。如本专利中所用,声明任何部分(例如,层、膜、区、区域或板)以任何方式在另一部分上(例如,定位于其上、位于其上、安置在其上或形成于其上等),指示被参考的部分要么与另一部分接触,要么被参考的部分在另一部分上方且有一或多个中间部分位于它们之间。除非另外指示,否则连接参考(例如,附接、耦合、连接和接合)应被广义地解释并且可包含元件集合之间的中间部件和元件之间的相对移动。因此,连接参考不一定推断出两个元件是直接连接的并且彼此具有固定关系。声明任何部分与另一部分“接触”意味着这两个部分之间没有中间部分。尽管图中显示了具有清晰线条和边界的层和区域,但这些线条和/或边界中的一些或全部可以是理想化的。实际上,边界和/或线条可能是无法看到的、混合的和/或不规则的。
27.贯穿本说明书使用各种形式的术语“耦合”。这些术语可涵盖实现与本说明书的描述一致的功能关系的连接、通信或信号路径。例如,如果装置a生成信号以控制装置b执行动作,那么在第一实例装置中,a通过直接连接耦合到装置b,或者在第二实例装置中,a通过中间组件c耦合到装置b(如果中间组件c没有更改装置a和装置b之间的功能关系),从而使装置b由装置a通过装置a生成的控制信号来控制。
28.与本说明书一致,术语“配置成”描述一或多个有形非暂时性组件的结构和功能特性。例如,“配置成”执行功能的装置意味着所述装置具有被设计或专用于执行特定功能的特定配置。如果装置包含可被启用、激活或供电以执行特定功能的有形非暂时性组件,那么此类装置“配置成”执行所述特定功能。虽然术语“配置成”可涵盖为可配置的,但此术语不限于这种狭义的定义。因此,当用于描述装置时,术语“配置成”不要求所描述的装置在任何给定时间点都是可配置的。
29.此外,术语“实例”在本文中用于表示充当实例、说明等,并不一定是有利的。并且,虽然已经针对一或多个实施方案示出和描述了本描述,但是基于本说明书和附图,等效更改和修改将是显而易见的。所有这些修改和更改都完全受说明书支持,并且仅受所附权利要求的范围限制。特别是关于由上述组件(例如,元件、资源等)执行的各种功能,除非另外指示,否则用于描述这些组件的术语对应于执行所描述组件的指定功能的任何组件(例如,在功能上等效的组件),即使在结构上与所描述的结构不等效。此外,虽然描述的特定特征可能仅针对若干实施方案中的一个进行了描述,但是此类特征可以与其它实施方案的一或多个其它特征组合,只要对于任何给定或特定应用是需要的和有利的即可。
30.虽然本说明书包含许多细节,但这些细节不应被解释为对可能要求保护的范围的限制,而是对特定实施例可能特定的特征的描述。本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实施。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实施。此外,尽管上述特征可能被描述为以某些组合起作用,甚至在最初要求保护这样的组合,但在一些情况下,可以从组合中删除一或多个要求保护的组合,并且要求保护的组合可涉及子组合或子组合变体。
31.类似地,虽然以实例特定次序在附图中描绘了操作,但这并不要求以所示的实例特定次序或按顺序次序执行此类操作或者执行所有示出的操作来获得期望的结果,除非这样的次序在一项或多项权利要求中叙述。在某些情况下,多任务和并行处理可能是有利的。而且,上述实施例中各个系统组件的分离并不要求在所有实施例中都这样分离。
32.当识别可单独提及的多个元件或组件时,本文使用描述符“第一”、“第二”、“第三”等。除非根据其使用上下文另有说明或理解,否则此类描述符不赋予列表中的优先级、物理次序或排列或时间排序的任何含义,而仅用作标签,用于分别指代多个元件或组件以方便理解所描述的实例。在一些实例中,描述符“第一”可用于指代详细描述中的元件,而同一元件在权利要求中可用不同的描述符来指代,例如“第二”或“第三”。在此类情况下,使用此类描述符仅仅是为了方便指代多个元件或组件。
33.中央处理单元(cpu)是执行组成程序或工作负载的指令的电子电路系统。cpu可包含一或多个处理器核心,用于通过从主存储器(例如,经扩展存储器)存取数据来执行指令。因为从主存储器存取数据需要时间,所以所述一或多个处理器核心可从存储器获得数据并在本地将其存储在本地存储器(例如,数据高速缓存)中。本地存储器比主存储器更小更快。以此方式,处理器核心可在本地使用和/或操纵数据而不是与主存储器介接。因为读取和/或纠正数据的时延(例如,从存储器读取数据和/或将数据写入到存储器所需要的时间量)在存取高速缓存时较小,所以在高速缓存中存储来自经扩展存储器的数据增加了计算系统的速度和效率。
34.一些本地存储器装置(例如,高速缓存)包含一或多个受害者高速缓存。受害者高速缓存是包含在高速缓存中或连接到高速缓存的额外存储区。受害者高速缓存通过存储最近从对应高速缓存逐出的数据来改进(例如,减小)高速缓存未命中率,具体地说,减少冲突未命中。受害者高速缓存的添加可对高速缓存性能产生类似影响。在将受害者高速缓存添加到直接映射高速缓存的情况下,好处最为明显,因为直接映射高速缓存具有相对较高的冲突未命中率。
35.本文中所描述的一些实例包含改进的数据高速缓存和受害者高速缓存架构,其减少了总体高速缓存时延。在一些替代高速缓存设计中,受害者高速缓存位于高速缓存控制器的末端。当一个行被逐出高速缓存控制器之外(例如,经去除以为额外数据腾出空间)而不是去除数据线并将逐出的数据线一直发送到下一级高速缓存(例如,l2)进行存储时,受害者高速缓存保存被逐出的数据线(例如,受害者数据),直到由于容量或其它原因有理由将其逐出为止。在这种系统中,当对应高速缓存(例如,l1高速缓存)中发生后续未命中时,受害者高速缓存可以为未命中提供服务并将行返回到对应高速缓存,从而返回到请求处理器核心,从而减少读取未命中时延。然而,因为一些实例系统包含与主要高速缓存串联的受害者高速缓存,所以受害者高速缓存必须等待主要高速缓存确定主要高速缓存没有对应于
来自cpu的存储器操作(在本文中也被称为存储器指令、存储器请求和/或存储器事务(例如,读取操作、指令、请求和/或事务、写操作、指令、请求和/或事务、读取
‑
修改
‑
写入操作、指令、请求和/或事务、原子操作、指令和/或事务、直方图操作、指令、请求和/或事务等)的数据,然后受害者高速缓存可以确定存储器地址是否存储在受害者高速缓存中。本文中所描述的实例包含高速缓存系统,其减少时延(例如,提高速度)、减少执行写入操作、原子操作(例如,操纵存储在某一位置的数据以增加、减少、与其它数据交换等)和/或直方图操作(例如,确定高速缓存线中每个值的总数)的循环数,和/或提高包含高速缓存的计算系统的效率。
36.图1示出实例计算系统100。实例计算系统100包含实例cpu 102、实例处理核心104a
‑
104n、实例经扩展存储器106和实例数据高速缓存108。实例数据高速缓存108包含实例一级(l1)高速缓存110、实例二级(l2)高速缓存112和实例三级(l3)高速缓存114。尽管图1的实例计算系统100包含n个处理核心和三个高速缓存层级,但是实例计算系统100可包含任何数目个处理核心和/或高速缓存层级。并且,计算系统100中的一或多个实例组件可以实施于相同芯片和/或不同芯片中的相同裸片和/或不同裸片上。
37.图1的实例cpu 102包含实例处理核心104a
‑
104n。处理核心104a
‑
104n可并入于相同裸片或单独的裸片(例如,经由一或多个接口连接)中。cpu 102经由一或多个接口连接到实例数据高速缓存108。例如,实例cpu 102的实例核心104a可经由标量接口(例如,64位宽的双向和/或单向接口)和/或向量接口(例如,512位宽的接口)连接到数据高速缓存108。标量接口和向量接口的使用可基于接口利用率、数据大小和/或其它考虑因素。例如,标量读取操作可经由标量数据传输,而对应于标量读取的数据可通过向量接口传输。并且,标量接口和/或向量接口均可在另一接口繁忙的情况下使用。在一些实例中,cpu 102可使用不同数目和/或不同类型的接口连接到数据高速缓存108。
38.图1的处理核心104a
‑
104n从实例经扩展存储器106和/或实例高速缓存108存取数据,以执行存储在实例经扩展存储器106和/或实例数据高速缓存108中的指令。实例核心104a
‑
104n可同时执行不同过程以加快计算系统100的任务(例如,指令)的执行。例如,核心104a
‑
104n可通过向经扩展存储器106和/或数据高速缓存108写入数据和/或从其读取数据来执行来自应用程序的工作负载的指令。因为数据高速缓存108包含存储在实例经扩展存储器106中的一些数据的副本,所以当一个实例核心104a需要从经扩展存储器106存取(例如,读取和/或写入)数据时,实例核心104a向实例数据高速缓存108传输读取和/或写入指令。如下文进一步描述,如果数据高速缓存108包含对应于来自核心104a的指令的数据(例如,对应于高速缓存命中),那么数据高速缓存108履行来自处理核心104a的请求和/或指令。如果数据高速缓存108不包含对应于来自核心104a的指令的数据(例如,对应于高速缓存未命中),那么数据高速缓存108与实例经扩展存储器106介接以执行来自核心104a的事务。
39.图1的实例经扩展存储器106经由接口(例如,1024位宽的经扩展存储器接口)连接到实例数据高速缓存108。但是,可以另外或替代地使用不同数目和/或不同类型的接口。实例经扩展存储器106存储计算系统100可以存取的所有数据。实例经扩展存储器106可以并入到计算系统100中,和/或可以是计算系统100外部的存储器(例如,片外存储器)。在一些实例中,经扩展存储器108与最高高速缓存(例如,实例l3高速缓存114)的控制器交互,并且
最高高速缓存(例如,l3高速缓存114)与次高高速缓存(例如,实例l2高速缓存112)交互,以此类推。在此类实例中,cpu 102向实例l1高速缓存110传输存储器操作,并且如果所述存储器操作无法由l1高速缓存110服务,那么l1高速缓存110将存储器操作传输到l2高速缓存112,以此类推。在图1的实例中,如果l3高速缓存114(例如,最高级高速缓存)无法执行读取或写入事务(例如,因为存储器地址不位于l3高速缓存114的本地存储区中),那么l3高速缓存114与经扩展存储器106交互以将对应数据读取或写入到存储器地址。经扩展存储器106可以是片上或片外存储器(例如,ddr),并且到经扩展存储器的接口可以是2
n
位,其中n取决于所使用经扩展存储器的类型。在一些实例中,在任一数据高速缓存中可存在预取器和/或预负载机制,可以在执行问题之前从实例经扩展存储器106拉动数据,以在cpu 102执行任何指令之前在本地存储于高速缓存处,存储器106向实例数据高速缓存108提供存储于存储器中的数据副本。数据高速缓存108可定期、不定期和/或基于触发、基于来自cpu 102的指令而请求额外信息和/或指示经扩展存储器106调整经扩展存储器106中所存储的数据。
40.图1的实例数据高速缓存108存储来自实例经扩展存储器106的数据块(例如,存储在经扩展存储器106中的数据的经高速缓存子集),以减少实例cpu 102存取经高速缓存子集所需要的时间,由此提高系统性能。为了获得最佳性能,试图使数据高速缓存108中的数据对应于cpu 102最可能使用的数据。在高速缓存命中期间当被cpu 102请求时(例如,当所请求数据存储在数据高速缓存108中时),数据高速缓存108提供对经高速缓存数据的存取。如果cpu 102请求不包含在数据高速缓存108中的数据(例如,高速缓存未命中),那么数据高速缓存108从经扩展存储器106检索对应数据。例如,如果cpu 102传输读取操作以对应于经扩展存储器106的特定地址,那么数据高速缓存108确定对应于经扩展存储器106的特定地址的数据是否高速缓存于数据高速缓存108中。如果数据高速缓存108确定数据经高速缓存,那么数据高速缓存108向cpu 102提供数据供读取。如果数据高速缓存108确定数据未经高速缓存,那么数据高速缓存108从经扩展存储器106获得数据并将数据返回到cpu 102。并且,实例数据高速缓存108可基于高速缓存未命中而更新经高速缓存数据(例如,从而减少未来的高速缓存未命中)。对于来自cpu 102的写入事务,实例数据高速缓存108可临时存储对应数据,然后提供对应数据以更新存储在经扩展存储器106中的更早数据。
41.实例数据高速缓存108包含实例l1高速缓存110、实例l2高速缓存112和实例l3高速缓存114。高速缓存的层级可基于速度和/或大小。例如,实例l1高速缓存110可以是最快最小的高速缓存,后面是l2 112(例如,比l1 110更慢也更大)和l3 114(例如,比l2 112更慢也更大)。最常使用的数据经常存储在l1 110中,然后是l2 112和l3 114。因此,当cpu 102需要要进行写入或读取的地址时,来自cpu 102的指令首先发送到l1高速缓存110,并且如果对应数据不存储在l1高速缓存110中,那么指令发送到l2高速缓存112。如果对应数据不存储在l2高速缓存112中,那么指令发送到l3高速缓存114。如果对应数据不存储在l3高速缓存114中,那么实例数据高速缓存108从经扩展存储器106存取数据。
42.如下文进一步描述,图1的实例l1高速缓存110包含主要高速缓存和受害者高速缓存,用于并行执行来自cpu 102的指令。受害者高速缓存存储受害者数据(例如,从主要高速缓存逐出以便为对应于经扩展存储器106的其它地址位置的新数据腾出空间的数据)。以此方式,当在l1层级处存在高速缓存未命中时,主要l1高速缓存逐出第一组数据(例如,受害者数据),为对应于引起高速缓存未命中的事务的第二组数据腾出空间。然后,受害者高速
缓存存储从主要高速缓存去除以在主要高速缓存中为第二组数据腾出空间的第一组数据。
43.图2是图1的l1高速缓存110的实例框图。实例l1高速缓存110包含实例cpu接口202、实例标签随机存取存储器(ram)存取204、206、实例标签ram 208、210、实例主要高速缓存存储队列212、实例主存储区214(也称为主要高速缓存存储区或主要高速缓存)、实例受害者高速缓存存储队列216、实例受害者存储区218(也称为受害者高速缓存存储区或受害者高速缓存)、实例高速缓存控制器220、实例主要高速缓存控制器222、实例受害者高速缓存控制器224和实例l2接口228。
44.实例cpu接口202将cpu 102(例如,cpu 102的核心104a
‑
104n)连接到l1高速缓存110的组件。cpu接口202连接到标签ram存取204、206和高速缓存控制器220。实例cpu接口202从实例cpu 102的实例核心104a
‑
104n接收指令。指令可包含读取指令、写入指令、读取
‑
修改
‑
写入指令、原子指令等。当cpu接口202获得对应于存储在特定地址处的特定数据的指令时,cpu接口202与高速缓存控制器220和主要标签ram存取204介接,以确定对应数据是否存储在主存储区214和/或受害者存储区218中以执行事务。并且,对于一些类型的事务(例如,读取事务),实例cpu接口202将对应数据返回到实例cpu 102。此外,当cpu接口202获得对应于特定地址处的数据的指令时,主要组件(例如,实例主要标签ram存取204、实例标签ram 208、实例主要高速缓存存储队列212、实例主存储区214和实例主要高速缓存控制器222)和受害者组件(例如,实例标签ram存取206、实例标签ram 210、实例受害者高速缓存存储队列216、实例受害者存储区218和实例受害者高速缓存控制器224)并行(例如,同时)操作,以确定来自对应地址的数据是否存储在主存储区214和/或受害者存储区218中。
45.图1的实例主要标签ram存取204耦合到标签ram 208和高速缓存控制器220。受害者标签ram存取206耦合到标签ram 210和高速缓存控制器220。主要标签ram存取204存取标签ram 208,以确定对应于来自cpu 102的指令的来自存储器地址的数据是否存在于主存储区214中。与主要标签ram存取204并行,实例受害者标签ram存取206存取标签ram 210,以确定对应于来自cpu 102的指令的来自存储器地址的数据是否存在于受害者存储区218中。在一些实例中,主要标签ram存取204在标签ram 208中实施,且受害者标签ram存取206在标签ram 210中实施。当主要标签ram存取204和/或受害者标签ram存取206确定对应于来自cpu 102的指令的地址存在于相应标签ram 208、210中时,主要标签ram存取204和/或受害者标签ram存取206将结果(例如,确定和/或任何对应数据)传输到实例高速缓存控制器220。
46.在一些实例中,主存储区直接映射。因此,在此类实例中,特定cpu存储器地址可能仅存储在主存储区214的特定位置处。因此,针对cpu指令,实例标签ram 208可潜在地具有固定存储器地址。在直接映射的高速缓存中,给定地址存储在标签ram 208的特定位置处。
47.图2的实例标签ram 208耦合到实例高速缓存控制器220和实例主存储区214。实例标签ram 208存储记录实例主存储区214中对应于经扩展存储器106中的存储器地址的条目的表。以此方式,实例主要标签ram存取204可检查表,以确定对应于来自cpu 102的指令的数据在主存储区214中是否可用。实例标签ram 210耦合到实例高速缓存控制器220和实例受害者存储区218。实例标签ram 210存储记录实例受害者存储区218中的条目的表。以此方式,实例受害者标签ram存取206可检查表,以确定对应于来自cpu 102的指令的数据在受害者存储区218中是否可用。当主存储区214的数据更新时,实例标签ram 208可更新表,以反映条目的任何变化。例如,如果主存储区214去除对应于经扩展存储器106中的第一存储器
地址的第一组数据并将其替换为对应于经扩展存储器106中的第二存储器地址的第二组数据,那么实例标签ram 208更新表,以反映第一存储器地址的第一组数据不再存储在主存储区214中,且第二存储器地址的第二组数据现在存储在主存储区214中。同样地,当来自受害者存储区218的第一地址位置的数据变为来自第二地址位置的数据时,实例标签ram 210可更新表,以反映条目的任何变化。
48.实例受害者侧标签ram 210可以是内容可寻址存储器(cam)。在一些实例中,受害者存储区218是完全关联的(例如,受害者存储区218的任何位置都可用于存储来自任何cpu地址的数据)。因此,当实例cpu 102向实例l1高速缓存110提供存储器地址时,实例受害者标签ram 210比较所提供的存储器地址与标签ram 210的所有条目。如果所提供的地址和存储在标签ram 210中的条目之间匹配,那么受害者存储区218中的对应位置的地址由标签ram 210输出。地址用于从受害者存储区218获得对应于cpu指令的数据。
49.图2的实例主要高速缓存存储队列212耦合到实例主存储区214和实例高速缓存控制器220。当cpu 104发出存储操作(例如,写入操作、原子比较和交换、原子操作等)时,使用实例主要高速缓存存储队列212。实例主要高速缓存存储队列212可实施读取
‑
修改
‑
写入功能。读取
‑
修改
‑
写入功能包含在本地存储区中存储数据,出于包含更新错误校正码数据的原因,本地存储区需要首先读取已经存在于主存储区214中的所写入数据的早期版本。以此方式,当正在执行读取操作以从主存储区214获得更早数据的副本时,包含在来自cpu 102的读取
‑
修改
‑
写入事务的写入部分中的新位在主要高速缓存存储队列212中缓冲。当更早数据可用时,仅cpu 102正在覆写的新位在存储队列缓冲器中更新,且经更新(例如,经合并)数据被写回到主存储区214。例如,来自读取
‑
修改
‑
写入事务(例如,来自cpu 102)的写入部分的cpu 102正在覆写的新位(包含对应存储器地址)在主要高速缓存存储队列212中缓冲,直到对应写入(例如,存储)指令的旧数据从主存储区214读取为止。当包含在读取
‑
修改
‑
写入事务的写入部分中的新位与来自主存储区214的旧数据合并时,经更新(例如,经合并)数据被写回到主存储区214中。用于由主要高速缓存存储队列212提供的存储指令的额外管线化使得来自cpu 104的指令能够在先前存储指令正在等待来自主存储区214的负载数据变得可用时继续执行。在一些实例中,主存储区214包含sram,如下文结合部分5和16进一步描述。实例主要高速缓存存储队列212如下文结合图3a、3b和4进一步描述。
50.图2的实例受害者高速缓存存储队列216耦合到实例受害者存储区218和实例高速缓存控制器220。实例受害者高速缓存存储队列216缓冲要存储在实例受害者存储区218中的数据。例如,来自存储指令(例如,来自高速缓存控制器220)的包含对应存储器地址和/或存储数据的受害者值在受害者高速缓存存储队列216中缓冲,直到对应存储指令的先前或旧值从受害者存储区218读取为止。当所存储字节与来自受害者存储区218的先前/旧数据合并时,值写回到受害者存储区218中。尽管受害者高速缓存存储队列216可处理响应于注销点满足(例如,当一或多个高速缓存线从l1高速缓存110去除到l2高速缓存112时)而传输的来自高速缓存控制器220的读取修改和/或写入操作,但是在本文中所描述的其它实例中,受害者高速缓存存储队列216可处理直接从cpu 102传输的来自高速缓存控制器220的读取、修改和/或写入操作。实例受害者高速缓存存储队列216如下文进一步描述。
51.图2的实例主存储区214耦合到实例标签ram 208、实例主要高速缓存存储队列212和实例高速缓存控制器220。实例主存储区214存储对应于经扩展存储器106中的存储器地
址位置的数据的数据(例如,条目)。主存储区214存储有很高概率被实例cpu 102号召的数据。所存储数据可在例如cpu 102尝试存取(例如,读取、写入等)未高速缓存于实例主存储区214中的数据时更新。实例主存储区214可以是或包含静态ram(sram)和/或任何其它类型的提供对所存储数据的单个循环存取的存储区。
52.图2的实例受害者存储区218耦合到实例标签ram 210、实例受害者高速缓存存储队列216和实例高速缓存控制器220。实例受害者存储区218存储对应于已从实例主存储区214去除以为来自cpu 102最近存取或更可能存取的其它地址位置的数据腾出空间的存储器地址位置的数据(例如,条目)。实例受害者存储区218可以是或包含寄存器堆、静态ram(sram)和/或任何其它类型的存储区。
53.在操作中,初始地,实例主存储区214基于使用可能性而存储来自实例经扩展存储器106中的不同地址的数据。如果实例cpu 102发送对应于存储在主存储区214中的存储器地址的指令,那么实例高速缓存控制器220控制组件执行事务。例如,高速缓存控制器220可向主要高速缓存存储队列212传输指令以用于主存储区214中的后续处理和存储。如果实例cpu 102发送对应于未存储在主存储区中(例如,存储在受害者存储区218中)的存储器地址的指令,那么实例主存储区214可在从另一存储区检索到数据之后在对应存储器地址处存储数据。主存储区214去除对应于一或多个存储器地址位置的一些数据以为数据腾出空间。经去除数据和对应存储器地址位置称为受害者或逐出线。选择称为受害者的数据是根据替代策略基于各个参数。在从主存储区214去除之后,受害者存储在实例受害者存储区218中。如果受害者存储区218全满,那么受害者存储区218去除数据(例如,第二受害者),以便腾出空间存储来自主存储区214的受害者。在第二受害者从受害者存储区218去除之后,第二受害者被传输到l2高速缓存112用于存储。
54.尽管图1的实例l1高速缓存110包含具有对应主存储区214的一个主要高速缓存存储队列212和具有对应受害者存储区218的一个实例受害者高速缓存存储队列216,但是实例主要高速缓存存储队列212和/或实例受害者高速缓存存储队列216可包含对应于多个存储区的多个存储队列。例如,主存储区214和/或受害者存储区218可以划分成多个可独立寻址的组(例如,具有任何数目个线宽、行等等的任何数目个存储装置),其中各个组可具有其自身的对应存储队列。例如,由256个行(每个行具有1024位的线宽)组成的主存储区214可以划分成16个主存储区(例如,组),特定组中每行64个位,其中每个组可具有它们自身的主要存储队列。在此实例中,如果命中l1高速缓存110的读取和/或写入请求的向量数据是512位宽,那么高速缓存控制器220可将请求处理为到所述8个组的8个并行写入和/或读取。在此类多组设置中,读取和/或写入操作可并行发送到组,并且所述组响应于读取和/或写入操作而仲裁它们自身的过程。通过独立操作,多组方法的操作比单个主存储区更高效(例如,因为当接收到请求时不会将整个全部高速缓存线锁定,并且高速缓存线仅有分配给接收到此类请求的组的部分会被锁定),但是会变复杂和/或零件更多。
55.图2的实例高速缓存控制器220耦合到l1的组件,以控制数据如何在实例存储区214、216中读取和/或写入和/或数据如何在实例存储区214、218中更新。例如,当在实例cpu接口202处接收到读取请求、写入请求、原子请求、读取
‑
修改
‑
写入请求等等时,高速缓存控制器220获得请求并相应地指示其它组件。例如,在针对经扩展存储器106的特定位置处的数据的读取请求期间,实例高速缓存控制器220指示主要标签ram存取204存取标签ram 208
以确定主存储区214是否正在存储来自读取请求的对应于经扩展存储器106的位置的数据。如果主要标签ram存取204确定条目位于主存储区214(例如,高速缓存命中)中,那么高速缓存控制器220基于标签ram 208中的数据确定所述特定条目的位置,并与主要高速缓存存储队列212介接以从实例主存储区214读取值并经由cpu接口202将值返回到cpu 102。实例高速缓存控制器220包含用于控制主要高速缓存组件(例如,实例主要标签ram存取204、实例标签ram 208、实例主要高速缓存存储队列212和实例主存储区214)的主要高速缓存控制器222,和用于与主要高速缓存控制器222控制主要高速缓存组件并行地控制受害者高速缓存组件(例如,实例受害者标签ram存取206、实例标签ram 210、实例受害者高速缓存存储队列216和实例受害者存储区218)的实例受害者高速缓存控制器224。在一些实例中,高速缓存控制器222、224可以是单独控制器,和/或组合在单个控制器中操作。
56.图2的实例高速缓存控制器220与实例l2接口228介接,以获得要存储在实例主存储区214中的数据(例如,初始地、在高速缓存未命中之后,等等)。并且,当写入新数据时(例如,当旧数据被覆写时)实例高速缓存控制器220可向l2高速缓存112传输对主存储区214和/或受害者存储区218的数据的更新,使得来自cpu 102的读取指令经由l2接口228传播到l2高速缓存112。实例高速缓存控制器220与实例l2接口228介接,以从l2高速缓存112和/或l3高速缓存114(例如,直接或经由l2高速缓存112)传输和/或接收数据。例如,当主存储区214和受害者存储区218不包含对应于来自cpu 102的指令的数据的存储器地址位置(例如,对应于高速缓存未命中)时,实例高速缓存控制器220经由l2接口228向实例l2高速缓存112传输指令。如果数据存储在l2高速缓存112或l3高速缓存114中,那么高速缓存控制器220可经由l2接口228从l2高速缓存112接收对应数据。在此实例中,高速缓存控制器220可在主存储区214中存储来自l2高速缓存112的对应信息。在一些实例中,当受害者存储区218必须去除特定位置的数据(例如,旧受害者)以为来自主存储区214的新受害者腾出空间时,实例高速缓存控制器220可经由l2接口228向l2高速缓存112传输旧受害者以存储在l2高速缓存中。
57.图3a
‑
3d示出图1的实例计算系统100的l1高速缓存110的实例电路实施方案。图3a
‑
3d的实例实施方案包含图2的实例cpu接口202、实例标签ram 208、210、实例主要高速缓存存储队列212、实例主存储区214、实例受害者高速缓存存储队列216、实例受害者存储区218和实例高速缓存控制器220。图3a
‑
3d的实例实施方案进一步包含实例修改、独占、共享、无效(mesi)ram 300、实例地址处理组件302a
‑
c、实例组处理逻辑303、实例命中/未命中比较逻辑304、306、实例替代策略组件308、实例清空引擎309、实例错误校正码(ecc)逻辑310、312、实例数据复用器(mux)电路314、316、实例mux 318、320和实例锁存器322。
58.在图3a
‑
3d的实例实施方案中,实例cpu接口202包含两个接口(例如,一个标量接口和一个向量,两个接口均具有两个部分,一个用于从cpu 102输入数据,一个用于输出数据到cpu 102)。图3a
‑
3d的输入cpu接口202包含用于缓冲来自cpu 102的传入数据的弹性缓冲器、用于在弹性缓冲器中存在未决cpu指令情况下的来自弹性缓冲器的经缓冲数据和弹性缓冲器队列为空情况下的直接来自cpu 102的指令之间进行选择的复用器,并且将传入指令分成对应地址、操作(例如,读取、写入等)和写入数据(例如,如果指令对应于写入操作)。图3a
‑
3d的输出cpu接口202将数据传输回到cpu 102。
59.图3a
‑
3d的实例主要高速缓存存储队列212包含对应于主要高速缓存存储队列212
的块。例如,主要高速缓存存储队列212包含实施读取
‑
修改
‑
写入操作、写入合并、写入数据转发、写入操作、完整校验块写入数据、加权直方图操作、负载和增加操作及比较和交换操作的块。实例主要高速缓存存储队列212如下文结合图4a进一步描述。实例主要高速缓存存储队列212结合实例主存储区214操作。在图3a
‑
3d的实例中,主存储区214是数据ram(dram)。
60.图3a
‑
3d的实例受害者高速缓存存储队列216包含对应于受害者高速缓存存储队列216的操作的块。例如,受害者高速缓存存储队列216包含实施读取
‑
修改
‑
写入操作、写入合并、写入数据转发、写入操作、完整校验块写入数据、负载和增加操作及比较和交换操作的块。实例受害者高速缓存存储队列216如下文结合图5进一步描述。实例受害者高速缓存存储队列216结合实例受害者存储区218操作。在图3a
‑
3d的实例中,主存储区214是寄存器堆。
61.图3a
‑
3d的实例mesi ram 300连接到实例cpu接口202的命令行和实例dram 214。实例mesi ram 300基于来自cpu 102的命令而跟踪实例主存储区214中的数据状态。例如,mesi ram 300通过将高速缓存线标记为修改、独占、共享或无效来跟踪高速缓存线的状态。修改或无效对应于高速缓存线含有不是存储在任何其它类似层级的高速缓存中的数据且数据已从主存储器中的值修改(例如,使得经扩展存储器106中的数据的读取被标记或准许,因为它不是最新或有效的)的情况。独占是高速缓存线含有不是存储在任何其它类似层级的高速缓存中的数据且数据干净(例如,匹配经扩展存储器106中的数据)的情况。共享指示高速缓存线含有可存储在其它高速缓存中且干净的数据(例如,行可被舍弃,因为它存在于另一高速缓存中)。无效指示高速缓存线无效或未使用。当更新主存储区214和/或经扩展存储器106时,可号召mesi ram 300。受害者高速缓存的实例mesi ram 300结合实例标签ram 210实施。
62.图3a
‑
3d的实例mesi ram 300通过跟踪、贴标签、标记等向系统添加一致性。存储器地址的状态可防止发生特定时间的数据写入,使得数据不匹配不会出现在不同层级的高速缓存。mesi ram 300所跟踪的状态可在高速缓存未命中的情况下传输,使得更高层级高速缓存理解存储器地址处的数据将用于什么。例如,如果l1高速缓存针对读取操作发出高速缓存未命中,那么高速缓存未命中包含共享状态,使得高层级高速缓存知晓数据将被读取但不被操纵。如果l1高速缓存110针对写入操作发出高速缓存未命中,那么高速缓存未命中包含独占状态,使得更高层级高速缓存知晓数据将被修改。当实例主存储区214和/或受害者存储区218逐出受害者时,来自实例mesi ram 300的状态可用于弄清楚如何逐出。例如,如果数据被共享,那么主存储区214和/或受害者存储区218可简单地舍弃(例如,因为存储器地址处的数据已经位于高高速缓存中)。如果数据被独占或被修改,那么高速缓存控制器220指示接口228将受害者传输到更高层级高速缓存(例如,因为存储器地址的数据不位于更高层级高速缓存中,或者位于更高层级高速缓存中但已过时)。
63.图3a
‑
3d的实例地址处理组件302a
‑
c连接到cpu接口202、实例主存储区214、实例主要高速缓存存储队列212(例如,经由mux 318)、实例受害者存储区218(例如,经由实例mux 320),且彼此连接。实例地址处理组件302a
‑
c包含实例第一地址处理组件302a、第二地址处理组件302b和第三地址处理组件302c。第一地址处理组件302a执行地址转译,第二地址处理组件302b执行数据旋转,第三地址处理组件302c促进组组织。替代地,第一地址处理
组件302a、第二地址处理组件302b和第三地址处理组件302c中的一或多个可包含在相同硬件、逻辑电路、集成芯片等等中。实例地址处理组件302a
‑
c根据特定存储协议组织要写入到实例主存储区214和受害者存储区218中的数据,确保数据被正确存储。例如,在多组实例(例如,其中主要高速缓存存储队列212、主存储区214、受害者高速缓存存储队列216和受害者存储区218分成多个组)中,地址处理组件302a
‑
c可使用来自cpu操作的存储器地址以确定主要高速缓存存储队列212、主存储区214、受害者高速缓存存储队列216和受害者存储区218中的哪一组分成给定cpu操作所需要的多个组。
64.实例组处理逻辑303耦合到cpu接口202、实例主存储区214、实例主要高速缓存存储队列212(例如,经由mux 318)和实例受害者存储区218(例如,经由实例mux 320)。在操作中,组处理逻辑303配置成分析来自cpu接口202的读取、修改和/或写入指令。以此方式,组处理逻辑303配置成确定读取、修改和/或写入指令的性质以促进高效的部分组读取、修改和/或写入指令。在本文中所描述的实例中,组处理逻辑303检测传入的写入指令是指示整个组的写入还是指示部分组的写入。以此方式,组处理逻辑303可指示在否定传输读取指令时是否操作读取
‑
修改
‑
写入操作。下文描述了组处理逻辑303操作的实例描述。
65.图3a
‑
3d的实例命中/未命中比较逻辑304连接到输入cpu接口202、标签ram 208、主存储区214、主要高速缓存存储队列212、高速缓存控制器220和/或实例mux电路314(例如,经由数据转发锁存器)。命中/未命中比较逻辑304获得来自标签ram 208的地址和来自cpu 102的指令的地址,并比较这两者(例如,使用异或非(xnor)逻辑)以确定来自指令的地址是命中还是未命中(例如,对应于地址的数据是否存储在实例dram 214中)。实例命中
‑
未命中比较逻辑304包含标签比较逻辑,用于将比较结果输出到实例主要高速缓存存储队列212、实例高速缓存控制器220和/或实例mux电路314。
66.图3a
‑
3d的实例命中/未命中比较逻辑306连接到输入cpu接口202、标签ram 210、受害者高速缓存存储队列216和/或实例替代策略组件308。命中/未命中比较逻辑306获得来自标签ram 210的受害者高速缓存的条目号(例如,位置)和来自cpu接口202的指令的地址,并比较这两者以确定存取(例如,来自cpu接口202的指令)是命中还是未命中(例如,对应于地址的数据是否存储在实例受害者存储区218中)。实例命中
‑
未命中比较逻辑306将结果输出到替代策略组件308、地址编码器326、复用器330和/或受害者高速缓存存储队列216。
67.图3a
‑
3d的地址编码器326连接到标签ram 210(经由命中/未命中比较逻辑306)和复用器330。地址编码器326将标签ram 210的地址编码成可被受害者存储区218解译的形式。例如,标签ram 210可存储16位存储器地址,而受害者存储区218存储对应于所述16位存储器地址的4位存储器地址。因此,地址编码器326可将所述16位存储器地址变换成4位存储器地址,以定位和/或进入受害者存储区218中的对应存储器地址。另外和/或替代地,地址编码器326将存储器地址编码成任何位值。地址编码器326耦合到实例复用器330,使得地址编码器326向复用器330提供经编码地址。
68.图3a
‑
3d的实例替代策略组件308连接到命中
‑
未命中比较逻辑306和替代地址编码器328。在一些实例中,替代策略组件308连接到标签ram 210。实例替代策略组件308控制存储在实例受害者存储区218中的数据(例如,所述数据在新受害者将存储在受害者存储区218中的情况下移动到受害者高速缓存之外)的替代策略。在一些实例中,实例主存储区214
可存在替代策略组件。但是,替代策略不需要经直接映射高速缓存(例如,如果实例主存储区214直接映射,因为特定地址只会出现在一个位置)。实例清空引擎(例如,清空引擎组件)309耦合到替代策略308。在一些实例中,清空引擎309以预定义周期使用和/或以其它方式调用以清空存储在受害者存储区218内部的写入未命中。
69.图3a
‑
3d的替代地址编码器328耦合到复用器330,使得替代地址编码器328向复用器330提供经编码替代地址。替代地址编码器328编码被替代策略组件308选定的地址。例如,替代策略组件308向替代地址编码器328输出16位替代存储器地址,并且替代地址编码器328将所述16位替代存储器地址变换成4位替代存储器地址。另外和/或替代地,替代地址编码器328将替代存储器地址编码成任何位值。
70.图3a
‑
3d的复用器330连接到命中/未命中比较逻辑306、地址编码器326、替代地址编码器328和地址读取332。复用器330基于命中/未命中比较逻辑306的结果(例如,基于存取是命中还是未命中)而选择经编码地址。复用器330向地址读取332提供选定存储器地址以读取到受害者存储区218中。例如,复用器330输出受害者存储区218的位置,cpu指令可用来从其读取数据或在写入指令的情况下用来存储数据。
71.图3a
‑
3d的实例错误校正码(ecc)逻辑310经由锁存器322连接到实例主存储区214,以及复用电路314。如果实例l1高速缓存110支持ecc存储器,那么实例主存储区214以块以及对应于块的一组ecc校验子位存储数据。当接收到读取操作时,实例主存储区214可向ecc逻辑310提供所存储的数据块和对应的ecc校验子位。实例ecc逻辑310可基于从主存储区214读取的数据块再生ecc校验子位,并比较再生的ecc校验子位与先前存储的位。实例ecc逻辑310可在存在差异时确定数据块被错误地读取,并且可校正数据块中的错误。
72.图3a
‑
3d的实例错误校正码(ecc)逻辑312经由锁存器324连接到实例受害者存储区218,以及mux电路316。实例ecc逻辑312以与实例ecc逻辑310类似的方式执行ecc校正逻辑。但是,实例ecc逻辑312相对于实例受害者存储区218执行ecc校验子位比较。
73.图3a
‑
3d的实例主要数据mux电路314连接到主要高速缓存存储队列212、ecc逻辑310、命中/未命中比较逻辑304的输出(例如,经由锁存器)、实例输出cpu接口202(例如,经由实例锁存器322)、实例受害者数据mux 316和实例高速缓存控制器220。实例主要数据mux电路314具有实例地址处理组件302a
‑
c的反向操作,以转换数据地址中的数据以传输到实例cpu 102。实例mux电路314内的mux由高速缓存控制器220经由相应选择输入控制。
74.图3a
‑
3d的实例受害者数据mux电路316连接到受害者高速缓存存储队列216、ecc逻辑312、实例主要数据mux电路314、l2高速缓存112(例如,经由锁存器)和实例高速缓存控制器220。实例主要数据mux电路314具有实例地址处理组件302a
‑
c的反向操作,以转换数据地址中的数据以传输到实例cpu 102。实例mux电路316内的mux由高速缓存控制器220经由相应选择输入控制。
75.图3a
‑
3d的实例mux 318连接到l2高速缓存112,经由锁存器连接到实例cpu接口202,并连接到地址处理组件302a
‑
c、主要高速缓存存储队列212、主存储区214和高速缓存控制器220。实例高速缓存控制器220控制mux 318,以控制数据可写入到实例主存储区214中或从其读取(例如,经由直接存储器存取(dma)、监听事务(例如,当l2高速缓存112想要来自l1高速缓存110的数据时)、主要高速缓存存储队列212、读取命中缓冲器等)的所有方式。实例mux 320连接到实例主存储区214(例如,经由用于存储受害者的逐出线)、地址处理组
件302a
‑
c(例如,经由写入流和/或cpu负载)、实例l2高速缓存112(例如,经由l2w和/或监听行)、受害者存储区218和/或高速缓存控制器220。实例高速缓存控制器220控制mux 320,以控制数据可写入到实例受害者存储区218中或从其读取(例如,经由直接存储器存取(dma)、监听事务、受害者高速缓存存储队列216、从实例主存储区214逐出、经由l2高速缓存112等)的所有方式。实例mux 318、320由实例高速缓存控制器220经由相应的选择输入控制。
76.图3a和3b的元件以一种表示事务处理流的方式布置。时间元素由级e1
‑
e5表示。每一级表示离散的时间周期,并且在一些实例中,每一级表示一个时钟循环或整数数目的时钟循环。
77.l1数据高速缓存中的写入未命中高速缓存
78.在操作中,实例cpu 102传输指令(例如,基于读取操作返回数据,将数据写入到特定存储器位置)。在实例cpu 102第一次请求特定存储器地址的数据时,如果存储器地址的数据不存储在主存储区214中,那么标签ram 208将输出读取未命中,并且l1高速缓存将发出读取未命中信息(例如,发送到l2高速缓存112、l3高速缓存114和/或经扩展存储器106)以供服务(例如,返回对应于来自cpu 102的请求的地址的数据)。接着,l1高速缓存110可以执行读取分配。读取分配是在l1高速缓存110在主存储区214中存储数据、更新标签ram 208等情况下执行,从而识别出地址的数据现在存储在主要数据存储区中。l1高速缓存110可将数据返回到cpu 102和/或等待cpu 102发送对相同地址的后续读取请求。如果cpu 102发出对相同地址的后续读取请求,那么标签ram 208将识别出地址的数据现在存在于主存储区214中,由此产生读取命中。如果cpu 102进行到相同地址的写入,那么标签ram 208将识别写入命中,因为地址存储在主存储区214中。对于写入命中,cpu 102将提供数据供写入,并且l1高速缓存110会将数据写入到主存储区214中与所述地址对应。
79.如果来自cpu 102的初始动作(或来自cpu 102的后续动作)导致写入未命中(例如,cpu 102尝试写入的存储器地址不存储在实例主存储区中),那么l1高速缓存110可执行写入未命中。在写入未命中期间,l1高速缓存110将写入未命中发送到更高层级高速缓存(例如,l2高速缓存112、l3高速缓存114等)和/或经扩展存储器106以从存储器地址检索数据,将数据存储在主存储区214中,然后将来自cpu 102的数据写入主存储区214中对应于存储器地址的位置处。
80.但是,当cpu 102执行写入操作时,通常不需要它立即写入的信息。因此,一些实例高速缓存系统包含写入缓冲器来存储来自cpu的写入指令,以防cpu停止(例如,通过在写入数据之前尝试从更高的高速缓存负载存储器地址)。以此方式,当l1高速缓存与更高层级高速缓存介接以获得缓冲器中对应于写入指令的存储器地址中的数据时,cpu可继续发送指令,并将数据存储在主存储区中并写入数据(例如,存储在写入缓冲器中),与来自cpu的后续指令并行。但是,cpu可针对每一写入指令仅写入几个字节,并且l1高速缓存和更高层级高速缓存和/或经扩展存储器之间的接口能够发送大量字节(例如,64字节带宽)。因此,在大字节接口上传输每循环几个字节效率很低。
81.在图3a
‑
3d的系统中,受害者存储区218的区段专用于写入未命中信息,而不是实施写入缓冲器。因此,实例受害者存储区218是受害者高速缓存和写入未命中缓冲器。受害者存储区的所述区段称为写入未命中高速缓存。在一些实例中,写入未命中高速缓存可以另外或替代地在主存储区214中实施。在一些实例中,写入未命中高速缓存是128字节的高
速缓存线。写入未命中高速缓存存储所有写入未命中数据,直到写入未命中高速缓存全满和/或可以发送到更高层级高速缓存和/或经扩展存储器的字节数目大于第一阈值为止。一旦写入未命中高速缓存全满或第一阈值量的写入未命中数据添加到写入未命中高速缓存中,受害者存储区218将写入未命中高速缓存中的第二阈值量的写入未命中数据组合成一个信号,所述信号发送到更高层级高速缓存(例如,经由实例l2接口228)以写入在存储于更高层级高速缓存(例如,l2高速缓存112)和/或经扩展存储器106的地址中。以此方式,接口的大部分或全部带宽可用于特定循环。第二阈值可与第一阈值相同或不同。并且,写入数据在本地存储于主存储区214或受害者存储区218中。因此,如果在写入操作被传递到更高的高速缓存(例如,l2高速缓存112、实例l3高速缓存114等)和/或经扩展存储器106之前从cpu 102发送额外读取或写入操作,那么高速缓存控制器220可读取和/或写入数据到写入未命中高速缓存内的对应地址,然后将其传输到更高层级高速缓存和/或经扩展存储器106。
82.在一些实例中,受害者存储区218中的写入未命中高速缓存的结构包含字节启用寄存器堆,其表示写入未命中信息的值字节(例如,要写入的字节)。例如,如果对应于写入存储器地址的第一字节和第三字节的数据的写入未命中存储在写入未命中高速缓存中,那么受害者存储区218结合存储器地址存储第一和第三字节的写入未命中数据,并且用对应于第一和第三字节的条目元素的第一值(例如,
‘1’
)和条目的其余元素的第二值(例如,
‘0’
)填充字节启用寄存器堆的相应条目。以此方式,当写入未命中数据发送到更高层级高速缓存时,条目的字节启用位包含在传输中,使得更高层级高速缓存知晓哪些数据有效(例如,要写入哪些字节)和哪些数据无效(例如,哪些字节不应写入)。
83.在某些情况下,如果读取或写入请求是主存储区214的命中,那么受害者存储区218的结果可被忽略。当主存储区214被配置为单向关联高速缓存时,多个数据路径的高速缓存请求冲突是直接的。一个数据路径是一或多个逻辑电路,其在执行和/或以其它方式调用时实行数据(例如,逻辑信号、位向量等)从来源到目的地的传输或递送。来自所述多个数据路径的高速缓存请求冲突对于受害者存储区218来说可能是个问题,因为受害者存储区218是完全关联的,并且可存储写入未命中条目以及高速缓存条目。两个数据路径的高速缓存请求冲突可以如以下实例中所描述的那样处理。值得注意的是,在以下实例中,高速缓存操作在特定数据路径的上下文中描述。但是,实例是关于特定高速缓存操作的组合,特定高速缓存操作在哪一数据路径上并不重要。
84.在第一实例中,第一数据路径存在高速缓存读取未命中,且第二数据路径存在高速缓存写入命中,其中具有两个不同的存储器地址。在受害者存储区218完全关联的某些情况下,高速缓存请求可转至受害者存储区218内的任何位置。参考图3a
‑
3d,针对受害者存储区218内的位置的地址生成以及受害者高速缓存标签ram 210中的地址查找在e2管线级中进行,因此针对受害者高速缓存内的位置的地址生成在已知高速缓存请求的地址是命中还是未命中之前执行。在控制器220确定主存储区214上存在读取未命中之后,对获得读取请求的存储器地址的请求发出至更高层级高速缓存或存储器。在主存储区214是单向关联的情况下,第一数据路径的读取请求的存储器地址映射到主存储区214中的单个位置。如果在所述单个位置中存在经高速缓存数据,那么将所述经高速缓存数据从主存储区214逐出到受害者存储区218,到达受害者存储区218内的预先生成的位置。如果此预先生成的位置与第二数据路径的高速缓存写入命中所在位置相同,那么冲突发生。此冲突可通过高速缓存
控制器220检测。如上文所指出,针对受害者存储区218内的位置的地址生成在知晓高速缓存请求的地址是命中还是未命中之前进行,因此在确定高速缓存写入是命中之前,存在针对受害者存储区218内的第二位置生成以用于第二数据路径的高速缓存写入的地址。基于检测到冲突,受害者高速缓存内的这个第二位置可用于存储通过读取未命中从主存储区214逐出的数据。
85.在另一实例中,第一数据路径可存在高速缓存读取未命中,且第二数据路径可存在高速缓存写入命中,如同第一实例。在此实例中,由于读取未命中,对获得读取请求的存储器地址的请求发出至更高层级高速缓存或存储器,且经高速缓存数据从主存储区214逐出到受害者存储区218,到达受害者存储区218内预先生成的位置,此处为位置a。在此实例中,第二数据路径的高速缓存写入同样命中受害者存储区218内的位置a,从而产生设定冲突。此类冲突的一个可能解决方案时从更高层级高速缓存或存储器直接将所请求读取未命中负载到受害者高速缓存的单独位置。冲突的另一解决方案是使高速缓存控制器220停止读取未命中,使得在第二数据路径到位置a的高速缓存写入完成且位置a被逐出到更高层级高速缓存或存储器之后,经高速缓存数据才逐出到受害者存储区218。在某些情况下,所述停止可在等待更高层级高速缓存或存储器返回读取未命中数据时进行。
86.作为另一实例,第一高速缓存写入可针对受害者存储区218在第一数据路径上接收,且第二高速缓存写入也针对受害者存储区218在第二数据路径上接收。如果第一高速缓存写入和第二高速缓存写入寻址到不同存储器地址,那么这两个高速缓存写入可并行进行到受害者存储区218。如果第一高速缓存写入和第二高速缓存写入都寻址到相同存储器地址且都是高速缓存未命中,那么受害者高速缓存控制器224分配经分配受害者高速缓存写入未命中存储器中的单个位置,并在受害者高速缓存存储队列216中合并第一高速缓存写入和第二高速缓存写入。接着,经合并数据可以连同经合并字节启用、优先级和颜色标签信息一起写入到受害者高速缓存写入未命中存储器。如果第一高速缓存写入和第二高速缓存写入都寻址到相同存储器地址且都是高速缓存命中,那么第一高速缓存写入和第二高速缓存写入合并到高速缓存中的命中位置。
87.作为另一实例,高速缓存读取可针对受害者存储区218在第一数据路径上接收,且高速缓存写入可针对受害者存储区218在第二数据路径上接收。在高速缓存读取是命中而高速缓存写入是对受害者存储区218中的不同位置的命中的情况下,高速缓存读取和高速缓存写入并行进行而不具有冲突。在高速缓存读取是命中而高速缓存写入是对受害者存储区218中的不同位置的未命中的情况下,高速缓存读取和高速缓存写入也并行进行而不具有冲突。在高速缓存读取是未命中而高速缓存写入是对受害者存储区218中的不同位置的命中的情况下,高速缓存读取可使用针对受害者存储区218内的位置生成以用于高速缓存写入的地址,如上文所描述。在高速缓存读取是未命中而高速缓存写入是对受害者存储区218中的不同位置的未命中的情况下,高速缓存读取和高速缓存写入均使用针对受害者存储区218内的位置生成的地址。
88.在另一实例中,高速缓存读取可针对受害者存储区218在第一数据路径上接收,且高速缓存写入可针对受害者存储区218在第二数据路径上接收。在某些情况下,高速缓存读取可以是存储在受害者存储区218中的一组地址中的第一地址的命中。高速缓存写入也可以是存储在受害者存储区218中的同一组地址中的第二地址的命中。在此情况下,高速缓存
读取和高速缓存写入可并行进行而不具有冲突。在另一情况下,高速缓存读取可以是存储在受害者存储区218中的一组地址中的第一地址的命中。高速缓存写入可以是存储在受害者存储区218中的同一组地址中的第二地址的未命中。在此情况下,高速缓存读取和高速缓存写入可并行进行而不具有冲突。在另一情况下,高速缓存读取可以是存储在受害者存储区218中的一组地址中的第一地址的未命中。高速缓存写入可以是存储在受害者存储区218中的同一组地址中的第二地址的命中。在此情况下,类似于上文所描述的情况,高速缓存读取可以停止,直到第二数据路径到受害者存储区218中的位置的高速缓存写入完成并被逐出到更高层级高速缓存或存储器之后。然后,高速缓存读取前进到将所述一组地址从更高层级高速缓存或存储器读取到受害者存储区218中。在另一情况下,高速缓存读取可以是存储在受害者存储区218中的一组地址中的第一地址的未命中。高速缓存写入也可以是存储在受害者存储区218中的同一组地址中的第二地址的未命中。在此情况下,高速缓存读取和高速缓存写入可并行进行而不具有冲突。
89.在另一实例中,高速缓存读取可针对受害者存储区218在第一数据路径上接收,且高速缓存写入可针对受害者存储区218在第二数据路径上接收。在某些情况下,高速缓存读取可以是存储在受害者存储区218中的地址的命中。高速缓存写入也可以是存储在受害者存储区218中的相同地址的命中。在此情况下,高速缓存读取可先进行,并且高速缓存写入可以停止,直到高速缓存读取完成之后。替代地,高速缓存写入和高速缓存读取的次序可基于接收高速缓存写入和高速缓存读取的数据路径,其中到达更低(或更高)编号的数据路径的高速缓存操作在另一高速缓存操作之前完成。在某些情况下,高速缓存读取可以是存储在受害者存储区218中的地址的未命中。高速缓存写入也可以是存储在受害者存储区218中的相同地址的未命中。在此情况下,在高速缓存写入操作完成以存储到受害者存储区218中之后,高速缓存写入操作可转发到更高层级高速缓存或存储器,然后高速缓存读取可从更高层级高速缓存或存储器获得数据。
90.在另一实例中,第一高速缓存读取可针对受害者存储区218在第一数据路径上接收,且第二高速缓存读取可针对受害者存储区218在第二数据路径上接收。如果第一高速缓存读取和第二高速缓存读取是针对不同存储器地址,那么命中和未命中都不存在冲突。在某些情况下,第一高速缓存读取可以是一组地址中的第一地址的未命中。第二高速缓存读取也可以是同一组地址中的第二地址的未命中。如果第一高速缓存读取和第二高速缓存读取具有不同优先级,那么基于所述不同优先级中的更高优先级,存取更高层级高速缓存或存储器。否则,存取更高层级高速缓存或存储器,并获得所述一组存储器地址用于存储在受害者存储区218中。第一高速缓存读取和第二高速缓存读取是针对相同地址的情况以相同方式处理。
91.本文中描述用于促进l1数据高速缓存中的写入未命中高速缓存的实例方法、设备、系统和制品。其它实例及其组合包含以下:实例1包含一种设备,其包括:第一高速缓存存储区;第二高速缓存存储区;其中所述第二高速缓存存储区包含可用于存储从所述第一高速缓存存储区逐出的第一组数据的第一部分和第二部分;高速缓存控制器,其耦合到所述第一高速缓存存储区和所述第二高速缓存存储区,并且可用于接收写入操作,确定所述写入操作在所述第一高速缓存存储区中产生未命中,并响应于所述第一高速缓存存储区中的所述未命中,向所述第二高速缓存存储区提供与所述写入操作相关联的写入未命中信息
以用于存储在所述第二部分中。
92.实例2包含根据实例1所述的设备,其中所述高速缓存控制器可用于比较所述第二高速缓存存储区的所述第二部分与阈值,并基于所述第二部分超过所述阈值,使所述写入未命中信息传输到第二高速缓存。
93.实例3包含根据实例2所述的设备,其中所述阈值对应于接口带宽。
94.实例4包含根据实例2所述的设备,其中所述阈值对应于所述第二部分的大小。
95.实例5包含根据实例1所述的设备,其中所述写入未命中信息是第一写入未命中信息,如果所述第二高速缓存存储区包含对应于所述第一写入未命中信息的存储器地址的第二写入未命中信息,那么可用于所述第二高速缓存存储区的所述高速缓存控制器将不提供来自所述第一高速缓存存储区的所述第一写入未命中信息到所述第二高速缓存存储区。
96.实例6包含根据实例1所述的设备,其中所述第一高速缓存存储区和所述第二高速缓存存储区并联连接到中央处理单元。
97.实例7包含根据实例1所述的设备,其中所述写入未命中信息是第一写入未命中信息,当来自所述第一高速缓存存储区的所述第一写入未命中信息的第一存储器地址匹配存储在所述第二部分中的第二写入未命中信息的第二存储器地址时,所述高速缓存控制器可用于合并所述第一写入未命中信息与所述第二写入未命中信息。
98.实例8包含根据实例7所述的设备,其中所述高速缓存控制器将通过以下中的至少一个来合并所述第一写入未命中信息与所述第二写入未命中信息:(a)保持所述第一写入未命中信息的第一写入信息,或(b)当所述第二写入信息对应于与所述第一写入未命中信息相同的一或多个字节时,舍弃所述第二写入未命中信息的第二写入信息。
99.实例9包含根据实例1所述的设备,其中所述第二部分包含字节启用寄存器,所述高速缓存控制器基于所述写入未命中信息在所述字节启用寄存器中存储值。
100.实例10包含根据实例9所述的设备,其中所述值对应于将写入的所述写入未命中信息的元素。
101.实例11包含一种系统,其包括:中央处理单元,其用于输出对应于存储器地址的写入命令;第一高速缓存存储区,其用于在所述第一高速缓存存储区不存储所述存储器地址的数据时将写入未命中信息从第一存储区输出到第二存储区;及第二高速缓存存储区,其中所述第二高速缓存存储区包含可用于存储从所述第一高速缓存存储区逐出的第一组数据的第一部分及第二部分,所述第二高速缓存存储区用于在所述第二存储区的专用区段中存储所述写入未命中信息,所述专用区段专用于所述写入未命中信息。
102.实例12包含根据实例11所述的系统,其中当所述专用区段具有大于阈值量的写入未命中信息时,所述第二高速缓存存储区将所述写入未命中信息输出到第二高速缓存。
103.实例13包含根据实例12所述的系统,其中所述阈值对应于到所述第二高速缓存的接口的带宽。
104.实例14包含根据实例12所述的系统,其中所述阈值对应于所述第二部分的大小。
105.实例15包含根据实例11所述的系统,其中如果所述第二高速缓存存储区包含对应于与来自所述中央处理单元的所述写入未命中信息相同的存储器地址的第二写入指令,那么所述第二高速缓存存储区将不在所述第二部分中存储来自所述第一存储区的所述写入未命中信息。
106.实例16包含根据实例11所述的系统,其中所述第一高速缓存存储区和所述第二高速缓存存储区并联连接到所述中央处理单元。
107.实例17包含根据实例11所述的系统,其中所述写入未命中信息是第一写入未命中信息,所述系统进一步包含控制器,用于在来自所述第一高速缓存存储区的所述第一写入未命中信息的第一存储器地址匹配存储在所述第二部分中的第二写入未命中信息的第二存储器地址时合并所述第一写入未命中信息与所述第二写入未命中信息。
108.实例18包含根据实例17所述的系统,其中所述高速缓存控制器将通过以下中的至少一个来合并所述第一写入未命中信息与所述第二写入未命中信息:(a)保持所述第一写入未命中信息的第一写入信息,或(b)当所述第二写入信息对应于与所述第一写入未命中信息相同的一或多个字节时,舍弃所述第二写入未命中信息的第二写入信息。
109.实例19包含一种方法,其包括:接收写入操作;确定所述写入操作在第一高速缓存存储区中产生未命中;以及响应于所述第一高速缓存存储区中的所述未命中,向具有第一部分和第二部分的第二高速缓存存储元件验证与所述写入操作相关联的写入未命中信息以存储在所述第二部分中,所述第一部分存储从所述第一高速缓存存储区逐出的第一组数据。
110.实例20包含根据实例19所述的方法,其进一步包含比较所述第二高速缓存存储区的所述第二部分与阈值,并基于所述第二部分超过所述阈值,将所述写入未命中信息输出到第二高速缓存。
111.图4a是图2和/或3的主要高速缓存存储队列212的实例电路实施方案。在图4a中,主要高速缓存存储队列212包含实例锁存器402a、402b、402c、402d、402e、实例合并电路403a
‑
c、实例算术组件404、实例原子比较组件406、实例读取
‑
修改
‑
写入合并组件408、实例选择复用器410和实例ecc生成器412、实例仲裁管理器414、实例未决存储地址数据存储区416、实例优先级复用器418、实例读取端口424,及实例写入端口426。实例合并电路403a
‑
d包含实例比较器420和实例开关422。图4a的实例示出主要高速缓存存储队列212的单个管线。但是,主要存储元件214可布置成相对于不同组支持管线的超过一个独立副本,如由虚线框400指示。因此,图4a的管线可以针对不同组多次再生,如下文进一步描述。
112.在图4a中,实例锁存器402a、402b、402c、402d、402e是配置成存储通过主要高速缓存存储队列212获得的信息(例如,字节、位等)的电子装置。实例锁存器402a
‑
c将写入数据和对应于写入数据是否需要与读取和校正数据组合的信息传递到算术单元404、原子单元406和/或rmw合并组件408中的ecc逻辑310之外。在图4a的实例中,锁存器402a以通信方式耦合到高速缓存控制器220以获得读取、写入和/或修改指令。此类读取、修改和/或写入指令可来源于cpu 102,并经由高速缓存控制器220传输到锁存器402a。锁存器402a耦合到锁存器402b、标签ram 208、仲裁管理器414和未决存储地址数据存储区416以响应于高速缓存控制器220的后续时钟循环而将此类读取、修改和/或写入指令传输到锁存器402b、标签ram 208、仲裁管理器414和未决存储地址数据存储区416。
113.在图4a的实例中,锁存器402b耦合到锁存器402a、未决存储地址数据存储区416、锁存器402c、优先级复用器418和比较器420,以响应于高速缓存控制器220的后续时钟循环而传输获得的读取、修改和/或写入指令。以此方式,从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传播通过主要高速缓存存储队列212。
114.实例锁存器402c耦合到锁存器402b、优先级复用器418、算术组件404、原子比较组件406和读取
‑
修改
‑
写入合并组件408。此耦合使得锁存器402c能够响应于高速缓存控制器220的后续时钟循环,将从读取、修改和/或写入指令(例如,字节值、位值等)获得的值传输到算术组件404、原子比较组件406和/或读取
‑
修改
‑
写入合并组件408。在本文中所描述的一些实例中,锁存器402c可将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到算术组件404、原子比较组件406和/或读取
‑
修改
‑
写入合并组件408中的一或多个。例如,在高速缓存控制器220传输将位写入到当前存储的字中的指令的情况下,锁存器402c可将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到读取
‑
修改
‑
写入合并组件408。在本文中所描述的其它实例中,尽管高速缓存控制器220可传输将位写入到当前存储的字中的指令,锁存器402c可将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到算术组件404、原子比较组件406和/或读取
‑
修改
‑
写入合并组件408。
115.实例锁存器402d耦合到第一复用器410、ecc生成器412和锁存器402e。此耦合使得锁存器402d能够响应于高速缓存控制器时钟220的后续时钟循环而将从第一复用器410获得的值传输到ecc生成器412和/或合并电路403a。
116.实例锁存器402e耦合到优先级复用器418和图3和/或4的mux电路314。此耦合使得锁存器402e能够响应于高速缓存控制器220的后续时钟循环而将从优先级复用器418获得的值传输到mux电路314。例如,在cpu 102对命中主要存储元件214的地址的读取操作中,对相同地址的先前写入可仍在飞行中(例如,未完全写入到主要存储元件214)。在此实例中,锁存器402e收集未写入数据字节,并将其提供到mux 314,最终被发送回到cpu 102。
117.实例合并电路403a耦合到锁存器402d、合并电路403b、算术组件404、原子比较组件406和读取
‑
修改
‑
写入合并组件408。实例合并电路403b耦合到合并电路403a、优先级复用器418和合并电路403c。实例合并电路403c耦合到合并电路403b和锁存器402b。实例合并电路403a
‑
c促进主要高速缓存存储队列212的不同区段中的读取操作的比较,以潜在地重新路由要与对应于相同存储器地址位置的写入操作进行合并的写入操作,如下文进一步描述。尽管图4a的实例包含三个合并电路403a
‑
c,但是可存在额外合并电路用于合并来自主要高速缓存存储队列212的其它区段的写入操作(例如,将锁存器402d的输出耦合到锁存器402b和/或锁存器402a的输出的合并电路等)。在一些实例中,合并电路403a
‑
c组合成单个电路,用于比较来自不同锁存器402b
‑
d的写入操作,并基于匹配不同锁存器402b
‑
d中的任何两个或更多个中的存储器地址进行重新路由。
118.在图4a所示的实例中,算术组件404耦合到锁存器402c、第一复用器410和ecc逻辑310以对来自主存储区214的数据执行算术操作(例如,增加、减少等)。并且,算术组件404对存储在主存储区214中的数据执行直方图操作。图4a所示实例的实例算术组件404由例如硬件处理器的逻辑电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。实例算术组件404的操作如下文进一步描述。
119.在图4a所示的实例中,原子比较组件406耦合到锁存器402c、第一复用器410和ecc逻辑310,以比较存储器地址处的数据和关键字,并在所述存储器地址处的数据匹配关键字的情况下替代所述数据。图4a所示实例的实例原子比较组件406由例如硬件处理器的逻辑
电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。实例原子比较组件406的操作如下文进一步描述。
120.在图4a所示的实例中,读取
‑
修改
‑
写入合并组件408耦合到锁存器402c、第一复用器410和ecc逻辑310,以促进由高速缓存控制器220发送的读取、修改和/或写入指令。例如,读取
‑
修改
‑
写入合并组件408耦合到ecc逻辑310,以获得将受读取、修改和/或写入指令影响的当前存储的字。在实例写入操作中,读取
‑
修改
‑
写入合并组件408配置成用从锁存器402c获得的新位、字节等更新从ecc逻辑310获得的当前存储的字。下文描述读取
‑
修改
‑
写入合并组件408的额外描述。图4a所示实例的实例读取
‑
修改
‑
写入合并组件408由例如硬件处理器的逻辑电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
121.实例第一复用器410耦合到算术组件404、原子比较组件406和读取
‑
修改
‑
写入合并组件408,以基于来自高速缓存控制器220的指示将算术组件404、原子比较组件406或读取
‑
修改
‑
写入合并组件408的输出传输到锁存器402d。例如,在高速缓存控制器220指示执行写入功能(例如,高速缓存控制器向锁存器402b传输写入请求)的情况下,指示由高速缓存控制器220发送到第一复用器410,以选择连接到读取
‑
修改
‑
写入合并组件408的输入传输到锁存器402d。图4a所示实例的实例第一复用器410由例如硬件处理器的逻辑电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
122.在图4a所示的实例中,ecc生成器412耦合到锁存器402d和合并电路403a,以促进存储在锁存器402d中的值(例如,字节、位等)的错误检测和校正。例如,ecc生成器412配置成再生将与数据(例如,从读取
‑
修改
‑
写入合并组件1108输出的经合并字)一起存储的ecc(例如,生成错误检测码)值。ecc值供错误检测和校正电路使用以确定在读取和/或写入操作期间是否出现错误,如上文进一步描述。图4a所示实例的实例ecc生成器412由例如硬件处理器的逻辑电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
123.在图4a中,实例仲裁管理器414耦合到锁存器402a、锁存器402b、未决存储地址数据存储区416和主存储区214,以促进从高速缓存控制器220获得的读取、修改和/或写入指令。例如,在从高速缓存控制器220接收写入指令的情况下,仲裁管理器414配置成将对应的当前存储的字的读取指令传输到主存储区214。另外,仲裁管理器414耦合到主存储区214,以在主存储区214发生冲突的存取之间进行仲裁。当多个操作尝试在相同循环中存取主存储区214时,仲裁管理器414可根据优先级方案选择准许存取主存储区214的操作。适合的优先级方案在下文更详细地描述;但是,在一个实例中,仲裁将读取操作优先于写入操作,因为主要高速缓存存储队列212中的写入数据可供后续操作使用,即使在它写入到主存储区214之前。因此,在允许写入数据在主要高速缓存存储队列212中等待时的性能影响最小。但
是,当主要高速缓存存储队列214装满尚未写回的写入数据时,写入操作的优先级可增加,直到它们优先于竞争对手读取操作为止。
124.图4a所示实例的实例仲裁管理器414由例如硬件处理器的逻辑电路实施。但是,可另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
125.在图4a的实例中,未决存储地址数据存储区416配置成存储从高速缓存控制器220获得的读取、修改和/或写入指令的地址。以此方式,未决存储地址数据存储区416保持与存储在锁存器402a、402b、402c、402d、402e中的任一个和/或合并电路403a、403b和/或403c中的每一值相关联的地址记录。图4a所示实例的实例未决存储地址数据存储区416可由用于存储数据的任何装置实施,例如快闪存储器、磁性媒体、光学媒体等。此外,存储在未决存储地址数据存储区416中的数据可呈任何数据格式,例如二进制数据、逗号分隔的数据、制表符分隔的数据、结构化查询语言(sql)结构等。
126.实例优先级复用器418耦合到锁存器402b、锁存器402c、锁存器402d和合并电路403a,以在锁存器402b、锁存器402c、锁存器402d或合并电路403a正在存储对应于写入指令的值的情况下促进读取操作。例如,高速缓存控制器可发起以下有关具有地址a3、a2、a1和a0的四字节字的四个写入指令:具有字节0x11的写入地址a0、具有字节0x22的写入地址a1、具有字节0x23的写入地址a3和具有字节0x44的写入地址a0。在此实例中,在高速缓存控制器220发起读取全部四字节字的读取指令的情况下,优先级复用器418配置成获得存储在合并电路403a中的字节值0x11、存储在锁存器402d中的字节值0x22、存储在锁存器402c中的字节值0x23,及存储在锁存器402b中的字节值0x22。并且,未决存储地址数据存储区416向优先级复用器418传输指示哪一地址值与存储在锁存器402b、锁存器402c、锁存器402d和合并电路403a中的字节值相关联的指令。在此实例中,因为存储在锁存器402b中的字节值与地址a0相关联且存储在合并电路403a中的字节值也与地址a0相关联,所以优先级复用器418配置成向锁存器402e传输指示地址a0是0x44(例如,与地址a0相关联的最近写入指令)、地址a1是0x22且地址a3是0x23的包。
127.以此方式,mux电路314配置成用从优先级复用器418获得的字节值更新当前存储的字的值。此类操作确保由主要高速缓存存储队列212传输的读取指令很可能指示正确字,即使写入指令可能没有完全传播通过主要高速缓存存储队列212。
128.实例读取路径(例如,到标签ram 208的读取输入)可与主要高速缓存存储队列212并行运行。因为读取操作(例如,读取指令)可参考写入操作(例如,写入指令)中可能尚未完成的数据,所以主要高速缓存存储队列212可包含写入转发功能,允许读取路径从主要高速缓存存储队列212获得尚未写回到主存储区214的数据。在实例中,主要高速缓存存储队列212包含:未决存储地址数据存储区416,用于记录主要高速缓存存储队列212的每一级处的操作的地址;优先级复用器418,用于从主要高速缓存存储队列212中的一个级(例如,锁存器)选择用于转发的数据;及mux电路314,器在主存储区214的输出(通过错误检测和校正电路310)和来自数据优先级复用器418的经转发主要高速缓存存储队列212的数据之间进行选择。
129.替代地,因为读取操作(例如,读取指令、读取命令等)可参考写入操作(例如,写入
指令、写入命令等)中可能尚未完成的受害(例如,逐出)数据,所以主要高速缓存存储队列212包含将飞行中数据(例如,尚未存储在主要存储元件214中的存储队列212的数据)转发到受害者存储元件214和/或l2高速缓存212并使存储队列212中剩余的飞行中数据无效的读取无效功能。
130.实例读取端口424耦合到读取路径和数据存储区416。读取端口424可由只要发生读取未命中就与主要高速缓存控制器222介接的接口实施。例如,读取端口424用于从主要高速缓存控制器222接收受害者地址和读取无效命令。读取端口424将受害者地址发送到数据存储区416,以与存储在数据存储区416中的未决地址比较。
131.实例写入端口426耦合到写入路径和锁存器402a。写入端口426可由与主要高速缓存控制器222(例如,高速缓存控制器220)介接以获得写入指令的接口实施。例如,写入端口426用于从高速缓存控制器220接收地址和值以供写入。
132.图4a的元件以一种表示事务处理流的方式布置。时间元素由级e1
‑
e5表示。每一级表示离散的时间周期,并且在一些实例中,每一级表示一个时钟循环或整数数目的时钟循环。
133.现将描述通过主要高速缓存存储队列212的读取操作的实例流。在对应于级e1的第一循环中,l1数据高速缓存110从标签ram 208检索与读取操作的地址相关联的记录,以确定数据是否存储在主存储区214中。在直接映射实例中,l1数据高速缓存110在向主存储区214请求数据之前无需等待标签ram 208比较,且因此,标签ram 208对读取操作的地址和经高速缓存地址的记录之间的比较可延伸到第二或第三时钟循环中。
134.在对应于级e2的第二循环中,如果仲裁管理器414准许,那么l1数据高速缓存110可向主存储区214请求数据和ecc校验子位。在此循环中,l1数据高速缓存110还可通过比较读取地址与未决存储地址数据存储区416来确定主要高速缓存存储队列212中的较新数据是否可用。如果是,那么优先级复用器418设置为从主要高速缓存存储队列212转发适当的数据。
135.数据和ecc可由主要高速缓存存储区214在对应于级e3的第三循环中提供。但是,此数据可对应于也可不对应于读取操作指定的存储器地址,因为l1数据高速缓存110可向高速缓存的主存储区214中的相同条目分配多个经扩展存储器地址。因此,在第三循环中,l1数据高速缓存110基于标签ram 208记录的比较来确定来自主存储区214的所提供数据和ecc是否对应于读取操作中的存储器地址(例如,高速缓存命中)。在高速缓存命中的情况下,数据和ecc位由错误检测和校正电路310接收,其在对应于级e4的第四循环中校正数据的任何错误。
136.如上文所描述,尚未写入到主存储区214的较新数据可存在于主要高速缓存存储队列212中,并且可以通过优先级复用器418从主要高速缓存存储队列212转发。如果是,那么mux电路314选择经转发数据而不是来自主存储区214的校正数据。
137.来自主存储区214的校正数据或来自主要高速缓存存储队列212的经转发数据在对应于级e5的第五循环中提供给l1数据高速缓存110。通过这种方式,在大致5个循环中存在高速缓存命中的情况下,控制器220可向数据提供完整ecc检查和校正。
138.在数据和ecc位不存在于主存储区214中(例如,高速缓存未命中)的情况下,主要高速缓存存储队列212可一直停止到可以从经扩展存储器106和/或受害者存储区218检索
数据为止,此时数据可以写入到主存储区且标签ram 208可以更新。
139.用于使用存储队列和数据转发促进1级数据高速缓存中的完全管线化读取
‑
修改
‑
写入支持的方法和设备
140.在本文中所描述的实例中,存在两个先后操作的高速缓存系统(例如,主存储区214和受害者高速缓存存储区218)。在本文中所描述的实例中,主存储区214是直接映射高速缓存元件,受害者高速缓存存储区218是完全关联高速缓存存储区。直接映射主存储区214和完全关联受害者高速缓存存储区218均受错误校正码(ecc)保护。因此,实例应用包含从主存储区214读取行和/或从主存储区214移动行。因而,ecc逻辑将校正高速缓存线,并再生ecc校验子,然后将所述行写入到受害者高速缓存存储区218。此类应用可使用cpu的两个额外时钟循环(例如,一个时钟循环用于通过ecc逻辑进行错误校正,另一时钟循环用于ecc校验子再生)。为了缩短此时延,本文中所描述的实例包含在主存储区214和受害者高速缓存存储区218之间使用相同的校验块大小。因此,主存储区214和受害者高速缓存存储区218均计算和/或以其它方式确定32位边界的对等性(parity)。以此方式,l1高速缓存110可以更少的时延将高速缓存线从主存储区214直接移动到受害者高速缓存存储区218。
141.在本文中所描述的实例中,l1数据高速缓存110支持从高速缓存读取数据的多个操作,并在重写数据之前改变数据。例如,l1数据高速缓存110可支持读取
‑
修改
‑
写入操作。读取
‑
修改
‑
写入操作读取现有数据,并覆写数据的至少一部分。在ecc实施例中,读取
‑
修改
‑
写入操作可在写入小于完整组宽度时(例如,在写入小于32位4字节字时)执行。使用读取
‑
修改
‑
写入的读取功能的原因在于组中不会被覆写的数据部分仍然有助于ecc校验子位。
142.读取
‑
修改
‑
写入操作可以分割成写入操作和读取操作,并且主要高速缓存存储队列212可经结构化,使得读取路径中的读取操作与主要高速缓存存储队列212中的写入操作保持同步。读取操作和写入操作保持同步,直到读取
‑
修改
‑
写入合并组件408用写入数据覆写读取数据的至少一部分从而产生经合并数据为止。经合并数据提供给为经合并数据生成新ecc校验子位的ecc生成器412,然后经合并数据和ecc校验子位可以提供给仲裁管理器414以在主存储区214中存储。
143.在实例读取
‑
修改
‑
写入操作中,图2和/或3的高速缓存控制器220传输指示要写入的字的字节子集或整个字(例如,第一组数据)的写入请求。在此实例中,通过高速缓存控制器220传输的写入请求包含要写入的字节的地址值和要写入到所指示字节的数据。例如,图2和/或3的主存储区214可包含与地址a3、a2、a1、a0相关联的四字节字0x12345678。在此实例中,地址a3对应于所存储的字的字节0x12,地址a2对应于字节0x34,地址a1对应于字节0x56,且地址a0对应于字节0x78。在此实例操作中,高速缓存控制器220可传输以下写入请求:用当前存储的字12345678的字节0x33替代地址a3、用字节0x22替代地址a1并用字节0x11替代地址a0。另外,在此实例中,用字节0x33替代所存储字的地址a3的第一写入请求将使所存储的字变成0x33345678,用字节0x22替代所存储字的地址a1的第二写入请求将使所存储的字变成0x33342278,且用字节0x11替代所存储字的地址a0的第三写入请求将使所存储的字变成0x33342211。
144.为了处理此类请求,l1数据高速缓存110比较读取操作的地址与标签ram 208的记录,并且l1数据高速缓存向主存储区214和/或主要高速缓存存储队列212请求数据和ecc校
验子位。因为读取
‑
修改
‑
写入操作将修改数据,所以在跟踪主存储区214中的条目的mesi(修改、独占、共享和无效)状态的实例中,不处于修改或独占状态的高速缓存命中可被视为高速缓存未命中。在获得处于正确状态的数据且任何错误都被校正时,它提供给读取
‑
修改
‑
写入合并组件408。在此相同循环中,读取
‑
修改
‑
写入合并组件408可用写入数据覆写校正数据的至少一部分,以产生经合并数据。ecc生成器412为经合并数据生成新ecc校验子位。
145.在本文中所描述的实例中,ecc生成器412以字粒度操作。因此,ecc生成器412计算数据块的ecc校验子。在本文中所描述的实例中,数据块可为四字节(例如,字)。主要高速缓存存储队列212通过在第一实例循环(例如,完成用字节0x33替代地址a3的第一写入请求)处处理写入指令,因为ecc生成器412以字粒度(例如,4字节或32位字)操作,高速缓存控制器220发起当前存储字的地址a3中的当前存储字节的读取请求。在此实例中,第一写入请求中的字节和地址(例如,0x33和a3)存储在锁存器402b中。另外,高速缓存控制器220向主存储区214传输整个当前存储字的读取请求。因此,在第一循环结束时,整个当前存储字的读取请求被传输到主存储区214,且字节0x33存储在第一锁存器402b中。
146.在实例第二循环(例如,完成用字节0x22替代地址a1的第二写入请求)处,来自第一写入请求的字节被传输到锁存器402c,整个当前存储字从主存储区214传输到ecc逻辑310,且第二写入请求(例如,用字节0x22替代地址a1)通过高速缓存控制器220传输以存储在锁存器402b中。在第二循环期间,读取
‑
修改
‑
写入合并组件408获得存储在锁存器402c中的字节,并且整个当前存储字通过ecc逻辑310传输。以此方式,读取
‑
修改
‑
写入合并组件408识别当前存储字中要更新的字节的地址。一旦读取
‑
修改
‑
写入合并组件408识别和/或以其它方式获得:(a)来自锁存器402c的要更新的当前存储字的部分的值(例如,字节值、位值等)和(b)来自ecc逻辑310的当前存储字,读取
‑
修改
‑
写入合并组件408就写入具有从锁存器402c获得的当前存储字的部分的值的当前存储字的部分(例如,用所述值替代当前存储字的部分、合并当前存储字的部分与所述值,等等)。例如,读取
‑
修改
‑
写入合并组件408将字的部分的值写入到对应于字中的字的部分的地址值。由读取
‑
修改
‑
写入合并组件408输出的此实例写入部分在本文中可以被称为经合并字。在本文中所描述的一些实例中,此类经合并字由读取
‑
修改
‑
写入合并组件1108提供用于写入到受害者存储区218。
147.作为响应,为了发起实例读取
‑
修改
‑
写入操作的写入部分,选择复用器410从读取
‑
修改
‑
写入合并组件408传输经合并字以存储在锁存器402d中。在后续时钟循环下,ecc生成器412从锁存器402d获得经合并字,并生成对应ecc校验子位。在相同或后续的时钟循环中,ecc生成器412通过合并电路403a、403b和403c传输经合并字,以由仲裁管理器414处理,从而存储在主存储区214中。
148.但是,在上文所描述的此实例中,因为高速缓存控制器220传输了三个对应于主存储区214中的相同所存储字的连续写入指令,所以在将所述三个写入指令的三个值写入到当前存储字时,读取
‑
修改
‑
写入合并组件408可将这三个写入指令合并到一个事务中。例如,在主存储区212中存储来自第一写入指令的经合并字之前,主存储区队列212反馈(例如,传输)经合并字以用于后续第二写入指令。
149.图4b是结合图3a
‑
4a的主要高速缓存存储队列212实施的实例数据转发逻辑460的实例电路实施方案。尽管图4b被描述为结合主要高速缓存存储队列212实施的实例数据转
发逻辑460,但是在本文中所描述的其它实例中,在图4b中描述的任一个实例都可以结合受害者高速缓存存储队列216实施。
150.在图4b的实例中,实例地址线462(rd_addr)耦合到高速缓存控制器220,以从cpu 102获得实例读取指令。在图4b的实例中,此实例地址线462获得主要高速缓存存储队列212的读取指令。以此方式,主要高速缓存存储队列212可在执行cpu 102读取指令时转发来自飞行中写入事务的任何数据。在主要高速缓存存储队列212中,来自cpu 102的指令(例如,读取指令和/或其它事务,和/或写入指令和/或其它事务)包含地址、字节启用(byten)和相关联数据。图4b的拓扑包含实例地址存储区464a(例如,图4的未决存储地址数据存储区416)、实例byten存储区464b(例如,字节启用存储区)和实例数据存储区464c(例如,锁存器402a、402b、402c等等中的任一个)。在图4b中,地址存储区464a的地址addr0对应于主要高速缓存存储队列212中的最早读取和/或写入指令,且地址存储区464a的地址addr3对应于主要高速缓存存储队列212中的最新读取和/或写入指令。
151.经由地址线462(例如,读取指令)的传入地址通过实例比较逻辑466与地址存储区464a中的所有地址(例如,addr0、addr1、addr2和addr3)比较。在本文中所描述的实例中,比较逻辑466可比较读取指令的地址与任何数目个条目,因为地址addr0、addr1、addr2和addr3可完全或部分地等效(例如,相同)。以此方式,比较逻辑466的实例输出是4位信号。此类4位信号基于byten存储区464b的对应字节启用信号而生成。此类4位信号可具有任何值(例如,全为零、全为一、部分为零和部分为一,等等)。
152.在实例操作中,地址存储区464a的四个地址可包含一或多个有效字节(例如,逻辑高字节)。在本文中所描述的实例中,主要高速缓存存储队列212是64位(例如,8字节),并且因此主要高速缓存存储队列212可对任何数目个字节执行写入,例如一到八个字节。
153.响应于比较逻辑466基于byten存储区464b中的字节启用识别出包含的地址存储区464a的地址,实例输出线468传输地址存储区464a中的每个地址的8位结果。在本文中所描述的实例中,存在四个输出线468(例如,dram_hit_dp0[0][7:0]、dram_hit_dp0[1][7:0]、dram_hit_dp0[2][7:0]和dram_hit_dp0[3][7:0])。在操作中,任一个输出线468中设置为逻辑高(例如,1)的位指示地址存储区464a的对应地址的对应字节具有要转发的有效数据。例如,如果输出线468中的第一输出线包含dram_hit_dp0[0],那么对应读取指令的字节值可以从地址存储区464a中的任一个地址获得。
[0154]
图4b的实例包含实例选择逻辑470和实例选择线472。在本文中所描述的实例中,选择线472包含八个2字节输出。因此,byten存储区464c中的每一个对应字节启用存在选择信号中的一个选择信号。在实例操作中,在读取指令指示读取具有多个经启用字节的多个地址的情况下,实例选择逻辑720选择最近数据。选择逻辑470(例如,选择线472)的此类输出分别控制实例复用器474a
‑
474h(复用器474e
‑
h未示出)。在图4b的实例中,复用器474a
‑
h包含8个1字节输入端子。在操作中,复用器474a
‑
h获得它们在选择线472中相应的选择线,指示要转发数据存储区464c中的每一个的哪一个字节。以此方式,主要高速缓存存储队列212可基于地址比较(例如,由比较器466执行的比较)、byten存储区464b的对应字节启用和主要高速缓存存储队列212发出写入指令(例如,由选择逻辑470执行的比较)的次序,从不同飞行中存储区(例如,数据存储区464c中的任一个)转发数据。
[0155]
在本文中所描述的实例中,地址线462、地址存储区464a、byten存储区464b、数据
存储区464c、比较逻辑466、输出线468、选择逻辑470、选择线472和/或复用器474a
‑
h中的任一个可实施于受害者高速缓存存储队列216中。在图4b中,复用器474a
‑
h的输出端子耦合到实例高速缓存复用器476。在图4b的实例中,高速缓存复用器476还耦合到以此方式与受害者高速缓存存储队列216相关联地实施的类似复用器。在操作中,高速缓存复用器476从传输了读取指令的高速缓存控制器(例如,主要高速缓存控制器222或受害者高速缓存控制器224)获得选择信号。以此方式,高速缓存复用器476促进到cpu 102的数据转发。
[0156]
在一些实例中,图4b的拓扑可对应于主要高速缓存存储队列212的实例写入数据转发组件、受害者高速缓存存储队列216的写入数据转发组件和mux电路314、316。在此实例中,高速缓存复用器476可由实例mux电路314、316实施。并且,在此实例中,地址线462、地址存储区464a、byten存储区464b、数据存储区464c、比较逻辑466、输出线468、选择逻辑470、选择线472和/或复用器474a
‑
h中的任一个可由主要高速缓存存储队列212的实例写入数据转发组件实施,与受害者存储区216相关联地实施的地址线462、地址存储区464a、byten存储区464b、数据存储区464c、比较逻辑466、输出线468、选择逻辑470、选择线472和/或复用器474a
‑
h可由受害者高速缓存存储队列216的实例写入数据转发组件实施。
[0157]
在一些实例中,图4b的拓扑可对应于未决存储地址数据存储区418和实例优先级复用器418。例如,地址存储区464a、byten存储区464b和/或数据存储区464c可由实例未决存储地址数据存储区416实施。在另一实例中,地址线462、比较逻辑466、输出线468、选择逻辑470、选择线472和/或复用器474a
‑
h中的任一个可由实例优先级复用器418实施。
[0158]
在本文中所描述的实例中,图4b的拓扑用于主存储区214和受害者存储区218的每个组。例如,如果主存储区214具有8个组,那么图4b的拓扑将复制8次,每个组复制一次。
[0159]
本文中描述使用存储队列和数据转发促进1级数据高速缓存中的完全管线化读取
‑
修改
‑
写入支持的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0160]
实例1包含一种设备,其包括第一存储区、第二存储区、耦合到所述第一存储区和所述第二存储区的存储队列,所述存储队列可用于接收指定第一组数据的第一存储器操作,处理所述第一存储器操作以在所述第一存储区和所述第二存储区中的至少一个中存储所述第一组数据,接收第二存储器操作,并在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前反馈所述第一组数据以用于所述第二存储器操作。
[0161]
实例2包含根据实例1所述的设备,其中所述第二存储器操作是读取
‑
修改写入操作并指定第二组数据,并且所述存储队列可用于在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前合并所述第一组数据和第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一存储区和所述第二存储区中的至少一个中存储。
[0162]
实例3包含根据实例2所述的设备,其进一步包含接收指示读取所述第三组数据的第三存储器操作。
[0163]
实例4包含根据实例1所述的设备,其中所述第二存储区被配置为所述第一存储区的受害者存储区。
[0164]
实例5包含根据实例1所述的设备,其中所述存储队列进一步包含配置成存储所述第一组数据的第一地址值的数据存储区。
[0165]
实例6包含根据实例1所述的设备,其中所述存储队列进一步包含错误码校正生成
器以生成错误检测码。
[0166]
实例7包含根据实例6所述的设备,其中所述错误码校正生成器响应于处理所述第一存储器操作而生成所述错误检测码。
[0167]
实例8包含一种方法,其包括接收指定第一组数据的第一存储器操作,处理所述第一存储器操作以在第一存储区和第二存储区中的至少一个中存储所述第一组数据,接收第二存储器操作,并在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前传输所述第一组数据以用于所述第二存储器操作。
[0168]
实例9包含根据实例8所述的方法,其中所述第二存储器操作是读取
‑
修改
‑
写入操作却指定第二组数据,所述方法进一步包含在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一存储区和所述第二存储区中的至少一个中存储。
[0169]
实例10包含根据实例9所述的方法,其进一步包含接收指示读取所述第三组数据的第三存储器操作。
[0170]
实例11包含根据实例8所述的方法,其中所述第二存储区被配置为所述第一存储区的受害者存储区。
[0171]
实例12包含根据实例8所述的方法,其进一步包含存储所述第一组数据的第一地址值。
[0172]
实例13包含根据实例8所述的方法,其进一步包含生成错误检测码。
[0173]
实例14包含根据实例13所述的方法,其进一步包含响应于处理所述第一存储器操作而生成所述错误检测码。
[0174]
实例15包含一种系统,其包括:中央处理单元,其配置成传输第一存储器操作和第二存储器操作;第一存储区,其耦合到所述中央处理单元;第二存储区,其耦合到所述中央处理单元;存储队列,其耦合到所述第一存储区、所述第二存储区和所述中央处理单元,所述存储队列可用于接收指定第一组数据的所述第一存储器操作,处理所述第一存储器操作以在所述第一存储区和所述第二存储区中的至少一个中存储所述第一组数据,接收所述第二存储器操作,并在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前,反馈所述第一组数据以用于所述第二存储器操作。
[0175]
实例16包含根据实例15所述的系统,其中所述第二存储器操作是读取
‑
修改
‑
写入操作且指定第二组数据,并且所述存储队列可用于在所述第一存储区和所述第二存储区中的所述至少一个中存储所述第一组数据之前合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一存储区和所述第二存储区中的至少一个中存储。
[0176]
实例17包含根据实例16所述的系统,其进一步包含接收指示读取所述第三组数据的第三存储器操作。
[0177]
实例18包含根据实例15所述的系统,其中所述第二存储区被配置为所述第一存储区的受害者存储区。
[0178]
实例19包含根据实例15所述的系统,其中所述存储队列进一步包含配置成存储所述第一组数据的第一地址值的数据存储区。
[0179]
实例20包含根据实例15所述的系统,其中所述存储队列进一步包含错误码校正生成器以响应于处理所述第一存储器操作而生成错误检测码。
[0180]
用于减少非对准写入的读取
‑
修改
‑
写入循环的方法和设备
[0181]
在向多组存储区发出写入指令时,此类写入指令可以与对应读取指令一起传输,不管写入指令的大小如何,尝试执行此类写入指令的完整读取
‑
修改
‑
写入循环。例如,在此类应用中,可通过cpu获得指示跨两个64位存储器组从第一存储器组的地址a0开始写入128位的写入指令。在此实例中,尽管两个实例存储器组都被完全写入,但是此类应用保持读取当前存储在所述两个实例存储器组中的数据的读取指令。但是,此类方法效率低下,因为使用了两倍的处理功率(例如,写入和读取指令)。并且,此类方法不提供任何控制逻辑和/或处理电路系统来分析写入指令。
[0182]
在图4a所示的实例中,主存储区214和/或受害者存储区218可以是多组存储区。例如,主存储区214可包含十六个存储器组(例如,十六个子ram),每个为64位宽。在此实例中,在高速缓存控制器220传输向主存储区214的第一组写入所有64位的写入指令(例如,从第一组的第一地址开始,写入64位字)的情况下,写入指令可以在不发起读取指令的情况下执行。例如,组处理逻辑303可检测整个组的此类写入将被执行,并且因此指示高速缓存控制器220发起读取
‑
修改
‑
写入操作,否决传输读取指令。
[0183]
类似地,在高速缓存控制器220向写入端口426传输写入主存储区214的第一组和第二组的所有128位的写入指令(例如,指示从第一组的第一地址开始写入128位字并在第二组的最后地址结束的写入指令)的情况下,写入指令可以在不发起读取指令的情况下实施。例如,组处理逻辑303可检测全部多个组的此类写入将被执行,并且因此指示高速缓存控制器220发起读取
‑
修改
‑
写入操作,否决传输读取指令。
[0184]
但是,在本文中所描述的一些实例中,高速缓存控制器220可传输写入130个数据位的写入指令(或指示写入到存储器组子集的任何写入指令)。在130个数据位中,64个数据位可以写入到第一组,64个数据位可以写入到第二组,且2个数据位可以写入到主存储区的第三组(例如,指示从第一组的第一地址开始写入130位字并在第三组的第二地址结束的写入指令)。在此实例中,组处理逻辑303检测到主存储区214的第一组和第二组的所有地址将全部写入,并且因此指示高速缓存控制器发起主存储区的第一组和第二组的读取
‑
修改
‑
写入操作,否决传输读取指令。在此实例中,组处理逻辑303可检测(例如,确定)主存储区214的存储器组子集(例如,存储器存储区的第三组)将部分地写入(例如,将写入64个地址中的两个地址),并且因此指示高速缓存控制器220发起主存储区214的第三组的完整读取
‑
修改
‑
写入操作。在本文中所描述的实例中,组处理逻辑303基于要写入的所述多个存储器组的子集中的地址数目是否满足阈值,响应于写入操作而确定是否使读取操作得以执行(例如,是否发起完整读取
‑
修改
‑
写入操作)。在本文中所描述的实例中,在所述多个存储器组的子集中的地址数目大于0和/或小于存储器中的地址数目时,不满足阈值。在此实例中,组处理逻辑303生成执行写入指令作为完整读取
‑
修改
‑
写入事务的指示到cpu 102。在本文中所描述的实例中,在所述多个存储器组的子集中的地址数目等于存储器组中的地址数目时,满足阈值。在此实例中,组处理逻辑303生成执行写入指令作为部分读取
‑
修改
‑
写入事务(例如,否决读取)的指示到cpu 102。读取
‑
修改
‑
写入操作的实例描述在上文描述。
[0185]
本文中描述用于减少非对准写入的读取
‑
修改
‑
写入循环的实例方法、设备、系统
和制品。其它实例及其组合包含以下:
[0186]
实例1包含一种设备,其包括:包含多个存储器组的存储器;配置成耦合到中央处理单元的接口,所述接口用于从所述中央处理单元获得写入操作,其中所述写入操作是写入所述多个存储器组的子集;耦合到所述接口和所述存储器的组处理逻辑,所述组处理逻辑用于基于所述写入操作确定要写入的所述多个存储器组的所述子集,并基于要写入的所述多个存储器组的所述子集中的地址数目是否满足阈值,响应于所述写入操作而确定是否执行读取操作。
[0187]
实例2包含根据实例1所述的设备,其中当所述数目的所述多个存储器组中的所述至少一个的所有地址包含在所述写入操作中时满足所述阈值。
[0188]
实例3包含根据实例1所述的设备,其中所述组处理逻辑将在要写入的所述数目的所述多个存储器组中的所述至少一个的地址数目不满足所述阈值时生成第二指示到所述中央处理单元,以执行到发出所述读取操作的所述数目的所述多个存储器组中的所述至少一个的所述写入操作。
[0189]
实例4包含根据实例1所述的设备,其中所述组处理逻辑基于所述写入操作,通过确定包含在所述写入操作中的地址总数并基于具有包含在所述地址总数中的地址确定所述多个存储器组的数目,确定要写入的所述多个存储器组的数目。
[0190]
实例5包含根据实例1所述的设备,其中所述写入操作指示要重写的所述多个存储器组的数目。
[0191]
实例6包含根据实例1所述的设备,其中所述多个存储器组是十六个存储器组。
[0192]
实例7包含根据实例1所述的设备,其中所述存储器是受害者存储区。
[0193]
实例8包含一种系统,其包括:中央处理单元,其配置成生成指示写入到多个存储器组的子集的写入操作;受害者存储区,其包含所述多个存储器组;以及组处理逻辑,其耦合到所述中央处理单元和所述受害者存储区,所述组处理逻辑用于基于所述写入操作确定要写入的所述多个存储器组的所述子集,并基于要写入的所述多个存储器组的所述子集中的地址数目是否满足阈值,响应于所述写入操作而确定是否执行读取操作。
[0194]
实例9包含根据实例8所述的系统,其中当所述数目的所述多个存储器组中的所述至少一个的所有地址包含在所述写入操作中时满足所述阈值。
[0195]
实例10包含根据实例8所述的系统,其中所述组处理逻辑将在要写入的所述数目的所述多个存储器组中的所述至少一个的地址数目不满足所述阈值时生成第二指示到所述中央处理单元,以执行到发出所述读取操作的所述数目的所述多个存储器组中的所述至少一个的所述写入操作。
[0196]
实例11包含根据实例10所述的系统,其中所述中央处理单元进一步用于响应于所述第二指示而生成读取
‑
修改
‑
写入操作,以供所述数目的所述多个存储器组中的所述至少一个执行。
[0197]
实例12包含根据实例8所述的系统,其中所述组处理逻辑基于所述写入操作,通过确定包含在所述写入操作中的地址总数并基于具有包含在所述地址总数中的地址确定所述多个存储器组的数目,确定要写入的所述多个存储器组的数目。
[0198]
实例13包含一种方法,其包括基于写入操作确定要写入的存储器的多个存储器组的子集,以及基于要写入的所述多个存储器组的所述子集中的地址数目是否满足阈值,响
应于所述写入操作而确定是否执行读取操作。
[0199]
实例14包含根据实例13所述的方法,其进一步包含响应于满足所述阈值而传输指示到中央处理单元。
[0200]
实例15包含根据实例13所述的方法,其中当所述数目的所述多个存储器组中的所述至少一个的所有地址包含在所述写入操作中时满足所述阈值。
[0201]
实例16包含根据实例13所述的方法,其进一步包含当要写入的所述数目的所述多个存储器组中的所述至少一个的地址数目不满足所述阈值时,生成第二指示以执行到发出所述读取操作的所述数目的所述多个存储器组中的所述至少一个的所述写入操作。
[0202]
实例17包含根据实例13所述的方法,其中确定要写入的所述多个存储器组的数目通过以下执行:确定包含在所述写入操作中的地址总数,并基于具有包含在所述地址总数中的地址确定所述多个存储器组的数目。
[0203]
实例18包含根据实例13所述的方法,其中所述写入操作指示要重写的所述多个存储器组的数目。
[0204]
实例19包含根据实例14所述的方法,其进一步包含从所述中央处理单元获得所述写入操作,所述写入操作指示要写入的所述多个存储器组的数目。
[0205]
实例20包含根据实例14所述的方法,其中所述存储器是受害者存储区。
[0206]
用于减少组压力的侵略性写入合并
[0207]
在图4a的实例中,实例主要高速缓存存储队列212在主要高速缓存存储队列212的不同区段处(例如,在实例锁存器402a
‑
e处)存储数个写入操作。例如,在cpu 102传输一行中的三个单独的写入操作时,cpu 102提供的第一写入操作存储在第一锁存器402b处,并在第一锁存器402b处接收到第二操作时移动到第二锁存器402c。因此,在接收到所述三个写入操作之后,第一锁存器402b将存储和/或输出在时间上最后的写入操作(例如,其最后存储在主存储区214中),第二锁存器402c将具有第二写入操作(例如,其第二个存储在主存储区214中),且第三锁存器402d将具有第一写入操作(例如,第一个存储在实例主存储区214中)。每当主要高速缓存存储队列212中的数据接着要存储在主存储区214中,实例仲裁管理器414保留供数据写入到实例主存储区214中的循环。因此,在保留的循环期间,主存储区214可能不可用于执行读取操作。但是,如果存储在锁存器402b、402c、402d中的两个或更多个中的数据操作对应于相同存储器地址,那么数据可以合并,以便将数据写入到主存储区214的存储器地址中一次,而不是两次或三次。例如,如果存储在锁存器402d中的写入操作对应于写入存储器地址的字节且存储在锁存器402c中的写入操作对应于将相同字节写入到存储器地址,那么第二写入将覆写第一写入。
[0208]
主要高速缓存存储队列212将两个写入合并到一个写入中,使得仅使用一个循环来写入第二事务(例如,免去为第一写入保留循环),而不是保留将第一字节写入到主存储区214中的循环,此第一字节在后续循环中将被覆写。此类侵略性合并减少了保留用于写入操作的循环数目。以此方式,主存储区214将具有额外循环来执行读取操作,由此减小整个系统的时延。
[0209]
为了实现将写入操作侵略性合并到相同存储器地址,实例锁存器402b
‑
402d的输出耦合到实例合并电路403a
‑
403c。例如,第三锁存器402d的输出可耦合到合并电路403a,第二锁存器402c的输出可耦合到合并电路403b,且第一锁存器402b的输出可耦合到合并电
路403c。合并电路403a的输出可另外耦合到第二锁存器402c的输出和合并电路403b,合并电路403b可耦合到合并电路403c,且合并电路403c可耦合到第一锁存器402b的输入。另外或替代地,可存在额外的比较器电路,用于比较另一组的锁存器的输出(例如,用于比较锁存器402b的输出与锁存器402d的输出的比较器电路)。实例合并电路403a
‑
c包含实例比较器420和实例开关422。
[0210]
比较器420比较存储在相应锁存器402b
‑
402d中的每个写入操作的存储器地址位置以确定实例存储队列中的任一个写入操作是否对应于相同存储器地址。实例比较器420可以是比较锁存器402b
‑
402d的所有写入操作的一个比较器,也可以是比较锁存器402b
‑
d中的两个的单独比较器420(例如,比较锁存器402b的存储器地址与锁存器402c的存储器地址的第一比较器,比较402b的存储器地址到锁存器402d的存储器地址的第二比较器,等等)。比较器420将比较结果(例如,利用对应于所述一或多个比较的一或多个信号)输出到实例开关422和/或仲裁管理器414。如果实例仲裁管理器414接收指示匹配的信号,那么仲裁管理器414将不保留用于第一写入操作的循环,同时第一写入操作与第二写入操作合并到相同存储器位置(例如,释放用于其它高速缓存操作的循环)。
[0211]
实例开关422基于比较重路由实例锁存器402b
‑
402d中的写入操作。例如,如果存储在实例锁存器402d中的写入操作的存储器地址与存储在锁存器402c中的存储器地址相同,那么实例开关422启用和/或停用将锁存器402d的输出重路由到锁存器402c,而不是路由到实例仲裁管理器414。以此方式,所述两个写入操作组合并在后续循环中作为单写入操作而不是两个写入操作写入到主存储区214中。开关422可以是电开关、晶体管(例如,mosfet)、解复用器和/或可在电路中重路由信号的任何其它组件。
[0212]
在合并电路403a
‑
c中的一个的mux接收经重路由写入操作时,mux执行所述一或多个经重路由写入操作的合并协议,对最新写入操作进行优先级排序。例如,如果比较器420确定存储在实例锁存器402c中的写入操作对应于与存储在实例锁存器402d中的写入操作相同的存储器地址,那么比较器420的mux合并数据(如结合图4d进一步描述),并且开关422将存储在实例锁存器402d中的经合并写入操作重路由到锁存器402c。在此实例中,如果实例锁存器402c中的写入操作对应于将数据写入到存储器地址的byte0和byte2且来自锁存器404d的写入操作对应于将数据写入到byte0和byte1,那么实例合并电路403a合并所述两个写入操作,以保持存储在锁存器402c中的写入数据(例如,到byte0和byte2的写入),并包含来自锁存器402d的不重叠的写入数据(例如,byte2)。在此实例中,作为合并操作的部分,合并电路403a舍弃来自锁存器404d的字节0的写入数据,因为要写入在锁存器404d的字节0的数据处将通过锁存器402c的写入指令覆写。因此,在以上实例中,经合并数据对应于来自锁存器402c的byte0的写入数据、来自锁存器404d的byte1的写入数据,以及来自锁存器402c的byte2的写入数据。在后续写入操作添加到主要高速缓存存储队列212中时,来自锁存器402c的经合并写入数据可在后续循环期间被操纵(例如,经由实例块404、406、408中的一个)和/或推动到下一锁存器402d以存储在实例主存储区214中。合并协议的实例硬件实施方案如下文结合图4d进一步描述。
[0213]
图4d示出图4a的合并电路402c和/或图11a的1102c的硬件实施方案(例如,用于将来自锁存器402d的数据合并到锁存器402c)。类似硬件设置可经实施以合并任何两个锁存器之间的数据。图4d的实例包含实例锁存器(例如,存储区)402b
‑
402d和用于图4a的比较器
420和开关422的硬件组件。实例比较器电路420包含比较器和/或逻辑门480a
‑
480f,且开关电路422包含or门482和mux 484。尽管结合图4a加以描述,但如果结合图11a的受害者高速缓存存储队列216描述,那么可使用图11a的锁存器1102a
‑
d、实例比较器1120和实例开关322。
[0214]
在图4d的实例中,实例锁存器402d将所存储的数据输出到实例存储区(例如,经由仲裁管理器414、1114输出到主存储区214或受害者存储区218),其在第一循环内锁定其组。图4d示出写入合并在存储区的组中的旧数据前面是包含新写入数据的另一存储区/锁存器时将旧数据锁定到相同地址。尽管图4c的实例示出实例锁存器402d和实例锁存器402c之间的合并,但可使用类似的结构合并锁存器402a
‑
402d中的任一个之间的数据。例如,如果锁存器402d处的数据地址与锁存器402b处的数据地址匹配,那么锁存器402可合并其数据与锁存器402b处的数据。并且,如果三个或更多个锁存器处的数据对应于相同地址,那么所述三个或更多个锁存器处的数据可合并到单个锁存器中。如上文所描述,如果特定锁存器处的数据与先前锁存器处的数据合并,那么所述特定锁存器处的数据无效(例如,通过将位设置成对应于已无效的值)或被舍弃,使得不针对所述数据执行仲裁,以便锁定在存储区中的某一组中。
[0215]
在操作中,实例比较器480b比较锁存器402d处的数据的地址与锁存器403c处的数据的地址。比较器480b的输出仅在锁存器402c和402d均包含设置成有效的位时才有效。因此,实例比较器480a比较来自锁存器402c、402d的有效位,以确保位都是有效的。以此方式,实例比较器480d仅在锁存器402c处的地址和锁存器402d处的地址相同且锁存器402c、402d两者的有效位均有效时输出值(例如,
‘1’
)。否则,实例比较器480d输出第二值(
‘0’
)。比较器480d的输出被输入到开关422的mux 484的选择线。因此,如果锁存器402c、402d的地址是相同值,那么比较器480d将控制开关422的mux 484输出经合并数据(例如,来自开关422的or门482)。
[0216]
实例add门480c与锁存器402d的byten但不与锁存器402c的byten执行逻辑and函数(例如,使用not门)。实例add门480c的输出确保如果存在通过锁存器402c和402d两者写入的字节,那么锁存器402c保持且锁存器402d被忽略,因为锁存器402c具有cpu 102发出的最近存储区。因此,实例比较器480f仅输出cpu 102针对存储队列中的地址发出的最近存储区。比较器480f的输出对应于dram_mrg_data_sel[7:0],它是用于逐字节选择逻辑门402d和逻辑门402c之间的最后经合并数据的信号。在合并锁存器402c和锁存器402d的byten时存在类似的合并逻辑。标记为(1)的信号用于在store_byten或(与store_4_byten合并的store3_byten)之间进行选择,如上文所描述。
[0217]
本文中描述用于促进侵略性写入合并以减小组压力的实例方法、设备、系统和制品。其它实例及其组合包含以下:实例1包含一种设备,其包括第一高速缓存存储区、第二高速缓存存储区、存储队列,所述存储队列耦合到所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个且可用于接收第一存储器操作,处理所述第一存储器操作以在所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个中存储所述第一组数据,接收第二存储器操作,并在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前,合并所述第一存储器操作和所述第二存储器操作。
[0218]
实例2包含根据实例1所述的设备,其中所述第一存储器操作指定第一组数据,所
述第二存储器操作指定第二组数据,并且所述存储队列可用于在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个中存储。
[0219]
实例3包含根据实例2所述的设备,其中所述存储队列用于在一个循环中在所述第一高速缓存存储区或所述第二高速缓存存储区中的所述至少一个中存储所述第三组数据。
[0220]
实例4包含根据实例1所述的设备,其中所述存储队列可用于通过取消所述第一存储器操作的一部分来合并所述第一存储器操作和所述第二存储器操作。
[0221]
实例5包含根据实例4所述的设备,其中所述第一存储器操作的所述部分是所述第二存储器操作要写入的字节。
[0222]
实例6包含根据实例4所述的设备,其中所述部分是第一部分,所述存储队列可用于通过保持所述第一存储器操作的第二部分来合并所述第一存储器操作和所述第二存储器操作。
[0223]
实例7包含根据实例6所述的设备,其中所述第一存储器操作的所述第二部分是所述第二存储器操作不写入的字节。
[0224]
实例8包含根据实例1所述的设备,其中所述第一高速缓存存储区是主要高速缓存存储区,且所述第二高速缓存存储区是受害者高速缓存存储区。
[0225]
实例9包含一种系统,其包括:中央处理单元,其并联耦合到第一高速缓存存储区和第二高速缓存存储区;存储队列,其耦合到所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个,且可用于处理来自所述中央处理单元的第一存储器操作,所述第一存储器操作用于在所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个中存储所述第一组数据,并且可用于在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前合并对应于同一存储器地址的所述第一存储器操作和第二存储器操作。
[0226]
实例10包含根据实例9所述的系统,其中所述第一存储器操作指定第一组数据,所述第二存储器操作指定第二组数据,且所述存储队列可用于在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个中存储。
[0227]
实例11包含根据实例10所述的设备,其进一步包含用于在一个循环中在所述第一高速缓存存储区或所述第二高速缓存存储区中的所述至少一个中存储所述第三组数据的存储队列。
[0228]
实例12包含根据实例9所述的系统,其中所述存储队列可用于通过取消所述第一存储器操作的一部分来合并所述第一存储器操作和所述第二存储器操作。
[0229]
实例13包含根据实例12所述的系统,其中所述第一存储器操作的所述部分是所述第二存储器操作要写入的字节。
[0230]
实例14包含根据实例12所述的系统,其中所述部分是第一部分,所述存储队列可用于通过保持所述第一存储器操作的第二部分来合并所述第一存储器操作和所述第二存储器操作。
[0231]
实例15包含根据实例14所述的系统,其中所述第一存储器操作的所述第二部分是所述第二存储器操作不写入的字节到
[0232]
实例16包含根据实例9所述的系统,其中所述第一高速缓存存储区是主要高速缓存存储区,且所述第二高速缓存存储区是受害者高速缓存存储区。
[0233]
实例17包含一种方法,其包括获得第一存储器操作,通过用处理器执行指令来处理所述第一存储器操作以在第一高速缓存存储区和第二高速缓存存储区中的至少一个中存储第一组数据,获得第二存储器操作,并在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前,通过用所述处理器执行指令来合并所述第一存储器操作和所述第二存储器操作。
[0234]
实例18包含根据实例17所述的方法,其中所述第一存储器操作对应于第一组数据,且所述第二存储器操作对应于第二组数据,所述方法进一步包含在所述第一高速缓存存储区和所述第二高速缓存存储区中的所述至少一个中存储所述第一组数据之前,合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据以在所述第一高速缓存存储区和所述第二高速缓存存储区中的至少一个中存储。
[0235]
实例19包含根据实例18所述的方法,其进一步包含在一个循环中在所述第一高速缓存存储区或所述第二高速缓存存储区中的所述至少一个中存储所述第三组数据。
[0236]
实例20包含根据实例17所述的方法,其进一步包含通过取消所述第一存储器操作的一部分来合并所述第一存储器操作和所述第二存储器操作。
[0237]
l1高速缓存中的经优化原子操作和直方图操作支持
[0238]
原子操作是多部分存储器操作的其它实例。例如,原子比较和交换操作基于存储在存储器位置处的现有值的比较结果而操纵存储在所述存储器位置处的值。例如,如果存储在l1高速缓存110中的现有值匹配特定值,那么cpu 102可能想要用新值替代存储在l1高速缓存110中的数据。
[0239]
在一些实例系统中,在cpu想要执行原子操作时,cpu向存储器地址发送读取操作,对读取数据执行操纵,然后执行到相同存储器地址的写入操作以存储经操纵数据。并且,在此类实例系统中,l1高速缓存暂停、拒绝、阻止和/或中断来自其它装置(例如,cpu的其它核心、更高层级高速缓存、经扩展存储器等)的任何事务,直到原子操作完成为止(例如,以避免在原子操作期间操纵对应于原子操作的存储器地址)。因此,此类实例技术需要代表cpu进行大量工作,并需要大量保留循环,这会增加时延。
[0240]
在图4a的实例中,实例主要高速缓存存储队列212结合读取修改写入结构处理原子操作。以此方式,实例cpu 102可向l1高速缓存110发送单个原子操作,并且主要高速缓存存储队列212处理原子数据操纵和写入操作。因此,cpu 102使用单个循环来执行原子操作,并且可使用其它循环(例如,用于一些实例原子协议)以执行其它功能,由此减小整个计算系统100的时延。
[0241]
在操作中,在cpu 102传输原子操作和/或原子比较和交换操作以将存储器地址处的数据增加值1和/或交换时,例如,原子指令由锁存器402a接收,并且标签ram 208验证存储器地址是否存储在实例主存储区214中。如果存储器地址存储在实例主存储区214中,那么标签ram 208指示实例主存储区214输出存储器地址处的数据,同时原子指令被传递到实例锁存器402b。当主存储区214将数据输出到锁存器322a时,实例锁存器402b将原子操作输
出到锁存器402c。此时,ecc逻辑310执行错误检测和/或校正协议,如上文所描述,并且来自存储器地址位置的数据转发到实例算术组件404(例如,用于原子操作)或原子比较组件406(例如,用于原子比较和交换操作)。算术组件404获得原子操作(例如,包含识别如何操纵数据的数据),和/或原子比较和交换406从锁存器402c获得原子比较和交换操作(例如,包含将在关键字匹配读取数据的情况下写入的关键字和数据),并从ecc逻辑310的输出获得来自对应存储器地址的数据。算术组件404执行数据操纵(例如,使数据增加1)和/或原子比较组件406可执行交换(在读取数据匹配关键字的情况下替代数据,等等)并经由实例mux 410输出对应存储器地址的经增加和/或换入数据(例如,原子结果)到实例锁存器402d。(例如,其经由高速缓存控制器220启用)。锁存器402d将对应于存储器地址的新数据输出到ecc生成器412以生成ecc位,并且仲裁管理器414结合实例主存储区214中的ecc位将新数据(例如,原子结果和/或原子比较和交换结果)写入到存储器地址。另外或替代地,edd逻辑412之外的校正值返回到cpu 102。因此,原子操作仅利用来自cpu 102的一个指令执行。
[0242]
原子比较组件406和/或算术组件404具有若干输入。例如,原子组件406接收(例如,获得)要执行的原子操作类型(例如,原子比较和交换或原子交换)、要换入的新数据、从高速缓存310读出的ecc校正数据以及在原子操作期间操纵的数据大小(例如,32位或64位)。在图4b的实例电路实施方案450中,原子比较组件406接收原子比较和交换操作,并且算术组件404接收原子操作。原子比较组件406比较由cpu 102提供的比较值(例如,关键字)与ecc数据310。在匹配时,新数据代替旧数据(例如,ecc数据310)换入并输出到mux 410。换入的新数据的大小通过cas_acc_sz输入确定(例如,32位或64位)。在图4c的实例电路实施方案450中,原子比较组件406还可接收原子交换操作。原子比较组件406将换入替代ecc数据310的新数据,而不管比较结果如何,并将新值输出到mux 410,来自所述地址的旧数据从主存储区214读取并被提供回到cpu 102。换入的新数据的大小通过cas_acc_sz输入确定(例如,32位或64位)。在图4c的实例电路实施方案450中,算术组件404还可接收原子操作。算术组件404将操纵ecc数据310并在主要存储元件214中存储经操纵数据。换入的新数据的大小通过cas_acc_sz输入确定(例如,32位或64位)。尽管图4c的实例电路450在上文结合主要存储队列所描述,但是电路450可以结合受害者存储队列加以描述,如下文结合图11a进一步描述。
[0243]
图4c示出图4a的主要高速缓存存储队列212的部分和/或图11a的受害者高速缓存存储队列216的部分的实例电路图。图4c示出算术单元404、1104的详细电路图。
[0244]
算术单元404可用于其它类型的存储器事务,例如直方图操作。直方图操作检索存储在存储器中的可表示直方图的块组的值,然后直方图操作在将值存储回到相同存储器地址或替代地址之前修改值。在实例中,第一数据集含有值[0,0,2,0,0,3],且第二数据集含有表示第一数据集内的相应值的出现次数的块组。在没有算术单元404的一些实例系统中,为了执行直方图函数,cpu读取第一数据集中的每一者,并针对每一值使第二数据集增加。例如,为了确定有多少个0存储在10字节数据集中,cpu可执行10次读取。然后,为了确定在相同数据集中有多少个1,cpu将多执行10次读取。因此,为了执行直方图操作,此类系统可能需要执行(n)(m)读取,其中n是被读取的存储器区段的大小(例如,10个字节),m是可在每个字节中存储的值的数目。如同原子操作,l1sram可能需要对所有其它读取和/或写入操作进行阻止、暂停、中断、舍弃等,直到直方图操作完成为止。相比之下,算术单元404可用于利
用来自cpu的单个事务执行相同操作。
[0245]
算术单元404、1104具有若干输入,包含直方图的类型(例如,加权或增加、带符号或无符号)、直方图大小(例如,字节、半字或字)、直方图权重(例如,针对经加权直方图的每个选定块组要添加的带符号权重、针对正常直方图等于一的权重)、直方图符号(例如,带符号或无符号的现有位)和直方图饱和启用。
[0246]
图4c的组件451针对图4c中所示的组选择从ecc组件310读出的块组。组件452从cpu 102提供的权重向量选择要添加到块组中的权重。cnt_value是来自组件451的块组值和cpu 102提供的权重的总和。组件453、组件454和组件458用作饱和电路的部分。组件453接收直方图大小(字节、半字或字)和计数值(组件451、452的输出的总和),并确定带符号块组是否将饱和。组件454接收直方图大小(字节、半字或字)和计数值(组件451、452的输出的总和),并确定无符号块组是否将饱和。组件453和454的输出发送到mux,其基于选定的块组种类(例如,带符号或无符号)而选择是使用带符号饱和值还是使用无符号饱和值。组件458接收mux的输出、直方图饱和启用、直方图类型(例如,带符号或无符号)、块组的符号位以及权重的符号位,并输出针对选定饱和种类调整的经更新cnt_value(例如,基于上表1)。组件455、456、457用于将所得cnt_value和字节启用定位在正确位位置以将新数据组写入到正确块组。
[0247]
在图4a的实例中,cpu 102指示主存储区214执行直方图操作。由此将cpu 102必须为操作保留的循环数目从(n)(m)变成1。并且,因为原子操作协议已经在存储队列中实施,所以直方图操作可以使用算术组件404通过针对存储器的大小n执行n次读取并针对实例主要高速缓存存储队列212中的每一值增加计数来执行,由此将读取操作数目从(n)(m)个操作减少到n个操作。
[0248]
在操作中,在cpu 102传输对应于主存储区214的区段(例如,sram行)的直方图操作时,直方图操作存储在实例锁存器402a中,同时标签ram 208验证对应于直方图操作的存储器地址在主存储区214中是否可用。实例高速缓存控制器220促进在直方图操作中识别的区段的每个字节的读取操作(例如,其中直方图块组通过同时读取最多128个字节来并行存取)。若可用,标签ram 208指示主存储区214输出主存储区214的区段的第一字节处的数据,同时直方图操作由实例锁存器402a输出到实例锁存器402b。在实例主存储区214向实例锁存器322a输出已经从存储器地址读取的数据时,锁存器402b将直方图操作输出到实例锁存器402c。在ecc逻辑310执行错误检测和校正功能之后,所述字节处的数据读取发送到实例算术组件404。
[0249]
在接收到来自ecc逻辑310的读取值和来自锁存器402c的直方图指令之后,算术组件404发起表示直方图的数据。例如,算术组件404可发起针对可存储在主存储区的字节中的每个可能值具有初始值(例如,零)的向量(例如,表示直方图)。算术组件404基于ecc逻辑310的输出(例如,读取字节)使向量的值增加。例如,如果字节的读取值是0,那么算术组件404增加向量中对应于0的值。
[0250]
因为每个向量是并行增加的,所以所得向量对应于已在sram的对应区段中并行读取的值的直方图。因为直方图的值针对每一位增加,所以所得向量是存储在识别于来自cpu 102的直方图操作中的存储器的区段中的值的直方图。在一些实例中,算术组件404可并行增加某一加权值(例如,1.5)。在完成时,实例直方图输入到实例mux 418(例如,由实例未决
存储地址表416控制)已经由实例锁存器402e输入到mux 314。一旦操作完成,实例高速缓存控制器220就控制mux 314经由实例锁存器322b输出最后直方图向量到实例cpu接口202,由此结束直方图操作。
[0251]
在一些实例中,l1高速缓存110支持其中直方图块组可在直方图块组包含大于阈值极限的块组仓大小(例如,字节、半字、字等)之后饱和的功能。下表1示出饱和值的实例。使用此功能,直方图块组值一旦达到最大值就不会再滚动。
[0252]
表1
‑
直方图饱和值
[0253]
ꢀꢀ
饱和饱和非饱和非饱和
ꢀꢀ
最小值最大值最小值最大值字节带符号0x800x7f0x800x7f字节无符号0x00xff0x00xff半字带符号0x80000x7fff0x80000x7fff半字无符号0x00xffff0x00xff字带符号0x8000_00000x7fff_ffff0x8000_00000x7fff_ffff
[0254]
本文中描述用于促进经优化原子和直方图操作的实例方法、设备、系统和制品。其它实例及其组合包含以下:实例1包含一种系统,其包括耦合到算术组件的高速缓存存储区和耦合到所述高速缓存存储区的高速缓存控制器,其中所述高速缓存控制器可用于接收指定一组数据的存储器操作,从所述高速缓存存储区检索所述一组数据,使用所述算术组件确定所述一组数据中的相应值的一组计数,生成表示所述一组计数的向量,并提供所述向量。
[0255]
实例2包含根据实例1所述的系统,其中所述高速缓存控制器可用于提供所述向量以在所述高速缓存存储区中存储。
[0256]
实例3包含根据实例1所述的系统,其中所述高速缓存控制器可用于将所述向量提供到处理器。
[0257]
实例4包含根据实例1所述的系统,其进一步包含耦合到所述高速缓存控制器的存储队列,所述存储队列包含所述算术组件。
[0258]
实例5包含根据实例1所述的系统,其中所述高速缓存存储区是主要高速缓存存储区或受害者高速缓存存储区中的至少一个。
[0259]
实例6包含根据实例1所述的系统,其中所述算术组件将:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述一组数据,以及(b)经由锁存器从中央处理单元获得所述存储器操作。
[0260]
实例7包含根据实例1所述的系统,其中所述高速缓存控制器可用于基于在单个循环中来自所述中央处理单元的单个指令将所述向量提供到中央处理单元。
[0261]
实例8包含一种系统,其包括高速缓存存储区,以及耦合到所述高速缓存存储区的高速缓存控制器和算术组件,其中所述高速缓存控制器可用于接收指定第一组数据的存储器操作和算术操作,从所述高速缓存存储区检索所述第一组数据,使用所述算术组件对所述第一组数据执行所述算术操作以产生第二组数据,并提供所述第二组数据。
[0262]
实例9包含根据实例8所述的系统,其中所述高速缓存控制器可用于提供所述第二组数据以在所述高速缓存存储区中存储。
[0263]
实例10包含根据实例8所述的系统,其中所述高速缓存控制器可用于将所述第二组数据提供到处理器。
[0264]
实例11包含根据实例8所述的系统,其进一步包含耦合到所述高速缓存控制器的存储队列,所述存储队列包含所述算术组件。
[0265]
实例12包含根据实例8所述的系统,其中所述高速缓存存储区是主要高速缓存存储区或受害者高速缓存存储区中的至少一个。
[0266]
实例13包含根据实例8所述的系统,其中所述算术组件将:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述第一组数据,以及(b)经由锁存器从中央处理单元获得所述存储器操作。
[0267]
实例14包含根据实例8所述的系统,其中所述高速缓存控制器可用于基于在单个循环中来自所述中央处理单元的单个指令将所述第二组数据提供到中央处理单元。
[0268]
实例15包含一种方法,其包括:获得指定一组数据的存储器操作,从高速缓存存储区获得所述一组数据,确定所述一组数据中的相应值的一组计数,生成表示所述一组计数的向量,并提供所述向量。
[0269]
实例16包含根据实例15所述的方法,其中所述向量提供给所述高速缓存存储区。
[0270]
实例17包含根据实例15所述的方法,其中所述向量提供给处理器。
[0271]
实例18包含根据实例15所述的方法,其中所述高速缓存存储区是主要高速缓存存储区或受害者高速缓存存储区中的至少一个。
[0272]
实例19包含根据实例15所述的方法,其进一步包含:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述一组数据,以及(b)经由锁存器从中央处理单元获得所述存储器操作。
[0273]
实例20包含根据实例15所述的方法,其中所述将所述向量提供到中央处理单元是基于在单个循环中来自所述中央处理单元的单个指令。
[0274]
一致性系统的l1高速缓存中的原子比较和交换支持
[0275]
如果来自某一地址的数据存储在l1高速缓存110中,那么相同地址的数据还可高速缓存于其它高速缓存(例如,l2高速缓存112和/或l3高速缓存114)中。因此,存储器地址需要进行跟踪和/或监测,以确保一个高速缓存中的数据的任何变化都被识别、跟踪和/或反映到其它高速缓存(例如,l2高速缓存112和l3高速缓存114)。如上文结合图3a
‑
3d所描述,实例mesi ram 300跟踪存储在主存储区214中的数据状态,以便能够避免对应于相同存储器地址的不同高速缓存中的数据不匹配的问题。例如,如果cpu 102传输读取操作,那么实例mesi ram 300将存储器地址的状态变成共享,因为存储器地址中的数据将不被操纵。如果cpu 102传输写入操作,那么实例mesi ram 300将存储器地址的状态变成独占,因为存储器地址中的数据将被操纵,且主存储区214需要地址的写入权限。在存储器地址中的数据写入到主存储区214之后,mesi ram 300将存储器地址的状态更新为修改(例如,指示存储器地址已修改)。
[0276]
如上文所描述,在原子和/或直方图协议期间,来自某一存储器地址的数据从主存储区214读取并被提供给主要高速缓存存储队列212以供更新(例如,增加)和写回到主存储区214中。但是,如果mesi ram 300已将对应存储器地址的状态识别为处于共享状态,那么原子协议的写入操作可导致与其它层级高速缓存的问题(例如,因为写入将使不同高速缓
存中的数据不匹配)。
[0277]
为了在原子操作(例如,包含原子比较和交换)期间避免此类数据不匹配,实例高速缓存控制器220将对应于共享状态的高速缓存命中标记为高速缓存未命中。以此方式,高速缓存控制器220可指示l2接口228利用独占状态请求向更高层级高速缓存发送高速缓存未命中。以此方式,更高层级高速缓存可准予对l1高速缓存110的独占状态,并且l1高速缓存110可响应于接收到准予的独占状态而执行读取和写入操作作为原子操作的部分。
[0278]
在具有独占请求的高速缓存未命中发送到更高层级高速缓存且更高层级高速缓存利用写入数据和独占响应来进行响应之后,实例原子操作逻辑406将指示mesi ram 300将数据标记为修改。从l2高速缓存112接收到的数据传输到主要高速缓存存储队列212中以存储在主存储区214中。因为操作是原子操作(例如,常规原子操作或原子比较和交换)或直方图协议,所以来自更高层级高速缓存的数据被用于操纵的实例算术组件404和/或实例原子比较组件406操纵,并经由实例ecc生成器412和实例仲裁管理器414存储在实例主存储区215中。
[0279]
本文中描述用于促进原子比较和交换的实例方法、设备、系统和制品。其它实例及其组合包含以下:实例1包含一种系统,其包括高速缓存存储区、耦合到所述高速缓存存储区的高速缓存控制器,其中所述高速缓存控制器可用于接收指定关键字、存储器地址和第一组数据的存储器操作,检索对应于所述存储器地址的第二组数据,比较所述第二组数据与所述关键字,基于所述第二组数据对应于所述关键字,使所述第一组数据存储在所述存储器地址处,并基于所述第二组数据不对应于所述关键字,完成所述存储器操作而不使所述第一组数据存储在所述存储器地址处。
[0280]
实例2包含根据实例1所述的系统,其进一步包含用于所述高速缓存存储区的存储队列,所述存储队列包含:锁存器,其用于与标签随机存取存储器(ram)介接以从所述高速缓存存储区检索所述第二组数据;原子比较组件,所述高速缓存控制器使所述原子比较组件比较所述第二组数据与所述关键字,并在所述关键字不匹配所述第二组数据的情况下舍弃所述第一组数据;及仲裁管理器,其用于在所述关键字匹配所述第二组数据的情况下将所述第一组数据存储在所述高速缓存存储区中的所述存储器地址处。
[0281]
实例3包含根据实例1所述的系统,其中所述高速缓存存储区是主要高速缓存存储区或受害者高速缓存存储区中的至少一个。
[0282]
实例4包含根据实例2所述的系统,其中所述锁存器是第一锁存器,所述原子比较组件用于:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述第二组数据,以及(b)经由第二锁存器从所述第一锁存器获得所述原子比较和交换命令。
[0283]
实例5包含根据实例1所述的系统,其中所述高速缓存控制器可用于基于在单个循环中来自中央处理单元的单个指令完成所述存储器操作。
[0284]
实例6包含根据实例1所述的系统,其进一步包含修改、独占、共享、无效(mesi)组件,用于确定所述存储器操作的所述存储器地址的状态,并且所述高速缓存控制器可用于在所述存储器操作的所述存储器地址对应于共享状态的情况下向另一高速缓存提供未命中指令,所述未命中指令包含独占状态请求。
[0285]
实例7包含根据实例6所述的系统,其中所述高速缓存控制器将在来自所述另一高速缓存的所述独占状态请求被准予之后,在所述第一数据匹配所述关键字的情况下,使仲
裁管理器将所述第一组数据存储在所述高速缓存存储区中的所述存储器地址处。
[0286]
实例8包含根据实例6所述的系统,其中所述高速缓存控制器在来自所述另一高速缓存的所述独占状态请求被准予之后使标签ram从所述高速缓存存储区的所述存储器地址检索所述第二组数据。
[0287]
实例9包含一种用于高速缓存存储区的存储队列,所述存储队列包括:锁存器,其用于检索指定关键字、存储器地址和第一组数据的存储器操作,并检索对应于所述存储器地址的第二组数据;及原子比较组件,其用于比较所述第二组数据与所述关键字,基于所述第二组数据对应于所述关键字,使所述第一组数据存储在所述存储器地址处,并基于所述第二组数据不对应于所述关键字,完成所述存储器操作而不使所述第一组数据存储在所述存储器地址处。
[0288]
实例10包含根据实例9所述的存储队列,其中所述高速缓存存储区是主要高速缓存存储区或受害者高速缓存存储区中的至少一个。
[0289]
实例11包含根据实例9所述的存储队列,其中所述锁存器是第一锁存器,所述原子比较组件到:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述第二组数据,以及(b)经由第二锁存器从所述第一锁存器获得所述原子比较和交换命令。
[0290]
实例12包含根据实例9所述的存储队列,其中,如果所述第一数据匹配所述关键字,那么所述存储队列基于在单个循环中来自中央处理单元的单个指令而执行所述原子比较和交换命令。
[0291]
实例13包含根据实例9所述的存储队列,其进一步包含:修改、独占、共享、无效(mesi)组件,用于确定所述存储器操作的所述存储器地址的状态;及接口,用于在所述存储器操作的所述存储器地址对应于共享状态时向另一高速缓存提供未命中指令,所述未命中指令包含独占状态请求。
[0292]
实例14包含根据实例13所述的存储队列,其进一步包含仲裁管理器,用于在来自所述另一高速缓存的所述独占状态请求被准予之后,在所述第一数据匹配所述关键字的情况下将所述第一组数据存储在所述存储器地址处。
[0293]
实例15包含根据实例13所述的存储队列,其中所述锁存器将在来自所述另一高速缓存的所述独占状态请求被准予之后与标签ram介接以读取所述第二组数据。
[0294]
实例16包含一种方法,其包括:接收指定关键字、存储器地址和第一组数据的存储器操作,检索对应于所述存储器地址的第二组数据,比较所述第二组数据与所述关键字,基于所述第二组数据对应于所述关键字,使所述第一组数据存储在所述存储器地址处,并基于所述第二组数据不对应于所述关键字,完成所述存储器操作而不使所述第一组数据存储在所述存储器地址处。
[0295]
实例17包含根据实例16所述的方法,其进一步包含:与标签随机存取存储器(ram)介接以从高速缓存存储区检索所述第二组数据,比较所述第二组数据与所述关键字,以及在所述关键字不匹配所述第二组数据的情况下舍弃所述第一组数据,并在所述关键字匹配所述第二组数据的情况下将所述第一组数据存储在所述高速缓存存储区中的所述存储器地址处。
[0296]
实例18包含根据实例17所述的方法,其进一步包含:(a)经由错误检测和校正电路的所述第二组数据,以及(b)来自中央处理单元的所述存储器操作。
[0297]
实例19包含根据实例16所述的方法,其中所述完成所述存储器操作是基于在单个循环中来自中央处理单元的单个指令。
[0298]
实例20包含根据实例16所述的方法,其进一步包含:确定所述存储器操作的所述存储器地址的状态,以及在所述存储器操作的所述存储器地址对应于共享状态的情况下向另一高速缓存提供未命中指令,所述未命中指令包含独占状态请求。
[0299]
用于存储队列中的未决写入的飞行中数据转发和失效的方法和设备
[0300]
在本文中所描述的实例中,在cpu 102发出读取操作时,标签ram存取204、206确定读取操作命中还是未命中主要存储元件214和/或受害者存储元件218。在标签ram存取204、206确定读取命令未命中主要存储元件214和受害者存储元件214的实例中,高速缓存控制器220向主要存储元件214发送创建受害者的操作(例如,以确定主要存储元件214中要逐出的行)。在一些实例中,问题可在主要存储元件214逐出对应于未决写入的行时出现。例如,当前具有要通过存储队列212写入的数据的主要存储元件214中的行可具有位于锁存器402a
‑
d中的任一个中的未决写入。在一些实例中,在新地址替代主要存储元件214中已被逐出的行且存储队列212仍在尝试将来自先前写入操作的数据写入到相同行中时,可发生错误。
[0301]
本文中所描述的实例包含将在高速缓存控制器220确定读取操作是读取未命中时发出至存储队列212的读取无效操作。在主要存储元件214创建受害者时,高速缓存控制器220向存储队列212发送读取无效操作。读取无效操作通知存储队列212比较受害者的地址与存储在锁存器402a
‑
d中的所有地址。如果锁存器402a
‑
d中有任何地址匹配受害者的地址,那么优先级复用器418向锁存器402e发送匹配地址中的数据以将数据传输到mux电路314。此类操作可以称为飞行中数据的数据转发。例如,在优先级复用器418经由锁存器402e向mux电路314发送对应于受害者的数据时,mux电路314将受害者的数据转发到受害者存储元件218和/或l2高速缓存112。并且,在锁存器402a
‑
d包含对应于受害者的地址时,读取无效操作使存储在锁存器402a
‑
d中的数据无效。例如,锁存器402a
‑
d中的每一个包含有效标签。有效标签向锁存器402a
‑
d指示数据是否将存储在主要存储元件214中。在读取无效操作使有效标签无效时,锁存器402a
‑
d中断将无效数据写入到主要存储元件214。
[0302]
在实例操作中,cpu 102发出写入操作。在一些实例中,写入操作对应于地址a。
[0303]
例如:
[0304]
写入操作=写入(地址a):数据1//将数据1写入到对应于地址a的高速缓存线
[0305]
存储队列212获得写入操作,并开始将数据写入到主要存储元件214的地址a的过程。在一些实例中,地址a对应于主要存储元件214中的高速缓存线1。随后,cpu 102发出读取操作。在一些实例中,读取操作对应于地址b。例如:
[0306]
读取操作=读取(地址b)//读取高速缓存线中对应于地址b的数据2
[0307]
实例标签ram存取204、206检查标签ram 208和标签ram 210中的地址,并确定标签ram 208、210均不包含地址b。高速缓存控制器220从标签ram存取204、206获得读取未命中结果,并发出分配操作以确定主要存储元件214中要逐出到受害者存储元件218和/或l2高速缓存112的受害者。在高速缓存控制器220获得对应于受害者的响应时,高速缓存控制器220发出读取无效操作到存储队列212。
[0308]
存储队列212的读取端口424获得读取无效操作并获得受害者的地址。读取端口
424将受害者的地址发送到数据存储区416以与存储在锁存器402a
‑
d中的所有地址比较。如果数据存储区416确定存储在锁存器402a
‑
d中的任一个地址匹配受害者的地址,那么数据存储区416向优先级复用器418输出将对应于受害者地址的数据发送到锁存器402e的操作。锁存器402e将数据转发到mux电路314以发送到受害者存储元件218和/或l2高速缓存112。
[0309]
并且,响应于存储在锁存器402a
‑
d中的地址匹配受害者地址,锁存器402a
‑
d使对应于受害者地址的数据无效。例如,锁存器402a
‑
d中的有效标签经更新以指示锁存器中对应于受害者地址的数据无效。在此实例中,存储队列212将不尝试向对应于被逐出的先前地址的高速缓存线写入所述数据。
[0310]
本文中描述用于飞行中数据转发和失效的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0311]
实例1包含一种设备,其包括高速缓存存储区、高速缓存控制器,所述高速缓存控制器耦合到所述高速缓存存储区且可用于接收第一存储器操作,确定所述第一存储器操作对应于所述高速缓存存储区中的读取未命中,响应于所述读取未命中而确定所述高速缓存存储区中要逐出的受害者地址,发出指定所述受害者地址的读取无效命令,比较所述受害者地址和与正由所述高速缓存控制器处理的一组存储器操作相关联的一组地址,并响应于所述受害者地址匹配所述一组地址中对应于所述一组存储器操作中的第二存储器操作的第一地址,提供与所述第二存储器操作相关联的数据。
[0312]
实例2包含根据实例1所述的设备,其中所述高速缓存控制器将在标签随机存取存储器存取发出读取未命中时发出所述读取无效命令。
[0313]
实例3包含根据实例1所述的设备,其中所述高速缓存控制器将确定要从所述高速缓存存储区逐出以为第三存储器操作的数据腾出空间的所述受害者地址。
[0314]
实例4包含根据实例1所述的设备,其中所述高速缓存控制器可用于中断在所述高速缓存存储区中写入与所述第二存储器操作相关联的数据。
[0315]
实例5包含根据实例1所述的设备,其进一步包含第一锁存器、第二锁存器、第三锁存器和第四锁存器,其中所述第一锁存器、所述第二锁存器、所述第三锁存器或所述第四锁存器将存储所述受害者地址的数据。
[0316]
实例6包含根据实例5所述的设备,其中所述第一锁存器、所述第二锁存器、所述第三锁存器和所述第四锁存器包含有效标签,所述有效标签将在所述第一锁存器、所述第二锁存器、所述第三锁存器或所述第四锁存器中的任一个存储所述受害者地址的所述数据时更新成无效。
[0317]
实例7包含根据实例1所述的设备,其进一步包含读取端口,用于在所述读取端口获得所述读取无效命令和所述受害者地址时,发起所述受害者地址和与正由所述高速缓存控制器处理的所述一组存储器操作相关联的所述一组地址之间的比较。
[0318]
实例8包含一种使写入操作无效的方法,所述方法包括:接收第一存储器操作,确定所述第一存储器操作对应于高速缓存存储区中的读取未命中,响应于所述读取未命中而确定所述高速缓存存储区中要逐出的受害者地址,发出指定所述受害者地址的读取无效命令,比较所述受害者地址和与正由高速缓存控制器处理的一组存储器操作相关联的一组地址,并响应于所述受害者地址匹配所述一组地址中对应于所述一组存储器操作中的第二存储器操作的第一地址,提供与所述第二存储器操作相关联的数据。
[0319]
实例9包含根据实例8所述的方法,其进一步包含当标签随机存取存储器存取发出读取未命中时发出所述读取无效命令。
[0320]
实例10包含根据实例8所述的方法,其进一步包含确定要从所述高速缓存存储区逐出以为第三存储器操作的数据腾出空间的所述受害者地址。
[0321]
实例11包含根据实例8所述的方法,其进一步包含中断在所述高速缓存存储区中写入与所述第二存储器操作相关联的所述数据。
[0322]
实例12包含根据实例8所述的方法,其进一步包含在第一锁存器、第二锁存器、第三锁存器和第四锁存器中的至少一个中存储所述受害者地址的数据。
[0323]
实例13包含根据实例12所述的方法,其进一步包含当所述第一锁存器、所述第二锁存器、所述第三锁存器和所述第四锁存器中的任一个存储所述受害者地址的所述数据时将所述第一锁存器、所述第二锁存器、所述第三锁存器或所述第一锁存器的有效标签更新成无效。
[0324]
实例14包含根据实例8所述的方法,其进一步包含当读取端口获得所述读取无效命令和所述受害者地址时,发起所述受害者地址和与正由所述高速缓存控制器处理的所述一组存储器操作相关联的所述一组地址之间的比较。
[0325]
实例15包含一种系统,其包括用于输出第一存储器操作的中央处理单元、耦合到所述中央处理单元的高速缓存,所述高速缓存包含高速缓存存储区、高速缓存控制器,所述高速缓存控制器耦合到所述高速缓存存储区且可用于接收所述第一存储器操作,确定所述第一存储器操作对应于所述高速缓存存储区中的读取未命中,响应于所述读取未命中而确定所述高速缓存存储区中要逐出的受害者地址,发出指定所述受害者地址的读取无效命令,比较所述受害者地址和与正由所述高速缓存控制器处理的一组存储器操作相关联的一组地址,并响应于所述受害者地址匹配所述一组地址中对应于所述一组存储器操作中的第二存储器操作的第一地址,提供与所述第二存储器操作相关联的数据并使所述第二存储器操作无效。
[0326]
实例16包含根据实例15所述的系统,其中所述高速缓存是第一高速缓存,并且其中所述第一高速缓存可用于响应于所述高速缓存存储区不包含与所述第一存储器操作相关联的所述数据,从第二高速缓存检索与所述第一存储器操作相关联的数据。
[0327]
实例17包含根据实例15所述的系统,其中所述高速缓存包含用于在多个时钟循环中将所述第二存储器操作的写入数据存储到所述高速缓存存储区中的存储队列,每个时钟循环将与所述第二存储器操作相关联的所述数据的至少一个部分写入到所述高速缓存存储区。
[0328]
实例18包含根据实例17所述的系统,其中所述高速缓存是第一高速缓存,并且其中所述高速缓存控制器可用于在所述第二存储器操作无效时将所述存储队列中剩余的数据部分提供到第二高速缓存用于存储。
[0329]
实例19包含根据实例15所述的系统,其中所述高速缓存包含用于存储未决写入的存储队列,所述第二存储器操作对应于未决写入。
[0330]
实例20包含根据实例15所述的系统,其中所述中央处理单元在输出所述第二存储器操作之后输出所述第一存储器操作。图5示出图1和3的一级(l1)高速缓存110的实例基于受害者高速缓存的区段。图5包含标签ram 210、受害者存储区218、mesi ram300、实例命中/
未命中比较逻辑306a、306b、306c、实例替代策略308(例如,替代策略组件308)、实例地址编码器326a、326b、326c、实例复用器(mux)330a、330b、330c、实例地址读取332a、332b、332c、实例标量接口502、实例向量接口504、实例监听地址组件506和实例响应复用器508。图5示出支持双数据路径和一致性管线的受害者高速缓存系统。
[0331]
在图5中,实例标量接口502是将图1的数据高速缓存108的l1高速缓存110耦合到实例处理核心104a的接口。在一些实例中,标量接口502是对应于双数据路径受害者高速缓存系统中的第一数据路径(dp0)的接口。在一些实例中,标量接口502是对应于双数据路径高速缓存系统中的第二数据路径(dp1)的接口。实例标量接口502是64位宽双向和/或单向接口。替代地,实例标量接口502可支持不同数量的位(例如,32位、128位等)。在一些实例中,标量接口502从核心104a接收和/或获得数据。在一些实例中,标量接口502将数据从受害者存储区218发送到核心104a。实例标量接口502耦合到实例标签ram 210和比较逻辑306,以比较来自cpu 102的地址与标签ram 210中的地址。
[0332]
在图5中,实例向量接口504是将图1的数据高速缓存108的l1高速缓存110耦合到实例处理核心104a的接口。在一些实例中,向量接口504是对应于双数据路径高速缓存系统中的第二数据路径(dp1)的接口。在一些实例中,向量接口504是对应于双数据路径高速缓存系统中的第一数据路径(dp0)的接口。实例向量接口504是512位宽接口。替代地,实例向量接口504可支持不同数量的位(例如,256位、1024位等)。在一些实例中,向量接口504从核心104a接收和/或获得数据。在一些实例中,向量接口504将数据从受害者存储区218发送到核心104a。实例向量接口504耦合到实例标签ram 210、监听地址组件506和比较逻辑306b,以比较来自cpu 102的地址与来自标签ram 210的地址。在一些实例中,标量接口502和向量接口504由cpu接口202(图2)实施。例如,标量接口502和向量接口504可包含在cpu接口202中。
[0333]
在图5中,实例标签ram 210连接到实例接口502、504。但是,在一些实例中,标签ram 210可经由实例受害者标签ram存取206(图2)耦合到接口502、504。实例标签ram 210是双端口完全关联标签ram,用于支持双数据路径(例如,标量数据路径和向量数据路径)。如本文中所使用,完全关联标签ram 210准许来自主存储区214(图2)的数据存储在任何高速缓存块中,而不是强制每个存储器地址到一个特定块中。在一些实例中,因为标签ram 210是完全关联的,所以受害者存储区218也是完全关联的。
[0334]
在图5中,比较逻辑306a连接到标量接口502、标签ram 210、地址编码器326a和替代策略组件308。比较逻辑306b连接到向量接口504、标签ram 210、地址编码器326b和替代策略组件308。比较逻辑306a、306b支持标量和向量数据路径。例如,比较逻辑306可比较标量数据与标签ram 210的数据和/或比较向量数据与标签ram 210的数据。比较逻辑306向替代策略组件308和地址编码器326a、326b提供命中或未命中输出。在一些实例中,比较逻辑306向复用器330a、330b提供命中或未命中输出。
[0335]
在图5中,实例替代策略组件308耦合到比较逻辑306a、306b。实例替代策略组件308是控制/决策产生逻辑。实例替代策略组件308基于多个输入指定实例受害者存储区218的条目(例如,数据)。例如,替代策略组件308可确定高速缓存控制器220(图2)是从受害者存储区218去除条目还是向受害者存储区218输入条目。替代策略组件308的控制逻辑配置成以一种使得数据一致性维持的方式解决这2个地址(例如,标量和向量)之间的地址冲突。
图6示出实例替代策略组件308的控制逻辑。
[0336]
在图5中,实例地址编码器326a、326b将存储器地址编码成一种可由受害者存储区218解译的形式。例如,地址编码器326a、326b的操作可类似于图3a
‑
3d的地址编码器326。实例地址编码器326a、326b向复用器330a、330b输出经编码地址。例如,地址编码器326a可向复用器330a输出经编码存储器地址,并且地址编码器326b可向复用器330b输出经编码存储器地址。
[0337]
在图5中,复用器330a、330b响应于执行比较逻辑306a、306b而选择地址。例如,复用器330a可从比较逻辑306a获得对应于命中的输入,并且因此从地址编码器326a选择经编码地址。另外和/或替代地,复用器330a可从比较逻辑306a获得对应于未命中的输入,并且因此选择替代策略组件308所选定的存储器地址。实例复用器330a、330b耦合到地址读取332a、332b。
[0338]
在图5中,实例地址读取332a、332b将复用器选定的地址值读取到受害者存储区218中。例如,地址读取332a、332b可识别要存储和/或要从受害者存储区218去除的地址。
[0339]
在图5中,实例受害者存储区218是完全关联高速缓存。例如,完全关联受害者存储区218可在数据从主存储区214提取(例如,受害)时将数据放置在高速缓存的任何未使用块中。数据在受害者存储区218中的放置是基于替代策略组件308。例如,替代策略组件308可确定来自主存储区214的一行数据应放置在受害者存储区218中的时间和位置。在一些实例中,在地址读取332a、332b将数据读取到受害者存储区218中时,受害者存储区218输出响应。在一些实例中,受害者存储区218生成dp0响应、dp1响应和监听响应,以传输到l2数据高速缓存112。在一些实例中,响应包含cpu 102所请求的数据。例如,基于地址读取332a、332b,如果cpu 102已请求此类数据,那么受害者存储区218可从存储器地址位置输出数据。另外和/或替代地,基于地址读取332a、332b,如果替代策略组件308正在替代受害者存储区218中的数据,那么受害者存储区218可将逐出数据输出到l2高速缓存112。
[0340]
在图5中,实例监听地址组件506由监听数据路径和/或以其它方式由接口实施。除了所述两个cpu数据路径(例如,dp0和dp1)之外,l1高速缓存110包含监听数据路径以向l1高速缓存110添加一致性。实例监听地址组件506连接到标签ram 210和比较逻辑306c。在一些实例中,监听地址组件506获得发出对标签ram 210的地址读取的更高层级数据高速缓存(例如,l2数据高速缓存112)所发出的实例监听请求地址。例如,监听地址组件506尝试从标签ram 210读取存储器地址。并且,监听地址组件506将地址读取提供到比较逻辑306c。监听地址组件506以及更一般来说的一致性管线用于在mesi ram 300中存储受害者存储区218中的每个高速缓存线的mesi状态。通过在mesi ram 300中存储每个高速缓存线的mesi状态,受害者高速缓存系统支持一致性。
[0341]
在图5中,实例mesi ram 300连接到比较逻辑306c。实例mesi ram 300通过基于比较逻辑306c将高速缓存线标记为修改、独占、共享或无效来跟踪主存储区214和受害者存储区218中的高速缓存线的状态。例如,在监听地址组件506发出对标签ram 210的读取时,标签ram 210返回或不返回正确存储器地址。因此,比较逻辑306c比较经监听发出读取的存储器地址和标签ram 210结果以确定高速缓存线的状态。
[0342]
在图5中所示的实例拓扑中,响应复用器508耦合到受害者存储区218和受害者高速缓存存储队列216。以此方式,响应复用器508配置成在通过受害者存储区214获得的数据
和/或通过受害者高速缓存存储队列216获得的数据之间进行选择,以传输系统最近的数据。优先级复用器508的实例操作描述在下文描述。
[0343]
用于具有双数据路径的多组受害者高速缓存的方法和设备
[0344]
在一些受害者高速缓存中,不支持多组架构。举例来说,受害者高速缓存可以是不支持处理器(例如,cpu)在相同时钟循环期间进行多次存取的整体式存储装置。例如,存取单个受害者高速缓存中的数据的请求可锁定整个受害者高速缓存。在此类实例中,存在单个能够支持每时钟循环存取一个完整受害者高速缓存线的寄存器堆。在一些此类实例中,与所述单个受害者存储区相关联的整个受害者高速缓存线可被锁定,以服务于请求,因为所述单个寄存器堆被分配给接收到此类请求的受害者存储区数据组。
[0345]
本文中所描述的实例包含具有双数据路径的多组受害者高速缓存。在一些所描述实例中,图2的受害者存储区218具有多个组,并且因此是多组的,或具有多组数据或存储器结构。有利地,受害者存储区218的多组结构可实现对每时钟循环两个或更多个存取(例如,cpu存取)的支持。有利地,受害者存储区218的多组结构允许服务和/或实现所述两个或更多个存取而不具有性能开销。
[0346]
在一些所描述实例中,受害者存储区218具有双端口完全关联标签ram(例如,图2的标签ram 210)。在一些所描述实例中,标量和向量地址均支持命中/未命中比较。在此类所描述实例中,基于每一个数据路径(例如,标量数据路径、向量数据路径等)的命中/未命中决策,锁定受害者存储区218。在对受害者存储区218的存取是命中的实例中,选择命中条目的位置。在对受害者存储区218的存取是未命中的实例中,针对一组特定受害者存储区218检查分配策略。
[0347]
在一些所描述实例中,在后续管级中,针对两个地址的选定组的受害者存储区218是读取,并且响应回到cpu。在一些所描述实例中,设定的选择逻辑以一种使得数据一致性维持的方式解决所述两个地址(例如,标量地址和向量地址)之间的地址冲突。在一些所描述实例中,控制逻辑同样解决地址冲突。
[0348]
在一些所描述实例中,组仲裁逻辑计算和/或以其它方式确定每一个地址所需的组并选择每一个组的读取。在一些所描述实例中,控制逻辑解决所述两个地址之间的任何组冲突以实现所述两个存储器操作的串行化。在两个数据路径均存取相同地址的一些所描述实例中,控制逻辑可实现不发出对相同地址的多个分配请求。一旦数据从受害者存储区218读取,那么实例数据复用逻辑可在将数据返回到cpu作为读取响应之前将数据折叠到正确数据通道中。
[0349]
图7a是第一实例经包封数据高速缓存系统700的示意性图示。第一经包封数据高速缓存系统700可以是图1的l1高速缓存110或其部分和/或更一般来说图1的数据高速缓存108或其部分的实例电路实施方案。第一经包封数据高速缓存系统700经包封以向外部系统(例如,一或多个cpu、一或多个处理器、外部硬件等)提供统一存储视图。例如,第一经包封数据高速缓存系统700可以使用固件、软件、硬件逻辑等和/或其组合包封,以包封和/或以其它方式抽象化与写入后读取(raw)危险、写入后写入(waw)危险、数据转发等有关的所有复杂性。有利地,在图7a的实例中描绘的统一架构可向外部系统(例如,cpu 102)提供单独端口,以简化获得对最近版本的所关注的数据的存取。
[0350]
在图7a的实例中,第一经包封数据高速缓存系统700包含图2的受害者高速缓存存
储队列216和图2的受害者存储区218。在图7a中,受害者高速缓存存储队列216包含多个第一实例可独立寻址组(例如,数据组、存储区组、数据存储区组等)702。例如,第一可独立寻址组702可以是组队列、组子队列等。在此类实例中,组队列、组子队列等可包含多个存储元件,如下文在图7c和/或图7e中描绘。第一可独立寻址组702是受害者高速缓存存储队列组(例如,受害者高速缓存存储队列数据组、受害者高速缓存组队列、受害者高速缓存组子队列等)。在图7a中,受害者高速缓存存储队列216包含16个受害者高速缓存存储队列组702。替代地,可存在比16个实例更少或更多的受害者高速缓存存储队列组702。
[0351]
在图7a中,受害者存储区218包含多个第二实例可独立寻址组(例如,数据组、存储区组、数据存储区组等)704。第二可独立寻址组704是受害者存储区组(例如,受害者存储区数据组)。在图7a中,受害者存储区218包含16个受害者存储区组704。替代地,可存在比16个实例更少或更多的受害者存储区组704。例如,受害者高速缓存存储队列216可包含多个组队列或组子队列,包含第一组队列或第一组子队列(例如,受害者高速缓存存储队列:组1),且受害者存储区218可包含多个数据组,包含第一数据组(例如,受害者存储区:组1)。
[0352]
在一些实例中,受害者高速缓存存储队列216和受害者存储区218各自具有256行,其中每一行具有1024位的线宽,并且划分成16个组,如图7a中所示,其中在给定组中每行64位。在一些实例中,受害者高速缓存存储队列216和受害者存储区218各自具有384行,其中每一行具有1024位的线宽,并且划分成16个组,如图7a中所示,其中在给定组中每行64位。当然,在上述实例中描述的高速缓存大小仅仅是两个实例,且描述不限于任何特定的高速缓存线宽度、组或行的数目等。如图7a中所描绘,每一个第一组702对应于第二组704中的一个。例如,受害者高速缓存存储队列216的第一组(组1)与具有受害者存储区218的第一组(组1)形成回路,并且因此与受害者存储区218的第一组对应。
[0353]
有利地,受害者高速缓存存储队列216、受害者存储区218和/或更一般来说第一经包封数据高速缓存系统700的多组结构可服务于并行发送到组的读取和写入操作。在一些实例中,每个组响应于读取和/或写入操作而仲裁其自身的过程。通过允许第一经包封数据高速缓存系统700的每个组独立操作,第一经包封数据高速缓存系统700的操作更高效,因为在接收到请求时,不会将整个高速缓存线锁定。相反,高速缓存线中仅有分配给接收到此类请求的组的部分会被锁定。
[0354]
图7c描绘实例受害者高速缓存多组结构720。在一些实例中,图1的l1高速缓存110、l2高速缓存112和/或l3高速缓存114可具有受害者高速缓存组结构720。在一些实例中,图2的受害者高速缓存存储队列216和/或图2的受害者存储区218可具有受害者高速缓存多组结构720。例如,受害者高速缓存多组结构720可以是受害者高速缓存存储队列216和/或受害者存储区218的实例实施方案。
[0355]
受害者高速缓存多组结构720是包含16个实例组(组0
‑
15)722的数据或存储器结构,其中每一个组722具有64字节(例如,字节0
‑
7)的数据宽度。每一个组722包含16个实例行(行0
‑
15)724,其中每一个行724具有128字节(例如,128字节=8字节/组*16组)的数据宽度。在图7c中,其中每一个组722可存储128字节(例如,128字节=8字节/行*16行)。在图7c中,受害者高速缓存多组结构720可存储2048字节(例如,2048字节=128字节/组*16组)。受害者高速缓存多组结构720可独立地通过组寻址。例如,行724中的第一行具有开始行地址0和结束行地址127,行724中的第二行具有开始行地址128和结束行地址255,以此类推。
[0356]
在一些实例中,高速缓存线可以是适配存储器(例如,dram)或存储单元(例如,主存储区214、受害者存储区218等)的宽度的128字节数据。在图7c的实例中,高速缓存线可占用受害者高速缓存组结构720的整个行。例如,高速缓存线可使用16个组的一个行724,其中每个组是8字节宽。有利地,受害者高速缓存组结构720可使得16个不同高速缓存线存取存储在其中的数据。
[0357]
图8a示出实例受害者高速缓存标签(vct)随机存取存储器(ram)800的示意性图示。vct ram 800可以是图2的标签ram 210的实例实施方案。例如,vct ram 800可存储在图2的受害者高速缓存存储队列216、受害者存储区218等等中存储的数据地址。vct ram 800是多组vct ram。例如,vct ram 800可包含多个组(例如,数据组、存储器组等),例如16组,但是vct ram 800可具有不同数量的组。
[0358]
vct ram 800包含实例分配端口802、804、806,包含第一实例分配端口(ap0)802、第二实例分配端口(ap1)804和第三实例分配端口(ap2)806。vct ram 800包含实例读取端口808、810、812,包含第一实例读取端口(rp0)808、第二实例读取端口(rp1)810和第三实例读取端口(rp2)812。vct ram 800包含实例lru读取端口814。vct ram 800包含实例输出端口816、818、820、822,包含第一实例输出端口(op0)816、第二实例输出端口(op1)818、第三实例输出端口(op2)820和第四实例输出端口(op3)822。替代地,vct ram 800可具有比图8a中描绘的更少或更多的分配端口、读取端口、lru读取端口和/或输出端口。
[0359]
vct ram 800包含分配端口802、804、806用于填充受害者存储区218。例如,分配端口802、804、806可配置成从外部硬件(例如,cpu 102、主存储区214等)接收在受害者存储区218中存储数据的请求。第一分配端口802配置成接收第一实例数据824。例如,第一分配端口802可从与标量数据路径(dp0)相关联的写入状态机接收第一数据824。第一数据824包含wrm_tag_update0数据,其可表示从图2的cpu接口202(例如,标量数据路径(dp0))生成的控制信号。控制信号可经生成以通知vct ram 800cpu接口202具有从cpu接口202移动到受害者存储区218的高速缓存线,并且因此cpu接口202具有从cpu接口202移动到标签ram 210的地址。第一数据824包含vtag_wr_tag0数据,其可表示vct ram 800中可对应于要存储在受害者高速缓存218中的数据地址的地址(例如,标签地址)。第一数据824包含vtag_wr_set0数据,其可表示受害者高速缓存218中要存储数据(例如,dp0的受害者高速缓存标签)的地址。
[0360]
第二分配端口804配置成接收第二实例数据826。例如,第二分配端口804可从与向量数据路径(dp1)相关联的写入状态机接收第二数据826。第二数据826包含wrm_tag_update1数据,其可表示从图2的cpu接口202(例如,向量数据路径(dp1))生成的控制信号。控制信号可经生成以通知vct ram 800cpu接口202具有从cpu接口202移动到受害者存储区218的高速缓存线,并且因此cpu接口202具有从cpu接口202移动到标签ram 210的地址。第二数据826包含vtag_wr_tag1数据,其可表示vct ram 800中可对应于要存储在受害者高速缓存218中的数据地址的地址(例如,标签地址)。第二数据826包含vtag_wr_set1数据,其可表示受害者高速缓存218中要存储数据(例如,dp1的受害者高速缓存标签)的地址。
[0361]
第三分配端口806配置成接收第三实例数据828。第三数据828包含arb_evt_tag_update数据,其可表示从主存储区214生成的控制信号。控制信号是仲裁(arb)逐出(evt)标签更新控制信号,其可经生成以通知vct ram 800主存储区214具有从主存储区214移动到
受害者存储区218的高速缓存线,并且因此主存储区214具有从标签ram 208移动到标签ram 210的地址。第三数据828包含adp_evt_wr_tag数据,其可表示vct ram 800中可对应于要存储在受害者高速缓存218中的数据地址的地址(例如,标签地址)。第三数据828包含adp_evt_wr_set数据,其可表示受害者高速缓存218中要存储数据(例如,从主要高速缓存移动到受害者高速缓存的行的受害者高速缓存标签)的地址。例如,adp_evt_wr_tag和adp_evt_wr_set数据可被称为地址数据路径(adp)数据。第一数据824、第二数据826和/或第三数据828可以是一或多个数据包、基于通信协议(例如,集成电路间(i2c)协议)的一或多个信号,等等。
[0362]
vct ram 800包含读取端口808、810、812,以提供外部硬件(例如,cpu 102)可请求读取和/或以其它方式存取存储在受害者存储区218中的数据的接口。第一读取端口808配置成接收第四实例数据830。例如,第一读取端口808可从cpu 102的标量接口502接收第四数据830。第四数据830包含adp_addr_e2_dp0数据,其可表示受害者存储区218中标量接口502请求存取的地址。
[0363]
第二读取端口810配置成接收第五实例数据832。例如,第二读取端口810可从cpu102的向量接口504接收第五数据832。第五数据832包含adp_addr_e2_dp1数据,其可表示受害者存储区218中向量接口504请求存取的地址。
[0364]
第三读取端口812配置成接收第六实例数据834。例如,第三读取端口812可从图5的监听地址组件506(例如,监听接口)接收第六数据834。第六数据834包含snp_addr_e2_dp0数据,其可表示受害者存储区218中监听地址组件506请求存取的地址。
[0365]
lru读取端口814配置成接收第七实例数据836。例如,lru读取端口814可从图3a
‑
3d的替代策略组件308接收第七数据836。第七数据836包含lru_set_dp0和lru_set_dp1,其可表示与受害者存储区218的最少随机使用(lru)高速缓存线相关联的相应地址。例如,lru读取端口814可以是配置成从替代策略组件308接收lru数据的受害者最少随机使用(vlru)的读取端口。
[0366]
vct ram 800包含输出端口816、818、820、822,用于响应于与受害者存储区218相关联的读取请求或写入请求(例如,分配请求)而向外部硬件(例如,cpu 102、主存储区214等)传输输出。第一输出端口816配置成传输第一实例输出数据838。例如,第一输出端口816可将第一输出数据838传输到标量接口502。第一输出数据838包含vtag_hit_dp0数据,其可指示标量接口502所请求的数据存储在受害者存储区218中。第一输出数据838包含vtag_miss_dp0数据,其可指示标量接口502所请求的数据不存储在受害者存储区218中。第一输出数据838包含vtag_set_dp0数据,其可表示受害者存储区218中存储标量接口502所请求的数据的地址。
[0367]
第二输出端口818配置成传输第二实例输出数据840。例如,第二输出端口818可将第二输出数据840传输到向量接口504。第二输出数据840包含vtag_hit_dp1数据,其可指示向量接口504所请求的数据存储在受害者存储区218中。第二输出数据840包含vtag_miss_dp1数据,其可指示向量接口504所请求的数据不存储在受害者存储区218中。第二输出数据840包含vtag_set_dp1数据,其可表示受害者存储区218中存储向量接口504所请求的数据的地址。
[0368]
第三输出端口820配置成传输第三实例输出数据842。例如,第三输出端口820可将
第三输出数据842传输到替代策略组件308。第三输出数据842包含vtag_addr_dp0数据,其可表示受害者存储区218中与在lru读取端口814处接收的替代策略组件308的请求lru_set_dp0相关联的地址。
[0369]
第四输出端口822配置成传输第四实例输出数据844。例如,第四输出端口822可将第四输出数据844传输到替代策略组件308。第四输出数据844包含vtag_addr_dp1数据,其可表示受害者存储区218中与在lru读取端口814处接收的替代策略组件308的请求lru_set_dp1相关联的地址。
[0370]
图8b示出图8a的vct ram 800的实例实施方案的另一示意性图示。例如,图8b可对应于图5的l1高速缓存110的基于受害者高速缓存的区段或其部分。
[0371]
图8b描绘图8a的vct ram 800的另一实例实施方案。在图8b中,vct ram 800包含16个实例集合846。例如,集合846包含第一集合vct_addr[0]、第二集合vct_addr[1]等。替代地,vct ram 800可包含比16个更少或更多的集合846。
[0372]
vct ram 800是配置成存储对应于集合846的地址(例如,标签地址)的受害者高速缓存标签存储区。每一个集合846耦合到第一实例比较器850中的相应者和第二实例比较器852中的相应者。第一比较器850可以是图3和/或5的比较逻辑306a的实例实施方案。第二比较器852可以是图3和/或5的比较逻辑306b的实例实施方案。第一集合vct_addr[0]耦合到第一比较器850中的第一者和第二比较器852中的第一者,第二集合vct_addr[1]耦合到第一比较器850中的第二者和第二比较器852中的第二者,以此类推。
[0373]
第一比较器850和第二比较器852耦合到相应的实例地址编码器逻辑电路854、856,包含第一实例地址编码器逻辑电路854和第二实例地址编码器逻辑电路856。第一比较器850耦合到第一地址编码器逻辑电路854。第二比较器852耦合到第二地址编码器逻辑电路856。
[0374]
地址编码器逻辑电路854、856可以是图3和/或5的地址编码器326a、326b的实例实施方案。例如,第一地址编码器逻辑电路854可以是地址编码器326a的实例实施方案。在其它实例中,第二地址编码器逻辑电路856可以是地址编码器326b的实例实施方案。
[0375]
第一实例复用器858a耦合到第一地址编码器逻辑电路854。第一地址编码器逻辑电路854包含第一实例解码器860a、第一实例反相器(例如,逻辑门、反相逻辑门等)862a、第一实例and门(例如,逻辑门、and逻辑门等)864a、第一实例or门(例如,逻辑门、or逻辑门等)866a、第一实例编码器868a、第三实例比较器870a和第四实例比较器872a。
[0376]
为了清楚起见,图8b仅描绘第一and门864a、第一or门866a、第三比较器870a和第四比较器872a中的每一个的一个实例。但是,第一and门864a、第一or门866a、第三比较器870a和第四比较器872a中的每一个可以表示16个所述组件的实例。例如,第一and门864a可表示和/或以其它方式实施16个第一and门864a的实例,第一or门866a可以表示和/或以其它方式实施16个第一or门866a的实例,等等。
[0377]
第一复用器858a具有第一输入,用于接收adp_addr_e2_dp0,其表示dp0接口向图3a
‑
3d的e2仲裁级请求的地址。第一复用器858a具有第二输入,用于接收snp_addr_e2_dp0,其表示监听接口向图3a
‑
3d的e2仲裁级请求的监听地址。第一复用器858a具有选择输入,用于接收snp_addr_en_dp0,其表示来自监听接口的启用信号,在确证时,所述启用信号可调用第一复用器858a选择第二输入。第一复用器858a的输出耦合到第一比较器850的输入。例
800的集合中的对应者。在此类实例中,第二比较器852中的第一者可比较包含在adp_addr_e2_dp1中的地址与存储在vct_addr[0]中的地址。在一些此类实例中,第二比较器852中的第一者可响应于包含在adp_addr_e2_dp1中的地址匹配存储在vct_addr[0]中的地址而输出和/或以其它方式生成逻辑一。
[0384]
adp_addr_e2_dp1耦合到第五比较器870b的第一输入。实例dp1读取有限状态机(read_fsm_dp1)875的输出和/或实例dp1写入有限状态机(write_fsm_dp1)876的输出耦合到第五比较器870b的第二输入。dp1读取有限状态机875和dp1写入有限状态机876是硬件实施的有限状态机,它们对来自图5的向量接口504的数据执行逻辑。例如,dp1读取有限状态机875和/或dp1写入有限状态机876可将wrm_tag_update1、vtag_wr_tag1和vtag_wr_set1中的一或多个传输到第五比较器870b和/或第六比较器872b。dp1读取有限状态机875和/或dp1写入有限状态机876可将vtag_wr_tag1传输到包含在第一地址编码器逻辑电路854中的第四比较器872a。wrm_tag_update1、vtag_wr_tag1和vtag_wr_set1在上文结合图8a描述。
[0385]
第二解码器860b是4x16解码器。第二解码器860b具有输入,用于接收vtag_wr_set1数据,其可表示从向量接口504到受害者存储区218的飞行中地址。第二解码器860b具有输出,其耦合到第二反相器862b的输入。第二解码器860b可将飞行中地址转换成位向量,其中每一位通过第二反相器862b的所述16个实例中的一个反相。第二反相器862b的输出耦合到第二and门864b的第一输入。第二and门864b的第二输入耦合到第二比较器852与集合0(例如,vct_addr[0])和adp_addr_e2_dp1的标签比较的结果位。例如,第二and门864b的第二输入可配置成接收hit_dp1数据,其可表示16位向量,其中每个位可对应于adp_addr_e2_dp1数据是受害者存储区218中的命中(例如,位值1)还是未命中(例如,位值0)。
[0386]
第二and门864b的输出耦合到第二or门866b的第一输入。第五比较器870b的输出耦合到第二or门866b的第二输入。第六比较器872b的输出耦合到第二or门866b的第三输入。第二or门866b的输出耦合到第二编码器868b的输入。第二编码器868b是16x4编码器。例如,第二编码器868b可生成hit_addr1数据,其可表示图8a的vtag_set_dp1。在此类实例中,hit_addr1可对应于图8a的第二输出数据840。
[0387]
在实例操作条件中,第一地址编码器逻辑电路854可接收图1的cpu 102所请求的存储指令的第一读取地址(例如,adp_addr_e2_dp0),其中第一读取地址从图3a
‑
3d的e2管线级(仲裁)接收。响应于第一复用器858a选择第一输入,第一复用器858a可将第一读取地址传输到第一比较器850。第一比较器850可比较读取地址与集合846中的相应者。如果第一比较器850中的第一者确定读取地址匹配存储在集合846中的对应者处的地址,那么第一比较器850中的第一者可确证和/或以其它方式输出逻辑一,否则第一比较器850中的第一者输出逻辑零。因此,第一比较器850可响应于比较而在16位数据总线上生成hit_dp0作为16位向量。例如,所述16位向量可以是表示位向量的信号串(例如,脉冲串)的实施方案。第一比较器850可将hit_dp0传输到第一and门864a。
[0388]
第一地址编码器逻辑电路854和/或第二地址编码器逻辑电路856的部分是高速缓存命中
‑
未命中转换逻辑。例如,第一and门864a、第三比较器870a和/或第四比较器872a可以是高速缓存命中
‑
未命中转换逻辑的实例实施方案。在此类实例中,第二and门864b、第五比较器870b和/或第六比较器872b可以是高速缓存命中
‑
未命中转换逻辑的实例实施方案。
[0389]
第一and门864a配置成确定是否将命中(例如,高速缓存命中)转换成未命中(例
如,高速缓存未命中)。例如,在第一读取地址正在e2管线级期间处理时,新地址(vtag_wr_set0)可以在图3a
‑
3d的e3管线级期间写入到受害者存储区218。在此类实例中,第一解码器860a可将新地址转换成16位值,其可通过第一反相器862a反相。第一反相器862a可将经反相16位值传输到第一and门864a的第一输入。第一and门864a可响应于vtag_wr_set0不匹配hit_dp0中的地址而确证逻辑一,并且因此不将高速缓存命中转换成高速缓存未命中。在其它实例中,第一and门864a可响应于vtag_wr_set0匹配hit_dp0中的地址而输出逻辑零,并且因此将高速缓存命中转换成高速缓存未命中,因为在adp_addr_e2_dp0中所请求的地址已被覆写且在所述地址处不再可用。
[0390]
在实例操作条件中,第三比较器870a和第五比较器870b可配置成将高速缓存未命中转换成高速缓存命中。例如,第三比较器870a可确定在e2管线级期间所请求的vct ram 800中的第一读取地址(adp_addr_e2_dp0)在e3管线级中写入,其由vtag_wr_tag0表示。在此类实例中,第三比较器870a可响应于adp_addr_e2_dp0匹配vtag_wr_tag0而确证逻辑一,并且因此将高速缓存未命中转换成高速缓存命中,且hit_addr0可利用vtag_wr_set0更新,因为数据在adp_addr_e2_dp0地址在e3管线级期间读取时将是可用的。
[0391]
在实例操作条件中,第四比较器872a和第六比较器872b可配置成将高速缓存未命中转换成高速缓存命中。例如,第四比较器872a可确定在e2管线级期间所请求的vct ram 800中的第一读取地址(adp_addr_e2_dp0)在e3管线级中通过向量接口504写入,其由vtag_wr_tag1表示。在此类实例中,第四比较器872a可响应于adp_addr_e2_dp0匹配vtag_wr_tag1而确证逻辑一,并且因此将高速缓存未命中转换成高速缓存命中,且hit_addr0可利用vtag_wr_set1更新,因为数据在adp_addr_e2_dp0地址在e3管线级期间读取时将是可用的。
[0392]
在实例操作条件中,第一or门866a和第二or门866b可配置成生成输出到第一编码器868a或第二编码器868b中的对应一个。例如,第一or门866b可传输表示高速缓存未命中的16位向量(例如,16位值0)或表示高速缓存命中的16位向量(例如,高速缓存命中的地址的16位值)。在此类实例中,第一编码器868a可将来自第一or门866a的16位值编码为4位地址,并且因此生成hit_addr0。此类实例操作可应用到第二or门866b、第二编码器868b,和/或更一般来说,可应用到第二地址编码器逻辑电路856。
[0393]
本文中描述用于具有双数据路径的多组受害者高速缓存的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0394]
实例1包含一种包括存储元件的高速缓存系统,所述存储元件包含可用于存储数据的组、可用于并行接收存储器操作的端口,其中所述存储器操作中的每一个具有相应地址,及多个比较器,其经耦合使得所述比较器中的每一个耦合到所述端口中的相应端口和所述组中的相应组,并且可用于确定由所述相应端口接收的相应存储器操作的相应地址是否对应于存储在所述相应组中的所述数据。
[0395]
实例2包含根据实例1所述的高速缓存系统,其进一步包含受害者高速缓存,所述受害者高速缓存包含受害者高速缓存数据,并且所述数据是对应于所述受害者高速缓存数据的标签数据。
[0396]
实例3包含根据实例1所述的高速缓存系统,其中所述存储器操作包含第一存储器操作,所述高速缓存系统进一步包含高速缓存,所述高速缓存包含高速缓存数据,所述数据是对应于所述高速缓存数据的标签数据,且所述多个比较器中的第一比较器基于与所述第
一存储器操作相关联的第一数据对应于所述存储元件中的所述数据,响应于检测到高速缓存命中而生成信号。
[0397]
实例4包含根据实例1所述的高速缓存系统,其中所述多个比较器是多个第一比较器,所述高速缓存系统进一步包含地址编码器逻辑电路,所述地址编码器逻辑电路包含:解码器,其具有解码器输入和解码器输出,所述解码器输入耦合到与中央处理单元的标量接口相关联的第一有限状态机;多个反相器,其具有相应反相器输入和相应反相器输出,所述反相器输入耦合到所述解码器输出;多个and逻辑门,其具有相应第一输入和相应第二输入,所述第一输入中的相应者耦合到所述反相器输出中的相应者,所述第二输入中的相应者耦合到所述多个第一比较器的输出中的相应者;多个第二比较器,其耦合到所述多个第一比较器的输出中的相应者和所述第一有限状态机;及多个第三比较器,其耦合到所述多个第一比较器的相应输出和与所述中央处理单元的向量接口相关联的第二有限状态机。
[0398]
实例5包含根据实例4所述的高速缓存系统,其中所述多个and逻辑门中的第一and逻辑门将响应于与所述标量接口相关联的第一地址匹配与所述高速缓存命中相关联的第二地址而输出将高速缓存命中转换成高速缓存未命中的逻辑低信号。
[0399]
实例6包含根据实例4所述的高速缓存系统,其中所述多个第二比较器中的第一比较器将响应于与所述标量接口相关联的第一地址匹配与所述高速缓存未命中相关联的第二地址而输出将高速缓存未命中转换成高速缓存命中的逻辑高信号。
[0400]
实例7包含根据实例4所述的高速缓存系统,其中所述多个第三比较器中的第一比较器将响应于与所述向量接口相关联的第一地址匹配与所述高速缓存未命中相关联的第二地址而输出将高速缓存未命中转换成高速缓存命中的逻辑高信号。
[0401]
实例8包含根据实例4所述的高速缓存系统,其中所述地址编码器逻辑电路包含:多个or逻辑门,其具有相应第三输入、相应第四输入和相应第五输入,所述第三输入耦合到所述多个and逻辑门的输出中的相应者,所述第四输入耦合到所述多个第二比较器的输出中的相应者,所述第五输入耦合到所述多个第三比较器的输出中的相应者;及编码器,其具有编码器输入和编码器输出,所述编码器输入耦合到所述多个or逻辑门的输出,所述编码器输出耦合到复用器的输入。
[0402]
实例9包含根据实例1所述的高速缓存系统,其中所述多个比较器是多个第一比较器,所述高速缓存系统进一步包含地址编码器逻辑电路,所述地址编码器逻辑电路包含:解码器,其具有解码器输入和解码器输出,所述解码器输入耦合到与中央处理单元的向量接口相关联的第一有限状态机;多个反相器,其具有相应反相器输入和相应反相器输出,所述反相器输入耦合到所述解码器输出;多个and逻辑门,其具有相应第一输入和相应第二输入,所述第一输入中的相应者耦合到所述反相器输出中的相应者,所述第二输入中的相应者耦合到所述多个第一比较器的输出中的相应者;多个第二比较器,其耦合到所述多个第一比较器的输出中的相应者和所述第一有限状态机;及多个第三比较器,其耦合到所述多个第一比较器的相应输出和与所述中央处理单元的向量接口相关联的第二有限状态机。
[0403]
实例10包含一种受害者高速缓存系统,其包括包含第一数据组的受害者高速缓存存储队列和耦合到所述受害者高速缓存存储队列的受害者存储区,所述受害者存储区包含不同于所述第一数据组的第二数据组。
[0404]
实例11包含根据实例10所述的受害者高速缓存系统,其中所述第一数据组或所述
第二数据组中的至少一个包含16各数据组。
[0405]
实例12包含根据实例10所述的受害者高速缓存系统,其中所述第一数据组包含具有8个地址的第一数据组,每个地址有1个字节的数据宽度,所述第一数据组配置成存储64位。
[0406]
实例13包含根据实例10所述的受害者高速缓存系统,其中所述第二数据组包含具有8个地址的第二数据组,每个地址具有1个字节的数据宽度,所述第二数据组配置成存储64位。
[0407]
实例14包含根据实例10所述的受害者高速缓存系统,其中所述第一数据组中的相应者耦合到所述第二数据组中的相应者。
[0408]
实例15包含一种识别受害者高速缓存中的高速缓存命中的方法,所述方法包括:从处理器的第一接口接收第一读取地址,从所述处理器的第二接口接收第二读取地址,比较所述第一读取地址和所述第二读取地址与多组受害者高速缓存标签存储器的数据组,响应于所述第一读取地址或所述第二读取地址中的至少一个映射到所述数据组中的第一数据组而识别出高速缓存命中,并输出表示存储在所述受害者高速缓存中的高速缓存数据的受害者高速缓存地址的高速缓存命中地址。
[0409]
实例16包含根据实例15所述的方法,其中所述第一接口是标量接口,且所述第二接口是向量接口。
[0410]
实例17包含根据实例15所述的方法,其进一步包含响应于识别出所述高速缓存命中,比较所述高速缓存命中地址与从与所述第一接口相关联的有限状态机接收的第一地址,所述第一地址表示在先前管线级中写入到所述受害者高速缓存中的地址,并响应于所述高速缓存命中地址匹配所述第一地址,将所述高速缓存命中转换成高速缓存未命中。
[0411]
实例18包含根据实例15所述的方法,其进一步包含响应于识别出所述高速缓存命中,比较所述高速缓存命中地址与从与所述第二接口相关联的有限状态机接收的第一地址,所述第一地址表示在先前管线级中写入到所述受害者高速缓存中的地址,并响应于所述高速缓存命中地址匹配所述第一地址,将所述高速缓存命中转换成高速缓存未命中。
[0412]
实例19包含根据实例15所述的方法,其进一步包含响应于所述第一读取地址或所述第二读取地址中的至少一个不映射到所述数据组中的任一个而识别出高速缓存未命中,比较所述第一读取地址与从与所述第一接口相关联的有限状态机接收的第一地址,所述第一地址表示在后续管线级中写入到所述受害者高速缓存中的地址,并响应于所述第一读取地址匹配所述第一地址,将所述高速缓存未命中转换成所述高速缓存命中。
[0413]
实例20包含根据实例15所述的方法,其进一步包含响应于所述第一读取地址或所述第二读取地址中的至少一个不映射到所述数据组中的任一个而识别出高速缓存未命中,比较所述第二读取地址与从与所述第二接口相关联的有限状态机接收的第一地址,所述第一地址表示在后续管线级中写入到所述受害者高速缓存中的地址,并响应于所述第二读取地址匹配所述第一地址,将所述高速缓存未命中转换成所述高速缓存命中。
[0414]
实例21包含根据实例15所述的方法,其中比较所述第一读取地址和所述第二读取地址与所述多组受害者高速缓存标签存储器的所述数据组基本上并行执行。
[0415]
用于受害者高速缓存系统中的分配的方法和设备
[0416]
包含受害者高速缓存系统的数据高速缓存架构使得主要高速缓存(例如,主存储
区214)能够在主要高速缓存需要创建受害者时将数据分配到受害者高速缓存(例如,受害者存储区218)。例如,在传入指令是读取未命中时,主要高速缓存需要为读取未命中的数据腾出空间。主要高速缓存可以是直接映射高速缓存,使得读取未命中只能存储在一个位置,由读取未命中的地址指示。主要高速缓存可分配读取未命中位置的数据,以在数据无效时移动到受害者高速缓存,并在所述位置的数据干净时从读取未命中位置逐出数据以发出到更高层级存储器位置。例如,主要高速缓存控制器可选择主存储区中的经修改(例如,无效)行成为受害者,并选择主存储区中的未经修改(例如,干净)行进行逐出。一行无效和/或经修改数据是已通过cpu 102更新的数据。例如,在主存储区214中的高速缓存线仅以当前状态存在且已经从主存储器中的值修改(例如,使得经扩展存储器106中的数据读取被标记或准许,因为它不是最新的或有效的)时,高速缓存线无效和/或经修改,并且因此是分配(例如,受害)候选者。实例mesi ram 300存储和/或跟踪高速缓存线状态(例如,干净、无效、共享、独占等),由此允许和/或实现主存储区214中的无效行的识别。
[0417]
主存储区的分配策略可指示主要高速缓存控制器选择加害经修改行,因为存储器地址的数据不位于更高层级高速缓存中,或者位于更高层级高速缓存中但是已过时。此类分配策略可指示主要高速缓存控制器不分配/加害主存储区中的干净和/或共享行,因为所述行包含已位于更高层级高速缓存(例如,l2高速缓存、l3高速缓存、经扩展存储器等)中的存储器地址处的数据。
[0418]
但是,此类分配策略在仅分配l1高速缓存110中的无效和/或经修改行时产生时延(例如,增加了cpu检索所请求数据所需要的时间)。时延的原因在于使用了额外的时钟循环从更高层级存储器检索。例如,由于主存储区214和受害者存储区218的并联连接,从更高层级存储器检索数据需要的时间比从受害者存储区218检索数据多。
[0419]
在本文中所描述的实例中,分配策略减小了从主要高速缓存(例如,主存储区214)向受害者高速缓存(例如,受害者存储区218)分配高速缓存线的时延。例如,由于l1高速缓存110的架构(例如,主存储区214和受害者存储区218之间并联连接),分配策略使得主要高速缓存控制器222能够将主存储区214中的任何高速缓存线(例如,干净和/或无效)分配到受害者存储区218。主存储区214和受害者存储区218的并行配置使得受害者存储区218能够充当主存储区214的扩展。因此,除了提供存储受害者行的位置之外,受害者存储区218还可通过将任何高速缓存线(例如,干净和/或无效)从主存储区214移动到受害者存储区214来向主存储区214提供额外的关联性。例如,因为受害者存储区218和主存储区214通过cpu 102并行(例如,同时)存取,如果干净行待存取且其分配给受害者存储区218,那么存取一行干净的数据的时延不会发生。
[0420]
在实例操作中,主要高速缓存控制器222从cpu接口202(例如,标量接口502和/或向量接口504)获得指令(例如,存储器操作)。主要高速缓存控制器222从主要标签ram存取204获得对应于指令的结果。例如,主要标签ram存取204确定指令中的地址是否匹配标签ram 208中的地址,并将结果提供到主要高速缓存控制器222。在一些实例中,主要高速缓存控制器222确定主存储区214将基于指令和来自主要标签ram存取204的结果而加害和/或分配数据到受害者存储区218。例如,主要高速缓存控制器222确定指令是不是读取操作及读取操作是不是未命中(例如,基于主要标签ram存取204的结果而确定)。如果读取操作是未命中,那么主要高速缓存控制器222确定主存储区214需要分配数据线、通路、块、槽等以用
于在受害者存储区218中分配。
[0421]
在一些实例中,主要高速缓存控制器222分配对应于读取未命中操作的地址的行。例如,如果读取操作想要从地址a读取数据但是主存储区214存储所述地址位置(例如,地址a')的不同数据,那么主要高速缓存控制器222必须去除地址a'的数据,因为地址a的数据只能存储在主存储区214的一个位置(例如,地址a)。主要高速缓存控制器222识别直接映射高速缓存(例如,主存储区214)中映射到地址a'的位置,并将地址a'的数据分配到受害者存储区218。因此,读取操作可在主存储区214中存储地址a的数据。
[0422]
本文中描述用于数据分配的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0423]
实例1包含一种设备,其包括第一高速缓存存储区、第二高速缓存存储区、高速缓存控制器,所述高速缓存控制器耦合到所述第一高速缓存存储区和所述第二高速缓存存储区且可用于接收指定地址的存储器操作,基于所述地址确定所述存储器操作从所述第一高速缓存存储区逐出第一组数据,确定所述第一组数据相对于经扩展存储器未经修改,并使所述第一组数据存储在所述第二高速缓存存储区中。
[0424]
实例2包含根据实例1所述的设备,其中所述高速缓存控制器将识别所述第一高速缓存存储区中对应于所述地址的直接映射位置的部分。
[0425]
实例3包含根据实例1所述的设备,其中所述高速缓存控制器将所述第一组数据分配到所述第二高速缓存存储区,以为第二存储器操作的数据创建空间。
[0426]
实例4包含根据实例1所述的设备,其中所述高速缓存控制器将接收指定第二地址的第二存储器操作,基于所述第二地址而确定所述第二存储器操作从所述第一高速缓存存储区逐出第二组数据,确定所述第二组数据相对于经扩展存储器经修改,并使所述第二组数据存储在所述第二高速缓存存储区中。
[0427]
实例5包含根据实例1所述的设备,其中所述高速缓存控制器将在所述逐出期间对所述第一组数据执行存储队列的未决事务。
[0428]
实例6包含根据实例1所述的设备,其中所述第二高速缓存存储区将在所述第二高速缓存存储区存储所述第一组数据时向所述第一高速缓存存储区提供关联性。
[0429]
实例7包含根据实例1所述的设备,其中所述第二高速缓存存储区是受害者高速缓存存储区。
[0430]
实例8包含一种方法,其包括:接收指定地址的存储器操作,基于所述地址而确定所述存储器操作从第一高速缓存存储区逐出第一组数据,确定所述第一组数据相对于经扩展存储器未经修改,并使所述第一组数据存储在第二高速缓存存储区中。
[0431]
实例9包含根据实例8所述的方法,其进一步包含识别所述第一高速缓存存储区中对应于所述地址的直接映射位置的部分。
[0432]
实例10包含根据实例8所述的方法,其进一步包含将所述第一组数据分配到所述第二高速缓存存储区,以为第二存储器操作的数据创建空间。
[0433]
实例11包含根据实例8所述的方法,其进一步包含接收指定第二地址的第二存储器操作,基于所述第二地址而确定所述第二存储器操作从所述第一高速缓存存储区逐出第二组数据,确定所述第二组数据相对于经扩展存储器经修改,并使所述第二组数据存储在所述第二高速缓存存储区中。
[0434]
实例12包含根据实例8所述的方法,其进一步包含在所述逐出期间对所述第一组数据执行存储队列的未决事务。
[0435]
实例13包含根据实例8所述的方法,其中存储从所述第一高速缓存存储区分配的所述第一组数据包含向所述第一高速缓存存储区提供关联性。
[0436]
实例14包含根据实例8所述的方法,其中所述第二高速缓存存储区是受害者高速缓存存储区。
[0437]
实例15包含一种系统,其包括用于输出指定地址的存储器操作的中央处理单元和耦合到所述中央处理单元的高速缓存,所述高速缓存可用于从所述中央处理单元获得所述存储器操作,所述高速缓存进一步包含第一高速缓存存储区、第二高速缓存存储区和高速缓存控制器,所述高速缓存控制器用于基于所述存储器操作的所述地址确定所述存储器操作从所述第一高速缓存存储区逐出第一组数据,确定所述第一组数据相对于经扩展存储器未经修改,并使所述第一组数据存储在所述第二高速缓存存储区中。
[0438]
实例16包含根据实例15所述的系统,其中所述高速缓存进一步包含耦合到所述中央处理单元、所述第一高速缓存存储区和所述高速缓存控制器的第一标签随机存取存储器,及耦合到所述中央处理单元、所述第二高速缓存存储区和所述高速缓存控制器的第二标签随机存取存储器。
[0439]
实例17包含根据实例15所述的系统,其中所述高速缓存控制器将基于第二存储器操作的第二地址确定所述第二存储器操作从所述第一高速缓存存储区逐出第二组数据,确定所述第二组数据相对于经扩展存储器经修改,并使所述第二组数据存储在所述第二高速缓存存储区中。
[0440]
实例18包含根据实例15所述的系统,其中所述高速缓存控制器将在所述逐出期间对所述第一组数据执行存储队列的未决事务。
[0441]
实例19包含根据实例15所述的系统,其中所述第一高速缓存存储区和所述第二高速缓存存储区并联连接到所述中央处理单元。
[0442]
实例20包含根据实例15所述的系统,其中所述第一高速缓存存储区是直接映射高速缓存,且所述第二高速缓存存储区是完全关联高速缓存,所述直接映射高速缓存和所述完全关联高速缓存并联耦合到所述中央处理单元。
[0443]
用于促进具有并行数据路径的一致性受害者高速缓存中的读取
‑
修改
‑
写入支持的方法和设备
[0444]
为了促进以存储器一致性操作的存储器系统,即,促进其中每个处理元件的对应存储器位含有相同存储数据的存储器系统,一些实例系统无法包含受害者存储区。本文中所描述的实例通过促进完全一致的存储器系统来克服此挑战,其中受害者存储区(例如,受害者存储区218)可以在系统中的存储器一致性操作中操作。
[0445]
为了在数据高速缓存108上提供一致性,实例标量接口502(例如,64位宽接口)和实例向量接口504(例如,512位宽接口)包含在l1高速缓存110的受害者存储区218中。以此方式,l1高速缓存110的受害者存储区218能够服务cpu 102的两个数据路径。
[0446]
在本文中所描述的一些实例中,监听地址组件506用于在mesi ram 300中存储受害者存储区218中的每个高速缓存线的mesi状态。通过在mesi ram 300中存储每个高速缓存线的mesi状态,受害者高速缓存系统支持一致性。
[0447]
并且,实例监听地址组件506从更高层级存储器高速缓存存储器(例如,l2数据高速缓存112)获得实例监听请求,并将此类监听请求传输到标签ram 210和比较逻辑306c。在一些实例中,监听地址组件506触发到标签ram 210的地址读取指令。例如,在l2数据高速缓存112无法识别来自cpu 102的读取请求中所请求的数据时,l2数据高速缓存112将监听地址组件506传输到更低层级,即l1数据高速缓存110,以尝试执行标签ram 210中的存储器地址的读取请求。并且,监听地址组件506将地址读取提供到比较逻辑306c。在未命中被识别(例如,发出至标签ram 210的读取返回未命中)的情况下,适当的指示读取不成功的监听响应生成,并被传输到生成监听地址组件506的更高层级数据高速缓存(例如,l2数据高速缓存112)。
[0448]
替代地,在命中被识别(例如,发出至标签ram 210的读取返回命中)的情况下,mesi ram 300中的对应行的状态被读取,并且实例地址编码器326c生成供受害者存储区218用于获得数据的地址值。因此,适当的指示读取请求成功的响应生成,并作为监听响应被传输回到生成监听地址组件506的更高层级数据高速缓存(例如,l2数据高速缓存112)。在本文中所描述的实例中,监听响应包含受害者存储区218中对应于标签ram 210中的地址的数据。
[0449]
在实例操作中,对应存储队列(例如,受害者高速缓存存储队列216)可处理到正经由监听地址读取的地址的写入指令。因此,当受害者存储区218正在服务监听请求时(例如,当监听请求正响应于监听地址组件506获得监听请求而进行处理时),受害者高速缓存存储队列216将来自受害者高速缓存存储队列216的数据(例如,存储在锁存器402e中的数据)转发到响应复用器508。以此方式,由于监听地址和从受害者高速缓存存储队列216获得的任何最近经更新地址而通过向量接口504获得的任何状态改变被转发到更高层级数据高速缓存(例如,l2数据高速缓存112)。
[0450]
在图5中所示的拓扑中,一致性管线长于受害者高速缓存管线,以便提供足够的时间供受害者高速缓存控制器224在潜在监听响应和/或后续cpu 102操作发出至更高层级存储器控制器的情况下正确地将此类监听响应和/或后续cpu 102操作排序。
[0451]
在本文中所描述的实例中,在请求跟踪高速缓存线的情况下,l1数据高速缓存110的受害者存储区218能够向更高层级高速缓存控制器发出标签更新。以此方式,受害者存储区218可促进对高速缓存线的跟踪,以区分独占和修改高速缓存元件。
[0452]
在本文中所描述的实例中,l1数据高速缓存110的受害者存储区218通过允许全局一致性操作在完全关联高速缓存上进行处理并基于组在标签ram 208上迭代来支持全局一致性操作。
[0453]
尽管上述操作是结合l1数据高速缓存110描述的,但是上述操作和/或元件中的任一个可以实施于l2数据高速缓存112、l3数据高速缓存114和/或数据高速缓存108中的任何额外层级数据高速缓存中的任一个上。
[0454]
本文中描述用于促进具有并行数据路径的一致性受害者高速缓存中的读取
‑
修改
‑
写入支持的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0455]
实例1包含一种设备,其包括:随机存取存储器,其配置成经由第一接口和第二接口耦合到中央处理单元,所述随机存取存储器配置成获得指示经由监听接口读取的第一地址的读取请求;地址编码器,其耦合到所述随机存取存储器,所述地址编码器用于在所述随
机存取存储器指示所述读取请求的命中时基于所述第一地址生成对应于受害者高速缓存的第二地址;及复用器,其耦合到所述受害者高速缓存以传输包含从所述受害者高速缓存的所述第二地址获得的数据的响应。
[0456]
实例2包含根据实例1所述的设备,其中所述读取请求通过二级数据高速缓存传输。
[0457]
实例3包含根据实例1所述的设备,其中所述复用器配置成耦合到受害者高速缓存存储区队列,所述复用器用于从所述受害者高速缓存存储区队列获得指示将写入到所述第二地址的值的输入数据。
[0458]
实例4包含根据实例3所述的设备,其中所述复用器配置成传输包含来自所述受害者高速缓存存储区队列的所述输入数据的所述响应。
[0459]
实例5包含根据实例1所述的设备,其中所述随机存取存储器是标签随机存取存储器。
[0460]
实例6包含根据实例1所述的设备,其中所述受害者高速缓存是多组存储器。
[0461]
实例7包含根据实例1所述的设备,其中所述第一接口是标量接口,且所述第二接口是向量接口。
[0462]
实例8包含根据实例7所述的设备,其中所述标量接口是64位宽接口,所述向量接口是512位宽接口。
[0463]
实例9包含一种系统,其包括控制器、第一存储器、配置成从所述第一存储器获得监听请求的第二存储器,所述第二存储器用于响应于所述监听请求而执行随机存取存储器的读取请求,当所述随机存取存储器指示所述读取请求的命中时生成对应于受害者高速缓存的地址,所述地址用于读取所述受害者高速缓存,并向所述第二存储器传输包含从所述受害者高速缓存的所述地址获得的数据的响应。
[0464]
实例10包含根据实例9所述的系统,其中所述第一存储器是二级高速缓存存储器,且第二存储器是一级高速缓存存储器。
[0465]
实例11包含根据实例9所述的系统,其中所述第二存储器包含配置成耦合到受害者高速缓存存储区队列的复用器,所述复用器用于从所述受害者高速缓存存储区队列获得指示要写入到所述第二存储器中的所述受害者高速缓存的所述地址的值的输入数据。
[0466]
实例12包含根据实例11所述的系统,其中所述复用器配置成传输包含来自所述受害者高速缓存存储区队列的所述输入数据的所述响应。
[0467]
实例13包含根据实例9所述的系统,其中所述第二存储器经由标量接口和向量接口耦合到所述控制器,且所述第二存储器经由监听接口耦合到所述第一存储器。
[0468]
实例14包含根据实例13所述的系统,其中所述标量接口是64位宽接口,所述向量接口是512位宽接口。
[0469]
实例15包含根据实例13所述的系统,其中所述控制器是中央处理单元。
[0470]
实例16包含一种方法,包括获得指示经由监听接口读取的第一地址的读取请求,当所述读取请求是命中时基于所述第一地址而生成对应于受害者高速缓存的第二地址,并生成包含从所述受害者高速缓存的所述第二地址获得的数据的响应。
[0471]
实例17包含根据实例16所述的方法,其进一步包含从二级数据高速缓存传输所述读取请求。
[0472]
实例18包含根据实例16所述的方法,其进一步包含从受害者高速缓存存储区队列获得指示要写入到所述第二地址的值的输入数据。
[0473]
实例19包含根据实例18所述的方法,其进一步包含传输包含来自所述受害者高速缓存存储区队列的所述输入数据的所述响应。
[0474]
实例20包含根据实例16所述的方法,其中所述受害者高速缓存是多组存储器。
[0475]
用于在双数据路径受害者高速缓存系统中逐出的方法和设备
[0476]
在受害者高速缓存系统中,当主要高速缓存(例如,主存储区214)需要存储新数据时,主要高速缓存将高速缓存线牺牲(例如,分配)给受害者高速缓存(例如,受害者存储区218)。当主要高速缓存创建受害者时,替代策略(例如,替代策略组件308)确定受害者可以存储在受害者高速缓存(例如,受害者存储区218)中的何处。在一些实例中,受害者高速缓存已满,因此需要将数据逐出到更高层级的高速缓存存储器(例如,l2高速缓存112、l3高速缓存114、经扩展存储器106)。当写入未命中发生时,受害者高速缓存(例如,受害者存储区218)也将数据逐出到更高层级的高速缓存存储器。例如,受害者存储区218包含缓冲写入未命中数据的写入未命中缓冲区。替代策略可以利用固定方案来确定从受害者高速缓存中逐出哪些数据。例如,诸如先进先出(fifo)方案、随机方案和最近最少使用(lru)方案的逐出方案。然而,当存在两个或更多个数据路径时,此类逐出方案并不配置成有效地管理从受害者高速缓存中逐出数据。
[0477]
例如,fifo方案逐出已经在受害者高速缓存中最长时间的数据块(例如,如果是第一次发生逐出,那么为槽0中的数据)。在双数据路径受害者高速缓存系统(例如,图5中所示的受害者高速缓存区段)中,当两个传入的cpu存取(例如,指令)都未命中和/或都在分配指令时,fifo方案不起作用。在此类实例中,如果来自受害者高速缓存的两个集合没有被推测锁定和读取,那么产生额外的停止。
[0478]
在不同的实例中,主存储区214存储地址a并且受害者存储区218存储地址b。cpu 102发送两个请求:cpu 102请求利用dp0读取地址a'的数据并且cpu 102请求利用dp1从地址b读取数据。地址a'的数据被映射到与地址a在主存储区214中相同的位置。因此,第一数据路径dp0需要将地址a中的数据分配给受害者存储区218(例如,将地址a'的数据分配给主存储区214)。在常规fifo方案中,地址a将被分配给受害者存储区218的槽0。然而,槽0被地址b占用,并且cpu 102与请求将读取指令的数据分配到地址a'并行地请求存取地址b。因此,如果数据路径dp0从槽0逐出地址b,那么将产生停止(例如,使cpu 102停止等待存储器存取的一或多个循环)以便稍后从更高层级的高速缓存中检索被逐出的数据。
[0479]
本文描述的实例包含从双数据路径受害者高速缓存系统中的受害者存储区218有效地逐出数据的逐出方案。实例逐出方案由图3和5的替代策略组件308实施。例如,替代策略组件308包含分析输入并产生输出的逻辑。例如,替代策略组件308从命中
‑
未命中比较逻辑306a和306b获得输入,并确定受害者存储区218中的哪个位置将被来自主存储区214的数据替代和/或被来自写入未命中指令的数据替代。在本文描述的实例中,替代策略组件308在受害者存储区218中保留对应于逐出位置的条目(例如,通路、集合、高速缓存线等)。例如,替代策略组件308推测性地锁定(例如,保留)专门用于逐出的第一和第二受害者高速缓存线(例如,集合)。可以针对特定数据路径锁定第一和第二受害者高速缓存线(例如,针对dp0锁定的第一受害者高速缓存线和针对dp1锁定的第二受害者高速缓存线)。下面结合图6
更详细地描述由替代策略组件308实施的逐出逻辑。
[0480]
转向图6,描绘了实例第一表602和实例第二表604。实例第一表602和第二表604描述实例替代策略组件308的逻辑。实例替代策略组件308利用lru值。如本文所使用,lru值对应于作为受害者存储区218中最近最少使用的部分的通路。在一些实例中,lru值对应于受害者存储元件218中最近未被第一或第二数据路径存取的位置。在完全相关联的高速缓存(例如,受害者存储区218)中,地址可以映射到高速缓存中的任何“通路”。因此,通路是高速缓存中存储数据并包含标签的块。在一些lru方案中,当受害者高速缓存需要逐出数据时,由lru值指示的位置中的数据(例如,受害者存储区218中最近未存取的部分中的数据)被逐出。例如,在3通路高速缓存中,地址a、地址b和地址c占用所有三个通路(例如,块、槽等)。在此实例中,地址a最近被cpu 102存取过,地址b在地址a存取之前被存取过,地址c在地址b之前被存取过。因此,地址c是最近最少使用的地址并且映射到的地址c的部分的位置等于lru值。
[0481]
图6的实例第一表602包含第一数据路径场景606、第二数据路径场景608和第三数据路径场景610。实例数据路径场景606、608、610对应于图5的dp0和dp1上的事务(例如,存取)的有效性。事务的有效性对应于cpu 102是否向l1高速缓存110发送有效指令。第一数据路径dp0上的有效指令和第二数据路径dp1上的无效指令对应于当处理核心在第一数据路径dp0上发送指令并使第二数据路径dp1空闲时。在一些实例中,在特定时钟循环期间,第一数据路径dp0包含无效指令。在一些实例中,在特定时钟循环期间,第二数据路径dp1包含无效指令。另外和/或替代地,数据路径dp0和dp1都可以包含有效指令和/或可以包含无效指令。
[0482]
在实例第一表602中,第一数据路径场景606对应于当图5的两个数据路径(dp0、dp1)包含相同时钟循环内的有效事务(dp0_valid=1,dp1_valid=1)时。在一些实例中,替代策略组件308从两个数据路径dp0、dp1获得结果和/或指令。
[0483]
在实例第一表602中,第二数据路径场景608对应于包含有效事务(dp0_valid=1)的第一数据路径(dp0)和包含无效事务(dp1_valid=0)的第二数据路径(dp1)。在此类实例中,替代策略组件308确定dp1的事务包含无效指令。
[0484]
在实例第一表602中,第三数据路径场景610对应于包含无效事务(dp0_valid=0)的第一数据路径(dp0)和包含有效事务(dp1_valid=1)的第二数据路径(dp1)。在一些实例中,替代策略组件308确定dp0的事务包含无效指令。
[0485]
实例第一表602中的实例第一数据路径场景606包含实例命中
‑
命中动作612、实例未命中
‑
命中动作614、实例命中
‑
未命中动作616和实例未命中
‑
未命中动作618。实例命中
‑
命中动作612表示dp0上的地址和dp1上的地址命中(例如,匹配)标签ram 208、210中的任一个中的地址。换句话说,实例命中
‑
命中动作612表示dp0上的地址和dp1上的地址命中主存储区214、受害者存储区218和/或写入未命中高速缓存(上面结合图3a
‑
3d描述)中的地址。实例未命中
‑
命中动作614指示dp0上的地址不与主存储区214、受害者存储区218和/或写入未命中高速缓存中的地址匹配,并且dp1上的地址命中主存储区214、受害者存储区218和/或写入未命中高速缓存中的地址。在一些实例中,未命中
‑
命中动作614的未命中部分指示dp0将从主存储区214向受害者存储区218分配高速缓存线,并且因此从受害者存储区218逐出数据从而为主存储区214的高速缓存线腾出空间。实例命中
‑
未命中动作616指示dp0上的
地址命中受害者存储区218和/或写入未命中高速缓存中的地址,并且dp1上的地址不与受害者存储区218和/或写入未命中高速缓存中的地址匹配。在一些实例中,命中
‑
未命中动作616的未命中部分指示dp1将从主存储区214向受害者存储区218分配高速缓存线,并且因此从受害者存储区218逐出数据从而为主存储区214的高速缓存线腾出空间。实例未命中
‑
未命中动作618指示dp0和dp1的地址在受害者存储区218和/或写入未命中高速缓存中均不匹配。在一些实例中,未命中
‑
未命中动作618指示数据路径dp0和dp1两者都将从主存储区214向受害者存储区218分配数据。另外和/或替代地,未命中指示写入未命中是将数据写入受害者存储区218中的写入未命中缓冲区。
[0486]
实例第一表602中的实例第二数据路径场景608包含实例dp0命中动作620和实例dp0未命中动作622。在第二数据路径场景608中,第一数据路径dp0包含有效事务并且第二数据路径dp1包含无效事务。在一些实例中,替代策略组件308忽略第二数据路径dp1,因为第二数据路径dp1不包含指令。
[0487]
实例第一表602中的实例第三数据路径场景610包含实例dp1命中动作624和实例dp1未命中动作626。实例dp1命中动作624对应于当第二数据路径dp1的地址与受害者存储区218和/或写入未命中高速缓存中的地址匹配时替代策略组件308采取的动作。实例dp1未命中动作624对应于当第二数据路径dp1的地址不与受害者存储区218和/或写入未命中高速缓存中的地址匹配时替代策略组件308采取的动作。类似于实例第二数据路径场景608下的实例dp0命中动作620和dp0未命中动作622,实例替代策略组件308在实例第三数据路径场景610中忽略第一数据路径dp0的事务,因为所述事务是无效的。
[0488]
在实例第一表602中,dp0命中通路指示当指令是命中时应由第一数据路径dp0存取(例如,从所述第一数据路径读取、由所述第一数据路径逐出、写入所述第一数据路径等)的受害者存储区218和/或写入未命中高速缓存的一部分。在实例第一表602中,dp1命中通路是当指令是命中时应由第二数据路径dp1存取的受害者存储区218和/或写入未命中高速缓存中的一部分。
[0489]
在实例第一表602中,变量
‘
y’是指示被选为lru的当前通路的位置并指示第一数据路径dp0应从何处移除数据的变量。在一些实例中,y被分配给dp0指针。例如,当dp0需要逐出受害者存储区218中的一部分时,那么dp0指针指向位置y(例如,lru通路)以进行逐出。在一些实例中,替代策略组件308将存储要被dp0替代的受害者存储区218的lru通路的指示符。例如,替代策略组件308保持可由高速缓存控制器220存取的指示符,所述指示符指示最近未被存取的特定通路可用于由第一数据路径dp0逐出。如本文所使用,术语“指针”和“指示符”可互换使用。
[0490]
在实例第一表602中,变量
‘
y+1’指示第二数据路径dp1应从中移除数据的下一个lru通路的位置。在一些实例中,“y+1”被分配给dp1指针。例如,当第二数据路径dp1需要逐出受害者存储区218中的一部分时,dp1指针指向位置y+1(例如,下一个lru通路)以进行逐出。在一些实例中,替代策略组件308将存储要被dp1替代的受害者存储区218的lru通路的指示符。例如,替代策略组件308保持可由高速缓存控制器220存取的指示符,所述指示符指示最近未被存取的特定通路可用于由第一数据路径dp0逐出。
[0491]
在替代策略组件308的第一实例操作中,两个数据路径(dp0和dp1)都包含有效事务(例如,在第一数据路径场景606中指示)并且两个数据路径(dp0和dp1)都包含与实例受
害者存储元件218中的地址匹配的地址(例如,命中
‑
命中动作612)。例如,比较逻辑306a和306b将dp0和dp1的地址与实例标签ram 210中的地址进行比较,并将命中结果提供到替代策略组件308。由于两个数据路径都是有效的并且两个数据路径都是命中,因此dp0命中通路指向受害者存储区218中包含对应于数据路径dp0的命中/匹配数据的部分(例如,通路),并且dp1命中通路指向包含对应于数据路径dp1的命中/匹配数据的通路。受害者存储区218以所请求数据进行响应。lru通路的位置不增加并保持在位置y。
[0492]
在替代策略组件308的第二实例操作中,两个数据路径(dp0和dp1)都包含有效事务(例如,在第一数据路径场景606中指示),第一数据路径dp0是未命中,并且第二数据路径dp1命中受害者存储区218(例如,未命中
‑
命中动作614)。例如,第一比较逻辑306a向替代策略组件308返回“未命中”结果并且第二比较逻辑306b向替代策略组件308返回“命中”结果。dp1命中通路指向受害者存储区218中包含命中/匹配数据(例如,命中通路)的部分(例如,通路)。在一些实例中,第一数据路径dp0将从受害者存储区218中的一部分(例如,通路)逐出数据。因此,dp0指针指向受害者存储区218中将被逐出的位置y。
[0493]
在逐出发生之前,替代策略组件308确定dp1命中通路是否与lru通路的地址(例如,位置y)匹配。如果dp1命中通路不具有与y相同的位置,那么dp0指针指向位置等于位置y的通路(例如lru通路)。如果dp1命中通路确实与lru通路的地址匹配,那么dp0指针指向dp1指针的位置(y+1),使得dp0可以在不与dp1命中通路冲突的情况下逐出数据。
[0494]
在第二实例场景614中,基于哪个位置被逐出而增加lru值和下一个lru值。例如,如果dp0从位置y+1逐出数据(例如,dp1命中通路与dp0指针的位置匹配),那么lru值增加两次并且下一个lru值增加两次。否则,如果dp0从位置y逐出数据(例如,dp1命中通路不与dp0指针的位置匹配),那么lru值增加一次并且下一个lru值增加一次。
[0495]
在替代策略组件308的第三实例操作中,两个数据路径(dp0和dp1)都包含有效事务(例如,在第一数据路径场景606中指示),第一数据路径dp0是命中,并且第二数据路径dp1是未命中(例如,命中
‑
未命中动作616)。例如,第一比较逻辑306a向替代策略组件308返回“命中”结果并且第二比较逻辑306b向替代策略组件308返回“未命中”结果。dp0命中通路指向受害者存储区218中包含命中/匹配数据的通路。在一些实例中,未命中使得第二数据路径dp1逐出通路以在受害者存储区218中腾出空间。因此,dp1指针指向受害者存储区218中将被逐出的位置y+1。
[0496]
在逐出发生之前,替代策略组件308确定dp0命中通路是否与下一个lru通路的地址(例如,位置y+1)匹配。如果替代策略组件308确定dp0命中通路与下一个lru通路的地址(例如,位置y+1)匹配,那么dp1指针指向dp0指针的位置(例如,位置y),使得dp1可以逐出数据而不与dp0命中通路冲突。如果dp0命中通路不与下一个lru通路的地址匹配,那么dp1从位置y+1逐出数据。
[0497]
在第三实例场景616中,基于哪个位置被逐出而增加lru值和下一个lru值。例如,如果dp1从位置y逐出数据(例如,dp0命中通路与dp1指针的位置匹配),那么lru值增加一次并且下一个lru值增加一次。否则,如果dp1从位置y+1逐出数据(例如,dp0命中通路不与dp1指针的位置匹配),那么lru值增加两次并且下一个lru值增加两次。
[0498]
在替代策略组件308的第四实例操作中,两个数据路径(dp0和dp1)都包含有效事务(例如,在第一数据路径场景606中指示)并且两个数据路径都被标记为未命中(例如,列
618)。例如,当数据路径dp0和dp1中的地址都没有找到和/或不与标签ram 208、210中的地址匹配时,比较逻辑306a和306b向替代策略组件308返回“未命中”结果。在第四操作中,数据路径dp0和dp1都将逐出受害者存储区218中的通路。因此,dp0指针指向位置y并且dp1指针指向位置y+1。
[0499]
当两个逐出操作都完成时,lru值增加二(例如,y+2)并且下一个lru值增加二(例如(y+1)+2)。在后续操作中,如果dp0和dp1未命中,那么dp0通路指向新的lru值(例如,y+2),并且dp1通路指向下一个lru值(例如(y+1)+2)。
[0500]
在替代策略组件308的第五实例操作中,第一数据路径dp0是有效事务并且第二数据路径dp1是无效事务(例如,在第二数据路径场景608中指示)。在第五实例操作中,第一数据路径dp0是命中(例如,在dp0命中动作620中指示)。例如,比较逻辑306a向替代策略组件308返回“命中”结果。dp0命中通路指向受害者存储区218中包含匹配数据的通路。lru值(y)保持不变,因为在时钟循环内没有数据要被逐出。
[0501]
在替代策略组件308的第六实例操作中,第一数据路径dp0是有效事务并且第二数据路径dp1是无效事务(例如,在第二数据路径场景608中指示)。在第六实例操作中,第一数据路径dp0是未命中(例如,在dp0未命中动作622中指示)。例如,比较逻辑306a向替代策略组件308返回“未命中”结果。在此实例中,第一数据路径dp0从受害者存储区218逐出数据。实例dp0指针指向位置y(例如,lru通路)。逐出之后,lru值增加(例如,y+1)。
[0502]
在替代策略组件308的第七实例操作中,第一数据路径dp0是无效事务并且第二数据路径dp1是有效事务(例如,在第三数据路径场景610中指示)。在第七实例操作中,第二数据路径dp1是命中(例如,在dp1命中动作624中指示)。例如,比较逻辑306b向替代策略组件308返回“命中”结果。dp1命中通路指向受害者存储区218中包含匹配数据的通路。lru值(y)保持不变,因为在时钟循环内没有数据要被逐出。
[0503]
在替代策略组件308的第八实例操作中,第一数据路径dp0是无效事务并且第二数据路径dp1是有效事务(例如,在第三数据路径场景610中指示)。在第八实例操作中,第二数据路径dp1是未命中(例如,在dp1未命中动作626中指示)。例如,比较逻辑306b向替代策略组件308返回“未命中”结果。在此实例中,第二数据路径dp1从受害者存储区218逐出数据。dp1指针指向位置y(例如,lru通路)。由于dp0的无效事务,dp1指针不指向位置y+1。否则,当两个事务都有效时,dp1总是指向y+1(例如,除非在dp0命中通路与y+1匹配时切换)。在第二数据路径dp1从位置y逐出数据后,lru值增加(例如,y+1)。
[0504]
转向第二表604,第二表604示出当第一数据路径dp0和/或第二数据路径dp1将数据分配到受害者存储区218中时lru值的增加。例如,当读取
‑
未命中发生时,主存储区214利用数据路径之一将一行数据分配给受害者存储区218。第二表604包含第一有效列626、第二有效列628、第一分配列630、第二分配列632、第一lru干扰634、第二lru干扰636和lru增加列638。
[0505]
在第二表604中,实例第一有效列626对应于第二数据路径事务的有效性。例如,零(0)指示dp1事务无效,并且一(1)指示dp1事务有效。实例第二有效列628对应于第一数据路径事务的有效性。例如,零(0)指示dp0事务无效,并且一(1)指示dp0事务有效。
[0506]
在第二表604中,实例第一分配列630指示第二数据路径dp1的分配状态。分配状态对应于时钟循环内从主存储区214到受害者存储区218的数据分配。例如,零(0)指示第二数
据路径dp1没有将数据分配到受害者存储区218中,而一(1)指示第二数据路径dp1将数据分配到受害者存储区218中。实例第二分配列632指示第一数据路径dp0的分配状态。例如,零(0)指示第一数据路径dp0没有将数据分配到受害者存储区218中,而一(1)指示第一数据路径dp0将数据分配到受害者存储区218中。在数据路径将数据分配到受害者存储区218中时,数据路径逐出通路(例如,槽、块等)从而为被分配的数据腾出空间。在一些实例中,当在主存储区214中发生读取
‑
未命中时,将数据分配到受害者存储区218。
[0507]
在第二表604中,第一lru干扰列634指示第一数据路径dp0是否命中受害者存储区218中与第二数据路径分配指针的位置相同的位置。例如,第一数据路径dp0的地址位于受害者存储区218的最近最少使用位置。第一lru干扰列634包含一(1)以指示第一数据路径dp1命中位置等于第二数据路径dp1分配指针的位置。
[0508]
第二lru干扰列636指示第二数据路径dp1是否命中受害者存储区218中与第二数据路径分配指针的位置相同的位置。例如,第二数据路径dp1的地址位于受害者存储区218的最近最少使用位置。第二lru干扰列636包含一(1)以指示第二数据路径dp1命中位置等于第一数据路径分配指针的位置。如本文所使用,当dp0要分配时,第一数据路径分配指针指向位置y(lru值),而当dp1要分配时,第二数据路径分配指针指向位置y+1(下一个lru值)。在一些实例中,指针通知高速缓存控制器220将受害者存储区218的一部分逐出到更高层级的高速缓存(例如,l2 112、l3 114、经扩展存储器106)。实例替代策略组件308可以将第一数据路径分配指针初始化为指向位置y(lru部分)并且将第二数据路径分配指针初始化为指向y+1(下一个lru部分)。
[0509]
在第二表604中,lru增加列628指示lru值y的增加。例如,替代策略组件308将lru值增加一(例如,y+1)、二(例如,y+2)或不增加(例如,y)。在一些实例中,lru值的增加取决于数据路径dp0和dp1的状态。
[0510]
在实例操作中,第一数据路径dp0和第二数据路径dp1两者都包含有效事务。实例替代策略组件308确定是否分配任何数据路径。例如,当主存储区214需要分配数据时,高速缓存控制器220向替代策略组件308发送信息。
[0511]
如果第一数据路径dp0分配数据(例如,将数据从主存储区214移至受害者存储区218),那么第一数据路径dp0从受害者存储区214逐出数据(例如,由第一数据路径分配指针指示)。为了逐出数据,替代策略组件308确定第二数据路径dp1是否是命中以及命中位置在哪里。例如,替代策略组件308分析第二数据路径dp1的地址的位置并且确定所述位置是否与第一数据路径分配指针的位置匹配。
[0512]
如果第二数据路径命中位置等于第一数据路径分配指针的位置(例如,dp1命中位置=y),那么替代策略组件308更新第一数据路径分配指针以指向下一个lru值(y+1)(例如,通知高速缓存控制器220逐出下一个lru值的数据)。以此方式,第二数据路径dp1从命中位置y读取/写入并且第一数据路径dp0逐出lru位置y+1的数据。通过此操作,第一数据路径dp0不会逐出dp1的读取/写入数据。在逐出发生之后(例如,从受害者存储区218中的y+1中逐出数据),替代策略组件308将第一数据路径分配指针增加二并且将第二数据路径分配指针增加二。例如,替代策略组件308将lru值(y)增加二并且将下一个lru值(y+1)增加二,因为dp0刚刚逐出了位置y+1,因此新的lru值将是y+2。此操作在行640示出。
[0513]
如果第二数据路径命中位置不等于第一数据路径分配指针的位置(例如,dp1命中
位置不等于y),那么替代策略组件308通知高速缓存控制器220位置y被逐出。以此方式,高速缓存控制器220从受害者存储区218中的位置y逐出数据。在逐出发生之后(例如,从受害者存储区218中的y逐出数据),替代策略组件308将第一数据路径分配指针增加一并且将第二数据路径分配指针增加一。例如,替代策略组件308将lru值(y)增加一并且将下一个lru值(y+1)增加一,因为dp0刚刚逐出了位置y,因此新的lru值将是y+1。此操作在行642示出。
[0514]
在不同的操作中,第二数据路径dp1分配数据(例如,将数据从主存储区214移至受害者存储区)并且第二数据路径dp1从受害者存储区214逐出数据(例如,由第二数据路径分配指针指示)。为了逐出数据,替代策略组件308确定第一数据路径dp0是否是命中以及命中位置在哪里。例如,替代策略组件308分析第一数据路径dp0的地址的位置并且确定所述位置是否与第二数据路径分配指针的位置匹配。
[0515]
如果第一数据路径命中位置等于第二数据路径分配指针的位置(例如,dp0命中位置=y+1),那么替代策略组件308更新第二数据路径分配指针以指向lru值(y)(例如,通知高速缓存控制器220逐出lru值的数据)。以此方式,第一数据路径dp0从命中位置y+1读取/写入并且第二数据路径dp1逐出lru位置y的数据。通过此操作,第二数据路径dp1不会逐出dp0的读取/写入数据。在逐出发生之后(例如,从受害者存储区218中的y中逐出数据),替代策略组件308将第一数据路径分配指针增加一并且将第二数据路径分配指针增加一。例如,替代策略组件308将lru值(y)增加一并且将下一个lru值(y+1)增加一,因为dp1刚刚逐出了位置y,因此新的lru值将是y+1。此操作在行644示出。
[0516]
如果第一数据路径命中位置不等于第二数据路径分配指针的位置(例如,dp0命中位置不等于y+1),那么替代策略组件308通知高速缓存控制器220位置y+1被逐出。以此方式,高速缓存控制器220从受害者存储区218中的位置y+1逐出数据。在逐出发生之后(例如,从受害者存储区218中的y+1逐出数据),替代策略组件308将第一数据路径分配指针增加二并且将第二数据路径分配指针增加二。例如,替代策略组件308将lru值(y)增加二并且将下一个lru值(y+1)增加二,因为dp1刚刚逐出了位置y+1,因此新的lru值将是y+2。此操作在行646示出。
[0517]
本文中描述用于受害者存储区中的逐出的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0518]
实例1包含一种设备,其包括:高速缓存存储区;高速缓存控制器,其可用于同时接收第一存储器操作和第二存储器操作;比较逻辑,其可用于识别所述第一和第二存储器操作在所述高速缓存存储区中是否未命中;及替代策略组件,其可用于在所述第一和第二存储器操作中的至少一个对应于所述高速缓存存储区中的未命中时,基于所述第一和第二存储器操作保留所述高速缓存存储区中要逐出的条目。
[0519]
实例2包含根据实例1所述的设备,其中所述替代策略组件将推测地锁定所述高速缓存存储区中用于逐出的所述条目。
[0520]
实例3包含根据实例1所述的设备,其中所述替代策略组件可用于存储所述高速缓存存储区中要替代的第一通路的指示符,响应于所述第一存储器操作在所述高速缓存存储区中未命中且所述第二存储器操作在所述高速缓存存储区中命中,确定所述第二存储器操作是否针对所述高速缓存存储区的由所述指示符指示的所述第一通路,并且基于所述第二存储器操作是针对所述高速缓存存储区的所述第一通路,使所述指示符增加以指示所述高
速缓存存储区的第二通路,并基于所述第一存储器操作和所述经增加指示符,使所述高速缓存存储区的所述第二通路被逐出。
[0521]
实例4包含根据实例1所述的设备,其中所述替代策略组件可用于存储所述高速缓存存储区中要替代的第二通路的指示符,响应于所述第二存储器操作在所述高速缓存存储区中未命中且所述第一存储器操作在所述高速缓存存储区中命中,确定所述第一存储器操作是否针对所述高速缓存存储区的由所述指示符指示的所述第二通路,并且基于所述第一存储器操作针对所述高速缓存存储区的所述第二通路,使所述指示符减少以指示所述高速缓存存储区的第一通路,并基于所述第二存储器操作和所述经增加指示符,使所述高速缓存存储区的所述第一通路被逐出。
[0522]
实例5包含根据实例1所述的设备,其中所述替代策略组件可用于存储所述高速缓存存储区中要替代的第一通路的第一指示器和第二通路的第二指示符,响应于所述第一存储器操作在所述高速缓存存储区中未命中且所述第二存储器操作在所述高速缓存存储区中未命中,基于所述第一存储器操作使所述高速缓存存储区的所述第一通路被逐出,并基于所述第二存储器操作使所述高速缓存存储区的所述第二通路被逐出。
[0523]
实例6包含根据实例5所述的设备,其中所述替代策略组件可用于在所述高速缓存存储区的所述第一通路和所述第二通路被逐出之后,使所述第一指示符增加两个位置并使所述第二指示符增加两个位置。
[0524]
实例7包含根据实例1所述的设备,其中所述高速缓存存储区是受害者高速缓存存储区。
[0525]
实例8包含根据实例1所述的设备,其进一步包含第一接口和第二接口,所述第一接口用于从中央处理单元获得所述第一存储器操作,且所述第二接口用于从所述中央处理单元获得所述第二存储器操作,所述第一接口和所述第二接口耦合到所述比较逻辑和所述高速缓存控制器。
[0526]
实例9包含根据实例8所述的设备,其中所述第一接口是向量接口,且所述第二接口是标量接口。
[0527]
实例10包含一种方法,其包括:同时接收第一存储器操作和第二存储器操作,识别所述第一和第二存储器操作在高速缓存存储区中是否未命中,并在所述第一和第二存储器操作中的至少一个对应于所述高速缓存存储区中的未命中时,基于所述第一和第二存储器操作,保留所述高速缓存存储区中要逐出的条目。
[0528]
实例11包含根据实例10所述的方法,其进一步包含推测地锁定所述高速缓存存储区中要逐出的所述条目。
[0529]
实例12包含根据实例10所述的方法,其进一步包含存储所述高速缓存存储区中要替代的第一通路的指示符,响应于所述第一存储器操作在所述高速缓存存储区中未命中且所述第二存储器操作在所述高速缓存存储区中命中,确定所述第二存储器操作是否针对所述高速缓存存储区的由所述指示符指示的所述第一通路,并且基于所述第二存储器操作针对所述高速缓存存储区的所述第一通路,使所述指示符增加以指示所述高速缓存存储区的第二通路,并基于所述第一存储器操作和所述经增加指示符,使所述高速缓存存储区的所述第二通路被逐出。
[0530]
实例13包含根据实例10所述的方法,其进一步包含存储所述高速缓存存储区中要
替代的第二通路的指示符,响应于所述第二存储器操作在所述高速缓存存储区中未命中且所述第一存储器操作在所述高速缓存存储区中命中,确定所述第一存储器操作是否针对所述高速缓存存储区的由所述指示符指示的所述第二通路,并且基于所述第一存储器操作针对所述高速缓存存储区的所述第二通路,使所述指示符减少以指示所述高速缓存存储区的第一通路,并基于所述第二存储器操作和所述经增加指示符,使所述高速缓存存储区的所述第一通路被逐出。
[0531]
实例14包含根据实例10所述的方法,其进一步包含存储所述高速缓存存储区中要替代的第一通路的第一指示符和第二通路的第二指示符,响应于所述第一存储器操作在所述高速缓存存储区中未命中且所述第二存储器操作在所述高速缓存存储区中未命中,基于所述第一存储器操作使所述高速缓存存储区的所述第一通路被逐出,并基于所述第二存储器操作使所述高速缓存存储区的所述第二通路被逐出。
[0532]
实例15包含根据实例14所述的方法,其进一步包含在所述高速缓存存储区的所述第一通路和所述第二通路被逐出之后,使所述第一指示符增加两个位置,并使所述第二指示符增加两个位置。
[0533]
实例16包含一种系统,其包括用于同时输出第一存储器操作和第二存储器操作的中央处理单元和耦合到所述中央处理单元的高速缓存,所述高速缓存进一步包含:高速缓存存储区;高速缓存控制器,其可用于同时接收第一存储器操作和第二存储器操作;比较逻辑,其可用于识别所述第一和第二存储器操作在所述高速缓存存储区中是否未命中;及替代策略组件,其可用于在所述第一和第二存储器操作中的至少一个对应于所述高速缓存存储区中的未命中时基于所述第一和第二存储器操作,保留所述高速缓存存储区中要逐出的条目。
[0534]
实例17包含根据实例16所述的系统,其中所述高速缓存存储区是第一高速缓存存储区,所述高速缓存进一步包含与所述第一高速缓存存储区并联耦合的第二高速缓存存储区。
[0535]
实例18包含根据实例16所述的系统,其中所述高速缓存存储区是受害者高速缓存存储区。
[0536]
实例19包含根据实例16所述的系统,其中所述高速缓存进一步包含第一接口和第二接口,所述第一接口是64位宽双向标量接口,且所述第二接口是512位宽向量接口。
[0537]
实例20包含根据实例16所述的系统,其中所述替代策略组件可用于基于以下来调整所述高速缓存存储区中的条目保留:1)所述第一和第二存储器操作的有效性,2)所述高速缓存存储区是否存储用于所述第一和第二存储器操作的数据,以及3)所述第一和第二存储器操作是将数据分配到所述高速缓存存储区还是将数据写入到所述高速缓存存储区。图11a是图2和/或3的受害者高速缓存存储队列216的实例电路实施方案。在图11a中,受害者高速缓存存储队列216包含实例锁存器1102a、1102b、1102c、1102d、1102e;实例合并电路1103a
‑
c;实例算术组件1104;实例原子比较组件1106;实例读取
‑
修改
‑
写入合并组件1108;实例选择复用器1110;和实例ecc生成器1112;实例仲裁管理器1114;实例未决存储地址数据存储区1116;实例优先级复用器1118;以及实例写入端口1126。实例合并电路1103a
‑
d包含实例比较器1120和实例开关1122。图11a的实例示出了受害者高速缓存存储队列216的单个管线。然而,如虚线框1100所指示的,受害者存储元件216可布置成支持关于不同组的超
过一个独立的管线副本。因此,如下文进一步描述,可以针对不同的组多次再现图11a的管线。
[0538]
用于组仲裁的多组数据ram高速缓存中的读取
‑
修改
‑
写入支持的方法和设备
[0539]
一些单片存储装置不支持处理器(例如,cpu)在相同时钟循环期间的多次存取。例如,存取单个主存储区中的数据的请求可以锁定整个单个主存储区。在此类实例中,存在能够支持每一时钟循环一个完整的高速缓存线存取的单个寄存器文件。在一些此类实例中,与单个主存储区相关联的整个高速缓存线可以被锁定以服务于请求,因为单个寄存器文件被分配给接收到此类请求的存储数据组。
[0540]
本文描述的实例包含用于组仲裁的多组数据ram高速缓存。在一些描述的实例中,图2的主要高速缓存存储队列212具有多个组(例如,存储组、存储数据组、存储器组等),并且因此是多组的或具有多组数据或存储器结构。在一些描述的实例中,图2的主存储区214具有多个组,并且因此是多组的或具有多组数据或存储器结构。有利地,主要高速缓存存储队列212和/或主存储区214的多组结构可以实现对每一时钟循环的两个或更多个存取(例如,cpu存取)的支持。有利地,主要高速缓存存储队列212和/或主存储区214的多组结构允许在没有性能开销的情况下服务和/或实现两个或更多个存取。
[0541]
在一些描述的实例中,仲裁逻辑以解决组存取冲突的布置耦合到主要高速缓存存储队列212和/或主存储区214。例如,主要高速缓存存储队列212可以被分成16个可独立寻址组。在此类实例中,仲裁逻辑可以包含16组仲裁逻辑,其中每组仲裁逻辑与16个可独立寻址组中的对应一个形成回路。有利地,仲裁逻辑可以独立于16个组中的第二组解决16个组中的第一组的组存取冲突。
[0542]
图7b是第二实例经包封数据高速缓存系统710的示意图。第二经包封数据高速缓存系统710可以是图1的l1高速缓存110或其部分,和/或更一般地图1的数据高速缓存108或其部分的实例电路实施方案。第二经包封数据高速缓存系统710被包封以向外部系统(例如,一或多个cpu、一或多个处理器、外部硬件等)提供统一的存储区视图。例如,可使用固件、软件、硬件逻辑等和/或其组合包封第二经包封数据高速缓存系统710以包封和/或以其它方式抽象化与写入后读取(raw)隐患、写入后写入(waw)隐患、数据转发等相关的所有复杂性。有利地,图7b的实例中所描绘的统一架构可将单独端口提供到外部系统(例如,cpu 102)以简化获得对所关注数据的最近版本的存取。
[0543]
在图7b的实例中,第二经包封数据高速缓存系统710包含图2的主要高速缓存存储队列212和图2的主存储区214。在图7b中,主要高速缓存存储队列212包含多个第一实例可独立寻址组(例如,数据组、存储组、数据存储组等)712。例如,第一可独立寻址组712可以是组队列、组子队列等。在此类实例中,组队列、组子队列等可以包含多个存储元件,如下面的图7d和/或图7e中所描绘。第一可独立寻址组712是主要高速缓存存储队列组(例如,主要高速缓存存储队列数据组、主要高速缓存组队列、主要高速缓存组子队列等)。在图7b中,主要高速缓存存储队列212包含16个主要高速缓存存储队列组712。替代地,主要高速缓存存储队列组712的实例可以少于或多于16个。
[0544]
在图7b中,主存储区214包含多个第二实例可独立寻址组(例如,数据组、存储组、数据存储组等)714。第二可独立寻址组714是主存储区组(例如,主存储区数据组)。在图7b中,主存储区214包含16个主存储区组714。替代地,主存储区714的实例可以少于或多于16
个。例如,主要高速缓存存储队列212可以包含多个组队列或组子队列,包含第一组队列或第一组子队列(例如,主要高速缓存存储队列:组1)并且主存储区214可以包含多个数据组,包含第一数据组(例如,主存储区:组1)。
[0545]
在一些实例中,主要高速缓存存储队列212和主存储区214各自具有256行,每一行具有1024位的线宽,但是如图7b所示被划分为16个组,给定组每一行64位。在一些实例中,主要高速缓存存储队列212和主存储区214各自具有384行,每一行具有1024位的线宽,但是如图7b所示被划分为16个组,给定组每一行64位。当然,上述实例中描述的高速缓存大小仅为两个实例,并且描述不限于任何特定的高速缓存线宽、组或行的数目等。如图7b所描绘,第一组712中的每一个对应于第二组714中的一个。例如,主要高速缓存存储队列212的第一组(组1)与主存储区214的第一组(组1)形成回路,并且因此对应于主存储区214的第一组。
[0546]
有利地,主要高速缓存存储队列212、主存储区214和/或更一般地第二经包封数据高速缓存系统710的多组结构可以并行地为发送到组的读取和写入操作提供服务。在一些实例中,每一组响应于读取和/或写入操作来仲裁其自身的过程。通过允许第二经包封数据高速缓存系统710的每一组独立操作,第二经包封数据高速缓存系统710的操作更有效,因为当接收到请求时整个高速缓存线没有被锁定。相反,只有分配给接收到这种请求的组的高速缓存线部分会被锁定。
[0547]
图7d描绘实例主要高速缓存多组结构730。在一些实例中,图1的l1高速缓存110、l2高速缓存112和/或l3高速缓存114可具有主要高速缓存多组结构730。在一些实例中,图2的主要高速缓存存储队列212和/或图2的主存储区214可具有主要高速缓存多组结构730。例如,主要高速缓存多组结构730可以是主要高速缓存存储队列212和/或主存储区214的实例实施方案。
[0548]
主要高速缓存多组结构730是包含16个实例组(组0
‑
15)732的数据或存储器结构,组732中的每一个具有64字节的数据宽度(例如,字节0
‑
7)。组732中的每一个包含16个实例行(行0
‑
15)734,其中行734中的每一个具有128字节的数据宽度(例如,128字节=8字节/组*16组)。在图7d中,组732中的每一个可以存储128字节(例如,128字节=8字节/行*16行)。在图7d中,主要高速缓存多组结构730可以存储2048字节(例如,2048字节=128字节/组*16组)。主要高速缓存多组结构730可由组独立寻址。例如,行734的第一行的开始行地址为0且结束行地址为127,行734的第二行的开始行地址为128且结束行地址为255,以此类推。
[0549]
在一些实例中,高速缓存线可以是适配存储器(例如,dram)或存储单元(例如,主存储区214、受害者存储区218等)的宽度的128字节数据。在图7d的实例中,高速缓存线可占用主要高速缓存组结构730的整个行。例如,高速缓存线可使用16个组的一个行734,其中每一组是8字节宽。有利地,主要高速缓存组结构730可使得16个不同高速缓存线存取存储在其中的数据。
[0550]
图7e描绘实例统一高速缓存多组结构740。在一些实例中,图1的l1高速缓存110、l2高速缓存112和/或l3高速缓存114可具有统一高速缓存组结构740。在一些实例中,图2的主要高速缓存存储队列212、图2的主存储区214、图2的受害者高速缓存存储队列216和/或图2的受害者存储区218可具有统一高速缓存多组结构740。例如,统一高速缓存多组结构740可以是主要高速缓存存储队列212、主存储区214、受害者高速缓存存储队列216和/或受
害者存储区218的实例实施方案。
[0551]
统一高速缓存多组结构740是包含16个实例组(组0
‑
15)742的数据或存储器结构,组742中的每一个具有64字节的数据宽度(例如,字节0
‑
7)。组742中的每一个包含16个实例行(行0
‑
15)744,其中行744中的每一个具有128字节的数据宽度(例如,128字节=8字节/组*16组)。在图7e中,组742中的每一个可以存储128字节(例如,128字节=8字节/行*16行)。在图7e中,统一高速缓存多组结构740可以存储2048字节(例如,2048字节=128字节/组*16组)。统一高速缓存多组结构740可由组独立寻址。例如,行744的第一行的开始行地址为0且结束行地址为127,行744的第二行的开始行地址为128且结束行地址为255,以此类推。
[0552]
图9描绘可由主要高速缓存控制器222、受害者高速缓存控制器224和/或更一般地说图2的高速缓存控制器220、和/或更一般地说图1和/或2的l1高速缓存110执行的实例指令服务工作流900、910、920。例如,指令服务工作流900、910、920可以结合图2的主要高速缓存存储队列212、主存储区214、受害者高速缓存存储队列216或受害者存储区218中的至少一个来执行。指令服务工作流900、910、920包含第一实例指令服务工作流900、第二实例指令服务工作流910和第三实例指令服务工作流920。
[0553]
响应于接收到第一实例存储指令902而执行第一指令服务工作流900。第一存储指令902是在地址(addr)0处写入64字节的cpu写入操作或命令。图3a
‑
3d的地址处理组件302a
‑
c可以旋转和/或以其它方式组织第一存储指令902中包含的第一数据(cpu写入数据)以生成第一实例经旋转或经对准数据(写入数据对准)904。
[0554]
图3a
‑
3d的地址处理组件302a
‑
c可以使用来自存储指令的存储器地址来确定对于第一存储指令902需要图2的主要高速缓存存储队列212、主存储区214、受害者高速缓存存储队列216和/或受害者存储区218的哪些组。例如,地址处理组件302a
‑
c可以确定第一存储指令902的addr 0指示8个完整组(例如,图7c的组722中的8个)被读取和写入。在此类实例中,地址处理组件302a
‑
c可以确定要读取的组的数目或数量是0x00ff并且要写入的组的数目或数量是0x00ff。例如,地址处理组件302a
‑
c可以确定图7c的组0
‑
7需要存取,其中每个组都有对应位(例如,第一位用于组7、第二位用于组6、第三位用于组5等)。当要读取或写入组时,对应位的位置具有位值1,否则位值为0。在此类实例中,基于组0
‑
7的每个位具有值1(例如,组7是1,组6是1等)指示需要针对第一存储指令902存取相应组,地址处理组件302a
‑
c可以为0x00ff的多个组读取生成地址,其二进制为11111111。
[0555]
在一些实例中,图3a
‑
3d的组处理逻辑303检测传入的存储指令(例如,第一存储指令902)是指示整个组的写入还是部分组的写入。在第一指令服务工作流900中,组处理逻辑303可以确定,由于所有需要的组都将被完全覆写,因此不需要首先读取任何组。例如,组处理逻辑303可以确定组读取的数目为0x0000,其二进制为000000000,并且指示不需要从中读取每个组。有利地,通过与先前高速缓存系统实施方案相比执行更少的读取操作,组处理逻辑303可以减少要从中读取的组的数目,从而提高效率和/或以其它方式优化主要高速缓存存储队列212、主存储区214和/或更一般地图7的经包封数据高速缓存系统700的操作。
[0556]
响应于接收到第二实例存储指令912而执行第二指令服务工作流910。第二存储指令912是在addr 3处写入64字节的cpu写入操作或命令。地址处理组件302a
‑
c可以旋转和/或以其它方式组织第二存储指令912中包含的第二数据(cpu写入数据)以生成第二实例经
旋转或经对准数据(写入数据对准)914。例如,地址处理组件302a
‑
c可以将第二数据移位以将第二数据放置在与高速缓存存储器(例如l1高速缓存110)相关联的正确通道中。
[0557]
地址处理组件302a
‑
c可以确定第二存储指令912的addr 3指示8个完整组(例如,图7的组702中的8个)被读取和写入。在此类实例中,地址处理组件302a
‑
c可以确定要读取的组的数目或数量是0x01ff并且要写入的组的数目或数量是0x01ff。例如,地址处理组件302a
‑
c可以确定图7的组0
‑
8需要存取,其中每个组都有对应位(例如,第一位用于组8、第二位用于组7、第三位用于组6等)。在此类实例中,基于组0
‑
8的每个位具有值1(例如,组8是1,组7是1等)指示需要针对第二存储指令912存取相应组,地址处理组件302a
‑
c可以为0x01ff的多个组读取生成地址,其二进制为111111111。
[0558]
在一些实例中,图3a
‑
3d的组处理逻辑303检测第三存储指令922是指示整个组的写入还是部分组的写入。在第二指令服务工作流910中,组处理逻辑303可以确定当组0和8被完全覆写时,不需要首先读取组0和8。例如,组处理逻辑303可以确定组读取的数目为0x0101,其二进制为100000001,并且指示不需要从中读取组0和8。有利地,通过与先前高速缓存系统实施方案相比执行更少的读取操作,组处理逻辑303可以减少要从中读取的组的数目,从而提高效率和/或以其它方式优化主要高速缓存存储队列212、主存储区214和/或更一般地图7的经包封数据高速缓存系统700的操作。
[0559]
响应于接收到第三实例存储指令922而执行第三指令服务工作流920。第三存储指令922是在addr 113处写入64字节的cpu写入操作或命令。地址处理组件302a
‑
c可以旋转和/或以其它方式组织第三存储指令922中包含的第二数据(cpu写入数据)以生成第三实例经旋转或经对准数据(写入数据对准)924。例如,地址处理组件302a
‑
c可以将第三数据移位以将第三数据放置在与高速缓存存储器(例如l1高速缓存110)相关联的正确通道中。
[0560]
地址处理组件302a
‑
c可以确定第三存储指令922的addr 113指示8个完整组(例如,图7的组722中的8个)被读取和写入。在此类实例中,地址处理组件302a
‑
c可以确定要读取的组的数目或数量是0xc07f并且要写入的组的数目或数量是0xc07f。例如,地址处理组件302a
‑
c可以确定图7的组0
‑
6和14
‑
15需要存取,其中每个组都有对应位(例如,第一位用于组15、第二位用于组14、第三位用于组6等)。在此类实例中,基于组0
‑
6和14
‑
15的每个位具有值1(例如,组15是1,组14是1,组6是1等)指示需要针对第三存储指令922存取相应组,地址处理组件302a
‑
c可以为0xc07f的多个组读取生成地址,其二进制为1100000001111111。
[0561]
在一些实例中,图3a
‑
3d的组处理逻辑303检测第三存储指令922是指示整个组的写入还是部分组的写入。在第三指令服务工作流920中,组处理逻辑303可以确定组6和14
‑
15将被完全覆写,因此不需要首先读取组6和14
‑
15。例如,组处理逻辑303可以确定组读取的数目为0xc080,其二进制为1100000010000000,并且指示不需要从中读取组6和14
‑
15。有利地,通过与先前高速缓存系统实施方案相比执行更少的读取操作,组处理逻辑303可以减少要从中读取的组的数目,从而提高效率和/或以其它方式优化主要高速缓存存储队列212、主存储区214和/或更一般地图7的经包封数据高速缓存系统700的操作。
[0562]
图10a是实例数据高速缓存系统1000的示意图。数据高速缓存系统1000可以是图1、2和/或3的l1高速缓存110或其部分的实例实施方案。数据高速缓存系统1000包含图7b的经包封数据高速缓存系统700的第一实例组(经包封数据高速缓存系统组[i])1002。例如,
第一组1002可以对应于图7b的主要高速缓存存储队列:组1和主存储区:组1。第一组1002包含图2的主要高速缓存存储队列212的第一实例主要高速缓存存储队列组1004,其可以是图7b的主要高速缓存存储队列:组1的实例实施方案。第一组1002包含图2的主存储区214的第一实例主存储区组1006,其可以是图7b的主存储区:组1的实例实施方案。
[0563]
数据高速缓存系统1000包含第一实例地址处理逻辑1001和第二实例地址处理逻辑1003。第一地址处理逻辑1001和第二地址处理逻辑1003可以是图3a
‑
3d的地址处理组件302a
‑
c和/或图3a
‑
3d的组处理逻辑303的实例实施方案。第一地址处理逻辑1001可以是图3a
‑
3d的第一地址处理组件302a、第二地址处理组件302b或第三地址处理组件302c中的至少一个的实例实施方案。第二地址处理逻辑1001可以是图3a
‑
3d的第一地址处理组件302a、第二地址处理组件302b或第三地址处理组件302c中的至少一个的实例实施方案。
[0564]
数据高速缓存系统1000包含实例仲裁逻辑1008、1010和实例复用器逻辑1012、1014、1016。仲裁逻辑1008、1010包含第一实例仲裁逻辑(例如,第一仲裁器)1008和第二实例仲裁逻辑(例如,第二仲裁器)1010。第一仲裁逻辑1008是主存储区读取/写入仲裁器(ms r/w arb[i]),且第二仲裁逻辑1010是主要高速缓存存储队列(stq write arb[i])。图10a所示实例的实例仲裁管理器1008、1010由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。图10a所示实例的实例复用器逻辑1012、1014、1016由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0565]
复用器逻辑1012、1014、1016包含第一实例复用器(mux1[i])(例如,第一复用器逻辑电路)1012、第二实例复用器(mux2[i])(例如,第二复用器逻辑电路)1014,以及第三实例复用器(mux3[i])(例如,第三复用器逻辑电路)1016。复用器1012、1014、1016具有选择输入(sel[i])、数据输入(1
‑
3)和输出。
[0566]
复用器1012、1014、1016的第一数据输入(数据输入1)耦合到第一地址处理逻辑1001和第二地址处理逻辑1003。复用器1012、1014、1016的第二数据输入(数据输入2)耦合到第一地址处理逻辑1001和第二地址处理逻辑1003。复用器1012、1014、1016的第三数据输入(数据输入3)耦合到第一地址处理逻辑1001和第二地址处理逻辑1003。
[0567]
第一复用器1012的选择输入耦合到第二仲裁逻辑1010的输出。第二复用器1014的选择输入和第三复用器1016的选择输入耦合到第一仲裁逻辑1008的输出。第一复用器1012的输出耦合到第一主要高速缓存存储组1004的实例写入端口(write port[i])1024。第二复用器1014的输出耦合到第一主要高速缓存存储组1004的实例读取端口(read port[i])1026。第三复用器1016的输出耦合到第一主存储区组1006的实例读取/写入端口(read/write port[i])1028。第一仲裁逻辑1008耦合到第一地址处理逻辑1001、第二地址处理逻辑1003、第二仲裁逻辑1010以及第一主要高速缓存存储队列组1004的输出。
[0568]
图10a的stq[i]表示主要高速缓存存储队列212的多组实施方案的单个组。例如,主要高速缓存存储队列212可以具有表示主要高速缓存存储队列212具有16个组的stq0.‑
stq[15]。在此类实例中,stq0.‑
stq[15]中的每一个都可以存储64位(即8字节)。在一些此
类实例中,stq0.‑
stq[15]和/或更一般地主要高速缓存存储队列212可以存储24,576位(即,3072字节)。替代地,stq0.‑
stq[15]中的每一个可以存储不同数量的位,且因此主要高速缓存存储队列可以存储不同数量的位。
[0569]
包含第一组1002的多个组可以被包封以形成和/或以其它方式生成经包封数据高速缓存系统1034。例如,经包封数据高速缓存系统1034可以是图7b的经包封数据高速缓存系统700的实例实施方案。有利地,主要高速缓存存储队列212和主存储区214的每一对应组可以被包封在一起以形成和/或以其它方式生成实例经包封数据高速缓存组1036,以便在与外部系统交互时进行简化。经包封数据高速缓存组1036包含实例经包封写入端口(write port(stq[i]))438、实例经包封读取端口(read port(stq[i]))1040和实例经包封读取/写入端口(read/write port(ms[i]))1042。
[0570]
第一地址处理逻辑1001和/或第二地址处理逻辑1003可以从图1的cpu 102的图1的接口之一获得实例存储指令1018、1020、1022。存储指令1018、1020、1022包含实例数据,例如wdata、addr、byten、size和r/w。wdata对应于要写入和/或以其它方式存储在主要高速缓存存储队列212或主存储区214中的至少一个中的数据(例如,64位数据)。addr对应于与主要高速缓存存储队列212或主存储区214中的至少一个相关联的数据地址。byten对应于字节启用数据。size对应于数据存取操作(例如,读取操作、写入操作、修改操作等和/或其组合)的数据大小。r/w对应于存储指令是读取操作还是写入操作。
[0571]
存储指令1018、1020、1022包含第一实例存储指令(scalar_dp(dp0))1018、第二实例存储指令(dma)1020和第三实例存储指令(vector_dp(dp1))1022。第一存储指令1018从图1的标量接口(例如,图2的cpu接口202)传输,并且因此对应于数据高速缓存系统1000的标量数据路径(scalar_dp(dp1))。第二存储指令1020从图1的存储器接口(例如,直接存储器存取(dma)接口)传输,并且因此对应于dma数据路径(dma)。第三存储指令1022从图1的向量接口(例如,图2的cpu接口202)传输,并且因此对应于数据高速缓存系统1000的向量数据路径(vector_dp(dp1))。
[0572]
第一地址处理逻辑1001和/或第二地址处理逻辑1003生成事务数据(transaction_dp0[i]、transaction dma[i]、transaction dp1[i]),其可用于执行与主要高速缓存存储队列212或主存储区214中的至少一个相关联的数据存取操作。第一地址处理逻辑1001可以从存储指令1018、1020和1022中的相应一个中提取wdata并且在一些实例中旋转wdata,并且将所提取和/或经旋转wdata传输到复用器1012、1014、1016的相应第一输入。例如,第一地址处理逻辑1001可以从第一存储指令1018中提取第一wdata并旋转第一wdata,并且将第一所提取和经旋转wdata传输到第一复用器1012的第一输入、第二复用器1014的第一输入和第三复用器1016的第一输入。
[0573]
第二地址处理逻辑1003可以确定存储队列212或主存储区214中的至少一个的16个组中的一或多个的地址(ms/stq_addr[i])。所述地址可以基于存储指令1018、1020、1022中包含的addr数据。第二地址处理逻辑1003可以基于存储指令1018、1020、1022中包含的byten数据确定每一组的字节启用值(byten/bank[i])。第二地址处理逻辑1003可以基于存储指令1018、1020、1022中包含的r/w数据确定写入组请求(wr_bank_req[i])和/或读取组请求(rd_bank_req[i])。
[0574]
第一地址处理逻辑1001和/或第二地址处理逻辑1003可以确定存储指令1018、
1020、1022中的相应指令的事务数据。事务数据可以包含经旋转wdata数据ms/stq_addr[i]和byten/bank[i]。例如,第一地址处理逻辑1001和/或第二地址处理逻辑1003可以基于第一存储指令1018生成第一事务数据(transaction_dp0[i]),基于第二存储指令1020生成第二事务数据(transaction_dma[i])以及基于第三存储指令1022生成第三事务数据(transaction_dp1[i])。在此类实例中,第一地址处理逻辑1001和/或第二地址处理逻辑1003可以将第一事务数据传输到第一复用器1012、1014、1016的输入,将第二事务数据传输到复用器1012、1014、1016的第二输入,以及将第三事务数据传输到复用器1012、1014、1016的第三输入。
[0575]
在实例操作条件中,第一地址处理逻辑1001和第二地址处理逻辑1003获得存储指令1018、1020、1022。第一地址处理逻辑1001和第二地址处理逻辑1003基于存储指令1018、1020、1022中的相应指令生成第一至第三事务数据。第一地址处理逻辑1001和第二地址处理逻辑1003将第一到第三事务数据传输到复用器1012、1014、1016。第二地址处理逻辑1003传输与存储指令1018、1020、1022中的每一个相对应的读取组请求或写入组请求任一者。
[0576]
在实例操作条件中,第一仲裁逻辑1008确定存储指令1018、1020、1022中的一个是请求读取主要高速缓存存储队列212的一或多个组还是写入主存储区214的一或多个组。在实例操作条件中,第一仲裁逻辑1008将读取操作优先于写入操作。在实例操作条件中,存储队列212的组可以响应于存储队列212已满而生成实例存储队列已满信号(full_sig[i])1030。在实例操作条件中,存储队列212的组可以生成实例完整数据写入信号(comlete_data_wr_sig[i])1032。
[0577]
例如,第一存储指令1018可以对应于组0
‑
4的写入操作,第二存储指令1020可以对应于组5
‑
9的读取操作,并且第三存储指令1022可以对应于组10
‑
14的读取操作。第二仲裁逻辑1010可以分配dp0以将第一事务数据传输到组0
‑
4的写入端口1024(例如,write port[0]、write port[1]、write port[2]等),因为没有其它数据路径在请求写入操作服务。第二仲裁逻辑1010可以通过生成信号(sel[i])来分配dp0以指示第一复用器1012选择第一事务数据。第一仲裁逻辑1008可以分配dma以将第二事务数据传输到组5
‑
9的读取端口1026(例如,read port[4]、read port[5]、read port[6]等),因为没有其它数据路径在请求与组5
‑
9相关的读取操作服务。第一仲裁逻辑1008可以通过生成信号(sel[i])来分配dma以指示第二复用器1014选择第二事务数据。第一仲裁逻辑1008可以分配dp1以将第三事务数据传输到组10
‑
14的读取端口1026(例如,read port[9]、read port[10]、read port[11]等),因为没有其它数据路径在请求与组10
‑
14相关的读取操作服务。第一仲裁逻辑1008可以通过生成信号(sel[i])来分配dp1以指示第三复用器1016选择第三事务数据。在此类实例中,组15未分配给任何数据路径。
[0578]
在实例操作条件中,如果第一存储指令1018对应于被拆分的组0
‑
4的写入操作,那么第一仲裁逻辑1008可以延迟和/或以其它方式停止写入操作。例如,如果写入操作的第一部分与写入主要高速缓存存储队列212相关联并且写入操作的第二部分与从主存储区214读取相关联,那么第一仲裁逻辑1008可以指示第二仲裁逻辑1010不服务和/或以其它方式不将第一事务数据分配给写入端口1024。
[0579]
在实例操作条件中,如果第一存储指令1018对应于被拆分的组0
‑
4的写入操作,那么主要高速缓存存储队列212可以指示第一仲裁逻辑408在完整数据已汇编好用于写入时
服务于写入操作。例如,如果写入操作的第一部分与写入主要高速缓存存储队列212相关联并且写入操作的第二部分与从主要高速缓存存储队列212或主存储区214中的至少一个读取相关联,那么第一仲裁逻辑1008可以等待将第一事务数据分配给读取/写入端口1028。在此类实例中,响应于在主要高速缓存存储队列212中定位与第二部分相关联的数据,主要高速缓存存储队列212可以将经定位数据递送到主存储区214。响应于将数据递送到主存储区214,主要高速缓存存储队列212可以生成用于complete_data_wr_sig[i]的信号(例如,断言逻辑高信号),指示第一仲裁逻辑1010服务于写入操作,因为写入操作所需的完整数据集已经被读取和/或以其它方式汇编可用于服务。
[0580]
图10b是实例数据高速缓存系统1000b的示意图。数据高速缓存系统1000b可以是图1、2和/或3的l1高速缓存110或其部分的实例实施方案。数据高速缓存系统1000b包含图7a的经包封数据高速缓存系统700的第一实例组(经包封数据高速缓存系统组[i])1002b。例如,第一组1002b可以对应于图7a的受害者高速缓存存储队列:组1和受害者存储区:组1。第一组1002b包含图2的受害者高速缓存存储队列216的第一实例受害者高速缓存存储队列组1004b,其可以是图7a的受害者高速缓存存储队列:组1的实例实施方案。第一组1002b包含图2的受害者存储区218的第一实例受害者存储区组1006b,其可以是图7a的受害者存储区:组1的实例实施方案。
[0581]
数据高速缓存系统1000b包含第一实例地址处理逻辑1001b、第二实例地址处理逻辑1003b、实例仲裁逻辑1008b、1010b和实例复用器逻辑1012b、1014b、1016b。仲裁逻辑1008b、1010b包含第一实例仲裁逻辑(例如,第一仲裁器)1008b和第二实例仲裁逻辑(例如,第二仲裁器)1010b。第一仲裁逻辑1008b是受害者存储区读取/写入仲裁器(vs r/w arb[i]),并且第二仲裁逻辑1010b是受害者高速缓存存储队列(stq_v write arb[i])。图10b所示实例的实例仲裁管理器1008b、1010b由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。图10b所示实例的实例复用器逻辑1012b、1014b、1016b由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0582]
复用器逻辑1012b、1014b、1016b包含第一实例复用器(mux1[i])(例如,第一复用器逻辑电路)1012b、第二实例复用器(mux2[i])(例如,第二复用器逻辑电路)1014b,以及第三实例复用器(mux3[i])(例如,第三复用器逻辑电路)1016b。复用器1012b、1014b、1016b具有选择输入(sel[i])、数据输入(1
‑
3)和输出。
[0583]
复用器1012b、1014b、1016b的第一数据输入(数据输入1)耦合到地址处理逻辑1001b、1003b。复用器1012b、1014b、1016b的第二数据输入(数据输入2)耦合到地址处理逻辑1001b、1003b。复用器1012b、1014b、1016b的第三数据输入(数据输入3)耦合到地址处理逻辑1001b、1003b。
[0584]
第一复用器1012b的选择输入耦合到第二仲裁逻辑1010b的输出。第二复用器1014b的选择输入和第三复用器1016b的选择输入耦合到第一仲裁逻辑1008b的输出。第一复用器1012b的输出耦合到第一受害者高速缓存存储组1004b的实例写入端口(write port
[i])1024b。第二复用器1014b的输出耦合到第一受害者高速缓存存储组1004b的实例读取端口(read port[i])1026b。第三复用器1016b的输出耦合到第一受害者存储区组1006b的实例读取/写入端口(read/write port[i])1028b。第一仲裁逻辑1008b耦合到地址处理逻辑1001b、1003b、第二仲裁逻辑1010b以及第一受害者高速缓存存储队列组1004b的输出。
[0585]
图10b的stq_v[i]表示受害者高速缓存存储队列216的多组实施方案的单个组。例如,受害者高速缓存存储队列216可以具有表示受害者高速缓存存储队列216具有16个组的stq_v0.‑
stq_v[15]。在此类实例中,stq_v0.‑
stq_v[15]中的每一个都可以存储64位(即8字节)。在一些此类实例中,stq_v0.‑
stq_v[15]和/或更一般地受害者高速缓存存储队列216可以存储24,576位(即,3072字节)。替代地,stq_v0.‑
stq_v[15]中的每一个可以存储不同数量的位,且因此受害者高速缓存存储队列216可以存储不同数量的位。
[0586]
包含第一组1002b的多个组可以被包封以形成和/或以其它方式生成经包封数据高速缓存系统1034b。例如,经包封数据高速缓存系统1034b可以是图7a的经包封数据高速缓存系统700的实例实施方案。有利地,受害者高速缓存存储队列216和受害者存储区218的每一对应组可以被包封在一起以形成和/或以其它方式生成实例经包封数据高速缓存组1036b,以便在与外部系统交互时进行简化。经包封数据高速缓存组1036b中的每一个包含实例经包封写入端口(write port(stq_v[i]))1038b、实例经包封读取端口(read port(stq_v[i]))1040b和实例经包封读取/写入端口(read/write port ms[i]))1042b。
[0587]
地址处理逻辑1001b、1003b可以从图1的cpu 102的图1的接口之一获得实例存储指令1018b、1020b、1022b。存储指令1018b、1020b、1022b包含实例数据,例如wdata、addr、byten、size和r/w。wdata对应于要写入和/或以其它方式存储在受害者高速缓存存储队列216或受害者存储区218中的至少一个中的数据(例如,64位数据)。addr对应于与受害者高速缓存存储队列216或受害者存储区218中的至少一个相关联的数据地址。byten对应于字节启用数据。size对应于数据存取操作(例如,读取操作、写入操作、修改操作等和/或其组合)的数据大小。r/w对应于存储指令是读取操作还是写入操作。
[0588]
存储指令1018b、1020b、1022b包含第一实例存储指令(scalar_dp(dp0))1018b、第二实例存储指令(dma)1020b和第三实例存储指令(vector_dp(dp1))1022b。第一存储指令1018b从图1的标量接口(例如,图2的cpu接口202)传输,并且因此对应于数据高速缓存系统1000b的标量数据路径(scalar_dp(dp1))。第二存储指令1020b从图1的存储器接口(例如,直接存储器存取(dma)接口)传输,并且因此对应于dma数据路径(dma)。第三存储指令1022b从图1的向量接口(例如,图2的cpu接口202)传输,并且因此对应于数据高速缓存系统1000b的向量数据路径(vector_dp(dp1))。
[0589]
地址处理逻辑1001b、1003b可以生成事务数据(transaction_dp0[i]、transaction dma[i]、transaction dp1[i]),其可以用于执行与受害者高速缓存存储队列216或受害者存储区218中的至少一个相关联的数据存取操作。第一地址处理逻辑1001b可以从存储指令1018b、1020b、1022b中的相应一个中提取wdata并且在一些实例中旋转wdata,并且将所提取和/或经旋转wdata传输到复用器1012b、1014b、1016b的相应第一输入。例如,第一地址处理逻辑1001b可以从第一存储指令1018b中提取第一wdata并旋转第一wdata,并且将第一所提取和经旋转wdata传输到第一复用器1012b的第一输入、第二复用器1014b的第一输入和第三复用器1016b的第一输入。
[0590]
第二地址处理逻辑1003b可以确定受害者高速缓存存储队列216或受害者存储区218中的至少一个的16个组中的一或多个的地址(ms/stq_v_addr[i])。所述地址可以基于存储指令1018b、1020b、1022b中包含的addr数据。第二地址处理逻辑1003b可以基于存储指令1018b、1020b、1022b中包含的byten数据确定每一组的字节启用值(byten/bank[i])。第二地址处理逻辑1003b可以基于存储指令1018b、1020b、1022b中包含的r/w数据确定写入组请求(wr_bank_req[i])和/或读取组请求(rd_bank_req[i])。
[0591]
地址处理逻辑1001b、1003b可以确定存储指令1018b、1020b、1022b中的相应指令的事务数据。事务数据可以包含经旋转wdata数据ms/stq_v_addr[i]和byten/bank[i]。例如,地址处理逻辑1001b、1003b可以基于第一存储指令1018b生成第一事务数据(transaction_dp0[i]),基于第二存储指令1020b生成第二事务数据(transaction_dma[i])以及基于第三存储指令1022b生成第三事务数据(transaction_dp1[i])。在此类实例中,地址处理逻辑1001b、1003b可以将第一事务数据传输到复用器1012b、1014b、1016b的第一输入,将第二事务数据传输到复用器1012b、1014b、1016b的第二输入且将第三事务数据传输到复用器1012b、1014b、1016b的第三输入。
[0592]
在实例操作条件中,地址处理逻辑1001b、1003b获得存储指令1018b、1020b、1022b。地址处理逻辑1001b、1003b基于存储指令1018b、1020b、1022b中的相应指令生成第一到第三事务数据。地址处理逻辑1001b、1003b将第一到第三事务数据传输到复用器1012b、1014b、1016b。第二地址处理逻辑1003b传输与存储指令1018b、1020b、1022b中的每一个相对应的读取组请求或写入组请求任一者。
[0593]
在实例操作条件中,第一仲裁逻辑1008b确定存储指令1018b、1020b、1022b中的一个是请求读取受害者高速缓存存储队列216的一或多个组还是写入受害者存储区218的一或多个组。在实例操作条件中,第一仲裁逻辑1008b将读取操作优先于写入操作。在实例操作条件中,受害者高速缓存存储队列216的组可以响应于受害者高速缓存存储队列216已满而生成实例存储队列已满信号(full_sig[i])1030b。在实例操作条件中,受害者高速缓存存储队列216的组可以生成实例完整数据写入信号(comlete_data_wr_sig[i])1032b。
[0594]
例如,第一存储指令1018b可以对应于组0
‑
4的写入操作,第二存储指令1020b可以对应于组5
‑
9的读取操作,并且第三存储指令1022b可以对应于组10
‑
14的读取操作。第二仲裁逻辑1010b可以分配dp0以将第一事务数据传输到组0
‑
4的写入端口1024b(例如,write port[0]、write port[1]、write port[2]等),因为没有其它数据路径在请求写入操作服务。第二仲裁逻辑1010b可以通过生成信号(sel[i])来分配dp0以指示第一复用器1012b选择第一事务数据。第一仲裁逻辑1008b可以分配dma以将第二事务数据传输到组5
‑
9的读取端口1026b(例如,read port[4]、read port[5]、read port[6]等),因为没有其它数据路径在请求与组5
‑
9相关的读取操作服务。第一仲裁逻辑1008b可以通过生成信号(sel[i])来分配dma以指示第二复用器1014b选择第二事务数据。第一仲裁逻辑1008b可以分配dp1以将第三事务数据传输到组10
‑
14的读取端口1026b(例如,read port[9]、read port[10]、read port[11]等),因为没有其它数据路径在请求与组10
‑
14相关的读取操作服务。第一仲裁逻辑1008b可以通过生成信号(sel[i])来分配dp1以指示第三复用器1016b选择第三事务数据。在此类实例中,组15未分配给任何数据路径。
[0595]
在实例操作条件中,如果第一存储指令1018b对应于被拆分的组0
‑
4的写入操作,
那么第一仲裁逻辑1008b可以延迟和/或以其它方式停止写入操作。例如,如果写入操作的第一部分与写入受害者高速缓存存储队列216相关联并且写入操作的第二部分与从受害者存储区218读取相关联,那么第一仲裁逻辑1008b可以指示第二仲裁逻辑1010b不服务和/或以其它方式不将第一事务数据分配给写入端口1024b。
[0596]
在实例操作条件中,如果第一存储指令1018b对应于被拆分的组0
‑
4的写入操作,那么受害者高速缓存存储队列216可以指示第一仲裁逻辑1008b在完整数据已汇编好用于写入时服务于写入操作。例如,如果写入操作的第一部分与写入受害者高速缓存存储队列216相关联并且写入操作的第二部分与从受害者高速缓存存储队列216或受害者存储区218中的至少一个读取相关联,那么第一仲裁逻辑1008b可以等待将第一事务数据分配给读取/写入端口1028b。在此类实例中,响应于在受害者高速缓存存储队列216中定位与第二部分相关联的数据,受害者高速缓存存储队列216可以将经定位数据递送到受害者存储区218。响应于将数据递送到受害者存储区218,受害者高速缓存存储队列216可以生成用于complete_data_wr_sig[i]的信号(例如,断言逻辑高信号),指示第一仲裁逻辑1010b服务于写入操作,因为写入操作所需的完整数据集已经被读取和/或以其它方式汇编可用于服务。
[0597]
在图11a中,实例锁存器1102a、1102b、1102c、1102d、1102e是配置成存储由受害者高速缓存存储队列216获得的信息(例如,字节、位等)的电子装置。实例锁存器1102a
‑
c传递写入数据和对应于写入数据是否需要与算术单元404、原子单元406和/或rmw合并组件408中的ecc逻辑310之外的读取和经校正数据组合的信息。在图11a的实例中,锁存器1102a通信地耦合到高速缓存控制器220以获得读取、写入和/或修改指令。此类读取、修改和/或写入指令可来源于cpu 102,并且经由高速缓存控制器220传输到锁存器1102a。锁存器1102a耦合到锁存器1102b、标签ram 210、仲裁管理器1114和未决存储地址数据存储区1116,以响应于高速缓存控制器220的后续时钟循环将此类读取、修改和/或写入指令传输到锁存器1102b、标签ram 210、仲裁管理器1114和未决存储地址数据存储区1116。
[0598]
在图11a的实例中,锁存器1102b耦合到锁存器1102a、未决存储地址数据存储区1116、锁存器1102c、优先级复用器1118和比较器1120,以响应于高速缓存控制器220的后续时钟循环传输获得的读取、修改和/或写入指令。以此方式,从读取、修改和/或写入指令获得的值(例如,字节值、位值等)通过受害者高速缓存存储队列216传播。
[0599]
实例锁存器1102c耦合到锁存器1102b、优先级复用器1118、算术组件1104、原子比较组件1106和读取
‑
修改
‑
写入合并组件1108。这种耦合使锁存器1102c能够响应于高速缓存控制器220的后续时钟循环将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到算术组件1104、原子比较组件1106和/或读取
‑
修改
‑
写入合并组件1108。在本文描述的一些实例中,锁存器1102c可以将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到算术组件1104、原子比较组件1106和/或读取
‑
修改
‑
写入合并组件1108中的一或多个。例如,在高速缓存控制器220传输指令以将位写入当前存储的字的情况下,锁存器1102c可以将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到读取
‑
修改
‑
写入合并组件1108。在本文描述的其它实例中,虽然高速缓存控制器220可以传输将位写入当前存储的字的指令,但锁存器1102c可以将从读取、修改和/或写入指令获得的值(例如,字节值、位值等)传输到算术组件1104、原子比较组件1106和/或读取
‑
修改
‑
写入
合并组件1108。
[0600]
实例锁存器1102d耦合到第一复用器1110、ecc生成器1112和锁存器1102e。这种耦合使锁存器1102d能够响应于高速缓存控制器220的后续时钟循环将从第一复用器1110获得的值传输到ecc生成器1112和/或锁存器1102f。
[0601]
实例锁存器1102e耦合到优先级复用器1118且耦合到图3和/或11a的mux电路316。这种耦合使锁存器1102e能够响应于高速缓存控制器220的后续时钟循环将从优先级复用器1118获得的值传输到mux电路316。例如,如果cpu 102对命中受害者存储元件218的地址进行读取操作,那么对同一地址的先前写入可能仍在进行中(例如,未完全写入到受害者存储元件218)。在此类实例中,锁存器1102e收集未写入的数据字节并将它们提供到mux 316,所述mux最终将所述数据字节发送回cpu 102。
[0602]
实例合并电路1103a耦合到锁存器1102d、合并电路1103b、算术组件1104、原子比较组件1106和读取
‑
修改
‑
写入合并组件1108。实例合并电路1103b耦合到合并电路1103a、优先级复用器1118和合并电路1103c。实例合并电路1103c耦合到合并电路1103b和锁存器1102b。实例合并电路1103a
‑
c促进了受害者高速缓存存储队列216的不同区段中的读取操作的比较,以潜在地重新路由写入操作以与对应于相同存储器地址位置的写入操作合并,如下文进一步描述的。虽然图11a的实例包含三个合并电路1103a
‑
c,但是可能存在额外合并电路来合并来自受害者高速缓存存储队列216的其它区段的写入操作(例如,合并电路将锁存器1102d的输出耦合到锁存器1102b和/或锁存器1102a的输出等)。在一些实例中,合并电路1103a
‑
c被组合成单个电路,所述单个电路比较来自不同锁存器1102b
‑
d的写入操作并且基于不同锁存器1102b
‑
d中的任何两个或更多个中的匹配存储器地址来重新路由。
[0603]
在图11a所示的实例中,算术组件1104耦合到锁存器1102c、第一复用器1110和ecc逻辑312以对来自受害者存储区218的数据执行算术运算(例如,增加、减少等)。另外,算术组件1104对受害者存储区218中存储的数据执行直方图操作。图11a所示实例的实例算术组件1104由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。下文进一步描述实例算术组件1104的操作。
[0604]
在图11a所示实例中,原子比较组件1106耦合到锁存器1102c、第一复用器1110和ecc逻辑312以将存储器地址处的数据与关键字进行比较,并且在存储器地址处的数据与关键字匹配的情况下替代数据。图11a所示实例的实例原子比较组件1106由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。下文进一步描述实例原子比较组件1106的操作。
[0605]
在图11a所示实例中,读取
‑
修改
‑
写入合并组件1108耦合到锁存器1102c、第一复用器1110和ecc逻辑312,以促进由高速缓存控制器220发送的读取、修改和/或写入指令。例如,读取
‑
修改
‑
写入合并组件1108耦合到ecc逻辑312以获得将受读取、修改和/或写入指令影响的当前存储的字。在实例写入操作中,读取
‑
修改
‑
写入合并组件1108配置成用从锁存器1102c获得的新位、字节等更新从ecc逻辑312获得的当前存储的字。下文描述读取
‑
修改
‑
写入合并组件1108的额外描述。图11a所示实例的实例读取
‑
修改
‑
写入合并组件1108由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0606]
实例第一复用器1110耦合到算术组件1104、原子比较组件1106和读取
‑
修改
‑
写入合并组件1108,以基于来自高速缓存控制器220的指示将算术组件1104、原子比较组件1106或读取
‑
修改
‑
写入合并组件1108任一者的输出传输到锁存器1102d。例如,在高速缓存控制器220指示执行写入功能的情况下(例如,高速缓存控制向锁存器1102b传输写入请求),高速缓存控制器220向第一复用器1110发送指示以选择连接到读取
‑
修改
‑
写入合并组件1108的输入以传输到锁存器1102d。图11a所示实例的实例第一复用器1110由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0607]
在图11a所示实例中,ecc生成器1112耦合到锁存器1102d且耦合到锁存器1102f以促进锁存器1102d中存储的值(例如,字节、位等)的错误检测和校正。例如,ecc生成器1112配置成重新生成将与数据(例如,从读取
‑
修改
‑
写入合并组件1108输出的合并字)一起存储的ecc值(例如,生成错误检测码)。错误检测和纠正电路使用ecc值来确定在读取和/或写入操作期间是否发生错误,如上文进一步描述。图11a所示实例的实例ecc生成器1112由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0608]
在图11a中,实例仲裁管理器1114耦合到锁存器1102a、锁存器1102b、未决存储地址数据存储区1116和受害者存储区218,以促进从高速缓存控制器220获得的读取、修改和/或写入指令。例如,在从高速缓存控制器220接收到写入指令的情况下,仲裁管理器1114配置成将对应当前存储的字的读取指令传输到受害者存储区218。另外,仲裁管理器1114耦合到受害者存储区218以在受害者存储区218的冲突存取之间进行仲裁。当多个操作试图在同一循环存取受害者存储区218时,仲裁管理器1114可以根据优先级方案选择允许哪个(哪些)操作以存取受害者存储区218。下文更详细描述合适的优先级方案;然而,在一个实例中,仲裁将读取操作优先于写入操作,因为在受害者高速缓存存储队列216中的写入数据即使在写入受害者存储区218之前也可供后续操作使用。因此,允许写入数据在受害者高速缓存存储队列216中等待对性能的影响最小。然而,由于受害者高速缓存存储队列216填充了尚未写回的写入数据,因此写入操作的优先级可能会增加,直至其优先于竞争性读取操作为止。
[0609]
图11a所示实例的实例仲裁管理器1114由例如硬件处理器的逻辑电路实施。然而,可以另外或替代地使用任何其它类型的电路系统,例如一或多个模拟或数字电路、逻辑电路、可编程处理器、专用集成电路(asic)、可编程逻辑装置(pld)、现场可编程逻辑装置(fpld)、数字信号处理器(dsp)等。
[0610]
在图11a的实例中,未决存储地址数据存储区1116配置成存储从高速缓存控制器220获得的读取、修改和/或写入指令的地址。以此方式,未决存储地址数据存储区1116保持
与锁存器1102a、1102b、1102c、1102d、1102e、1102f、1102g和/或1102h中的任一个中存储的每一值相关联的地址的日志。图11a所示实例的实例未决存储地址数据存储区1116可由例如快闪存储器、磁媒体、光学媒体等用于存储数据的任何装置来实施。此外,未决存储地址数据存储区1116中存储的数据可以采用任何数据格式,例如,二进制数据、逗号分隔数据、制表符分隔数据、结构化查询语言(sql)结构等。
[0611]
实例优先级复用器1118耦合到锁存器1102b、锁存器1102c、锁存器1102d和锁存器1102f,以促进在锁存器1102b、锁存器1102c、锁存器1102d或锁存器1102f中的任一个存储对应于写入指令的值时的读取操作。例如,高速缓存控制器可以针对具有地址a3、a2、a1和a0的四位字发起以下四个写入指令:用字节0x11写入地址a0、用字节0x22写入地址a1、用字节0x23写入地址a3以及用字节0x44写入地址a0。在此类实例中,在高速缓存控制器220发起读取指令以读取整个四位字的情况下,优先级复用器1118配置成获得锁存器1102f中存储的字节值0x11、锁存器1102d中存储的字节值0x22、锁存器1102c中存储的字节值0x23,以及锁存器1102b中存储的字节值0x22。另外,未决存储地址数据存储区1116向优先级复用器1118传输指示哪个地址值与锁存器1102b、锁存器1102c、锁存器1102d和锁存器1102f中存储的字节值相关联的指令。在此类实例中,由于锁存器1102b中存储的字节值与地址a0相关联,并且锁存器1102f中存储的字节值也与地址a0相关联,因此优先级复用器1118配置成向锁存器1102e传输数据包,指示地址a0为0x44(例如,与地址a0相关联的最近的写入指令)、地址a1为0x22且地址a3为0x23。
[0612]
以此方式,mux电路316配置成用从优先级复用器1118获得的字节值更新当前存储的字的值。这种操作确保了受害者高速缓存存储队列216传输的读取指令可能指示正确的字,即使写入指令可能没有完全通过受害者高速缓存存储队列216传播。
[0613]
实例读取路径(例如,到标签ram 210的读取输入)可以与受害者高速缓存存储队列216并行地运行。因为读取操作(例如,读取指令)可指写入操作中的数据(例如,写入指令)可能尚未完成,所以受害者高速缓存存储队列216可以包含允许读取路径从受害者高速缓存存储队列216获得尚未写回受害者存储区218的数据的写入转发功能。在实例中,受害者高速缓存存储队列216包含:未决存储地址数据存储区1116,其记录在受害者高速缓存存储队列216的每一级处的操作的地址;优先级复用器1118,其从受害者高速缓存存储队列216的级(例如,锁存器)中的一个中选择数据进行转发;以及mux电路316,其在受害者存储区218的输出(通过错误检测和校正电路312)与受害者高速缓存存储队列216从数据优先级复用器1118转发的数据之间进行选择。
[0614]
实例写入端口1126耦合到写入路径和锁存器1102a。写入端口1126可由与受害者高速缓存控制器224(例如,高速缓存控制器220)介接以获得写入指令的接口来实施。例如,写入端口1126用于从高速缓存控制器220接收地址和值以进行写入。
[0615]
现在将描述通过受害者高速缓存存储队列216进行读取操作的实例流程。在第一循环,l1数据高速缓存110从标签ram 210中检索与读取操作的地址相关联的记录以确定数据是否存储在受害者存储区218中。在直接映射实例中,l1数据高速缓存110在从受害者存储区218请求数据之前不需要等待标签ram 210比较,因此,读取操作的地址与高速缓存地址的记录之间的标签ram 210比较可以扩展到第二或第三时钟循环。
[0616]
在第二循环,如果仲裁管理器1114允许,l1数据高速缓存110可以从受害者存储区
218请求数据和ecc校验子位。在此循环中,l1数据高速缓存110还可以通过将读取地址与未决存储地址数据存储区1116进行比较来确定受害者高速缓存存储队列216中是否有较新的数据可用。如果有,那么优先级复用器1118设置成转发来自受害者高速缓存存储队列216的适当数据。
[0617]
在第三循环,可以由受害者存储区218提供数据和ecc。然而,此数据可能对应也可能不对应于读取操作指定的存储器地址,因为l1数据高速缓存110可以将多个经扩展存储器地址分配给高速缓存的受害者存储区218中的同一条目。因此,在第三循环,l1数据高速缓存110基于标签ram 210记录的比较来确定所提供的数据和来自受害者存储区218的ecc是否对应于读取操作(例如,高速缓存命中)中的存储器地址。在高速缓存命中的情况下,数据和ecc位由错误检测和校正电路312接收,所述电路在第四循环校正数据中的任何错误。
[0618]
如上文所描述,尚未写入受害者存储区218的较新数据可存在于受害者高速缓存存储队列216中,并且可由优先级复用器1118从受害者高速缓存存储队列216转发。如果是,那么mux电路316选择经转发数据而不是来自受害者存储区218的经校正数据。
[0619]
在第五循环,来自受害者存储区218的经校正数据或来自受害者高速缓存存储队列216的经转发数据任一者被提供到l1数据高速缓存110。以此方式,控制器220可以在大约5个循环内在高速缓存命中的情况下提供具有完整ecc检查和校正的数据。
[0620]
在数据和ecc位不存在于受害者存储区218中(例如,高速缓存未命中)的情况下,受害者高速缓存存储队列216可一直停止到可以从经扩展存储器106和/或受害者存储区218检索数据为止,此时数据可以写入到受害者存储区且标签ram 210可以更新。
[0621]
图11b是实例统一高速缓存存储队列1124的示意图。在图11b所示实例中,统一高速缓存存储队列1124可以实施实例主要高速缓存存储队列212和/或受害者高速缓存存储队列216。以此方式,拓扑示出实例主要高速缓存读取和写入输入1128以及实例受害者高速缓存读取和写入输入1130。例如,主要高速缓存读取和写入输入1128可以实施图2和/或4的主要高速缓存存储队列212的实例读取和写入输入,并且受害者高速缓存读取和写入输入1130可以实施图2和/或11a的受害者高速缓存存储队列216的实例读取和写入输入。在图11b的实例中,主要高速缓存读取和写入输入1128与受害者高速缓存读取和写入输入1130分开地管线化。因此,在操作中,主要高速缓存读取和写入输入1128和/或受害者高速缓存读取和写入输入1130配置成从cpu 102获得读取和/或写入指令。在本文描述的一些实例中,主要高速缓存读取和写入输入1128和受害者高速缓存读取和写入输入1130可被称为统一高速缓存存储队列1124的输入。
[0622]
统一高速缓存存储队列1124包含实例第一管线级(e2)1132、实例第二管线级(e3)1134和实例第四管线级(e4)1136。以此方式,统一高速缓存存储队列1124经由实例数据管线级1138和1140以及图2的主存储区214和受害者存储区218耦合到第一管线级(e2)1132。
[0623]
在操作中,cpu 102传输读取和/或写入指令,所述指令经由第一管线级(e2)1132进入统一高速缓存存储队列1124。在本文描述的其它实例中,统一高速缓存存储队列1124可以经由高速缓存控制器220从cpu 102获得读取和/或写入指令。此时,实例l1高速缓存110将传入的读取和/或写入指令的地址与主要高速缓存标签ram 208和受害者高速缓存标签ram 210进行比较。另外,统一高速缓存存储队列1124还不知道读取和/或写入指令是既定用于主存储区214还是受害者存储区218的确定。
[0624]
响应于cpu 102或高速缓存控制器202的后续时钟循环,将读取和/或写入指令传输到第三管线级(e3)1134。此时,l1高速缓存110确定或已经确定读取和/或写入指令是既定用于主存储区214还是受害者存储区218。将这种确定作为命中和/或未命中信号传输到统一高速缓存存储队列1124。
[0625]
在图11b中,主存储区214的物理地址是cpu 102地址的函数。cpu 102地址确定哪组经直接映射主存储区214映射到cpu 102地址。在图11b中,主存储区214的大小为32千字节(kb),高速缓存线大小为128字节,共计256个集合。因此,cpu 102的物理地址范围可以从地址a0到地址a255。
[0626]
在图11b中,受害者存储区216的物理地址基于以下逻辑。首先,将cpu 102地址与受害者存储区216的所有16个条目进行比较。在cpu 102地址对应于受害者存储区216中的命中的情况下,cpu 102事务命中的条目的位置是物理地址。
[0627]
然而,如果cpu 102地址不对应于命中(例如,对应于未命中),那么替代策略选择受害者存储区216内的位置。由于受害者存储区216有16个物理地址,因此cpu 102地址的范围可以从a0到a15。
[0628]
在图11b的实例中,将对应于cpu 102地址是命中还是未命中的信息发送到统一高速缓存存储队列1124。基于此信息,cpu 102获得的读取和/或写入指令进入统一高速缓存存储队列1124的主要高速缓存存储队列212或统一高速缓存存储队列1124的受害者高速缓存存储队列216任一者。
[0629]
本文中描述用于多组数据ram高速缓存中的读取
‑
修改
‑
写入支持以进行组仲裁的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0630]
实例1包含一种数据高速缓存系统,其包括:包含多个组队列的存储队列,所述多个组队列包含第一组队列,所述第一组队列具有写入端口和读取端口,所述写入端口配置成接收写入操作,所述读取端口配置成接收读取操作;耦合到所述存储队列的存储区,所述存储区包含多个数据组,所述多个数据组包含第一数据组,所述第一数据组具有配置成接收所述写入操作或所述读取操作的第一端口;第一复用器,其具有第一选择输入和第一输出,所述第一输出耦合到所述写入端口;第二复用器,其具有第二选择输入和第二输出,所述第二输出耦合到所述读取端口;第三复用器,其具有第三选择输入和第三输出,所述第三输出耦合到所述第一端口;及组仲裁逻辑,其包含第一仲裁器和第二仲裁器,所述第一仲裁器包含第一仲裁器且所述第二仲裁器包含第二仲裁器,所述第一仲裁器耦合到所述第二仲裁器、所述第二选择输入和所述第三选择输入,所述第二仲裁器耦合到所述第一选择输入。
[0631]
实例2包含根据实例1所述的数据高速缓存系统,其进一步包含:第一地址控制逻辑,其耦合到所述第一仲裁器的第一输入、所述第二仲裁器的第一输入、所述第一复用器的第一输入、所述第二复用器的第一输入和所述第三复用器的第一输入;第二地址控制逻辑,其耦合到所述第一仲裁器的第二输入、所述第二仲裁器的第二输入、所述第一复用器的第二输入、所述第二复用器的第二输入和所述第三复用器的第二输入;及第三地址控制逻辑,其耦合到所述第一仲裁器的第三输入、所述第二仲裁器的第三输入、所述第一复用器的第三输入、所述第二复用器的第三输入和所述第三复用器的第三输入。
[0632]
实例3包含根据实例2所述的数据高速缓存系统,其进一步包含:耦合到所述第一地址控制逻辑的输入的第一接口,所述第一接口耦合到标量数据路径;耦合到所述第二地
址控制逻辑的输入的第二接口,所述第二耦合到直接存储器存取数据路径;及耦合到所述第三地址控制逻辑的输入的第三接口,所述第三接口耦合到向量数据路径。
[0633]
实例4包含根据实例3所述的数据高速缓存系统,其进一步包含:第一写入数据旋转逻辑,其耦合到所述第一接口和所述第一复用器的所述第一输入、所述第二复用器的所述第一输入及所述第三复用器的所述第一输入;第二写入数据旋转逻辑,其耦合到所述第二接口和所述第一复用器的所述第二输入、所述第二复用器的所述第二输入及所述第三复用器的所述第二输入;及第三写入数据旋转逻辑,其耦合到所述第三接口和所述第一复用器的所述第三输入、所述第二复用器的所述第三输入及所述第三复用器的所述第三输入。
[0634]
实例5包含根据实例1所述的数据高速缓存系统,其中所述第一组队列的第一输出耦合到所述第一仲裁器的第一输入和所述第二仲裁器的第一输入。
[0635]
实例6包含根据实例1所述的数据高速缓存系统,其中所述多个组队列是第一量,所述多个数据组是第二量,其中所述第一量与所述第二量相同。
[0636]
实例7包含根据实例1所述的数据高速缓存系统,其中所述存储区是动态随机存取存储器,且所述多个数据组具有16个数据组,所述16个数据组中的每一个具有64字节的数据宽度。
[0637]
实例8包含一种经包封数据高速缓存系统,其包括经包封存储器,所述经包封存储器包含:具有相应读取端口和相应写入端口的多个组队列,具有相应第一端口、耦合到所述经包封存储器的读取端口、耦合到所述经包封存储器的写入端口和耦合到所述经包封存储器的第二端口的多个数据组,所述第一端口配置成接收读取操作或写入操作,所述读取端口表示所述组队列的所述相应读取端口,所述读取端口配置成读取存储在所述组队列中的一或多个处的第一数据,所述写入端口表示所述组队列的所述相应写入端口,所述写入端口配置成将第二数据写入到所述数据组中的一或多个,所述第二端口表示所述数据组的所述相应第一端口,所述第二端口配置成从所述数据组中的一或多个读取第三数据或将第四数据写入到所述数据组中的一或多个。
[0638]
实例9包含根据实例8所述的经包封数据高速缓存系统,其进一步包含:具有选择输入和第一输出的复用器,所述第一输出耦合到所述读取端口;和耦合到所述选择输入的仲裁器逻辑,所述仲裁器逻辑用于将多个接口中的第一接口指派到所述组队列中的第一组队列和所述数据组中的第一数据组,所述第一接口用于将事务数据从所述第一接口传输到所述读取端口,以调用所述读取端口读取来自所述第一组队列的所述第一数据或来自所述第一数据组的所述第三数据中的至少一个。
[0639]
实例10包含根据实例9所述的经包封数据高速缓存系统,其进一步包含耦合到所述第一接口和所述仲裁器逻辑的地址处理逻辑,所述地址处理逻辑用于基于包含在所述事务数据中的地址数据识别所述第一组队列。
[0640]
实例11包含根据实例9所述的经包封数据高速缓存系统,其中所述复用器是第一复用器,所述选择输入是第一选择输入,所述事务数据是第一事务数据,所述经包封数据高速缓存系统进一步包含:具有第二选择输入和第二输出的第二复用器,所述第二输出耦合到所述第二端口;及耦合到所述第二选择输入的所述仲裁器逻辑,所述仲裁器逻辑用于将所述多个接口中的第二接口指派到所述组队列中的第二组队列和所述数据组中的第二数据组,所述第二接口用于将第二事务数据从所述第二接口传输到所述第二端口,以调用所
述第二端口读取来自所述第二组队列的所述第一数据或来自所述第二数据组的所述第三数据中的至少一个。
[0641]
实例12包含根据实例11所述的经包封数据高速缓存系统,其中所述第二端口将在第一时间期间读取来自所述第二组队列和所述第二数据组的数据,且所述读取端口将在所述第一时间期间读取来自所述第一组队列的所述第一数据或来自所述第一数据组的所述第三数据中的至少一个。
[0642]
实例13包含根据实例9所述的经包封数据高速缓存系统,其中所述复用器是第一复用器,所述选择输入是第一选择输入,所述事务数据是第一事务数据,所述仲裁器逻辑是第一仲裁器逻辑,所述经包封数据高速缓存系统进一步包含:具有第二选择输入和第二输出的第二复用器,所述第二输出耦合到所述写入端口;及耦合到所述第二选择输入的第二仲裁器逻辑,所述第二仲裁器逻辑响应于所述第一仲裁器逻辑不将所述第二接口指派到所述数据组中的第二数据组而不将所述多个接口中的第二接口指派到所述组队列中的第二组队列。
[0643]
实例14包含根据实例8所述的经包封数据高速缓存系统,其进一步包含耦合到所述写入端口的第一仲裁器逻辑及耦合到所述读取端口、所述第一端口和所述第一仲裁器逻辑的第二仲裁器逻辑,所述第二仲裁器逻辑用于响应于所述组队列具有存储所述第二数据的容量而指示所述第一仲裁器逻辑使所述写入端口将所述第二数据写入到所述组队列中的所述一或多个。
[0644]
实例15包含根据实例8所述的经包封数据高速缓存系统,其进一步包含耦合到所述写入端口的第一仲裁器逻辑及耦合到所述读取端口、所述第一端口和所述第一仲裁器逻辑的第二仲裁器逻辑,所述第二仲裁器逻辑用于响应于从所述一或多个组队列检索的所述第一数据或从所述一或多个数据组检索的所述第三数据中的至少一个而指示所述第一仲裁器逻辑使所述写入端口将所述第二数据写入到所述组队列中的一或多个。
[0645]
实例16包含一种方法,包括:基于来自处理器的第一指令生成第一事务数据,并基于来自所述处理器的第二指令生成第二事务数据,所述第一事务数据指示供第一数据存取的数据组的第一量,所述第二事务数据指示供第二数据存取的数据组的第二量,在存储队列或存储区中的至少一个的第一数据组中定位用于第一数据存取操作的所述第一数据,在所述存储队列或所述存储区中的至少一个的第二数据组中定位用于第二数据存取操作的第二数据,并响应于所述第一数据组不同于所述第二数据组,将所述第一事务数据指派为传输到所述第一数据组,并将所述第二事务数据指派为传输到所述第二数据组。
[0646]
实例17包含根据实例16所述的方法,其进一步包含响应于所述第一数据组与所述第二数据组相同,确定所述第一数据存取操作或所述第二数据存取操作是读取数据操作还是写入数据操作,并响应于所述第一数据存取操作是所述读取数据操作且所述第二数据存取操作是写入数据操作,将所述第一事务数据指派为传输到所述第一数据组且不指派所述第二事务数据进行传输。
[0647]
实例18包含根据实例16所述的方法,其中所述第一数据存取操作包含从所述第一数据组中的一或多个读取所述第一数据的第一部分并将所述第一数据的第二部分写入到所述第二数据组中的一或多个,所述第一数据组包含在所述第一数据组中的所述一或多个或所述第二数据组中的所述一或多个中,所述方法进一步包含响应于在所述存储队列的所
述第一数据组中定位所述第一部分,将所述第一部分从所述存储队列传输到所述存储区,将来自所述存储队列的控制信号传输到仲裁器逻辑,所述仲裁器逻辑耦合到所述存储区,并响应于所述仲裁器逻辑获得所述控制信号,将所述第一部分和所述第二部分写入到所述存储区。
[0648]
实例19包含根据实例16所述的方法,其中所述第一数据组包含在所述存储队列中,所述方法进一步包含响应于所述存储队列全满,指示耦合到所述存储队列的仲裁器逻辑阻止将所述第一事务指派为传输到所述第一数据组。
[0649]
实例20包含根据实例16所述的方法,其进一步包含基于所述第一指令确定数据存取操作数据大小,基于所述第一指令确定数据存储地址,将所述数据存取操作数据大小和所述数据存储地址映射到所述第一量的数据组以供存取,所述第一量的数据组包含第一数据组和第二数据组,并确定所述数据存取操作包含从所述第一数据组读取所述第一数据的第一部分并将所述第一数据的第二部分写入到所述第二数据组。
[0650]
用于促进受害者高速缓存中的读取
‑
修改
‑
写入支持的方法和设备
[0651]
在本文描述的实例中,受害者存储区218包含多个存储器组,每一组为64位宽。受害者存储区218与主存储区214并行耦合。此外,受害者存储区218中的组包含两个32位奇偶校验块。在本文描述的实例中,为32位方块中的每一个存储7位ecc校验子。因此,整个组宽度为118位。在本文描述的其它实例中,可以使用任何合适的组宽度。
[0652]
在实例操作中,在高速缓存控制器220将写入指令传输到受害者存储区218的情况下,并且在写入指令不与受害者存储区218上的奇偶校验块对准的情况下,高速缓存控制器220指示受害者高速缓存存储队列216执行读取
‑
修改
‑
写入操作。
[0653]
在本文描述的实例中,有两个串联操作的高速缓存系统(例如,主存储区214和受害者高速缓存存储器218)。在本文描述的实例中,主存储区214是经直接映射高速缓存元件并且受害者高速缓存存储器218是完全关联的高速缓存存储区。经直接映射主存储区214和完全关联的受害者高速缓存存储区218都由错误校正码(ecc)保护。这样,实例应用包含从主存储区214读取一行,ecc逻辑将校正高速缓存线并重新生成ecc校验子,然后将所述行写入受害者高速缓存存储区218。这种应用可以利用cpu的两个额外时钟循环(例如,一个时钟循环用于ecc逻辑进行的错误校正,且另一个时钟循环用于ecc校验子重新生成)。为了减少此时延,本文描述的实例包含在主存储区214与受害者高速缓存存储区218之间使用相同的奇偶校验块大小。因此,主存储区214和受害者高速缓存存储区218两者均计算和/或以其它方式确定32位边界上的奇偶校验。以此方式,l1高速缓存110可以以较少时延将高速缓存线直接从主存储区214移至受害者高速缓存存储区218。
[0654]
在本文描述的实例中,l1数据高速缓存110支持从高速缓存读取数据并在重写数据之前对数据进行更改的多个操作。例如,l1数据高速缓存110可以支持读取
‑
修改
‑
写入操作。读取
‑
修改
‑
写入操作读取现有数据并覆写至少部分数据。在ecc实施例中,当写入小于完整组宽度时可以执行读取
‑
修改
‑
写入操作。使用读取
‑
修改
‑
写入的读取功能是因为组中不会被覆写的那部分数据仍然对ecc校验子位有贡献。
[0655]
读取
‑
修改
‑
写入操作可以被分成写入操作和读取操作,并且受害者高速缓存存储队列216可以构造成使得读取路径中的读取操作与受害者高速缓存存储队列216中的写入操作保持同步。读取操作和写入操作保持同步,直到读取
‑
修改
‑
写入合并组件1108用写入
数据覆写读取数据的至少一部分以产生经合并数据。经合并数据被提供到ecc生成器1112,所述ecc生成器为经合并数据生成新的ecc校验子位,然后经合并数据和ecc校验子位可以被提供到仲裁管理器1114以存储在受害者存储区218中。
[0656]
在实例读取操作中,l1数据高速缓存110将读取操作的地址与标签ram 210的记录进行比较,并且l1数据高速缓存从受害者存储区218和/或受害者高速缓存存储队列216请求数据和ecc校验子位。因为读取
‑
修改
‑
写入操作将修改数据,所以在跟踪受害者存储区218中条目的mesi(修改、独占、共享和无效)状态的实例中,不处于修改或独占状态的高速缓存命中可能被视为高速缓存未命中。当数据以正确状态获得并且任何错误被校正时,将其提供到读取
‑
修改
‑
写入合并组件1108。在此同一循环,读取
‑
修改
‑
写入合并组件1108可以用写入数据覆写经校正数据的至少一部分以产生经合并数据。ecc生成器1112为经合并数据生成新的ecc校验子位。
[0657]
在实例写入操作中,图2和/或3的高速缓存控制器220传输指示待重写的字或整个字的字节的写入请求。在此类实例中,高速缓存控制器220传输的写入请求包含字节的地址值以及字节值(例如,一组数据)。例如,图2和/或3的受害者存储区218可以包含与地址a3、a2、a1、a0相关联的四位字0x12345678。在此类实例中,地址a3对应于所存储字的字节0x12,地址a2对应于字节0x34,地址a1对应于字节0x56,并且地址a0对应于字节0x78。在此类实例操作中,高速缓存控制器220可以传输写入请求以用当前存储的字12345678的字节0x33替代地址a3,用字节0x22替代地址a1,并且用字节0x11替代地址a0。另外,在此类实例中,用字节0x33替代所存储字的地址a3的第一写入请求将导致所存储字变为0x33345678,用字节0x22替代所存储字的地址a1的第二写入请求将导致所存储字变为0x33342278,并且用字节0x11替代所存储字的地址a0的第三写入请求将导致所存储字变为0x33342211。
[0658]
为了协调此类请求,在第一实例循环(例如,为了完成用字节0x33替代地址a3的第一写入请求),因为ecc生成器1112对字粒度操作,所以高速缓存控制器220发起当前存储的字的地址a3中的当前存储的字节的读取请求(例如,受害者存储区218中存储的第二组数据的读取请求)。在此实例中,第一写入请求中的字节和地址(例如,0x33和a3)存储在锁存器1102b中。另外,高速缓存控制器220将整个当前存储的字的读取请求传输到受害者存储区218。因此,在第一循环结束时,整个当前存储的字的读取请求被传输到受害者存储区218并且字节0x33被存储在第一锁存器1102b中。
[0659]
在实例第二循环(例如,为了完成用字节0x22替代地址a1的第二写入请求),将来自第一写入请求的字节传输到锁存器1102c,将整个当前存储的字从受害者存储区218传输到ecc逻辑312,并且由高速缓存控制器220传输第二写入请求(例如,用字节0x22替代地址a1)以存储在锁存器1102b中。在第二循环期间,读取
‑
修改
‑
写入合并组件1108获得锁存器1102c中存储的字节和由ecc逻辑312传输的整个当前存储的字。以此方式,读取
‑
修改
‑
写入合并组件1108识别当前存储的字中待更新的字节的地址。一旦读取
‑
修改
‑
写入合并组件1108识别和/或以其它方式获得(a)来自锁存器1102c的要更新的当前存储的字的部分的值(例如,字节值、位值等)和(b)来自ecc逻辑312的当前存储字,读取
‑
修改
‑
写入合并组件1108就用从锁存器1102c获得的当前存储的字的部分(例如,第一组数据)的值写入(例如,替代、合并等)当前存储的字的部分(例如,第二组数据)。例如,读取
‑
修改
‑
写入合并组件1108将字的部分的值写入与字中字的部分相对应的地址值。在本文描述的一些实例中,此
类经合并组数据由读取
‑
修改
‑
写入合并组件1108提供以用于写入到受害者存储区218。
[0660]
本文中描述用于促进受害者高速缓存中的读取
‑
修改
‑
写入支持的实例方法、设备、系统和制品。其它实例及其组合包含以下:
[0661]
实例1包含一种设备,其包括耦合到控制器的第一存储区、耦合到所述控制器且并联耦合到所述第一存储区的第二存储区及耦合到所述第一存储区、所述第二存储区和所述控制器的存储队列,所述存储队列用于从所述控制器获得指示地址和第一组数据的存储器操作,从所述第一存储区和所述第二存储区中的至少一个获得与所述地址相关联的第二组数据,合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据用于写入到所述第一存储区和所述第二存储区中的至少一个。
[0662]
实例2包含根据实例1所述的设备,其中所述存储器操作是指示从所述第一存储区和所述第二存储区中的至少一个读取与所述地址相关联的所述第二组数据的读取存储器操作。
[0663]
实例3包含根据实例2所述的设备,其中所述存储队列配置成在合并所述第一组数据和所述第二组数据之前获得所述读取存储器操作。
[0664]
实例4包含根据实例1所述的设备,其中所述存储队列包含配置成生成错误校正码并发位的错误校正码生成器。
[0665]
实例5包含根据实例1所述的设备,其中所述第一存储区是主存储区,且所述第二存储区是受害者存储区,所述主存储区和所述受害者存储区位于一级高速缓存内。
[0666]
实例6包含根据实例1所述的设备,其中所述控制器是配置成耦合到中央处理单元接口以从中央处理单元获得所述存储器操作的高速缓存控制器。
[0667]
实例7包含一种系统,其包括:配置成生成存储器操作的中央处理单元、耦合到所述中央处理单元的第一存储区、耦合到所述中央处理单元且并联耦合到所述第一存储区的第二存储区及耦合到所述第一存储区、所述第二存储区和所述中央处理单元的存储队列,所述存储队列用于从所述中央处理单元获得指示地址和第一组数据的所述存储器操作,从所述第一存储区和所述第二存储区中的至少一个获得与所述地址相关联的第二组数据,合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据用于写入到所述第一存储区和所述第二存储区中的至少一个。
[0668]
实例8包含根据实例7所述的系统,其中所述存储器操作是指示从所述第一存储区和所述第二存储区中的至少一个读取与所述地址相关联的所述第二组数据的读取存储器操作。
[0669]
实例9包含根据实例8所述的系统,其中所述存储队列配置成在合并所述第一组数据和所述第二组数据之前获得所述读取存储器操作。
[0670]
实例10包含根据实例8所述的系统,其中所述存储队列包含配置成生成错误校正码并发位的错误校正码生成器。
[0671]
实例11包含根据实例10所述的系统,其中所述错误校正码生成器响应于合并所述第一组数据和所述第二组数据而生成所述错误校正码校验子位。
[0672]
实例12包含根据实例8所述的系统,其中所述第一存储区是主存储区,且所述第二存储区是受害者存储区,所述主存储区和所述受害者存储区位于一级高速缓存内。
[0673]
实例13包含根据实例8所述的系统,其进一步包含配置成经由接口耦合到所述存
储队列、所述第一存储区、所述第二存储区和所述中央处理单元的高速缓存控制器,高速缓存控制器用于从所述中央处理单元获得所述存储器操作。
[0674]
实例14包含一种方法,包括:从控制器获得指示地址和第一组数据的存储器操作,从第一存储区和第二存储区中的至少一个获得与所述地址相关联的第二组数据,合并所述第一组数据和所述第二组数据以产生第三组数据,并提供所述第三组数据用于写入到所述第一存储区和所述第二存储区中的至少一个。
[0675]
实例15包含根据实例14所述的方法,其中所述存储器操作是第一存储器操作,其中所述地址是第一地址,所述方法进一步包含获得指示第二地址和第四组数据的第二存储器操作,并合并所述第四组数据与所述第三组数据以产生第五组数据。
[0676]
实例16包含根据实例15所述的方法,其进一步包含在数据存储区中存储所述第一地址和所述第二地址。
[0677]
实例17包含根据实例15所述的方法,其中所述第一存储区是主存储区,并且其中所述第二存储区是受害者存储区。
[0678]
实例18包含根据实例14所述的方法,其进一步包含基于所述第三组数据生成错误检测码,所述错误检测码与所述第三组数据一起存储。
[0679]
实例19包含根据实例14所述的方法,其进一步包含获得指示读取所述第二组数据的读取存储器操作。
[0680]
实例20包含根据实例14所述的方法,其中所述控制器是配置成耦合到中央处理单元接口以从中央处理单元获得所述存储器操作的高速缓存控制器。
[0681]
用于减少受害者高速缓存中非对准写入的读取
‑
修改
‑
写入循环的方法和设备
[0682]
当向多组存储区发出写入指令时,无论写入指令的大小如何,都可以将此类写入指令与对应读取指令一起传输,以尝试执行此类写入指令的完整读取
‑
修改
‑
写入循环。例如,在此类应用中,cpu可以获得写入指令,指示从第一存储器组的地址a0开始跨两个64位存储器组写入128位。在此类实例中,虽然两个实例存储器组整体被写入,但是这种应用保持读取指令以读取当前存储在两个实例存储器组中的数据。然而,这种方法效率低下,因为需要两倍的处理能力(例如,写入和读取指令)。而且,这种方法不提供任何控制逻辑和/或处理电路系统来分析写入指令。
[0683]
在图11a所示实例中,主存储区214和/或受害者存储区218可以是多组存储区。例如,受害者存储区218可以包含十六个存储器组(例如,十六个子ram),每一存储器组64位宽。在此类实例中,在高速缓存控制器220传输写入指令以写入受害者存储区218的第一组的所有64位(例如,以第一组的第一地址开始写入64位字)的情况下,可以在不发起读取指令的情况下执行写入指令。例如,组处理逻辑303可以检测到要执行对整个组的这种写入,从而向高速缓存控制器220指示发起读取
‑
修改
‑
写入操作,否决传输读取指令。
[0684]
类似地,在高速缓存控制器220传输写入指令以写入受害者存储区218的第一组和第二组的所有128位(例如,指示从第一组的第一地址开始写入128位字并在第二组的最后地址结束的写入指令)的情况下,写入指令可以在不发起读取指令的情况下实施。例如,组处理逻辑303可检测全部多个组的此类写入将被执行,并且因此指示高速缓存控制器220发起读取
‑
修改
‑
写入操作,否决传输读取指令。
[0685]
然而,在本文描述的一些实例中,高速缓存控制器220可以传输写入指令以写入受
害者存储区的第一组、第二组和第三组的130位(例如,指示从第一组的第一地址开始写入130位字并在第三组的第二地址结束的写入指令)。在此类实例中,组处理逻辑303检测到受害者存储区218的第一组和第二组的所有地址都将被完全写入,并且因此向高速缓存控制器指示发起受害者存储区的第一组和第二组的读取
‑
修改
‑
写入操作,否决传输读取指令。在此类实例中,组处理逻辑303可以检测到受害者存储区218的第三组将被部分写入(例如,64个地址中的两个地址将被写入),并且因此向高速缓存控制器220指示发起受害者存储区218的第三组的完整读取
‑
修改
‑
写入操作。读取
‑
修改
‑
写入操作的实例描述如上所述。
[0686]
用于减少受害者高速缓存中的组压力的侵略性写入合并
[0687]
在图11a的实例中,实例受害者高速缓存存储队列216在受害者高速缓存存储队列216的不同区段(例如,在实例锁存器1102a
‑
e)存储多个写入操作。例如,当cpu 102连续传输三个独立的写入操作时,cpu 102提供的第一写入操作存储在第一锁存器1102b中,并在第一锁存器1102b接收到第二操作时移至第二锁存器1102c。因此,在接收到三个写入操作之后,第一锁存器1102b将存储和/或输出就时间而言的最后一个写入操作(例如,最后被存储在受害者存储区218中的写入操作),第二锁存器1102c将具有第二写入操作(例如,第二个被存储在主存储区214中的写入操作),并且第三锁存器1102d将具有第一写入操作(例如,第一个被存储在实例受害者存储区218中的写入操作)。每当受害者高速缓存存储队列216中的数据接下来将被存储在受害者存储区218中时,实例仲裁管理器1114为要写入实例受害者存储区218中的数据保留一个循环。因此,在保留的循环期间,受害者存储区218可能不可用,无法执行读取操作。然而,如果锁存器1102b、1102c、1102d中的两个或多个中存储的数据操作对应于相同的存储器地址,那么可以合并数据以便将数据一次写入受害者存储区218的存储器地址,而不是两次或三次。例如,如果锁存器1102d中存储的写入操作对应于写入存储器地址的字节而锁存器1102c中存储的写入操作对应于写入存储器地址的不同字节,那么第二写入将覆写第一写入。
[0688]
代替保留将第一字节写入受害者存储区218的循环(所述写入将在后续循环中被覆写),受害者高速缓存存储队列216将两次写入合并为一次写入,使得仅使用一个循环来写入第二事务(例如,避免为第一次写入保留循环)。这种侵略性合并减少了为写入操作保留的循环数。以此方式,受害者存储区218将具有额外的循环来执行读取操作,从而减少整个系统的时延。
[0689]
为了支持对相同存储器地址到写入操作的侵略性合并,实例锁存器1102b
‑
1102d的输出耦合到实例合并电路1103a
‑
403c。例如,第三锁存器1102d的输出可以耦合到合并电路1103a,第二锁存器1102c的输出可以耦合到合并电路1103b,并且第一锁存器1102b的输出可以耦合到合并电路1103c。合并电路1103a的输出可以另外耦合到第二锁存器1102c和合并电路1103b的输出,合并电路1103b可以耦合到合并电路1103c,并且合并电路1103c可以耦合到第一锁存器1102b的输入。另外或替代地,可能存在比较不同组锁存器的输出的额外比较器电路(例如,比较锁存器1102b的输出与锁存器1102d的输出的比较器电路)。实例合并电路1103a
‑
c包含实例比较器1120和实例开关1122。
[0690]
比较器1120将相应锁存器1102b
‑
1102d中存储的每一写入操作的存储器地址位置进行比较,以确定实例存储队列中的任何写入操作是否对应于相同的存储器地址。实例比较器1120可以是比较锁存器1102b
‑
1102d的所有写入操作的一个比较器,或者可以是比较
锁存器1102b
‑
d中的两个的单独的比较器1120(例如,将锁存器1102b的存储器地址与锁存器1102c的存储器地址进行比较的第一比较器,将1102b的存储器地址与锁存器1102d的存储器地址进行比较的第二比较器,等)。比较器1120将比较的结果(例如,具有对应于一或多个比较的一或多个信号)输出到实例开关1122和/或仲裁管理器1114。如果实例仲裁管理器1114接收到指示匹配的信号,那么仲裁管理器1114将不会为第一写入操作保留循环,而是第一写入操作与第二写入操作合并到相同的存储器位置(例如,为其它高速缓存操作释放循环)。
[0691]
实例开关1122基于比较重新路由实例锁存器1102b
‑
1102d中的写入操作。例如,如果实例锁存器1102d中存储的写入操作的存储器地址与锁存器1102c中存储的存储器地址相同,那么实例开关1122启用和/或停用以将锁存器1102d的输出重新路由到锁存器1102c,而不是路由到实例仲裁管理器1114。以此方式,两个写入操作被组合并且在后续循环中作为单个写入操作而不是两个写入操作被写入受害者存储区218。开关1122可以是电气开关、晶体管(例如,mosfet)、解复用器和/或可以在电路中重新路由信号的任何其它组件。
[0692]
当锁存器接收到经重新路由的写入操作时,合并电路403a
‑
c之一的mux(例如,如上文结合图4d进一步描述的)执行优先考虑最新的写入操作的针对一或多个经重新路由的写入操作的合并协议。例如,如果比较器1120确定实例锁存器1102c中存储的写入操作对应于与实例锁存器1102d中存储的写入操作相同的存储器地址,那么开关1122将实例锁存器1102d中存储的写入操作重新路由到锁存器1102c。在此类实例中,如果实例锁存器1102c中的写入操作对应于将数据写入存储器地址的byte0和byte2,并且来自锁存器1104d的写入操作对应于将数据写入byte0和byte1,那么实例合并电路1103a合并两个写入操作以保持锁存器1102c中存储的写入数据(例如,写入byte0和byte2)并且包含来自锁存器1102d的不重叠的写入数据(例如,byte2)。在此实例中,来自锁存器1104d的字节0的写入数据被舍弃,因为要写入来自锁存器1104d的字节0的数据将被锁存器1102c的写入指令覆写。因此,在以上实例中,经合并数据对应于来自锁存器1102c的byte0的写入数据、来自锁存器1104d的byte1的写入数据和来自锁存器1102c的byte2的写入数据。当后续写入操作被添加到受害者高速缓存存储队列216时,来自锁存器1102c的经合并写入数据可以被操纵(例如,经由实例框1104、1106、1108中的一个)和/或被推送到下一个锁存器1102d以在后续循环期间存储在实例受害者存储区218中。上文结合图4c进一步描述了合并协议的实例硬件实施方案。
[0693]
受害者高速缓存中l1中的经优化原子操作和直方图操作支持
[0694]
原子操作是多部分存储器操作的进一步实例。例如,原子比较和交换操作基于存储器位置处存储的现有值的比较结果来操纵存储器位置中存储的值。例如,如果l1高速缓存110中存储的现有值与特定值匹配,那么cpu 102可能希望用新值替代l1高速缓存110中存储的数据。
[0695]
在一些实例系统中,当cpu想要执行原子操作时,cpu向存储器地址发送读取操作,对读取数据进行操作,然后对相同的存储器地址执行写入操作以存储经操纵数据。另外,在此类系统中,l1高速缓存可能需要暂停、拒绝、阻止和/或中断来自其它装置(例如,cpu的其它核心、更高层级的高速缓存、经扩展存储器等)的任何事务,直到原子操作完成(例如,避免操纵在原子操作期间操作与原子操作相对应的存储器地址)。因此,此类实例技术可能需要代表cpu的大量努力以及增加时延的大量保留循环。
[0696]
在图11a的实例中,实例受害者高速缓存存储队列216结合读取
‑
修改
‑
写入结构处理原子操作。以此方式,实例cpu 102可以向l1高速缓存110发送单个原子操作的操作,并且受害者高速缓存存储队列216处理原子数据操纵和写入操作。因此,cpu 102利用单个循环来执行原子操作并且可以使用其它循环(例如,在原子协议中使用)来执行其它功能,从而减少整个计算系统100的时延。
[0697]
在操作中,当cpu 102传输原子操作和/或原子比较和交换操作以将存储器地址处的数据增加和/或交换值1时,例如,原子指令由锁存器1102a接收并且标签ram 210验证存储器地址是否存储在实例受害者存储区218中。如果存储器地址存储在实例受害者存储区218中,那么标签ram 210指示实例受害者存储区218在原子指令被传递到实例锁存器1102b时在存储器地址处输出数据。当受害者存储区218将数据输出到锁存器324a时,实例锁存器1102b将原子操作输出到锁存器1102c。此时,ecc逻辑312执行如上所述的错误检测和/或校正协议,并且来自存储器地址位置的数据被转发到实例算术组件1104(例如,用于原子操作)或原子比较组件1106(例如,用于原子比较和交换操作)。算术组件1104获得原子操作(例如,包含标识如何操纵数据的数据),和/或原子比较和交换1106从锁存器1102c获得原子比较和交换操作(例如,如果关键字与读取数据匹配则包含关键字和要写入的数据),并从ecc逻辑312的输出获得来自相应存储器地址的数据。算术组件1104执行对数据的操纵(例如,将数据增加1)和/或原子比较组件1106可以执行交换(如果读取数据与关键字匹配则替代数据,等)并输出增加和/或换入,并且经由实例mux 1110(例如,其经由高速缓存控制器220启用)将对应存储器地址的经增加数据(例如,原子结果)输出到实例锁存器1102d。锁存器1102d将对应于存储器地址的新数据输出到ecc生成器1112以生成ecc位,并且仲裁管理器1114将新数据(例如原子结果和/或原子比较和交换结果)结合实例受害者存储区218中的ecc位写入存储器地址。另外或替代地,来自edd逻辑1112的校正值返回到cpu 102。因此,原子操作仅用来自cpu 102的一个指令来执行。
[0698]
原子比较组件1106和/或算术组件1104具有多个输入。例如,原子组件1106接收(例如,获得)要执行的原子类型(例如原子比较和交换,或原子交换)、要换入的新数据、从高速缓存310中读出的ecc校正数据,以及在原子操作期间要操纵的数据大小的大小(例如,32位或64位)。在图4b的实例电路实施方案450中,原子比较组件1106接收原子比较和交换操作并且算术组件1104接收原子操作。原子比较组件1106将cpu 102提供的比较值(例如,关键字)与ecc数据310进行比较。在匹配时,新数据被交换以替代旧数据(例如ecc数据310)并输出到mux 1110。换入的新数据的大小由cas_acc_sz输入(例如32位或64位)确定。在图4c的实例电路实施方案450中,原子比较组件1106还可以接收原子交换操作。不管比较结果如何,原子比较组件1106都会换入替代ecc数据310的新数据,并将新值输出到mux 1110,并且从主存储区214读取来自地址的旧数据并提供回到cpu 102。换入的新数据的大小由cas_acc_sz输入(例如32位或64位)确定。在图4c的实例电路实施方案450中,算术组件1104也可以接收原子操作。算术组件1104将操纵ecc数据310并将经操纵数据存储在主要存储元件214中。换入的新数据的大小由cas_acc_sz输入(例如32位或64位)确定。直方图操作是cpu 102想要知道存储了许多每一值的块组的值在受害者存储区218的区段(例如,来自受害者存储区218的sram部分的sram线)中存在的位置。例如,如果sram线具有6个块组,第一块组存储0,第二块组存储0,第三块组存储2,第四块组存储0,第五块组存储0,且第六块组存储
3。sram线的直方图可以对应于[0,0,2,0,0,3]。替代地,直方图可以以不同的方式构造(例如,[3,0,0,2,0,0)。在一些实例系统中,为了执行直方图功能,cpu必须读取每个单独的值并为每个值增加。例如,为了确定10字节sram线中存储了多少个0,cpu将执行10次读取。然后,为了确定具有10个块组的同一10字节sram线中有多少个1,cpu将执行额外的10次读取。因此,为了执行直方图操作,此类系统可能需要执行(n)(m)次读取,其中n是正被读取的存储器区段的大小(例如,10字节),且m是可以存储在每一字节中的值的数目。与原子操作一样,l1 sram可能必须对所有其它读取和/或写入操作进行阻止、暂停、停止、舍弃等,直到直方图操作完成。
[0699]
在图11a的实例中,cpu 102指示受害者存储区218执行直方图操作。从而将cpu 102必须为操作保留的循环数目从(n)(m)更改为1。另外,因为存储队列中已经实施了原子操作协议,所以可以使用算术组件1104来执行直方图操作,方法是对存储器的n大小执行n次读取并为实例受害者sram存储队列216中的每一值增加计数,从而将读取操作的数目从(n)(m)个操作减少到n个操作。
[0700]
在操作中,当cpu 102传输对应于受害者存储区218的区段(例如,sram线)的直方图操作时,所述操作被存储在实例锁存器1102a中,同时标签ram 210验证对应于直方图操作的存储器地址是否在受害者存储区218中可用。实例高速缓存控制器220促进对直方图操作中识别的区段的每一字节的读取操作(例如,其中通过同时读取至多128字节而并行地存取直方图块组)。如果可用,那么标签ram 210指示受害者存储区218在受害者存储区218的区段的第一字节处输出数据,同时直方图操作由实例锁存器1102a输出到实例锁存器1102b。当实例受害者存储区218将已从存储器地址读取的数据输出到实例锁存器324a时,锁存器1102b将直方图操作输出到实例锁存器1102c。在ecc逻辑312执行错误检测和校正功能之后,在字节读取的数据被发送到实例算术组件1104。
[0701]
在从ecc逻辑312接收到读取值并从锁存器1102c接收到直方图指令之后,算术组件1104发起表示直方图的数据。例如,算术组件1104可以针对可以存储在受害者存储区的字节中的每一可能值发起具有初始值(例如,零)的向量(例如,表示直方图)。算术组件1104基于ecc逻辑312的输出(例如,读取字节)增加向量的值。例如,如果字节的读取值为0,那么算术组件1104增加向量中对应于0的值。
[0702]
因为每一向量并行地增加,所以所得向量对应于在sram的对应区段中并行读取的值的直方图。因为针对每一位增加直方图的值,所以所得向量是在来自cpu 102的直方图操作中识别的存储器区段中存储的值的直方图。在一些实例中,算术组件1104可以并行地增加一些加权值(例如,1.5)。当完成时,实例直方图被输入到实例mux 418(例如,由实例未决存储地址表1116控制)以经由实例锁存器1102e输入到mux 316。一旦操作完成,实例高速缓存控制器220控制mux 316经由复用器电路314和实例锁存器322b将最终直方图向量输出到实例cpu接口202,从而结束直方图操作。
[0703]
在一些实例中,l1高速缓存110支持其中直方图块组可在直方图块组包含大于阈值极限的块组仓大小(例如,字节、半字、字等)之后饱和的功能。上表1示出饱和值的实例。使用此功能,直方图块组值一旦达到最大值就不会再滚动。
[0704]
本文中描述用于促进受害者高速缓存和原子操作的实例方法、设备、系统和制品。其它实例及其组合包含以下:实例1包含一种系统,其包括用于存储第一组数据的第一高速
缓存存储区、用于存储已从所述第一高速缓存存储区逐出的第二组数据的第二高速缓存存储区及耦合到所述第一高速缓存存储区和所述第二高速缓存存储区的存储队列,所述存储队列包含:算术组件,用于响应于存储器操作而从所述第二高速缓存存储区接收所述第二组数据,并对所述第二组数据执行算术操作以产生第三组数据;及仲裁管理器,用于在所述第二高速缓存存储区中存储所述第三组数据。
[0705]
实例2包含根据实例1所述的系统,其中所述第一高速缓存存储区是主存储区,且所述第二高速缓存存储区是受害者存储区。
[0706]
实例3包含根据实例1所述的系统,其中所述算术组件用于:(a)经由错误检测和校正电路从所述第二高速缓存存储区获得所述第二组数据,以及(b)经由锁存器从中央处理单元获得所述存储器操作。
[0707]
实例4包含根据实例1所述的系统,其中所述第三组数据通过在单个循环中来自中央处理单元的单个指令而存储在所述第二高速缓存存储区中。
[0708]
实例5包含根据实例1所述的系统,其进一步包含:修改、独占、共享、无效(mesi)组件,其用于确定包含在所述存储器操作中的存储器地址的状态;及接口,其用于在包含在所述存储器操作中的所述存储器地址对应于共享状态的情况下向另一高速缓存发送未命中指令,所述未命中指令包含独占状态请求。
[0709]
实例6包含根据实例5所述的系统,其中所述仲裁管理器用于在来自所述另一高速缓存的所述独占状态请求被准予之后将所述第三组数据存储在所述第二高速缓存存储区中的所述存储器地址处。
[0710]
实例7包含根据实例5所述的系统,其中所述算术组件用于在来自所述另一高速缓存的所述独占状态请求被准予之后从所述第二高速缓存存储区接收所述第二组数据。
[0711]
实例8包含根据实例5所述的系统,其中所述第二高速缓存存储区和所述第一高速缓存存储区并联连接到中央处理单元。
[0712]
实例9包含根据实例5所述的系统,其中所述存储器操作是原子操作。
[0713]
实例10包含一种存储队列,其包括:算术组件,用于响应于存储器操作而从高速缓存存储区接收第二组数据,并对所述第二组数据执行算术操作以产生第三组数据;及仲裁管理器,用于在所述高速缓存存储区中存储所述第三组数据。
[0714]
实例11包含根据实例10所述的存储队列,其中所述高速缓存存储区是受害者高速缓存存储区,所述受害者高速缓存存储区存储已从主要高速缓存存储区去除的数据。
[0715]
实例12包含根据实例11所述的存储队列,其中所述受害者高速缓存存储区和所述主要高速缓存存储区并联连接到中央处理单元。
[0716]
实例13包含根据实例10所述的存储队列,其中所述算术组件用于:(a)经由错误检测和校正电路从所述高速缓存存储区获得所述第二组数据,以及(b)经由锁存器从中央处理单元获得所述存储器操作。
[0717]
实例14包含根据实例10所述的存储队列,其中所述第三组数据通过在单个循环中来自中央处理单元的单个指令而存储在所述高速缓存存储区中。
[0718]
实例15包含根据实例10所述的存储队列,其中所述仲裁管理器在来自所述另一高速缓存的独占状态请求被准予之后将所述第三组数据存储在所述高速缓存存储区中的存储器地址处。
[0719]
实例16包含根据实例15所述的存储队列,其中所述算术组件在来自所述另一高速缓存的所述独占状态请求被准予之后从所述高速缓存存储区的所述存储器地址接收所述第二组数据。
[0720]
实例17包含根据实例10所述的存储队列,其中所述存储器操作是原子操作。
[0721]
实例18包含一种方法,其包括:响应于存储器操作而从高速缓存存储区获得第二组数据,对所述第二组数据执行算术操作以产生第三组数据,并将所述第三组数据存储在所述高速缓存存储区中。
[0722]
实例19包含根据实例18所述的方法,其中所述高速缓存存储区是受害者高速缓存存储区,所述受害者高速缓存存储区存储已从主存储区去除的数据。
[0723]
实例20包含根据实例19所述的方法,其进一步包含在来自所述另一高速缓存的独占状态请求被准予之后将所述第三组数据存储在所述高速缓存存储区中的存储器地址处一致性系统的受害者高速缓存中l1的原子比较和交换支持
[0724]
如果来自某一地址的数据存储在l1高速缓存110中,那么相同地址的数据还可高速缓存于其它高速缓存(例如,l2高速缓存112和/或l3高速缓存114)中。因此,存储器地址需要进行跟踪和/或监测,以确保一个高速缓存中的数据的任何变化都被识别、跟踪和/或反映到其它高速缓存(例如,l2高速缓存112和l3高速缓存114)。如上文结合图3a
‑
3d所描述,实例mesi ram 300跟踪存储在受害者存储区218中的数据状态,以便能够避免对应于相同存储器地址的不同高速缓存中的数据不匹配的问题。例如,如果cpu 102传输读取操作,那么实例mesi ram 300将存储器地址的状态变成共享,因为存储器地址中的数据将不被操纵。如果cpu 102传输写入操作,那么实例mesi ram 300将存储器地址的状态变成独占,因为存储器地址中的数据将被操纵,且受害者存储区218需要地址的写入权限。在存储器地址中的数据写入到受害者存储区218之后,mesi ram 300将存储器地址的状态更新为修改(例如,指示存储器地址已修改)。
[0725]
如上文所描述,在原子和/或直方图协议期间,来自某一存储器地址的数据从受害者存储区218读取并被提供给受害者高速缓存存储队列216以供更新(例如,增加)和写回到受害者存储区218中。但是,如果mesi ram 300已将对应存储器地址的状态识别为处于共享状态,那么原子协议的写入操作可导致与其它层级高速缓存的问题(例如,因为写入将使不同高速缓存中的数据不匹配)。
[0726]
为了在原子操作(例如,包含原子比较和交换)期间避免此类数据不匹配,实例高速缓存控制器220将对应于共享状态的高速缓存命中标记为高速缓存未命中。以此方式,高速缓存控制器220可指示l2接口228利用独占状态请求向更高层级高速缓存发送高速缓存未命中。以此方式,更高层级高速缓存可准予对l1高速缓存110的独占状态,并且l1高速缓存110可响应于接收到准予的独占状态而执行读取和写入操作作为原子操作的部分。
[0727]
在具有独占请求的高速缓存未命中发送到更高层级高速缓存且更高层级高速缓存利用写入数据和独占响应来进行响应之后,实例原子操作逻辑1106将指示mesi ram 300将数据标记为修改。从l2高速缓存112接收到的数据传输到受害者高速缓存存储队列216中以存储在受害者存储区218中。因为操作是原子操作(例如,常规原子操作或原子比较和交换)或直方图协议,所以来自更高层级高速缓存的数据被用于操纵的实例算术组件1104和/或实例原子比较组件1106操纵,并经由实例ecc生成器1112和实例仲裁管理器1114存储在
实例受害者存储区218中。
[0728]
虽然在图2
‑
5和/或10
‑
11中示出实施图1的l1数据高速缓存110的实例实施方式,但是图2
‑
5和/或10
‑
11中所示的元件、过程和/或装置中的一或多个可使用任何其它方式组合、分割、再布置、省略、消除和/或实施。此外,实例cpu接口202、实例标签ram存取204、206、实例标签ram 208、210、实例主要高速缓存存储队列212、实例主存储区214、实例受害者高速缓存存储队列216、实例受害者存储区218、实例高速缓存控制器220、实例主要高速缓存控制器222、实例受害者高速缓存控制器224、实例l2接口228、实例mesi ram 300、实例地址处理组件302a
‑
c、实例组处理逻辑303、实例命中
‑
未命中比较逻辑304、306、实例替代策略组件208、实例ecc逻辑310、实例mux电路314、316、318、320、330、330a
‑
c、410、418、508、实例锁存器322a、324a、402a
‑
d、1102
‑
a
‑
d、实例地址编码器326、326a、326b、328、328a、328b、实例地址读取332、实例合并电路403a
‑
c、1103a
‑
c、实例算术组件404、1104、实例原子比较组件406、1106、实例rmw组件408、1108、实例ecc生成器412、1112、实例仲裁管理器414、1114、实例未决存储地址数据库416、1116、实例比较器420、1120、实例开关422、1122、实例端口424、426、1124、1126、接口502、504、实例地址506、和/或更一般地图2
‑
5和/或10
‑
11的l1数据高速缓存110可由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实施。因此,例如,实例cpu接口202、实例标签ram存取204、206、实例标签ram 208、210、实例主要高速缓存存储队列212、实例主存储区214、实例受害者高速缓存存储队列216、实例受害者存储区218、实例高速缓存控制器220、实例主要高速缓存控制器222、实例受害者高速缓存控制器224、实例l2接口228、实例mesi ram 300、实例地址处理组件302a
‑
c、实例组处理逻辑303、实例命中
‑
未命中比较逻辑304、306、实例替代策略组件208、实例ecc逻辑310、实例mux电路314、316、318、320、330、330a
‑
c、410、418、508、实例锁存器322a、322b、324a、322b、402a
‑
d、1102
‑
a
‑
d、实例地址编码器326、326a、326b、328、328a、328b、实例地址读取332、实例合并电路403a
‑
c、1103a
‑
c、实例算术组件404、1104、实例原子比较组件406、1106、实例rmw组件408、1108、实例ecc生成器412、1112、实例仲裁管理器414、1114、实例未决存储地址数据库416、1116、实例比较器420、1120、实例开关422、1122、实例端口424、426、1124、1126、接口502、504、实例地址506、和/或更一般地图2
‑
5和/或10
‑
11的l1数据高速缓存110中的任一个可由一或多个模拟或数字电路、逻辑电路、可编程处理器、可编程控制器、图形处理单元(gpu)、数字信号处理器(dsp)、专用集成电路(asic)、可编程逻辑装置(pld)和/或现场可编程逻辑装置(fpld)实施。当阅读本专利的任何设备或系统权利要求中的任一个以涵盖纯软件和/或固件实施方案时,实例cpu接口202、实例标签ram存取204、206、实例标签ram 208、210、实例主要高速缓存存储队列212、实例主存储区214、实例受害者高速缓存存储队列216、实例受害者存储区218、实例高速缓存控制器220、实例主要高速缓存控制器222、实例受害者高速缓存控制器224、实例l2接口228、实例mesi ram 300、实例地址处理组件302a
‑
c、实例组处理逻辑303、实例命中
‑
未命中比较逻辑304、306、实例替代策略组件208、实例ecc逻辑310、实例mux电路314、316、318、320、330、330a
‑
c、410、418、508、实例锁存器322a、322b、324a、324b、402a
‑
d、1102
‑
a
‑
d、实例地址编码器326、326a、326b、328、328a、328b、实例地址读取332、实例合并电路403a
‑
c、1103a
‑
c、实例算术组件404、1104、实例原子比较组件406、1106、实例rmw组件408、1108、实例ecc生成器412、1112、实例仲裁管理器414、1114、实例未决存储地址数据库416、1116、实例比较器420、1120、实例开关422、1122、实例端口424、
426、1124、1126、接口502、504、实例地址506、和/或更一般地图2
‑
5和/或10
‑
11的l1数据高速缓存110中的至少一个特此明确定义为包含非暂时性计算机可读存储装置或存储盘,例如存储器、数字多功能盘(dvd)、压缩盘(cd)、蓝光磁盘等,包含软件和/或固件。更进一步,除了或代替图2
‑
5和/或10
‑
11示出的那些元件、过程和装置之外,图1的实例l1数据高速缓存110可以包含一个或多个元件、过程和/或装置,和/或可以包含超过一个任何或全部示出的元件、过程和装置。如本文所使用,短语“通信”包含其变体涵盖直接通信和/或通过一或多个中间组件的间接通信,并且不需要直接物理(例如,有线)通信和/或持续通信,而是另外包含以周期性间隔、预定间隔、非周期性间隔和/或一次性事件的选择性通信。
[0729]
图12
‑
33中示出表示用于实施图1
‑
5和/或10
‑
11的l1数据高速缓存的实例硬件逻辑、机器可读指令、硬件实施状态机和/或其任何组合的流程图。机器可读指令可以是由计算机处理器(例如下文结合图34描述的实例处理器平台3400中所示的处理器3412)执行的一或多个可执行程序或可执行程序的部分。程序可以软件实施,所述软件存储在非暂时性计算机可读存储媒体上,例如cd
‑
rom、软盘、硬盘驱动器、dvd、蓝光磁盘或者与处理器3412关联的存储器,但整个程序和/或其部分可替代性地由处理器3412之外的装置执行,和/或以固件或专用硬件实施。此外,虽然参考图34所示的流程图描述了实例程序,但可替代地使用实施实例l1高速缓存110的许多其它方法。例如,可以改变框的执行顺序,和/或可以改变、消除或组合所描述的一些框。另外或替代地,任何或所有框可以由构造成在不执行软件或固件的情况下执行相应操作的一或多个硬件电路(例如,离散和/或集成模拟和/或数字电路、fpga、asic、比较器、运算放大器(op
‑
amp)、逻辑电路等)实施。
[0730]
本文描述的机器可读指令可以以压缩格式、加密格式、分段格式、编译格式、可执行格式、打包格式等中的一或多种存储。如本文描述的机器可读指令可以被存储为可用于创建、制造和/或产生机器可执行指令的数据(例如,指令的部分、代码、代码的表示等)。例如,机器可读指令可以被分段并存储在一或多个存储装置和/或计算装置(例如,服务器)上。机器可读指令可能需要安装、修改、改编、更新、组合、补充、配置、解密、解压、解包、分发、重新分配、编译等中的一或多项,以使其直接可读、可解译和/或可由计算装置和/或其它机器执行。例如,机器可读指令可以存储在多个部分中,这些部分单独压缩、加密并存储在单独的计算装置上,其中这些部分在解密、解压缩和组合时形成一组可执行指令,这些指令实施例如本文描述的程序。
[0731]
在另一实例中,机器可读指令可以以它们可以由计算机读取的状态存储,但是需要添加库(例如,动态链接库(dll))、软件开发工具包(sdk)、应用程序编程接口(api)等,以便在特定计算装置或其它装置上执行指令。在另一实例中,在机器可读指令和/或对应程序可以完全或部分执行之前,可能需要配置机器可读指令(例如,存储的设置、数据输入、记录的网络地址等)。因此,所描述的机器可读指令和/或对应程序涵盖此类机器可读指令和/或程序而无关于机器可读指令和/或程序在存储或以其它方式静止或在运送中时的特定格式或状态。
[0732]
本文描述的机器可读指令可由任何过去、现在或未来的指令语言、脚本语言、编程语言等来表示。例如,机器可读指令可以使用以下语言中的任一种来表示:c、c++、java、c#、perl、python、javascript、超文本标记语言(html)、结构化查询语言(sql)、swift等。
[0733]
如上文所提及,图12
‑
33的实例过程可使用存储在非暂时性计算机和/或机器可读
媒体上的可执行指令(例如计算机和/或机器可读指令)实施,所述非暂时性计算机和/或机器可读媒体例如硬盘驱动器、快闪存储器、只读存储器、紧光盘、数字通用光盘、高速缓存、随机存取存储器和/或其中存储信息持续任何持续时间(例如,延长的时间段、永久地、短暂时间、信息的临时缓冲和/或高速缓存)的任何其它存储装置或存储盘。如本文所使用,术语非暂时性计算机可读媒体被明确地定义为包含任何类型的计算机可读存储装置和/或存储磁盘,且排除传播信号和传输媒体。
[0734]“包含”和“包括”(及其所有形式和时态)是开放式术语。因此,每当权利要求使用任何形式的“包含”或“包括”(例如,包括(comprises、comprising)、包含(includes、including)、具有等)作为前导或在任何类型的权利要求叙述中时,在不超出相应权利要求或引用的范围的情况下可存在额外元素、术语等。如本文所使用,当词组“至少”用作例如权利要求的前导中的过渡术语时,其以与术语“包括”和“包含”为开放的相同方式为开放的。当使用术语“和/或”时,例如呈a、b和/或c的形式使用时,是指a、b、c的任何组合或子集,例如(1)单独a,(2)单独b,(3)单独c,(4)a与b,(5)a与c,(6)b与c,以及(7)a与b与c。如本文在描述结构、组件、项目、对象和/或事物的上下文中所用,短语“a和b中的至少一个”是指包含(1)至少一个a,(2)至少一个b和(3)至少一个a和至少一个b任一者的实施方案。类似地,如本文在描述结构、组件、项目、对象和/或事物的上下文中所使用,短语“a或b中的至少一个”是指包含(1)至少一个a,(2)至少一个b和(3)至少一个a和至少一个b任一者的实施方案。如本文在描述过程、指令、动作、活动和/或步骤的实施或执行的上下文中所使用,短语“a和b中的至少一个”是指包含(1)至少一个a,(2)至少一个b和(3)至少一个a和至少一个b任一者的实施方案。类似地,如本文在描述过程、指令、动作、活动和/或步骤的实施或执行的上下文中所使用,短语“a或b中的至少一个”是指包含(1)至少一个a,(2)至少一个b和(3)至少一个a和至少一个b任一者的实施方案。
[0735]
如本文所使用,单数引用(例如,“一(a/an)”、“第一”、“第二”等)不排除复数。如本文所使用,术语“一(a/an)”实体指所述实体中的一或多个。术语“一(a/an)”、“一或多个”和“至少一个”在本文中可以互换使用。此外,虽然单独列出,但多个构件、元件或方法动作可以由例如单个单元或处理器来实施。此外,虽然单独的特征可能包含于不同的实例或权利要求中,但这些可能被组合,并且不同实例或权利要求中的包含并不意味着特征的组合是不可行和/或有利的。
[0736]
图12是表示可由图1
‑
5的实例l1高速缓存110执行以在如上所述的实例受害者存储区218中执行写入未命中高速缓存的实例机器可读指令1200的实例流程图。虽然图12的指令是结合图1
‑
5的l1高速缓存110来描述的,但所述指令可结合任何类型的高速缓存中的任何类型的存储区来描述。
[0737]
在框1202,实例高速缓存控制器220分配用于写入未命中信息的受害者存储区218的区段(例如,写入未命中高速缓存)。如上文所描述,写入未命中信息对应于当cpu 102将对实例l1高速缓存110的写入指令传输到未存储在l1高速缓存110的存储区214、218中的存储器地址时(例如,因此写入指令发送到更高层级的高速缓存以供执行)。在框1204,高速缓存控制器220存取实例命中/未命中逻辑304、306的输出以确定来自cpu 102的当前写入操作(例如,由高速缓存控制器220接收)是否产生写入未命中(例如,来自写入操作的存储器地址未存储在实例存储区214、218中)。在一些实例中,在来自cpu 102的操作未命中主存储
区214但命中受害者存储区218的情况下,命中
‑
未命中比较逻辑304可以向实例受害者存储区218传输写入未命中。在此类实例中,受害者存储区218舍弃写入未命中信息,因为操作命中了受害者存储区218。
[0738]
如果高速缓存控制器220在与实例标签ram 208、210中的一或多个介接之后确定来自cpu 102的当前写入操作没有产生写入未命中(框1204:否),那么控制返回到框1204,直到写入操作产生写入未命中。如果高速缓存控制器220确定来自cpu 102的当前写入操作产生写入未命中(框1204:是),那么实例高速缓存控制器220确定写入未命中信息是否对应于与已存储在经分配区段中的任何写入未命中信息相同的存储器地址(框1206)。如果实例高速缓存控制器220确定写入未命中信息对应于与经分配区段中已经存储的任何写入未命中信息相同的存储器地址(框1206:是),那么高速缓存控制器220指示实例受害者存储区218合并写入未命中信息与对应于相同存储器地址的所存储写入未命中信息(框1208)。实例受害者存储区218通过在最近的写入未命中信息与旧写入未命中信息重叠(例如,对应于与旧写入未命中信息相同的字节)时用最近的写入未命中信息覆写旧写入未命中信息(例如,舍弃与较近的写入未命中信息重叠的旧写入未命中信息)并保留不与较近的写入未命中信息重叠的旧写入未命中信息来合并两个写入未命中信息。
[0739]
如果实例高速缓存控制器220确定写入未命中信息不对应于与经分配区段中已经存储的任何写入未命中信息相同的存储器地址(框1206:否),那么高速缓存控制器220将经分配区段中的写入未命中信息存储在实例受害者存储区218中(框1210)。
[0740]
在框1212,实例高速缓存控制器220确定经分配区段中是否已经存储了超过阈值量的写入未命中信息。阈值量可以设置为受害者高速缓存的大小(例如,当经分配区段已满时阈值满足)、l2接口228的大小(例如,如果l2接口具有64字节带宽,那么阈值设置为64字节),和/或由用户和/或制造商设置的任何其它量。如果实例高速缓存控制器220确定经分配区段中尚未存储超过阈值(例如,第一阈值)量的写入未命中信息(框1212:否),那么控制返回到框1204。
[0741]
如果实例高速缓存控制器220确定经分配区段中已经存储了超过阈值量的写入未命中信息(框1212:是),那么高速缓存控制器220从受害者存储区218的经分配区段中选择阈值(例如,第二阈值)量的写入未命中信息(例如,经分配区段中存储的n个最旧的写入未命中信息,其中n对应于阈值)(框1214)。第二阈值可以与第一阈值相对应(例如,相同)和/或可以与l2接口228的带宽相对应(例如,如果l2接口228的带宽是64字节,那么选择不超过64字节的写入未命中数据)。另外或替代地,当阈值时间量已经发生时,高速缓存控制器220可以进行到框1210。在框1216,高速缓存控制器220使实例受害者存储区218从经分配区段中移除选定写入未命中信息。在框1218,实例l2高速缓存接口228将选定写入未命中信息传输到更高层级的高速缓存(例如,l2高速缓存112)。如上文所描述,发送多个写入未命中信息以利用l2接口112的更多带宽会产生更有效的系统。
[0742]
图13是结合上述章节2表示可由图1
‑
5的实例l1高速缓存110执行以促进读取
‑
修改
‑
写入操作的实例机器可读指令1300的实例流程图。在图13中,主要高速缓存存储队列212获得由cpu 102传输的(例如,通过高速缓存控制器220传输的)指示待重写的字或整个字的字节的写入指令。(框1302)。在本文描述的一些实例中,写入端口426可以获得由cpu 102传输的写入指令。
[0743]
在框1304,主要高速缓存存储队列212将待重写的字的部分的值传输到锁存器402b。(框1304)。在一些实例中,锁存器402b将待重写的字的部分的值传输到锁存器402c。
[0744]
在框1306,主要高速缓存存储队列212将与待重写的字的部分的位置相关联的地址值存储在未决存储地址数据存储区416中。(框1306)。另外,标签ram 208将整个当前存储的字的读取指令(例如,读取请求)传输到主存储区214。(框1308)。在框1310,主要高速缓存存储队列212确定是否已经存在cpu 102或高速缓存控制器220的后续时钟循环。(框1310)。在本文描述的一些实例中,锁存器402c确定是否已经存在cpu 102或高速缓存控制器220的后续时钟循环。响应于确定尚不存在cpu 102或高速缓存控制器220的后续时钟循环,(例如,框1310的控制返回结果“否”),过程等待。
[0745]
替代地,响应于确定已经存在cpu 102或高速缓存控制器220的后续循环(例如,框1310的控制返回结果“是”),读取
‑
修改
‑
写入合并组件408获得存储在锁存器402c中的字的部分(例如,字节)的值。(框1312)。另外,读取
‑
修改
‑
写入合并组件408获得由ecc逻辑310传输的整个当前存储的字。(框1314)。以此方式,读取
‑
修改
‑
写入合并408识别待更新的当前存储的字中的字节的地址。一旦读取
‑
修改
‑
写入合并组件408识别和/或以其它方式获得(a)来自锁存器402c的要更新的当前存储的字的部分的值(例如,字节值、位值等)和(b)来自ecc逻辑310的当前存储字,读取
‑
修改
‑
写入合并组件408就用从锁存器402c获得的当前存储的字的部分的值写入(例如,替代)当前存储的字的部分。(框1316)。
[0746]
在框1318,主要高速缓存存储队列212基于字生成错误检测码,所述错误检测码将与字一起存储。(框1318)。在本文描述的一些实例中,ecc生成器412基于字生成错误检测码,所述错误检测码将与字一起存储。
[0747]
框1318的控制可以响应于cpu 102或高速缓存控制器220的额外后续时钟循环而被执行。
[0748]
作为响应,主要高速缓存存储队列212确定是否获得额外写入指令。(框1322)。如果主要高速缓存存储队列212确定获得另一写入指令(例如,框1322的控制返回结果“是”),那么过程返回到框1302。替代地,在主要高速缓存存储队列212确定未获得另一写入指令的情况下(例如,框1322的控制返回结果“否”),过程1300可以等待直到阈值超时周期出现,从而结束过程1300。
[0749]
图14是结合上述章节3和/或14表示可由图1
‑
5的实例l1高速缓存110执行以促进针对非对准写入的读取
‑
修改
‑
写入操作的实例机器可读指令1400的实例流程图。在框1402,图3a
‑
3d的组处理逻辑303分析从cpu 102获得的写入指令(例如,经由cpu接口202获得的写入指令)。例如,组处理逻辑303可以用作初始处理电路系统以确定写入指令的性质。
[0750]
以此方式,组处理逻辑303确定在执行写入指令时待写入的存储器组的数目。(框1404)。例如,组处理逻辑303确定写入指令的地址位置,并且因此确定包含对应地址位置的主存储区214或受害者存储区218的组。作为响应,组处理逻辑303确定是否要重写存储器组(例如,包含于主存储区214或受害者存储区218中的存储器组)的所有地址。(框1406)。
[0751]
在组处理逻辑303确定要重写存储器组(例如,包含于主存储区214或受害者存储区218中的存储器组)的所有地址的情况下(例如,框1406的控制返回结果“是”),组处理逻辑303指示cpu 102或高速缓存控制器220执行写入指令而不读取存储器组中当前存储的值。(框1408)。例如,组处理逻辑303可以识别待重写的地址a0到a70,并且因此确定第一存
储器组(例如,具有地址a0到a63的存储器组)将被重写。因此,可以在不读取当前存储的值的情况下重写此类第一存储器组。
[0752]
替代地,在组处理逻辑303确定不重写存储器组的所有地址的情况下(例如,框1406的控制返回结果“否”),或响应于框1408中的控制的执行,组处理逻辑303确定是否存在要分析的额外存储器组。(框1410)。
[0753]
例如,为了执行框1410的控制,组处理逻辑303确定是否已经分析了所有受写入指令影响的存储器组。根据以上实例,组处理逻辑303确定尚未分析包含地址a64到a70的存储器组。因此,在组处理逻辑303确定存在要分析的额外存储器组的情况下(例如,框1410的控制返回结果“是”),过程1400返回到框1406。替代地,在组处理逻辑303确定不存在要分析的额外存储器组的情况下(例如,框1410的控制返回结果“否”),组处理逻辑303确定是否获得另一写入指令。(框1412)。
[0754]
在本文描述的实例中,在组处理逻辑303确定存在另一写入指令的情况下(例如,框1412的控制返回结果“是”),过程1400返回到框1402。替代地,在组处理逻辑303确定不存在另一写入指令的情况下(例如,框1412的控制返回结果“否”),过程1400可以等待直到阈值超时周期出现,从而结束过程1400。
[0755]
图15是结合上述章节4和/或15表示可由图1
‑
5的实例l1高速缓存110执行以在实例主要高速缓存存储队列212和/或受害者高速缓存存储队列216中执行积极写入合并的实例机器可读指令1500的实例流程图。虽然结合图1
‑
5的l1高速缓存110来描述图15的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合主要高速缓存存储队列212和主存储区214来描述图15的指令。当然,也可结合受害者高速缓存存储队列216和受害者存储区218使用图15的指令。
[0756]
在框1502,实例合并电路403a
‑
c的实例比较器420从对应的锁存器402b
‑
d获得写入指令。如上文所描述,锁存器402b
‑
d中的每一个包含来自cpu 102的不同写入指令。在框1504,实例合并电路403a
‑
c的实例比较器420将来自锁存器402b
‑
d的写入指令的存储器地址进行比较。例如,合并电路403a的比较器420将由锁存器402d输出的写入指令与由锁存器402c输出的写入指令的存储器地址进行比较。在框1506,实例比较器420确定由锁存器402b
‑
d输出的任何两个或更多个写入指令是否对应于相同存储器地址。如果比较器420确定由锁存器402b
‑
d输出的任何两个或更多个写入指令不对应于相同存储器地址(框1506:否),那么控制继续到框1520,如下文进一步描述。
[0757]
如果比较器420确定由锁存器402b
‑
d输出的任何两个或更多个写入指令对应于相同存储器地址(框1506:是),那么控制继续到框1508。对于与相同存储器地址相对应的每组写入指令(框1508
‑
1514),接收相同存储器地址的写入指令的实例合并电路1103a
‑
c中的一或多个保持与旧写入指令的相同字节的写入数据重叠的最新写入指令(例如,最近从cpu 102接收的写入指令)的字节的写入数据(框1510)。在框1512,接收相同存储器地址的写入指令的实例合并电路1103a中的一或多个更新不与最新写入指令的写入数据重叠的旧写入指令的字节的写入数据。例如,如果存储写入指令以写入存储器地址的byte0的合并电路1103a从锁存器402d接收到重新路由的数据,所述重新路由的数据对应于写入存储器地址的byte0和byte1的写入指令,那么合并电路1103a保持所述写入指令以写入到byte0(例如,舍弃从锁存器402d写入byte0的写入指令,因为所述写入指令较旧)并对应于来自锁存器
402b的指令更新写入指令以写入到byte1(例如,因为所述指令不与最新的写入指令重叠)。在框1516,实例开关422将经合并写入指令重新路由到具有也对应于匹配存储器地址的最新写入指令的锁存器(框1508)。
[0758]
在框1518,重新路由要合并的写入指令的合并电路402a
‑
c中的一或多个标记被重新路由的数据。例如,一或多个合并电路403a
‑
c可以向实例仲裁管理器414和/或高速缓存控制器220传输信号。以此方式,仲裁管理器414和/或高速缓存控制器220可以避免保留将已重新路由的数据写入先前锁存器以进行合并的循环。在框1520,锁存器402b确定是否已经接收到额外写入指令。如果锁存器402d确定尚未接收到额外指令(框1520:否),那么控制返回到框1520,直到接收到额外写入指令。如果锁存器402d确定已经接收到额外指令(框1520:是),那么控制返回到框1504。
[0759]
图16是如上文结合上述章节5和16描述表示可由图1
‑
5的实例l1高速缓存110执行以执行原子操作的实例机器可读指令1600的实例流程图。虽然结合图1
‑
5的l1高速缓存110来描述图16的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图16的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)使用图16的指令。
[0760]
在框1602,高速缓存控制器220和/或实例锁存器402a从cpu 102获得原子操作。当锁存器402a获得原子操作时,高速缓存控制器220和/或锁存器402a将原子操作的存储器地址发送到实例标签ram 208以确定对应于原子操作的数据是否存储在实例主存储区214中。在框1604,高速缓存控制器220与实例命中/未命中逻辑304介接以确定对应于原子操作的存储器地址是否存储在主存储区214中。
[0761]
如果高速缓存控制器220确定对应于原子操作的存储器地址没有存储在主存储区214中(框1604:否),那么高速缓存控制器220与实例l2高速缓存接口228介接以将原子未命中信息提交到更高层级的高速缓存(例如,图1的l2高速缓存112)(框1606)。以此方式,实例l2高速缓存112可以从对应于存储在l1高速缓存110中的存储器地址返回对应的数据以执行原子操作。l2高速缓存112可以具有与本地存储的存储器地址相对应的数据,或者可以从l3高速缓存114和/或经扩展存储器110(例如,经由l3高速缓存114)获得数据。在框1608,主要高速缓存存储队列212的实例算术组件404经由l2接口228从l2高速缓存112获得对应于存储器地址的数据。例如,数据可以存储在实例主存储区214中、被读取并输入到实例算术组件404。
[0762]
如果高速缓存控制器220确定对应于原子操作的存储器地址存储在主存储区214中(框1604:是),那么高速缓存控制器220使实例算术组件404从主存储区214获得对应于原子操作的存储器地址的数据(框1610)。在框1612,高速缓存控制器220使实例算术组件404结合来自对应于原子操作的存储区和/或更高层级高速缓存的数据执行来自cpu 102的原子操作。例如,当框1602
‑
1610发生时,经由锁存器402a将原子操作发送到主要高速缓存存储队列212。原子操作包含操作的细节(例如,增加、减少等)。相应地,算术组件404获得原子操作和对应于原子操作的存储器地址的数据。因此,算术组件404可以使用获得的数据(例如,对应于原子操作的存储器地址)来执行原子操作(例如,增加、减少等)。在框1614,实例高速缓存控制器220控制mux 410(例如,经由选择线)以确保算术组件404的输出被输出到
实例锁存器402d。因此,经操纵数据(例如,增加的数据、减少的数据等)可以被传递到实例ecc生成412以生成用于经操纵数据的ecc码(框1616)。
[0763]
在框1618,实例ecc生成412向实例仲裁管理器414输出经操纵数据的ecc码、经操纵数据和实例的存储器地址位置。在框1620,高速缓存控制器220使实例仲裁管理器414将原子输出(例如,经操纵数据)存储在主存储区214中原子操作的存储器地址处。
[0764]
图17是结合上述章节5和/或16表示可由图1
‑
5的实例l1高速缓存110执行以执行直方图操作的实例机器可读指令1700的实例流程图。虽然结合图1
‑
5的l1高速缓存110来描述图17的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图17的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)使用图17的指令。
[0765]
在框1702,高速缓存控制器220和/或主要高速缓存存储队列212的实例锁存器402b和/或实例标签ram 208从cpu 102获得直方图操作。如上文所描述,直方图操作包含确定存储在存储器的区段(例如,sram线)中的每一值的总数。在框1704,高速缓存控制器220与实例命中/未命中逻辑304介接以确定对应于直方图操作的存储器地址是否存储在主存储区214的sram中。如果高速缓存控制器220确定对应于直方图操作的存储器地址存储在主存储区214的sram中(框1704:是),那么控制继续到框1710。
[0766]
如果高速缓存控制器220确定对应于直方图操作的存储器地址没有存储在主存储区214的sram中(框1704:否),那么高速缓存控制器220与实例l2接口228介接以将读取未命中信息传输到更高层级的高速缓存(例如,实例l2高速缓存112)(框1706)。在框1708,高速缓存控制器220利用实例仲裁管理器414经由l2接口228从更高层级的高速缓存获得读取数据,并将对应于直方图操作的存储器地址的数据存储在主存储区214的sram中。在框1710,高速缓存控制器220和/或使实例算术组件404以表示存储在主存储区214的sram区段中的值的计数的值发起直方图向量。
[0767]
在框1712,高速缓存控制器220使主存储区214的实例sram并行地输出与sram区段相对应的块组的读取值。将读取值经由ecc逻辑310输出到实例算术组件404。在框1714,高速缓存控制器220利用实例算术组件404基于块组的读取值增加直方图值的元素之一。例如,如果读取值为
‘
01’,那么算术组件404增加对应于
‘
01’计数的元素。在框1722,经由实例mux 418和实例锁存器402e将直方图向量提供到实例mux 314,并且实例mux 314经由锁存器322b和cpu接口202将直方图向量输出到cpu 102(框1722)。在一些实例中,另外或替代地,直方图向量经由ecc生成器412和仲裁管理器414存储在实例主存储区214中。
[0768]
图18a和18b是结合上述章节6和/或17表示可由图1
‑
5的实例l1高速缓存110执行以执行原子比较的实例机器可读指令1800的实例流程图。然而,可以结合任何原子操作或直方图操作来描述流程图。虽然结合图1
‑
5的l1高速缓存110来描述图18a和18b的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图18a和18b的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)使用图18a和18b的指令。
[0769]
在框1802,高速缓存控制器220和/或实例主要高速缓存存储队列212的实例锁存
器402b从实例cpu 102获得原子比较和交换操作与关键字。如上文所描述,原子比较和交换将存储器地址处的数据与关键字进行比较,并且如果先前存储在存储器地址处的数据与关键字匹配,那么使用交换数据执行对存储器地址的写入。在框1804,高速缓存控制器220与实例mesi ram 300介接以确定对应于原子比较和交换操作的存储器地址的状态。如上文结合图3a
‑
3d所述,mesi ram 300跟踪存储器地址的状态(例如,共享、修改、不活动或独占)。在框1806,高速缓存控制器220与实例mesi ram 300介接以确定存储器地址的状态是不活动的(例如,寻址的存储器未存储在l1高速缓存110中)或共享的(例如,存储在l1高速缓存110中并存储在另一更高层级的高速缓存中)。
[0770]
如果实例高速缓存控制器220确定对应于原子比较和交换的存储器地址的状态不处于共享中(框1806:是),那么高速缓存控制器220使实例l2接口228将原子未命中信息与独占状态请求一起提交到更高层级高速缓存(框1808)。如上文结合图4a所述,如果存储器地址存储在l1高速缓存110中并且是共享的,那么如果第二核心在不同级别的高速缓存读取和/或写入数据,那么写入数据会导致问题,因为这样做会对不同高速缓存中的相同存储器地址产生不一致的数据。因此,实例l2接口228传输独占状态请求以让更高层级的高速缓存知道l1高速缓存110将对高速缓存执行超过一个循环的操作,使得不会在不同高速缓存中的相同存储器地址发生不同的写入。
[0771]
在框1810,实例高速缓存控制器220使实例mesi ram 300将对应存储器地址的状态改变为独占。mesi ram 3400可以在将请求提交到更高层级的高速缓存之后或者在接收到来自更高层级的高速缓存的响应之后改变状态。如果存储器地址的状态是不活动的,那么更高层级的高速缓存将返回存储器地址处的数据,所述数据可以存储在实例主存储区214中和/或输入到实例原子比较组件406。在框1812,实例高速缓存控制器220使实例原子比较组件406(例如,从实例主存储区214和/或从更高层级的高速缓存)获得对应于存储器地址的数据。
[0772]
如果实例高速缓存控制器220确定不对应于原子比较和交换的存储器地址的状态是不活动或共享的(框1806:否),那么实例原子比较组件406从主存储区214获得对应于存储器地址的数据(框1814)。在框1816,高速缓存控制器220使实例原子比较组件406确定获得的数据是否与关键字匹配(例如,来自原子交换和比较操作)。如果实例原子比较组件406确定获得的数据与关键字不匹配(框1816:否),那么高速缓存控制器220使原子比较组件406舍弃要从原子比较和交换写入的交换数据(例如,如果获得的数据与关键字匹配,那么为待存储的数据)(框1818)。在一些实例中,原子比较组件406输出获得的数据以将获得的数据重写回主存储区214。如果实例原子比较组件406确定获得的数据与关键字匹配(框1816:是),那么高速缓存控制器220使实例原子比较组件406将待写入存储器地址的交换数据(例如,来自原子比较和交换操作)输出到实例mux 410(框1820)。
[0773]
在框1822,实例高速缓存控制器220控制mux 410(例如,经由选择线)以确保原子比较组件406的输出被输出到实例锁存器402d。因此,经交换数据可以被传递到实例ecc生成412以生成用于经交换数据的ecc码(框1824)。
[0774]
在框1826,实例ecc生成412向实例仲裁管理器414输出经交换数据的ecc码、经交换数据和实例的存储器地址位置。在框1828,高速缓存控制器220使实例仲裁管理器414将原子输出(例如,经操纵数据)存储在主存储区214中原子操作的存储器地址处。
[0775]
图19是结合上述章节7表示可由图1
‑
5的实例l1高速缓存110执行以执行来自cpu 102的飞行中数据转发和写入指令无效的实例机器可读指令1900的实例流程图。虽然图19的指令是结合图1
‑
5的l1高速缓存110来描述的,但所述指令可结合任何类型的高速缓存中的任何类型的存储区来描述。
[0776]
在框1902,高速缓存控制器220从标签ram存取204、206获得读取未命中操作。例如,当cpu 102发出不包含主要存储元件214和/或受害者存储元件214中的对应存储器地址的读取操作时,高速缓存控制器220的主要高速缓存控制器222获得读取未命中操作。高速缓存控制器220确定要从主要存储元件214逐出的受害者(框1904)。例如,高速缓存控制器220创建受害者。受害者对应于要从中移除数据的主要存储元件214的存储器地址和存储器位置(例如,高速缓存线)。
[0777]
高速缓存控制器220向存储队列212发出读取无效操作(框1906)。例如,高速缓存控制器220响应于接收到受害者的存储器地址而向存储队列的读取端口424发送操作。读取端口424获得对应于受害者的地址(框1908)。例如,当发出读取无效操作时,高速缓存控制器220将受害者地址发送到存储队列212。
[0778]
数据存储区416将受害者的地址与数据存储区416中存储的地址进行比较(框1910)。例如,数据存储区416保持与锁存器402a、402b、402c、402d、402e中的任一个和/或合并电路403a、403b和/或403g中的任一个中存储的每一值相关联的地址的日志。另外,数据存储区416存储与读取无效操作相对应的受害者地址。数据存储区416确定数据存储区416中的地址中的任一个是否与受害者的地址匹配(框1912)。例如,数据存储区416确定锁存器402a
‑
d中的任一个是否包含对应于受害者地址的值和/或数据。在一些实例中,锁存器402a
‑
d存储未完成的写入地址。未完成的写入对应于写入操作尚未完成(例如,写入操作的数据尚未完全写入主要存储元件214)。在一些实例中,存储队列212将数据写入主要存储元件214中分配策略选择为受害者的位置(例如,高速缓存线)。
[0779]
如果数据存储区416确定数据存储区416中的地址中的任一个与受害者的地址匹配(例如,框1912返回值“是”),那么优先级复用器418将对应于匹配地址的数据转发到mux电路314(框1914)。例如,数据存储区416将匹配地址发送到优先级复用器418。优先级复用器418选择存储受害者地址的锁存器402a
‑
d中存储的数据和/或值。优先级复用器418将选定数据发送到锁存器402e以转发到mux电路314。mux电路314将数据发送到受害者存储元件214和/或l2高速缓存112。
[0780]
存储队列212将适当锁存器(例如,402a
‑
d)中的有效标签更新为无效(框1916)。例如,存储受害者地址数据的锁存器改变有效标签以指示数据无效。以此方式,存储队列212将停止将该数据写入主要存储元件214。因此,如果未完成的写入试图将数据写入不再保持写入操作地址的高速缓存线,那么实例读取无效操作1900校正将发生的任何错误。
[0781]
图20是如上所述可由图1
‑
5的实例l1高速缓存110执行以确定地址是否存储在受害者高速缓存(例如,图2的受害者存储区218)中的实例机器可读指令2000的实例流程图。虽然结合图1
‑
5的l1高速缓存110来描述图20的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)来描述图20的指令。当然,也可结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)使用图20的指令。
[0782]
机器可读指令2000开始于框2002,在此l1高速缓存110从接口接收读取地址。例如,l1高速缓存110可以从图1的cpu 102的标量接口502接收adp_addr_e2_dp0,从图3和/或5的监听接口接收snp_addr_e2_dp0,和/或从如图8b所描绘的cpu 102的向量接口502接收adp_addr_e2_dp1。
[0783]
在框2004,l1高速缓存110将读取地址与多组受害者高速缓存标签(vct)随机存取存储器(ram)的集合进行比较。例如,图8b的第一比较器850可以将adp_addr_e2_dp0的第一读取地址与图8b的集合846中存储的相应地址进行比较。在其它实例中,图8b的第二比较器852可以将adp_addr_e2_dp1的第二读取地址与集合846中存储的相应地址进行比较。
[0784]
在框2006,l1高速缓存110确定读取地址中的至少一个是否被映射到集合中的一个。例如,第一比较器850中的一个可以响应于读取地址与第一比较器850中的一个所相关联的集合846匹配而断言逻辑一。在其它实例中,第二比较器852可以基于比较生成hit_dp1。在其它实例中,第一比较器850中的一个可以响应于读取地址不与第一比较器850中的一个所对应于的集合846匹配而生成逻辑低。
[0785]
在框2008,l1高速缓存110识别高速缓存命中。例如,第一比较器850可以基于比较而生成hit_dp0。在此类实例中,第一比较器850可以响应于hit_dp0位向量中的至少一个位是逻辑一(例如,具有1的位值)而识别高速缓存命中。在一些此类实例中,第一比较器850可以响应于hit_dp0位向量中的位都不是逻辑一而识别高速缓存未命中。在其它实例中,第二比较器852可以基于比较生成hit_dp1。在此类实例中,第二比较器852可以响应于hit_dp1位向量中的至少一个位是逻辑一而识别高速缓存命中。在一些此类实例中,第二比较器852可以响应于hit_dp1位向量中的位都不是逻辑一而识别高速缓存未命中。
[0786]
在框2010,l1高速缓存110执行高速缓存命中
‑
未命中转换逻辑。例如,第一地址编码器逻辑电路854可以调用图8b的第一and门864a、第三比较器870a或第四比较器872a中的至少一个,以响应于实例操作条件将高速缓存命中转换为高速缓存未命中或反之亦然。在其它实例中,第二地址编码器逻辑电路856可以调用图8b的第二and门864b、第五比较器870b或第六比较器872b中的至少一个,以响应于实例操作条件将高速缓存命中转换为高速缓存未命中或反之亦然。下面结合图21描述可用于实施框2010的实例过程。
[0787]
在框2012,l1高速缓存110基于高速缓存命中
‑
未命中转换逻辑输出高速缓存命中地址。例如,第一地址编码器逻辑电路854可以响应于执行高速缓存命中
‑
未命中转换逻辑而输出hit_addr0。在其它实例中,第二地址编码器逻辑电路856可以响应于执行高速缓存命中
‑
未命中转换逻辑而输出hit_addr1。
[0788]
在框2014,l1高速缓存110确定是否已经接收到额外读取地址。如果在框2014,l1高速缓存110确定已经接收到额外读取地址,那么控制返回到框2002以从接口接收读取地址。如果在框2014,l1高速缓存110确定没有接收到额外读取地址,那么图20的实例机器可读指令2000结束。
[0789]
图21是如上所述可由图1
‑
5的实例l1高速缓存110执行以执行高速缓存命中
‑
未命中转换逻辑的实例机器可读指令2100的实例流程图。可以执行图21的实例机器可读指令2100以实施图20的框2010。虽然结合图1
‑
5的l1高速缓存110来描述图21的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)来描述图21的指令。当然,
也可结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)使用图21的指令。
[0790]
图21的机器可读指令2100开始于框2102,在此l1高速缓存110确定来自第一接口的新地址是否已在稍后的管线级被写入受害者高速缓存。例如,第一解码器860a可以在e2管线级接收vta_wr_set0,其可表示图5的标量接口502在e3管线级将地址写入受害者存储区218。
[0791]
如果在框2102,l1高速缓存110确定来自第一接口的新地址在稍后的管线级被写入受害者高速缓存,那么控制进行到框2106以将新地址与高速缓存命中的地址进行比较。如果在框2102,l1高速缓存110确定来自第一接口的新地址没有在稍后的管线级被写入受害者高速缓存,那么在框2104,l1高速缓存110确定来自第二接口的新地址是否已在稍后的管线级被写入受害者高速缓存。例如,第二解码器860b可以在e2管线级接收vta_wr_set1,其可以表示图5的标量接口502在e3管线级将地址写入受害者存储区218。
[0792]
如果在框2104,l1高速缓存110确定来自第二接口的新地址没有在稍后的管线级被写入受害者高速缓存,那么控制返回到图20的实例机器可读指令2000的框2012以基于高速缓存命中
‑
未命中转换逻辑输出高速缓存命中地址。
[0793]
如果在框2104,l1高速缓存110确定来自第二接口的新地址在稍后的管线级被写入受害者高速缓存,那么在框2106,l1高速缓存110将新地址与高速缓存命中的地址进行比较。例如,第一and门864a可以响应于vtag_wr_set0的地址不与hit_dp0的地址匹配而断言逻辑一。在其它实例中,第三比较器870a可以将hit_dp0的地址与由标量接口502写入到受害者存储区218的地址进行比较。在其它实例中,第四比较器872a可以将hit_dp0的地址与由向量接口504写入到受害者存储区218的地址进行比较。
[0794]
响应于在框2106将新地址与高速缓存命中的地址进行比较,控制进行到框2108以确定地址是否匹配。如果在框2108,l1高速缓存110确定地址不匹配,那么控制返回到图20的实例机器可读指令2000的框2012以基于高速缓存命中
‑
未命中转换逻辑输出高速缓存命中地址。
[0795]
如果在框2108,l1高速缓存110确定地址匹配,那么在框2110,l1高速缓存110确定是识别了高速缓存命中还是高速缓存未命中。例如,第一and门864a、第三比较器870a和/或第四比较器872a可以基于包含至少一个位值1的hit_dp0来确定在受害者存储区218中存在adp_addr_e2_dp0的地址的高速缓存命中。在其它实例中,第二and门864b、第五比较器870b和/或第六比较器872b可以基于包含至少一个位值1的hit_dp1来确定在受害者存储区218中存在adp_addr_e2_dp1的地址的高速缓存命中。
[0796]
如果在框2110,l1高速缓存110确定识别了高速缓存命中,那么在框2112,l1高速缓存110将高速缓存命中转换为高速缓存未命中。例如,第一and门864a可以输出逻辑低以将高速缓存命中转换为高速缓存未命中。在其它实例中,第二and门864b可以输出逻辑低以将高速缓存命中转换为高速缓存未命中。响应于在框2112将高速缓存命中转换为高速缓存未命中,控制返回到图20的实例机器可读指令2000的框2012以基于高速缓存命中
‑
未命中转换逻辑输出高速缓存命中地址。
[0797]
如果在框2110,l1高速缓存110确定识别了高速缓存未命中,那么控制进行到框2114,以响应于新地址与来自分配到受害者高速缓存中的接口中的一(或多)个的写入匹配
而将高速缓存未命中转换为高速缓存命中。例如,响应于adp_addr_e2_dp0匹配来自dp0或dp1的写入操作的地址,第三比较器870a和/或第四比较器872a可以断言逻辑一以将高速缓存未命中转换为高速缓存命中。在其它实例中,响应于adp_addr_e2_dp1匹配来自dp0或dp1的写入操作的地址,第五比较器870b和/或第六比较器872b可以断言逻辑一以将高速缓存未命中转换为高速缓存命中。响应于在框2114将高速缓存未命中转换为高速缓存命中,控制返回到图20的实例机器可读指令2000的框2012以基于高速缓存命中
‑
未命中转换逻辑输出高速缓存命中地址。
[0798]
图22是结合以上描述表示可由图1
‑
5的实例l1高速缓存110执行以在主存储区214中执行数据分配的实例机器可读指令2200的实例流程图。虽然图22的指令是结合图1
‑
5的l1高速缓存110来描述的,但所述指令可结合任何类型的高速缓存中的任何类型的存储区来描述。
[0799]
实例主要高速缓存控制器222(图2)从cpu接口202(图2)获得指令。例如,cpu接口202向高速缓存控制器220提供指令,高速缓存控制器220将所述指令传播到主要高速缓存控制器222。
[0800]
主要高速缓存控制器222确定所述指令是否是读取指令(框2204)。例如,主要高速缓存控制器222分析指令中的请求以确定主要高速缓存控制器222是要从主存储区214读取数据并将其提供到cpu接口202还是为cpu 102执行不同的任务。
[0801]
如果主要高速缓存控制器222确定指令是读取指令(例如,框2204返回值“是”),那么主要高速缓存控制器22确定读取指令的地址(框2206)。例如,主要高速缓存控制器222确定要从主存储区214中的何处读取数据。在一些实例中,主要标签ram存取204确定读取指令的地址。
[0802]
主要高速缓存控制器222确定读取指令的地址是否与标签ram 208、210中的地址匹配。例如,高速缓存控制器220可以从标签ram存取204、206获得命中/未命中结果,并确定地址在主存储区214和/或受害者存储区218中是否可用。主要高速缓存控制器222确定读取指令是未命中(例如,框2208返回值“否”),主要高速缓存控制器223识别与地址相关联的高速缓存线(框2210)。例如,主要高速缓存控制器222是经直接映射高速缓存,并且读取指令的地址只能存储在主存储区214的一个位置(例如,在一个高速缓存线)。
[0803]
主要高速缓存控制器222将高速缓存线的数据分配到受害者存储区218(框2212)。例如,主要高速缓存控制器222将来自经直接映射高速缓存线的数据分配给受害者存储区214。主要高速缓存控制器222分配数据而不管所述数据的mesi状态。这种分配通过将主存储区214中的任何线分配给受害者存储区218来减少主要高速缓存控制器222和整个l1高速缓存110的时延。
[0804]
图23是结合上述章节10表示可由图1
‑
5的实例l1高速缓存110执行以促进监听请求的实例机器可读指令2300的实例流程图。在框2302,监听地址502(例如,监听接口)从更高层级的数据高速缓存(例如,l2数据高速缓存112)获得监听请求。(框2302)。作为响应,监听地址502向标签ram 210发出读取指令。(框2304)。在本文描述的实例中,读取指令被发布到标签ram 210以识别受害者存储区218是否包含经由监听地址502请求的数据。
[0805]
在框2306,比较逻辑306c确定向标签ram 210发出的读取是否是命中。(框2306)。在比较逻辑306c确定向标签ram 210发出的读取不是命中的情况下(例如,框2306的控制返
回结果“否”),受害者存储区218生成指示发生未命中的监听响应。(框2308)。此外,受害者存储区218将监听响应传输回更高层级的数据高速缓存(例如,l2数据高速缓存112)。(框2310)。
[0806]
替代地,在比较逻辑306确定向标签ram 210发出的读取是命中的情况下(例如,框2306的控制返回结果“是”),比较逻辑306c确定与mesi ram 300中的读取指令相关联的地址的状态。(框2312)。在框2312,比较逻辑306还可以存储响应于mesi ram 300中的读取指令而识别的地址的状态。
[0807]
在框2314,实例地址编码器326c生成地址值以供受害者存储区218在获得数据时使用。(框2314)。地址编码器326c将标签ram 210的地址编码为可被受害者存储区218解译的形式。例如,标签ram 210可以存储16位存储器地址,而受害者存储区218存储与16位存储器地址相对应的4位存储器地址。因此,地址编码器326可以将16位存储器地址变换为4位存储器地址以定位和/或输入受害者存储区218中的对应存储器地址。
[0808]
在框2316,实例响应复用器508确定是否从受害者高速缓存存储队列216获得数据输入。(框2316)。在响应复用器508确定没有数据已从受害者高速缓存存储队列216输入的情况下(例如,框2316的控制返回结果“否”),响应复用器508输出基于由地址编码器326c提供的地址识别的数据,作为对更高层级数据高速缓存(例如,l2数据高速缓存112)的监听响应。(框2320)。
[0809]
替代地,在响应复用器508确定数据已经从受害者高速缓存存储队列216输入的情况下(例如,框2316的控制返回结果“是”),响应复用器508将数据的经更新版本识别为要在监听响应中发送的数据。(框2318)。响应于框2318中所示的控制的执行,响应复用器508输出基于由地址编码器326c提供的地址识别的数据,作为对更高层级数据高速缓存(例如,l2数据高速缓存112)的监听响应。(框2320)。
[0810]
在框2322,监听地址组件506(例如,监听接口)确定额外监听请求是否可用。(框2322)。在监听地址组件506(例如监听接口)确定额外监听请求可用的情况下(例如,框2322的控制返回结果“是”),过程2300返回到框2302。替代地,在监听地址组件506(例如,监听接口)确定额外监听请求不可用的情况下(例如,框2322的控制返回结果“否”),过程2300停止。
[0811]
图24、25、26、27、28和29a、29b
‑
1和29b
‑
2是结合上述章节11表示可由图1
‑
5的实例l1高速缓存110执行以在受害者存储区218中执行数据逐出的实例机器可读指令的实例流程图。图24、25、26、27、28和29a、29b
‑
1和29b
‑
2的指令是结合图1
‑
5的l1高速缓存110来描述的,但所述指令可结合任何类型的高速缓存中的任何类型的存储区来描述。
[0812]
图24示出当第一和第二数据路径(dp0和dp1)包含有效事务时替代策略组件308(图3和5)的实例第一操作2400。图25示出当第一和第二数据路径(dp0和dp1)包含有效事务时替代策略组件308的实例第二操作2500。图26示出当第一和第二数据路径(dp0和dp1)包含有效事务时替代策略组件308的实例第三操作2600。图27示出当第一数据路径是有效事务而第二数据路径是无效事务时替代策略组件308的实例有效
‑
无效操作2700。图28示出当第一数据路径是无效事务且第二数据路径是有效事务时替代策略组件308的实例无效
‑
有效操作2800。图29a、图29b
‑
1和图29b
‑
2示出当数据路径将数据分配到受害者存储区时替代策略组件308的增加操作2900。
[0813]
转向图24,实例标量接口502和实例向量接口504确定第一和第二数据路径是否是有效事务(框2402)。例如,标量接口502确定第一数据路径dp0是否在存取(例如,请求读取或写入操作)受害者存储区218,并且向量接口504确定第二数据路径dp1是否在存取受害者存储区218。在接口502、504确定第一和第二数据路径是有效事务时(例如,框2402返回值“是”),替代策略组件308从命中
‑
未命中比较逻辑306a、306b获得结果(框2404)。例如,替代策略组件308获得指示第一数据路径存取和第二数据路径存取在标签ram 210中是否具有匹配地址的结果。
[0814]
实例替代策略组件308确定结果是否指示第一数据路径和第二数据路径的事务都是命中(框2406)。当替代策略组件308确定dp0和dp1都是命中时(例如,框2406返回值“是”),最近最少使用的值y保持不变(框2408)。例如,由于第一数据路径和第二数据路径都不需要逐出数据,因此lru值不需要改变。
[0815]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2410)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2410返回值“是”),那么控制返回到框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2410返回值“否”),那么第一操作2400结束。
[0816]
当替代策略组件308确定结果并不指示第一数据路径和第二数据路径的事务都是命中时(例如,框2406返回值“否”),替代策略组件308确定结果是否指示第一数据路径和第二数据路径的事务都是未命中(框2412)。例如,替代策略组件308确定来自第一命中
‑
未命中比较逻辑306a和第二命中
‑
未命中比较逻辑306b的结果都指示存取都不与标签ram 210中的地址存取。
[0817]
如果dp0和dp1未命中(例如,框2412返回值“是”),那么替代策略组件308将第一数据路径指向lru通路(y)(框2414)。替代策略组件308将第二数据路径指向下一个lru通路(y+1)(框2416)。例如,受害者存储区218包含数目n个通路,每一通路都有一个位置(例如,槽1、槽2、槽n),每一通路映射到一个地址,并且每一通路包含数据。替代策略组件308将值y初始化为等于受害者高速缓存中最近最少使用的通路。例如,lru通路是槽2,因此y等于槽2。当替代策略组件308将第一数据路径指向lru通路时(框2414),替代策略组件308将受害者存储区218中的y的位置分配给dp0以用于逐出。类似地,当替代策略组件308将第二数据路径指向下一个lru通路时(框2416),替代策略组件308将受害者存储区218中的y+1的位置分配给dp1以用于逐出。
[0818]
实例替代策略组件308将指针值提供到实例复用器330a、330b(框2418)。例如,替代策略组件308将由dp0从受害者存储区218逐出的通路的位置(y)提供到复用器330a,并且将由dp1逐出的通路的位置(y+1)提供到复用器330b。在一些实例中,选择复用器330a和330b的输入会选择替代策略组件输入,地址读取332a和332b读取替代策略组件308的输入并逐出由位置y和位置y+1指示的通路。
[0819]
实例替代策略组件308将y增加二(框2420)。例如,替代策略组件308将y分配给受害者存储区218中与y的当前值相距两个槽的位置(例如,如果y=槽1,那么在增加之后y=槽3)。以此方式,在下一个时钟循环期间,为替代策略组件308提供经更新且适当的y值。替代地和/或另外,替代策略组件308将第一和第二数据路径的指示符增加二。
[0820]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2422)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2422返回值“是”),那么控制返回到框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2420返回值“否”),那么第一操作2400结束。
[0821]
转向图25,当替代策略组件308确定结果指示第一数据路径和第二数据路径的事务并非都是未命中时(例如,框2412返回值“否”),实例替代策略组件308确定结果是否指示第一数据路径是命中且第二数据路径是未命中(框2502)。
[0822]
如果实例替代策略组件308确定第一数据路径是命中且第二数据路径是未命中(例如,框2502返回值“是”),那么替代策略组件确定命中通路(dp0通路)在受害者存储区218中的位置(框2504)。例如,替代策略组件308分析dp0的地址并识别受害者存储区218中包含所述地址的位置。在一些实例中,替代策略组件308可以包含受害者存储区218中的元件的经更新列表。在其它实例中,替代策略组件308从标签ram 210检索和/或获得关于受害者存储区218中存储的地址的位置的信息。
[0823]
实例替代策略组件308确定命中通路(dp0命中通路)是否匹配下一个lru值(y+1)的位置(框2506)。例如,替代策略组件308可以将含有dp0的地址的命中通路的位置与分配给y+1的位置值进行比较。如果替代策略组件308确定位置匹配(例如,框2506返回值“是”),那么替代策略组件308切换下一个lru值和lru值的分配(框2508)。例如,第二数据路径dp1指针将被分配给lru值(例如,位置y)而不是下一个lru值(例如,位置y+1)。替代策略组件308切换分配以避免第二数据路径dp1逐出dp0命中通路。在一些实例中,替代策略组件308减少指示符以指示要被第二数据路径dp1逐出的受害者存储区214的lru通路。
[0824]
替代策略组件308将第二数据路径指向lru通路(y)(框2510)。例如,替代策略组件308将y的值(例如,lru通路的位置)分配给第二数据路径dp1以用于逐出。
[0825]
实例替代策略组件308将指针值提供到复用器330a、330b(框2512)。例如,替代策略组件308将由dp1从受害者存储区218逐出的通路的位置(y)提供到复用器330b。在一些实例中,当命中通路不与下一个lru值的位置匹配时(例如,框2506返回值“否”),替代策略组件308将指针值y+1和命中通路的位置提供到复用器330a、330b。例如,下一个lru值到第二数据路径dp1的原始分配保持不变。
[0826]
实例替代策略组件308基于逐出增加y(框2514)。例如,如果lru值到数据路径的分配被切换(例如,dp1指针指向lru值y),那么替代策略组件308将y增加一。否则,替代策略组件308将y增加二。以此方式,在下一个时钟循环期间,为替代策略组件308提供经更新y值和y+1值。替代地和/或另外,替代策略组件308基于逐出增加第一和第二数据路径的指示符。
[0827]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2516)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2516返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2516返回值“否”),那么第二操作2500结束。
[0828]
转向图26,当替代策略组件308确定结果指示第一数据路径不是命中且第二数据路径不是未命中时(例如,框2602返回值“否”),实例替代策略组件308确定结果指示第一数
据路径是未命中且第二数据路径是命中(框2602)。
[0829]
实例替代策略组件308确定命中通路(dp1通路)在受害者存储区218中的位置(框2604)。例如,替代策略组件308分析dp1的地址并识别受害者存储区218中包含所述地址的位置。
[0830]
实例替代策略组件308确定命中通路(dp1命中通路)是否匹配lru值(y)的位置(框2606)。例如,替代策略组件308可以将含有dp1的地址的命中通路的位置与分配给y的位置值进行比较。如果替代策略组件308确定位置匹配(例如,框2606返回值“是”),那么替代策略组件308切换lru值和下一个lru值的分配(框2608)。例如,第一数据路径dp0指针将被分配给下一个lru值(例如,位置y+1)而不是lru值(例如,位置y)。替代策略组件308切换分配以避免第一数据路径dp0逐出dp1命中通路。在一些实例中,替代策略组件308增加指示符以指示要被第一数据路径dp0逐出的受害者存储区214中的下一个lru通路。
[0831]
替代策略组件308将第一数据路径指向下一个lru值(y+1)(框2610)。例如,替代策略组件308将y+1的值(例如,下一个lru通路的位置)分配给第一数据路径dp0以用于逐出。
[0832]
实例替代策略组件308将指针值提供到复用器330a、330b(框2612)。例如,替代策略组件308将由dp0从受害者存储区218逐出的通路的位置(y+1)提供到复用器330a。在一些实例中,当命中通路不与lru值的位置匹配时(例如,框2506返回值“否”),替代策略组件308将指针值y和命中通路的位置提供到复用器330a、330b。例如,lru值到第一数据路径dp0的原始分配保持不变。
[0833]
实例替代策略组件308基于逐出增加y(框2614)。例如,如果lru值到数据路径的分配被切换(例如,dp0指针指向下一个lru值y+1),那么替代策略组件308将y增加二。否则,替代策略组件308将y增加一。以此方式,在下一个时钟循环期间,为替代策略组件308提供经更新y值。替代地和/或另外,替代策略组件308基于逐出增加第一和第二数据路径的指示符。
[0834]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2616)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2616返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2616返回值“否”),那么第三操作2600结束。
[0835]
转向图27,当实例标量接口502和实例向量接口504确定第一和第二数据路径不是有效事务时(例如,框2402返回值“否”),实例标量接口502和实例向量接口504确定是否第一数据路径有效而第二数据路径无效(框2702)。例如,标量接口502确定第一数据路径dp0是否正存取(例如,请求读取或写入操作)受害者存储区218,并且向量接口504确定第二数据路径dp1是否未尝试存取受害者存储区218。
[0836]
当接口502、504确定第一数据路径是有效事务并且第二数据路径是无效事务时(例如,框2702返回值“是”),替代策略组件308从命中
‑
未命中比较逻辑306a获得结果(框2704)。例如,替代策略组件308获得指示第一数据路径存取是在标签ram 210中具有匹配地址还是在标签ram 210中不具有匹配地址的结果。实例替代策略组件308确定结果是否指示第一数据路径是命中(框2706)。如果替代策略组件308确定第一数据路径dp0的地址命中标签ram 210中的地址(例如,框2706返回值“是”),那么最近最少使用的值y保持不变(框
2708)。例如,由于第一数据路径不需要逐出数据,因此lru值不需要改变。
[0837]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2710)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2710返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2710返回值“否”),那么第一操作2700结束。
[0838]
当实例替代策略组件308确定结果未指示第一数据路径是命中(例如,框2706返回值“否”)时,那么第一数据路径是未命中(框2712)。
[0839]
实例替代策略组件308将第一数据路径指向lru通路(y)(框2714)。例如,替代策略组件308将受害者存储区218中y的位置分配给dp0以用于逐出。
[0840]
实例替代策略组件308将指针值提供到第一复用器330a(框2716)。例如,替代策略组件308将lru通路的位置提供到第一复用器330a以用于逐出所述通路。
[0841]
实例替代策略组件308增加y(框2718)。例如,替代策略组件308将lru通路更新到受害者存储区218中的下一个位置(例如,y+1)。替代地和/或另外,替代策略组件308增加第一和第二数据路径的指示符。
[0842]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2720)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2720返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2720返回值“否”),那么第一操作2700结束。
[0843]
转向图28,当实例标量接口502和实例向量接口504确定第一数据路径不是有效事务而第二数据路径是有效事务时(例如,框2702返回值“否”),实例标量接口502和实例向量接口504确定第一数据路径无效而第二数据路径有效(框2802)。例如,标量接口502确定第一数据路径dp0未存取(例如,请求读取或写入操作)受害者存储区218,并且向量接口504确定第二数据路径dp1是否正存取受害者存储区218。
[0844]
替代策略组件308从命中
‑
未命中比较逻辑306b获得结果(框2804)。例如,替代策略组件308获得指示第二数据路径存取是在标签ram 210中具有匹配地址还是在标签ram 210中不具有匹配地址的结果。
[0845]
实例替代策略组件308确定结果是否指示第二数据路径是命中(框2806)。如果替代策略组件308确定第二数据路径dp1的地址命中标签ram 210中的地址(例如,框2806返回值“是”),那么最近最少使用的值y保持不变(框2808)。例如,由于第二数据路径不需要逐出数据,因此lru值不需要改变。
[0846]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2810)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2810返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2810返回值“否”),那么第一操作2700结束。
[0847]
当实例替代策略组件308确定结果未指示第二数据路径是命中(例如,框2806返回值“否”)时,那么第二数据路径是未命中(框2812)。
[0848]
实例替代策略组件308将第二数据路径指向lru通路(y)(框2814)。例如,替代策略组件308将受害者存储区218中y的位置分配给dp1以用于逐出。
[0849]
实例替代策略组件308将指针值提供到第二复用器330b(框2816)。例如,替代策略组件308将lru通路的位置提供到第二复用器330b以用于逐出所述通路。
[0850]
实例替代策略组件308增加y(框2818)。例如,替代策略组件308将lru通路更新到受害者存储区218中的下一个位置(例如,y+1)。替代地和/或另外,替代策略组件308增加第一和第二数据路径的指示符。
[0851]
实例替代策略组件308确定是否已经接收到新时钟循环上的事务(框2820)。例如,如果替代策略组件308获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2820返回值“是”),那么控制返回到图24的框2402。如果替代策略组件308没有获得对应于与先前存取不同的事务(例如,存取)的命中
‑
未命中结果(例如,框2820返回值“否”),那么第一操作2800结束。
[0852]
机器可读指令2400、2500、2600、2700和2800对应于图6的第一表602。
[0853]
图29a、图29b
‑
1和图29b
‑
2是结合以上描述表示可由图1
‑
5的l1高速缓存110执行以基于数据路径的分配状态在受害者存储区214中执行lru增加的实例机器可读指令2900的实例流程图。
[0854]
机器可读指令2900开始于框2902,在此替代策略组件308将第一数据路径分配指针初始化到相等的位置y。例如,替代策略组件308将最近未由cpu 102使用的具有位置y的受害者存储区218的一部分分配给lru值。在此类实例中,当第一数据路径dp0要分配时,受害者存储区218从lru值(例如,位置y)逐出数据。替代策略组件308将第二数据路径分配指针初始化到相等的位置y+1(框2904)。例如,替代策略组件308将最近未由cpu 102使用的具有位置y+1的受害者存储区218的一部分分配给下一个lru值。在此类实例中,当第二数据路径dp1要分配时,受害者存储区218从下一个lru值(例如,位置y+1)逐出数据。
[0855]
替代策略组件308确定第一和第二数据路径是有效事务(框2906)。例如,cpu 102在两个数据路径上提供指令。
[0856]
替代策略组件308确定第一数据路径dp0是否在受害者存储区218中命中并且第二数据路径dp1是否要分配(框2908)。如果第一数据路径dp0命中受害者存储区218并且第二数据路径dp1在向受害者存储区218分配(例如,框2908返回值“是”),那么替代策略组件308确定命中位置(dp0命中通路)在受害者存储区218中的位置(框2910)。例如,替代策略组件308识别dp0的地址在受害者存储区218中的何处。
[0857]
替代策略组件308确定命中位置是否等于第二数据路径分配指针的位置(y+1)(框2912)。例如,替代策略组件308确定dp0的地址是否与y+1的位置匹配。如果位置确实匹配(例如,框2912返回值“是”),那么替代策略组件308将第二数据路径分配指针更新到相等的位置y(框2914)。例如,替代策略组件308将第二数据路径分配指针的分配从y+1切换到y以避免逐出dp0指令上请求的数据。
[0858]
高速缓存控制器220执行第一事务和第二事务(框2916)。例如,高速缓存控制器220在位置y+1读取/写入dp0的数据并且从受害者存储区218中的位置y逐出数据。
[0859]
替代策略组件308将第一数据路径分配指针增加一(框2918)。例如,由于高速缓存控制器220从位置y而不是y+1逐出数据,因此替代策略组件308只需要将lru值更新为下一
个lru值(y+1)。
[0860]
如果命中位置和第二数据路径分配指针不匹配(例如,框2912返回值“否”),那么高速缓存控制器220执行第一事务和第二事务(框2920)。例如,替代策略组件308确定y+1包含可用于逐出的数据,且因此,第二数据路径分配指针可以从所述位置逐出数据,而第一数据路径dp0从命中位置读取/写入数据。
[0861]
替代策略组件308将第一数据路径分配指针增加二(框2922)。例如,由于高速缓存控制器220从位置y+1逐出数据,因此替代策略组件308将lru值y更新到被逐出位置之后的位置(例如,lru值=y+2且下一个lru值=y+3)。
[0862]
如果替代策略组件308确定框2908的条件不成立(例如,框2908返回值“否”),那么替代策略组件308确定第一数据路径是否要分配且第二数据路径是否命中(框2924)。例如,替代策略组件308确定第二数据路径是否命中受害者存储区218中的位置且主存储区214是否在第一数据路径dp0上分配数据。
[0863]
如果替代策略组件308确定第一数据路径要分配且第二数据路径命中(例如,框2924返回值“是”),那么替代策略组件308确定命中位置(dp2通路)在受害者存储区218中的位置(框2926)。例如,替代策略组件308确定第二数据路径从受害者存储区218读取/写入数据的位置。
[0864]
转向图29b
‑
1,替代策略组件308确定命中位置是否等于位置y(框2928)。例如,替代策略组件308确定第一数据路径分配指针是否指向存储命中数据的相同位置。
[0865]
如果替代策略组件308确定位置匹配(例如,框2928返回值“是”),那么替代策略组件308将第一数据路径分配指针更新到相等的位置y+1(框2930)。例如,替代策略组件308切换lru值和下一个lru值的分配以避免第一数据路径从受害者存储区218逐出命中数据。
[0866]
高速缓存控制器220执行第一事务和第二事务(框2932)。例如,高速缓存控制器220从位置y读取/写入数据并逐出位置y+1的数据。替代策略组件308将指针y增加两个位置(框2934)。例如,替代策略组件308将lru位置更新到最近逐出的位置之后的位置(例如,在此实例中,最近逐出的位置是y+1,因此lru值增加二以等于y+2)。
[0867]
如果替代策略组件308确定命中位置不与最初分配的第一数据路径指针(y)的位置匹配(例如,框2928返回值“否”),那么高速缓存控制器220执行第一事务和第二事务(框2936)。例如,替代策略组件308确定y包含可用于逐出的数据,且因此,第一数据路径分配指针可以从所述位置逐出数据,而第二数据路径dp1从命中位置读取/写入数据。
[0868]
替代策略组件308将第一数据路径分配指针增加一个位置(框2938)。例如,由于高速缓存控制器220从位置y逐出数据,因此替代策略组件308将lru值y更新到逐出位置之后的位置。以此方式,替代策略组件308在下一个时钟循环期间包含经更新lru值和经更新下一个lru值。
[0869]
如果图29a的框2924的条件不成立(例如,当第一数据路径不分配而第二数据路径命中时,框2924返回值“否”),那么控制移至图29b
‑
2,其中替代策略组件308确定两个数据路径要分配(框2940)。例如,如果发生两次读取未命中,那么主存储区214将来自主存储区214的两条线分配到受害者存储区218。
[0870]
以此方式,高速缓存控制器220执行第一事务和第二事务(框2942)。例如,高速缓存控制器220利用第一数据路径dp0从lru位置(y)逐出数据并且利用第二数据路径dp1从下
一个lru位置(y+1)逐出数据。
[0871]
替代策略组件308将第一数据路径分配指针增加二(框2944)。例如,替代策略组件308将位置y增加两个位置,因为数据是从y+1被逐出。在一些实例中,当lru值增加一个值时,下一个lru值同时增加相同的值。因此,第一数据路径分配指针和第二数据路径分配指针始终指向更新后的准确逐出位置。
[0872]
机器可读指令2900对应于图6的第二表604。
[0873]
图30是表示可由图1
‑
5的实例l1高速缓存110执行以执行仲裁逻辑来执行如上所述的读取、修改或写入操作的实例机器可读指令3000的实例流程图。虽然结合图1
‑
5的l1高速缓存110来描述图30的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图30的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)使用图30的指令。
[0874]
图30的机器可读指令3000开始于框3002,在此l1高速缓存110从耦合到硬件的接口获得存储指令。例如,图3a
‑
3d的地址处理组件302a
‑
c可以从标量接口获得第一存储指令1018,从存储器接口获得第二存储指令1020,和/或从向量接口获得第三存储指令1022。替代地,图3a
‑
3d的地址处理组件302a
‑
c可以从标量接口获得第一存储指令1018b,从存储器接口获得第二存储指令1020b,和/或从图10b的向量接口获得第三存储指令1022b。
[0875]
在框3004,l1高速缓存110基于存储指令生成事务数据。例如,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以生成图10a的第一事务数据、第二事务数据和/或第三事务数据。替代地,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以生成图10b的第一事务数据、第二事务数据和/或第三事务数据。下面结合图31描述可用于实施框3004的实例过程。
[0876]
在框3006,l1高速缓存110确定是否基于事务数据识别了读取操作。例如,地址处理组件302a
‑
c可以确定第一存储指令1018、第二存储指令1020或第三存储指令1022中的至少一个包含对读取操作进行服务的请求(例如,rd_bank_req[i]的值指示读取请求、rd_bank_req[i]的逻辑高信号等)。在此类实例中,可以基于存储指令1018、1020、1022中包含的r/w数据来确定读取操作请求。替代地,地址处理组件302a
‑
c可以确定第一存储指令1018b、第二存储指令1020b或第三存储指令1022b中的至少一个包含对读取操作进行服务的请求(例如,rd_bank_req[i]的值指示读取请求、rd_bank_req[i]的逻辑高信号等)。在此类实例中,可以基于图10b的存储指令1018b、1020b、1022b中包含的r/w数据来确定读取操作请求。
[0877]
如果在框3006,l1高速缓存110确定没有基于事务数据识别的读取操作,那么控制进行到框3014以调用第二仲裁逻辑以将数据写入存储队列。如果在框3006,l1高速缓存110确定存在基于事务数据识别的至少一个读取操作,那么在框3008,l1高速缓存110调用第一仲裁逻辑以在存储队列或存储区中的至少一个中定位用于读取操作的数据。例如,地址处理组件302a
‑
c可以调用第一仲裁逻辑1008以在主要高速缓存存储队列212或主存储区214中的至少一个中定位用于读取操作的数据。替代地,地址处理组件302a
‑
c可以调用第一仲裁逻辑1008b以在受害者高速缓存存储队列216或受害者存储区218中的至少一个中定位用于读取操作的数据。下面结合图20描述可执行以实施框3008的实例过程。
[0878]
在框3010,l1高速缓存110识别所定位数据的最新版本。例如,l1高速缓存110可以将来自主要高速缓存存储队列212的所请求数据的第一版本与来自主存储区214的所请求数据的第二版本进行比较,并基于所述比较确定第一版本比第二版本更新。替代地,l1高速缓存110可以将来自受害者高速缓存存储队列216的所请求数据的第一版本与来自受害者存储区218的所请求数据的第二版本进行比较,并基于所述比较确定第一版本比第二版本更新。
[0879]
在框3012,l1高速缓存110将所定位数据的最新版本递送到存储队列以对读取和写入数据执行修改操作。例如,主要高速缓存存储队列212可以将所请求数据的第一版本递送和/或以其它方式传输到主要高速缓存存储队列212以对所请求数据和要写入的数据执行修改操作。替代地,受害者高速缓存存储队列216可以将所请求数据的第一版本递送和/或以其它方式传输到受害者高速缓存存储队列216以对所请求数据和要写入的数据执行修改操作。
[0880]
在框3014,l1高速缓存110调用第二仲裁逻辑以将数据写入存储队列或存储区。例如,第一仲裁逻辑1008可以向第二仲裁逻辑1010传输指令以将wdata或其一部分写入主要高速缓存存储队列212或主存储区214中的至少一个。替代地,第一仲裁逻辑1008b可以向第二仲裁逻辑1010b传输指令以将wdata或其部分写入图10b的受害者高速缓存存储队列216或受害者存储区218中的至少一个。响应于在框3014调用第二仲裁逻辑以将数据写入存储队列或存储区,图30的实例机器可读指令3000结束。
[0881]
图31是如上所述可由图1
‑
5的实例l1高速缓存110执行以基于存储指令生成事务数据的实例机器可读指令3100的实例流程图。图31的流程图可以是图30的机器可读指令3004的实例实施方案。虽然结合图1
‑
5的l1高速缓存110来描述图31的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图31的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者高速缓存存储队列216、受害者存储区218等)使用图31的指令。
[0882]
机器可读指令3100开始于框3102,在此l1高速缓存110基于数据存储组的数目从存储指令中提取写入数据。例如,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以基于主要高速缓存存储队列212和/或主存储区214被分成的数据组的数量从存储指令1018、1020、1022中提取wdata。在此类实例中,响应于主要高速缓存存储队列212具有16个数据组,高速缓存线可以是64位,并且因此可以以64位块提取wdata。替代地,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以基于受害者高速缓存存储队列216和/或受害者存储区218被分成的数据组的数量从图10b的存储指令1018b、1020b、1022b中提取wdata。在此类实例中,响应于受害者高速缓存存储队列216具有16个数据组,高速缓存线可以是64位,并且因此可以以64位块提取wdata。
[0883]
在框3104,l1高速缓存110旋转写入数据以生成经旋转写入数据。例如,地址处理组件302a
‑
c可以旋转图3a
‑
3d的第一存储指令902的cpu写入数据以生成图9的经旋转数据904。
[0884]
在框3106,l1高速缓存110基于存储指令确定字节启用数据。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018、1020、1022中包含的byten数据确定图
10a的byten/bank[i]数据。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018b、1020b、1022b中包含的byten数据确定图10b的byten/bank[i]数据。
[0885]
在框3108,l1高速缓存110基于存储指令确定数据存取操作数据大小。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018、1020、1022中包含的size数据来确定要读取、写入和/或修改的数据的数据大小。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018b、1020b、1022b中包含的size数据来确定要读取、写入和/或修改的数据的数据大小。
[0886]
在框3110,l1高速缓存110基于存储指令确定数据存储地址。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018、1020、1022中包含的addr数据来确定主要高速缓存存储队列212的对应组的ms_addr[i]和/或主存储区214的对应组的stq_addr[i]地址。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以基于存储指令1018b、1020b、1022b中包含的addr数据来确定受害者高速缓存存储队列216的对应组的vs_addr[i]和/或受害者存储区218的对应组的stq_v_addr[i]地址。
[0887]
在框3112,l1高速缓存110将数据存取操作数据大小和数据存储地址映射到要从中读取的第一数量的数据组。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以将数据存取操作大小和数据存储地址映射到零或多组主要高速缓存存储队列212、零或多组主存储区214等,以生成图10a的rd_bank_req[i]。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以将数据存取操作大小和数据存储地址映射到零或多组受害者高速缓存存储队列216、零或多组受害者存储区218等,以生成图10b的rd_bank_req[i]。
[0888]
在框3114,l1高速缓存110将数据存取操作数据大小和数据存储地址映射到要进行写入的第二数量的数据组。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以将数据存取操作大小和数据存储地址映射到零或多组主要高速缓存存储队列212、零或多组主存储区214等,以生成图10a的wr_bank_req[i]。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以将数据存取操作大小和数据存储地址映射到零或多组受害者高速缓存存储队列216、零或多组受害者存储区218等,以生成图10b的wr_bank_req[i]。
[0889]
在框3116,l1高速缓存110基于第一数量、第二数量、字节启用数据或写入数据中的至少一个生成事务数据。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以生成图10a的第一事务数据(transaction_dp0[i])、第二事务数据(transaction_dma[i])和第三事务数据(transaction_dp1[i])。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以生成图10b的第一事务数据(transaction_dp0[i])、第二事务数据(transaction_dma[i])和第三事务数据(transaction_dp1[i])。响应于在框3116基于第一数量、第二数量、字节启用数据或写入数据中的至少一个生成事务数据,控制返回到图30的机器可读指令3000的框3006以确定是否基于事务数据识别了读取操作。
[0890]
图32是如上所述可由图1
‑
5的实例l1高速缓存110执行以调用第一仲裁逻辑在存储队列或存储区中的至少一个中定位用于读取操作的数据的实例机器可读指令3200的实例流程图。图32的流程图可以是图30的机器可读指令3008的实例实施方案。虽然结合图1
‑
5的l1高速缓存110来描述图32的指令,但是也可结合任何类型的高速缓存中的任何类型的存储区来描述指令。结合l1高速缓存110的主要部分(例如,主要高速缓存存储队列212、主存储区214等)来描述图32的指令。当然,也可结合l1高速缓存110的受害者侧(例如,受害者
高速缓存存储队列216、受害者存储区218等)使用图32的指令。
[0891]
机器可读指令3200开始于框3202,在此l1高速缓存110选择所关注数据存储组进行处理。例如,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以选择图10a的第一组1002进行处理。替代地,图3a
‑
3d的地址处理组件302a
‑
c和/或组处理逻辑303可以选择图10b的第一组1002b进行处理。
[0892]
在框3204,l1高速缓存110将选定数据存储组与来自接口的读取组请求中包含的数据存储组进行比较。例如,第一仲裁逻辑1008可以将来自标量接口、存储器接口和向量接口的rd_bank_req[i]的相应一个中识别的组与第一组1002(例如,stq[0]、ms[i]等)进行比较。替代地,第一仲裁逻辑1008b可以将来自标量接口、存储器接口和向量接口的rd_bank_req[i]的相应一个中识别的组与第一组1002b(例如,stq_v[0]、vs[i]等)进行比较。
[0893]
在框3206,l1高速缓存110确定是否至少一个接口请求存取选定数据存储区。如果在框3206,l1高速缓存110确定没有接口请求存取选定数据组,那么控制进行到框3208以确定选定数据存储组没有用于读取操作。响应于在框3208确定选定数据存储组没有用于读取操作,控制返回到框3202以选择另一个所关注数据存储组进行处理。
[0894]
如果在框3206,l1高速缓存110确定至少一个接口请求存取选定数据组,那么控制进行到框3210以确定是否有超过一个接口请求存取选定数据存储组。如果在框3210,l1高速缓存110确定只有一个接口请求存取选定数据存储组,那么控制进行到框3212以调用第一仲裁逻辑以将选定数据存储组分配给请求接口。响应于在框3212调用第一仲裁逻辑以将选定数据存储组分配给请求接口,控制返回到框3202以选择另一个所关注数据存储组进行处理。
[0895]
如果在框3210,l1高速缓存110确定超过一个接口请求存取选定数据存储组,那么控制进行到框3214以调用第一仲裁逻辑以将选定数据存储组分配给需要读取操作的请求接口。例如,当读取操作优先于写入操作时,第一仲裁逻辑1008可以将第一组1002分配给需要读取操作的接口之一。替代地,当读取操作优先于写入操作时,第一仲裁逻辑1008b可以将第一组1002b分配给需要读取操作的接口之一。
[0896]
在框3216,l1高速缓存110调用第一仲裁逻辑以通知第二仲裁逻辑需要写入操作的请求接口未被分配选定数据存储组。例如,如果标量数据路径请求写入操作和读取操作并且标量数据路径未被分配用于读取操作的第一数据组1002,那么第一仲裁逻辑1008可以指示第二仲裁逻辑1010不为标量数据路径分配第一数据组1002,并且因此停止和/或以其它方式阻止写入操作的执行,因为在时钟循环期间不会完成对应的读取操作。替代地,如果标量数据路径请求写入操作和读取操作并且标量数据路径未被分配用于读取操作的第一数据组1002b,那么第一仲裁逻辑1008可以指示第二仲裁逻辑1010b不为标量数据路径分配第一数据组1002b,并且因此停止和/或以其它方式阻止写入操作的执行,因为在时钟循环期间不会完成对应的读取操作。
[0897]
在框3218,l1高速缓存110确定是否选择另一个所关注数据存储组进行处理。例如,地址处理组件302a
‑
c和/或组处理逻辑303可以确定选择主要高速缓存存储队列212和主存储区214的第二组进行处理。替代地,地址处理组件302a
‑
c和/或组处理逻辑303可以确定选择受害者高速缓存存储队列216和受害者存储区218的第二组进行处理。如果在框3218,l1高速缓存110确定选择另一个所关注数据存储组进行处理,那么控制返回到框3202
以选择另一个所关注数据存储组进行处理。如果在框3218,l1高速缓存110确定不选择另一个所关注数据存储组进行处理,那么控制返回到图30的机器可读指令3000的框3010以识别所定位数据的最新版本。
[0898]
图33是结合上述章节13表示可由图1
‑
5的实例l1高速缓存110执行以促进受害者存储区216中的读取
‑
修改
‑
写入操作的实例机器可读指令3300的实例流程图。在图33中,受害者高速缓存存储队列216获得由cpu 102传输的(例如,通过高速缓存控制器220传输的)指示待重写的字或整个字的字节的写入指令。(框3302)。在本文描述的一些实例中,写入端口1126可以获得由cpu 102传输的写入指令。
[0899]
在框3304,受害者高速缓存存储队列216将待重写的字的部分的值传输到锁存器1102b。(框3304)。在一些实例中,锁存器1102b将待重写的字的部分的值传输到锁存器1102c。
[0900]
在框3306,受害者高速缓存存储队列216将与待重写的字的部分的位置相关联的地址值存储在未决存储地址数据存储区1116中。(框3306)。另外,标签ram 210将整个当前存储的字的读取指令(例如,读取请求)传输到受害者存储区218。(框3308)。在框3310,受害者高速缓存存储队列216确定是否已经存在cpu 102或高速缓存控制器220的后续时钟循环。(框3310)。在本文描述的一些实例中,锁存器1102c确定是否已经存在cpu 102或高速缓存控制器220的后续时钟循环。响应于确定尚不存在cpu 102或高速缓存控制器220的后续时钟循环,(例如,框3310的控制返回结果“否”),过程等待。
[0901]
替代地,响应于确定已经存在cpu 102或高速缓存控制器220的后续循环(例如,框3310的控制返回结果“是”),读取
‑
修改
‑
写入合并组件1108获得存储在锁存器1102c中的字的部分(例如,字节)的值。(框3312)。另外,读取
‑
修改
‑
写入合并组件1108获得由ecc逻辑312传输的整个当前存储的字。(框3314)。以此方式,读取
‑
修改
‑
写入合并1108识别待更新的当前存储的字中的字节的地址。一旦读取
‑
修改
‑
写入合并组件1108识别和/或以其它方式获得(a)来自锁存器1102c的要更新的当前存储的字的部分的值(例如,字节值、位值等)和(b)来自ecc逻辑312的当前存储字,读取
‑
修改
‑
写入合并组件1108就用从锁存器1102c获得的当前存储的字的部分的值写入(例如,替代)当前存储的字的部分。(框3316)。例如,读取
‑
修改
‑
写入合并组件1108将字的部分的值写入与字中字的部分相对应的地址值。
[0902]
在框3318,受害者高速缓存存储队列216基于字生成错误检测码,所述错误检测码将与字一起存储。(框3318)。在本文描述的一些实例中,ecc生成器1112基于字生成错误检测码,所述错误检测码将与字一起存储。
[0903]
框3318的控制可以响应于cpu 102或高速缓存控制器220的额外后续时钟循环而被执行。
[0904]
作为响应,受害者高速缓存存储队列216确定是否获得额外写入指令。(框3322)。如果受害者高速缓存存储队列216确定获得另一写入指令(例如,框3322的控制返回结果“是”),那么过程返回到框3302。替代地,在受害者高速缓存存储队列216确定未获得另一写入指令的情况下(例如,框3322的控制返回结果“否”),过程3300可以等待直到阈值超时周期出现,从而结束过程3300。
[0905]
图34是构造成执行图12
‑
33的指令以实施图1
‑
5和10
‑
11的l1高速缓存110的实例处理器平台3400的框图。处理器平台1000可以是例如服务器、个人计算机、工作站、自学习
机(例如,神经网络)、移动装置(例如手机、智能手机、例如ipad
tm
的平板电脑等)、个人数字助理(pda)、互联网设备、游戏机或任何其它类型的计算装置。
[0906]
所示实例的处理器平台3400包含处理器3412。所示实例的处理器3412是硬件。例如,处理器3412可由一或多个集成电路、逻辑电路、微处理器、gpu、dsp或来自任何期望系列或制造商的控制器来实施。硬件处理器可以是基于半导体(例如,基于硅)的装置。在此实例中,处理器实施图1
‑
5和10
‑
11的实例l1高速缓存110的任何元件。
[0907]
所示实例的处理器3412包含本地存储器3413(例如,高速缓存)。所示实例的处理器3412经由总线3418与包含易失性存储器3414和非易失性存储器3416的主存储器通信。易失性存储器3414可由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、动态随机存取存储器和/或任何其它类型的随机存取存储器装置实施。非易失性存储器3416可由快闪存储器和/或任何其它期望类型的存储器装置来实施。对主存储器3414、3416的存取由存储器控制器控制。
[0908]
所示实例的处理器平台3400还包含接口电路3420。接口电路3420可通过例如以太网接口、通用串行总线(usb)、接口、近场通信(nfc)接口和/或pci高速接口的任何类型的接口标准来实施。
[0909]
在所示实例中,一或多个输入装置3422连接到接口电路3420。输入装置3422允许用户将数据和/或命令输入到处理器3412中。输入装置可由例如音频传感器、麦克风、相机(静止或视频)、键盘、按钮、鼠标、触摸屏、触控板、轨迹球、等值点和/或语音识别系统实施。
[0910]
一或多个输出装置3424也连接到所示实例的接口电路3420。输出装置3424可由例如显示装置(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器(lcd)、阴极射线管显示器(crt)、就地切换(ips)显示器、触摸屏等)、触觉输出装置、打印机和/或扬声器实施。因此,所示实例的接口电路3420包含图形驱动卡、图形驱动芯片和/或图形驱动处理器。
[0911]
所示实例的接口电路3420还包含例如传输器、接收器、收发器、调制解调器、住宅网关、无线接入点和/或网络接口之类的通信装置以促进与外部机器(例如,任何种类的计算装置)经由网络3426的数据交换。通信可以经由例如以太网连接、数字用户线(dsl)连接、电话线连接、同轴电缆系统、卫星系统、现场无线系统、蜂窝电话系统等。
[0912]
所示实例的处理器平台3400还包含一或多个大容量存储装置3428,用于存储软件和/或数据。这种大容量存储装置3428的实例包含软盘驱动器、硬盘驱动器、压缩磁盘驱动器、蓝光磁盘驱动器、独立磁盘冗余阵列(raid)系统和数字多功能磁盘(dvd)驱动器。
[0913]
图12
‑
33的机器可执行指令3432可以存储在大容量存储装置3428、易失性存储器3414、非易失性存储器3416和/或例如cd或dvd的可移动非暂时性计算机可读存储媒体上。
[0914]
根据上述内容,应了解,已经描述了用于使用存储队列和数据转发促进1级数据高速缓存中的完全管线化读取
‑
修改
‑
写入支持的实例方法、设备和制品。所描述的方法、设备和制品通过减小数据高速缓存以减小计算系统的时延并提高计算机系统效率以减小计算机核心的压力来提高使用计算装置的效率。因此,所描述的方法、设备和制品涉及计算机运行的一或多个改进。
[0915]
尽管本文中已经描述了特定实例方法、设备和制品,但是此专利的覆盖范围不限于此。相反,此专利涵盖完全落入此专利权利要求范围内的所有方法、设备和制品。
[0916]
所附权利要求书在此通过这一引用并入到此具体实施方式中,其中每项权利要求
就其自身而言作为本说明书的单独实施例。