处理异步流水线的数据高速缓存未命中乱序的装置和方法

文档序号:6571354阅读:375来源:国知局
专利名称:处理异步流水线的数据高速缓存未命中乱序的装置和方法
技术领域
本发明一般地涉及改进的数据处理系统。更具体地说,本发明涉及处理异步流水线的数据高速缓存未命中乱序的装置和方法。
背景技术
大多数现代计算系统利用高速缓存来帮助加速数据传输和指令执行。这些临时高速缓存充当登台区域,其内容经常更改。高速缓冲存储器是桥接主存储器和微处理器芯片的处理器的存储体。高速缓冲存储器比主存储器快,并且允许以较高的速度执行指令以及读取和写入数据。
使用前瞻算法以块为单位将指令和数据从主存储器传输到高速缓存。例程中执行的指令越有序或者读取或写入的数据越有序,下一个所需项已在高速缓存中的可能性就越大,这产生更佳的性能。
一级(L1)高速缓存是内置在微处理器芯片中的存储体。L1高速缓存也称为“主高速缓存”,是离处理器最近的存储器。二级(L2)高速缓存是供给L1高速缓存的辅助登台区域。增加L2高速缓存的大小可以加速某些应用,但是对其他应用却无效。L2高速缓存可以内置在微处理器芯片中,例如,驻留在多芯片封装模块的单个芯片上或是主板上的单独芯片集(bank)。高速缓存通常为静态RAM(SRAM),而主存储器一般是各种动态RAM(DRAM)。
除了缓存数据和指令外,许多现代计算系统利用流水线来执行同时或并行的处理。通过将数据和/或指令移动到概念上的管道中且管道的所有级同时处理来重叠操作。例如,当正在执行一个指令时,计算机解码下一个指令。在向量处理器中,可以同时处理浮点运算中的几个步骤。
微处理器和流水线既可以是有序的也可以是乱序的。有序微处理器或流水线按照分配指令和数据的顺序对其进行处理。乱序微处理器或流水线可以按照不同于分配指令和数据的顺序对其进行处理。乱序执行体系结构获取要按特定顺序执行的写入和编译的代码,并在可能的情况下重新安排指令的顺序,以便在最大程度上利用处理器资源,执行所述指令,然后将它们排列回原始顺序,以便将结果写出到存储器。对于用户,执行过程看起来就像指令的有序顺序流进入处理器并且计算结果的同样的有序顺序流出现。只有处理器才知道实际执行程序指令的顺序。
当遇到L1数据高速缓存未命中(例如,响应于执行流水线中的加载指令)时,在有序微处理器中出现复杂的情况。由于有序微处理器需要有序地处理指令和数据,所以大多数有序微处理器立刻刷新未命中加载之后的指令。也就是说,流水线不会执行任何在未命中加载指令之后放置在流水线中的指令,因为假定这些指令与未命中加载指令相关或可能以其他方式修改与未命中加载指令关联的数据。
备选地,某些有序微处理器等待直到遇到对未命中的加载指令存在相关时才刷新流水线中的指令和数据。该方法执行起来较好,因为它允许执行未命中加载指令之后的不相关指令,尽管存在较早的未处理的指令,即,未命中加载指令,该指令必须稍后被再次执行。这导致有序处理器中出现乱序行为,因为当数据在L1数据高速缓存中出现时,必须重新发布未命中加载指令,实际上相对于程序流的其他部分是乱序的。
当加载指令必须经过多个流水线,且流水线彼此异步时,会出现其他复杂的情况。当由第一流水线完成地址生成和高速缓存访问,而由与第一流水线异步的第二流水线完成将数据置于架构的寄存器中时,会出现这种情况。当存在异常(有时很晚,它可能刷新异步流水线之一中的加载指令)时,会出现其他复杂的情况。

发明内容
鉴于上述说明,具有一种用于处理微处理器中的L1数据高速缓存未命中的改进机制是有利的。具有一种用于处理具有多个异步流水线的微处理器中的L1数据高速缓存未命中的改进机制将更有利。此外,具有一种处理L1数据高速缓存未命中且适应每个异步流水线中的异常的改进机制将是有利的。本发明的示例性实施例提供了此类改进机制。
对于示例性实施例,为相对于其他流水线异步的每个流水线,在微处理器中提供了加载表数据结构和加载目标缓冲区。所述加载目标缓冲区包括所述加载表数据结构和状态机,所述状态机用于根据从所述加载表数据结构确定的加载指令的当前状态来控制由流水线发布的加载指令的处理。
对于发送到两个或更多异步流水线的加载指令,示例性实施例的机制将加载标记(LTAG)标识符与所述加载指令关联。此LTAG用于跟踪多个流水线中的每个加载指令,以及用于对所述加载表数据结构进行索引以检索加载表表项。
在加载指令的正常操作下,与所述加载指令关联的数据在L1数据高速缓存中完全可用并使用第一流水线来从L1数据高速缓存进行检索。将检索的数据放置在由相应加载指令的LTAG索引的表项内的加载目标缓冲区的加载表数据结构中。所述加载目标缓冲区在加载数据写入寄存器堆之前实际上用作所述加载数据的重命名寄存器。相应的加载表被标记为“命中”,指示数据准备好且有效,现在可供第一流水线使用。当准备从第二流水线发布同一相应的加载指令时,使用其LTAG对所述加载目标缓冲区的加载表进行索引,并检索正确数据以加载到寄存器堆中。可以解除分配所述LTAG以供以后的加载指令使用,并将所述加载表中的相应表项标记为解除分配或“dealloc”。
当加载指令“未命中”加载/存储流水线中的L1数据高速缓存时,即,不能在正常时间将数据放置在加载目标缓冲区中,将由所述LTAG索引的加载表中的对应表项标记为“未命中”。通知加载未命中队列高速缓存“未命中”,并等待从L2高速缓存或其他存储器子系统回收数据。一旦从L2高速缓存或其他存储器子系统返回数据,就将所述数据放置在L1高速缓存中,并将所述数据与对应于加载指令的LTAG一起发送到加载目标缓冲区。这允许以任何顺序从L2高速缓存或其他存储器子系统回收加载数据,即,不必以与将数据请求发送到L2高速缓存或其他存储器子系统相同的顺序。如果回收的数据有效,则将相应的加载表表项标记为“命中”。
此时,指令流水线中对应的加载可以处于指令流水线中的任何位置。所述加载可能仍在指令流水线中或者它可能已尝试发布和访问加载表。对于第一种情况,完成回收操作时,在从指令流水线发布加载指令之前可以将对应的加载表表项从“未命中”更改为“命中”。从加载指令的角度,未命中永远不会发生,并且加载指令按照正常方式发布,使所述加载指令的数据加载到寄存器堆中。
当加载指令从指令流水线发布,并看到加载表中其相应的表项标记为“未命中”时,则消除发布加载指令的影响,并将加载指令保存在加载表中以备将来重新发布到指令流水线。所述加载表实际上在此用作加载未命中队列表项,直到加载数据变为可用为止。完成回收操作时,将加载表中的对应表项标记为“命中”,并将加载指令重新发布到指令流水线,它会像正常情况下那样运行。
在其他示例性实施例中,为加载表表项提供了用于判定加载指令是否由于异常而无效的机制。此外,在发布加载指令与解除分配LTAG及加载表表项之间提供了其他中间状态以便帮助处理新近的异常。
在一个示例性实施例中,提供了用于在具有指令流水线和加载/存储流水线的数据处理设备中处理加载指令的方法。所述方法可以包括接收加载指令,将所述加载指令与加载标记(LTAG)关联,将所述加载指令和所述LTAG发布到所述加载/存储流水线,以及尝试从第一高速缓存检索对应于所述加载指令的数据。判定所述尝试检索对应于所述加载指令的数据是导致高速缓存命中还是高速缓存未命中。可以根据所述LTAG和尝试检索对应于所述加载指令的数据的结果来生成加载目标缓冲区的加载表数据结构中的表项。
生成加载表数据结构中的表项可以包括生成由与加载指令关联的LTAG索引的加载表中的表项,以及根据判定尝试检索对应于加载指令的数据是导致高速缓存命中还是导致高速缓存未命中的结果将所述表项标记为高速缓存命中或高速缓存未命中。如果判定的结果指示高速缓存未命中,则所述方法还可以包括从存储器子系统回收对应于加载指令的数据和将回收的数据存储在加载表内的表项中。
从存储器子系统回收对应于加载指令的数据可以包括在加载未命中队列单元中维护标识与加载指令关联的LTAG的数据结构和与被回收的数据相对应的加载指令关联的加载地址。所述回收还可以包括根据加载未命中队列单元中的数据结构将回收的数据与加载指令相关联,以响应从存储器子系统回收数据。可以根据加载未命中队列单元中的数据结构内标识的加载指令的LTAG来将回收的数据存储在加载表内的表项中。
所述方法还可以包括只有当回收的数据有效时才将加载表中的表项标记为高速缓存命中。备选地,如果回收的数据无效,则将加载表中的表项标记为高速缓存未命中。
除了上述内容,所述方法还可以包括将加载指令和LTAG发布到指令流水线以及将加载指令从指令流水线发布到加载目标缓冲区。可以根据与已发布的加载指令关联的LTAG来标识加载表中对应于已发布的加载指令的表项。可以根据加载表中标识的表项是标记为高速缓存命中还是高速缓存未命中来判定是否将对应于加载指令的数据存储在寄存器堆中。
如果判定标识的表项标记为高速缓存命中,则可以将对应于加载指令的数据存储在寄存器堆中。将对应于加载指令的数据存储在寄存器堆中之后,可以解除分配LTAG和加载表中的表项。
如果判定标识的表项标记为高速缓存未命中,则可以消除从指令流水线发布加载指令的任何影响。如果判定加载表中标识的表项标记为高速缓存未命中,则可以将加载表中标识的表项更新为具有未决状态。
如果判定将加载表中标识的表项标记为高速缓存未命中,则可以将加载指令的表示存储在加载表的标识的表项中。根据标识的表项中的加载指令的表示,可以将加载指令重新发布到指令流水线,以响应从存储器子系统回收对应于加载指令的数据。
所述指令流水线和加载/存储流水线可以相对于彼此异步。所述数据处理设备可以是处理器并且可以是多处理器异构数据处理系统的一部分。所述多处理器异构数据处理系统可以包括控制处理器以及一个或多个协处理器。所述数据处理设备可以是所述多处理器异构数据处理系统中的所述控制处理器中的一个或多个处理器或是协处理器。
在其他示例性实施例中,提供了一种装置,所述装置包括发布单元、与所述发布单元相耦合的指令流水线、与所述发布单元相耦合的加载/存储流水线,以及与所述指令流水线和所述加载/存储流水线相耦合的加载目标缓冲区。所述发布单元可以接收加载指令,将所述加载指令与加载标记(LTAG)关联,以及将所述加载指令和LTAG发布到所述加载/存储流水线。所述加载/存储流水线可以尝试从一级高速缓存检索对应于所述加载指令的数据,并判定尝试检索对应于加载指令的数据是导致高速缓存命中还是导致高速缓存未命中。所述加载目标缓冲区可以根据所述LTAG和尝试检索对应于加载指令的数据的结果在所述加载目标缓冲区的加载表数据结构中生成表项。
所述加载目标缓冲区可以通过在由与加载指令关联的LTAG索引的加载表中生成表项来在加载表数据结构中生成表项。所述加载目标缓冲区还可以根据判定尝试检索对应于加载指令的数据是导致高速缓存命中还是导致高速缓存未命中的结果来将所述表项标记为高速缓存命中或高速缓存未命中。
所述装置还可以包括与所述加载/存储流水线相耦合的加载未命中队列单元。如果判定尝试检索对应于加载指令的数据是导致高速缓存命中还是导致高速缓存未命中的结果指示高速缓存未命中,则所述加载未命中队列可以从二级高速缓存回收对应于加载指令的数据,并将回收的数据存储在加载目标缓冲区的加载表内的表项中。所述加载未命中队列单元可以通过在加载未命中队列单元中维护标识与加载指令关联的LTAG的数据结构,以及与对应于回收的数据的加载指令关联的加载地址,来从二级高速缓存中回收对应于加载指令的数据。所述加载未命中队列单元可以根据加载未命中队列单元中的数据结构将回收的数据与加载指令相关联,以响应从二级高速缓存回收数据。根据在加载未命中队列单元内的数据结构中标识的加载指令的LTAG,可以将所述回收的数据存储在加载表内的表项中。
只有在回收的数据有效时,加载目标缓冲区才将加载表中的表项标记为高速缓存命中。如果回收的数据无效,则加载目标缓冲区将加载表中的表项标记为高速缓存未命中。
所述发布单元可以将加载指令和LTAG发布到指令流水线,并且所述指令流水线可以将加载指令发布到所述加载目标缓冲区。所述加载目标缓冲区可以根据与发布的加载指令关联的LTAG来标识对应于发布的加载指令的加载表中的表项。所述加载目标缓冲区可以根据将加载表中标识的表项标记为高速缓存命中还是高速缓存未命中,来判定是否将对应于加载指令的数据存储在寄存器堆中。
如果判定将标识的表项标记为高速缓存命中,则加载目标缓冲区可以将对应于加载指令的数据存储在寄存器堆中。在将对应于加载指令的数据存储在寄存器堆中之后,加载目标缓冲区可以启动解除分配LTAG和加载表中的表项。如果判定将加载表中标识的表项标记为高速缓存未命中,则加载目标缓冲区还可以启动消除从指令流水线发布加载指令的任何影响。如果判定将加载表中标识的表项标记为高速缓存未命中,则加载目标缓冲区还可以将加载表中标识的表项更新为具有未决状态。
此外,如果判定将加载表中标识的表项标记为高速缓存未命中,则加载目标缓冲区可以将加载指令的表示存储在加载表的标识的表项中。此外,加载目标缓冲区可以根据标识的表项中加载指令的表示来将加载指令重新发布到指令流水线,以响应从存储器子系统回收对应于加载指令的数据。
所述装置可以是多处理器异构数据处理系统的一部分。所述多处理器异构数据处理系统可以包括控制处理器以及一个或多个协处理器。所述装置可以是所述控制处理器中的一个或多个处理器或是协处理器。
在其他示例性实施例中,提供了包括具有计算机可读程序的计算机可用介质的计算机程序产品。当所述计算机可读程序在计算设备上执行时,可以使所述计算设备执行上述方法的各种操作。
本发明的这些和其他特征和优点将在以下对本发明的示例性实施例的详细说明中进行描述,或者鉴于以下对本发明的示例性实施例的详细说明,本发明的这些和其他特征和优点将对本领域的技术人员变得显而易见。


在所附权利要求中说明了被认为是本发明特性的新颖特征。但是,当结合附图阅读时,通过参考以下对示例性实施例的详细说明,可以最佳地理解发明本身及其优选使用方式、进一步的目的和优点,这些附图是图1是其中可以实现示例性实施例的示例方面的信息处理设备的示意图;图2是示出示例性实施例的主要元素的操作的示例性方块图;图3A是示出根据示例性实施例的加载目标缓冲区的加载表的示意图;图3B是示出根据示例性实施例的图3A的加载目标缓冲区的加载表中的表项的状态的示例性状态图;图4A是示出根据另一个示例性实施例的加载表的示意图;图4B是示出根据示例性实施例的图4A的加载表中的表项的状态的示例性状态图;图5是示出根据一个示例性实施例的将新的“I”状态包括在图4B的状态图中的示例性状态图;图6是示出根据一个示例性实施例的加载/存储流水线的示例性操作的流程图;图7是示出根据一个示例性实施例的指令流水线的示例性操作的流程图。
具体实施例方式
示例性实施例提供了处理异步流水线的数据高速缓存未命中乱序的装置和方法。示例性实施例的机制可以在任何具有数据高速缓存以及两个或更多个异步流水线的微处理器中实现。下文的图1提供了其中可以实现示例性实施例的示例方面的数据处理系统的一个实例。提供图1只是作为实例,并非旨在说明或暗示任何有关其中可以实现本发明的特定体系结构的限制。在不偏离本发明的精神和范围的情况下,可以对所示的体系结构做出许多修改。
图1是其中可以实现示例性实施例的示例方面的数据处理系统的示例性方块图。图1中示出的示例性数据处理系统是单元宽带引擎体系结构(CBEA)数据处理系统的实例。虽然CBEA将用于说明示例性实施例,但是本发明并不限于此,在阅读了以下说明后,这对本领域的技术人员将是显而易见的。
如图1所示,CBEA100包括Power处理器单元(PPE)110,所述单元具有处理器(PPU)116及其L1和L2高速缓存112和114;以及多个协处理器单元(SPE)120-134,每个协处理器单元都具有其自己的协处理器单元(SPU)140-154、存储器流控制155-162、局部存储器或存储(LS)163-170以及总线接口单元(BIU单元)180-194,总线接口单元例如可以是直接存储器存取(DMA)、存储器管理单元(MMU)和总线接口单元的组合。还提供了高带宽内部单元互连总线(EIB)196、总线接口控制器(BIC)197和存储器接口控制器(MIC)198。
CBEA100可以是片上系统,以便在单个微处理器芯片上提供图1中描述的每个单元。此外,CBEA100是异构处理环境,其中每个SPU都可以从系统中的每个其他SPU接收不同的指令。此外,SPU的指令集不同于PPU的指令集,例如,PPU可以执行基于精简指令集计算机(RISC)的指令,而SPU执行向量化的指令。
SPE120-134彼此耦合并通过EIB196耦合到L2高速缓存114。此外,SPE120-134通过EIB196耦合到MIC198和BIC197。MIC198提供了到共享存储器199的通信接口。BIC197提供了CBEA100与其他外部总线和设备之间的通信接口。
PPE110是双线程的PPE110。此双线程的PPE110和8个SPE120-134的组合使得CBEA100能够处理10个同时的线程和多于128个的未完成存储器请求。PPE110充当处理大多数计算工作负荷的其他8个SPE120-134的控制器。例如,PPE110可用于运行常规的操作系统,而SPE120-134执行向量化的浮点代码执行。
SPE120-134包括协处理单元(SPU)140-154、存储器流控制单元155-162、局部存储器或存储163-174以及接口单元180-194。在一个示例性实施例中,局部存储器或存储163-174包括256KB指令和数据存储器,该存储器对PPE110是可见的并且可以由软件直接寻址。
PPE110可以使用小程序或线程来加载SPE120-134,将SPE链接在一起以处理复杂运算中的每个步骤。例如,结合了CBEA100的机顶盒可以加载程序以便读取DVD、进行视频和音频解码和显示,并且数据将在SPE之间传输,直到在输出显示上结束。在4GHz处,每个SPE120-134提供理论上32GFLOPS的性能,而PPE110具有类似级别的性能。
存储器流控制单元(MFC)155-162用作SPU到系统的其余部分和其他单元的接口。MFC155-162提供了用于在主存储与局部存储163-174之间进行数据传输、保护和同步的主要机制。对于处理器中的每个SPU都逻辑地存在MFC。某些实施方式可以在多个SPU之间共享单个MFC的资源。在这种情况下,为MFC定义的所有工具和命令都必须看起来独立于每个SPU的软件。共享MFC的影响限于实现相关的工具和命令。
示例性实施例提供了处理以乱序方式出现的异步流水线数据高速缓存未命中的机制。例如,示例性实施例的机制可以在图1示出的体系结构中的任何SPU或PPU中实现。所述机制包括每个异步流水线的加载表数据结构和加载目标缓冲区单元。此加载表数据结构用于控制由数据高速缓存未命中导致的加载指令的乱序处理。
图2是示出示例性实施例的主要元素的操作的示例性方块图。图2中示出的元素可以存在于图1示出的包括一个或多个SPU和PPU的任何或所有处理器中。因此,可以作为例如集成电路芯片、片上系统、多芯片封装等的一部分来提供图2中示出的各个元素。
如图2所示,示例性实施例的机制的主要元素包括发布单元210、用于从数据高速缓存(如L1数据高速缓存)加载数据和将数据存储到其的第一流水线220,以及用于指令执行的第二流水线230。此外,还提供了具有加载表数据结构250、加载未命中队列单元260,以及寄存器堆存储设备270的加载目标缓冲区(LTB)240。
根据示例性实施例,通过发布单元210将加载指令发布到两个异步流水线220和230。发布单元210在将加载指令分发到异步流水线220和230时生成加载标记(LTAG)标识符并将其与所述加载指令进行关联。此LTAG用于跟踪多个流水线220和230中的每个加载指令,并且用于对加载目标缓冲区240的加载表数据结构250进行索引以检索相应的加载表表项。
在加载指令的正常操作下,与所述加载指令关联的数据在L1数据高速缓存280中完全可用并使用加载/存储流水线220来从L1数据高速缓存280进行检索。将检索的数据放置在由相应加载指令的LTAG索引的表项内的加载目标缓冲区240的加载表数据结构250中。加载目标缓冲区250在加载数据写入寄存器堆存储设备270之前实际上用作所述加载数据的重命名寄存器。相应的加载表表项被标记为“命中”,指示数据准备好且有效,现在可供第二流水线230使用。当准备从第二流水线230发布同一相应的加载指令时,使用其LTAG对加载目标缓冲区240的加载表250进行索引,并检索正确数据以加载到寄存器堆存储设备270中。可以解除分配所述LTAG以供以后的加载指令使用,并将加载表250中的相应表项标记为解除分配或“dealloc”。
虽然当数据在L1数据高速缓存280中可用时此操作相当简单,但是当加载指令“未命中”第一流水线220中的L1数据高速缓存280时(即,当从L1数据高速缓存280不能提供数据并且必须从系统存储器或其他存储装置将数据重新加载到L1数据高速缓存280时),将出现复杂的情况。在这种情况下,将加载指令发送到流水线220和230两者。尝试通过加载/存储流水线220从L1数据高速缓存280检索对应于加载指令的数据。如果L1数据高速缓存280不能提供数据,则加载/存储流水线220将“未命中”消息发送到加载目标缓冲区250。将根据加载指令的LTAG标识的加载表数据结构240中的相应表项标记为“未命中”,从而将此表项中的数据标识为无效。
此外,流水线220将消息发送到加载未命中队列(LMQ)单元260,通知LMQ单元260高速缓存未命中。LMQ单元260请求并等待从存储器子系统的组件(如L2高速缓存290)检索或回收数据。应当理解,可以执行回收数据而不必考虑数据源自存储器子系统内的何处以及不限于使用L2高速缓存290。例如,可以从主系统存储器等直接执行数据的回收。为了说明示例性实施例,假定执行回收操作时考虑L2高速缓存290,但是本发明不限于此。
一旦将加载指令的数据返回到LMQ单元260,即,使用L2高速缓存290完成了回收操作,就自动将返回的数据放置在L1高速缓存中,并且还将所述数据与对应于从L2高速缓存或其他存储器子系统回收的加载指令的LTAG一起从LMQ单元260发送到加载目标缓冲区250。
LMQ单元260或L2高速缓存290跟踪与每个L2回收关联的LTAG,具体取决于特定的实施方式。换句话说,LMQ单元260或L2高速缓存290可以为从属于L2回收操作的每个加载指令维护标识LTAG、加载地址等的数据结构。当返回数据时,LMQ单元260或L2高速缓存290可以使用加载地址将数据与数据结构中的特定表项相关联。然后可以与数据一起返回相应的LTAG。这允许以任何顺序从L2高速缓存290回收加载数据,即,不必为与其中将数据请求发到L2高速缓存290的顺序相同的顺序。
从LMQ单元260发送到加载目标缓冲区240的LTAG和数据用于访问加载表数据结构250中的相应表项。根据LTAG,更新所述表项以包括回收的数据,并在回收的数据有效时将所述表项标记为“命中”。LMQ单元260判定回收的数据是否有效,并在将回收的数据提供给加载目标缓冲区240时将其标识为有效/无效。回收的数据可以是无效的,例如,当推测回收的回收数据来自本身存储无效数据的L2高速缓存时。作为进一步的实例,如果在要求重新发送回收数据的回收操作中存在冲突,则回收数据可能是无效的。因此,在某些情况下,回收的数据可能无效,这样相应的加载表数据结构250表项保持标记为“未命中”。
将回收的数据存储在加载目标缓冲区240时,指令流水线230中的加载指令可以处于流水线230中的任何位置。例如,加载指令可以仍在流水线230中或者可能已尝试发布和访问加载目标缓冲区240中的加载表数据结构250。
如果完成从L2高速缓存290回收数据时加载指令还在流水线230中,则在从流水线230发布加载指令之前,将相应的加载表数据结构250表项从“未命中”状态更改为“命中”状态。从加载指令的角度,好像数据加载早先从未“未命中”并且加载指令如正常的那样发布。因此,根据LTAG读取加载目标缓冲区240中的加载表数据结构250表项以收集对应于所述表项的数据,并将所述数据存储到寄存器堆280。然后可以解除分配与加载指令关联的LTAG和加载表数据结构250表项,以便将LTAG与后续加载指令一起使用。
如果已经从流水线230发布了加载指令,则处理L1数据高速缓存“未命中”变得更为复杂。当从指令流水线230发布加载指令,并将由LTAG确定的加载表数据结构250中的对应表项标记为“未命中”时,必须消除已发布的加载指令的任何影响。例如,必须采取步骤确保未将无效加载数据写入寄存器堆280,以及未解除分配与加载指令关联的LTAG等。这样,通过示例性实施例的机制,当加载表数据结构250中的表项指示“未命中”时,不会在寄存器堆280中读取或写入此表项中的数据,或者从此表项写入寄存器堆280的数据在寄存器堆280中被无效,例如,将寄存器堆280中的有效位设置为无效状态值。此外,不会解除分配LTAG和加载表数据结构250表项。相反,加载表数据结构250中的表项使其状态从“未命中”状态更新为“未决”状态,指示所述表项正在等待从L2高速缓存290回收数据。
此外,加载指令本身或某些类似加载指令被存储在加载表数据结构250表项中以供以后重新发布。这样,加载表数据结构250表项实际上充当加载未命中队列表项,直到加载数据在L2高速缓存290中可用并有效为止。当从L2高速缓存290回收数据时,将由LTAG标识的加载表数据结构250中的相应表项标记为“命中”。结果,将存储在加载表数据结构250表项中的加载指令重新存储到流水线230,并最终从流水线230中重新发布。当从流水线230发布重新发布的加载指令时,该指令被正常地处理,即,从加载目标缓冲区240中的加载表数据结构250读取数据并将所述数据写入寄存器堆280,以及解除分配LTAG和加载表数据结构250表项。
如上所述,从L2高速缓存290回收加载指令的数据可以是推测性的,因此,重新加载到加载目标缓冲区240中的数据可能是无效的。在此情况下,相应的加载表数据结构250表项保持标记为“未命中”。结果,当从指令流水线230重新发布加载指令时,再次重复上述过程,直到存储在加载表数据结构250表项中的数据有效为止。所述表项最终必须变得有效,因为有效数据最终必须来自存储器子系统。
图3A是示出根据示例性实施例的加载目标缓冲区的加载表的示意图。示例性实施例的加载目标缓冲区包括图3A中示出的加载表和在图3B中示出其状态和转变的状态机。如图3A所示,由表项对应的加载指令的LTAG310来索引加载表300中的所述表项。加载表300中的表项可以包括对应于加载指令的数据320、指令330以及加载指令的当前状态340。应当注意,虽然图3A出于说明目的将LTAG310示为加载表300中的表项的一部分,但是实际上LTAG310用作加载表300的索引,并且可能实际不是表项本身的一部分。但是,在备选实施例中,可以使LTAG成为加载表300的一部分。在此类实施例中,将利用执行查找LTAG310的过程来寻找加载表300中的特定表项。此备选实施例将比通过LTAG310索引加载表300(如优选实施例那样)更昂贵且更慢。
如图3A所示,到加载表300的输入包括从指令流水线发布的指令342。还提供了来自加载/存储流水线的指示加载指令的LTAG的输入344,其是出现L1数据高速缓存命中还是未命中的指示符,并且如果出现L1数据高速缓存命中,则为加载指令的数据。还提供了来自加载未命中队列单元的输入346,其包括加载指令的LTAG和从L2数据高速缓存回收的加载指令的数据。
加载表300的输出包括来自加载表表项的数据的输出350,当加载指令正确发布并且加载指令的数据在加载表300中存在并有效时,所述输出存储在寄存器堆中。其他输出352是从L2数据高速缓存回收数据时重新存储在指令流水线中的回收的加载指令。此外,提供了解除分配或消除LTAG和相应加载表表项的输出354。
如果加载指令成功发布而未出现异常,则使用输出354的“解除分配”线由不同的加载指令解除分配其LTAG以备以后使用。通过单独的LTAG管理设备(未示出)来维护LTAG,所述LTAG管理设备在从图2中的发布单元210发布指令时进行分配,并且如上所述解除分配LTAG。输出354的“消除”线转到包含寄存器堆的执行单元。未成功发布加载时断言“消除”输出,其具有异常或具有某些其他致使加载数据无效的问题。已消除的加载不能使其LTAG解除分配。“消除”输出实际上消除了执行单元中的加载,这防止完成所述加载和将其结果写入寄存器堆。
图3B是示出根据示例性实施例的图3A的加载目标缓冲区的加载表中的表项的状态的示例性状态图。如图3B所示,表项的状态开始于解除分配或“解除分配”状态360。“解除分配”状态360指示LTAG可用于加载指令分配。当将加载指令发送到异步流水线,并且出现L1数据高速缓存命中,即,加载指令的数据存在于L1数据高速缓存中并检索所述数据时,表项的状态转变372为“命中”状态370。在“命中”状态370中,将LTAG分配给加载指令并且使加载指令的数据可用于加载表中的相应表项。
从“命中”状态370,当从指令流水线发布加载指令时,做出从“命中”状态370到“解除分配”状态360的转变374,其中加载数据并将其存储在寄存器堆中并解除分配LTAG和加载表表项。
当将加载指令发送到异步流水线,并且出现L1数据高速缓存未命中,即,加载指令的数据在L1数据高速缓存中不存在或无效时,表项的状态从“解除分配”状态360转变362为“未命中”状态380。在“未命中”状态380中,将LTAG分配给加载指令,但并不使加载指令的数据可用于加载表中的表项。
从“未命中”状态380,当从L2数据高速缓存回收有效数据时,做出到“命中”状态370的转变382。在此转变过程中,将数据加载到对应于加载指令的LTAG的加载表表项中。当然,如果由回收操作返回的数据无效,则加载表中的表项仍保持“未命中”状态380。如果在加载表中的加载指令的表项处于“未命中”状态380时从指令流水线发布加载指令,则消除发布加载指令的任何影响并将加载表中的表项的状态转变384为未决或“未决”状态390。在“未决”状态390中,对应于加载指令的数据不可用,并且加载指令未决L2数据高速缓存回收操作。
从“未决”状态390,一旦从L2数据高速缓存回收了加载指令的有效数据,就做出从“未决”状态390到“命中”状态370的转变。作为此转变的一部分,将回收的数据加载到加载表并将加载指令重新存储到指令流水线。
应当注意,早于所述加载指令(其是示例性实施例的机制的主题)的指令可能出现异常。这意味着必须使异步流水线中的加载指令无效。在示例性实施例中,提供了处理此可能事件的两种不同方法。
在第一种方法中,立刻使异步流水线本身中的加载指令无效。例如,这可以包括针对加载指令设置指示其无效的位或标志。例如,如果无效的计时是固定的,则可以在指令流水线中重新创建加载指令的位置并且可以使加载指令无效。如果无效的计时不固定,则可以使用基于标记的方案,其中刷新操作广播加载指令可以识别的标记,并且结果是加载指令可以使其本身无效。如果已经将加载指令从加载/存储流水线发布到加载目标缓冲区和/或加载未命中队列单元,则加载表中的表项和/或相应加载指令的加载未命中队列单元也必须被无效,即,将它们的状态重置为“解除分配”并解除分配LTAG。
在备选方法中,立刻使加载/数据流水线和/或加载未命中队列单元中的加载指令无效,但是由于异常只将加载表中的表项标记为无效。通过将“F”位引入到每个加载表表项,并且当由于出现异常而使所述表项无效时设置此“F”位来完成此标记。未在指令流水线中使加载指令无效,相反,允许发布加载指令并访问加载表。如果加载发布并在加载表的相应表项中设置了相应的“F”位,则消除加载指令造成的影响,即,使加载或存储到寄存器堆的数据无效等。由于因异常而刷新加载指令,所以还可以解除分配加载指令的LTAG。此备选方法是比第一种方法更简单的实施方式,因为它避免了必须查找加载指令并使加载指令在指令流水线中立即无效的复杂性,特别是由相对于指令流水线异步的加载/存储流水线引起异常时。
图4A是示出根据另一个示例性实施例的加载表的示意图。图4A中示出的加载表与图3A中示出的加载表非常相似,只是在加载表400的表项中增加了“F”位410。如图4A所示,在出现异常时,此异常导致设置与加载/存储流水线中的加载指令对应的加载表表项的“F”位410。例如,可以根据这些加载指令的LTAG来标识要设置其“F”位的加载表400中的特定表项。
图4B是示出根据示例性实施例的图4A的加载表中的表项的状态的示例性状态图。所述状态图与图3B的状态图相似,主要差异是在“未命中”、“命中”、“未决”状态和“解除分配”状态之间增加了转变440-460。对于这些转变,术语“发布F”指发布加载并在加载表中设置其F位。如果加载指令的加载表表项处于“命中”状态或“未命中”状态,并且设置了该表项的F位,则消除发布加载指令的影响,并解除分配LTAG和加载表表项(转变440和450)。如果加载指令的加载表表项处于“未决”状态,并且设置了该表项的F位,则解除分配加载指令的LTAG,并将该表项标记为处于“解除分配”状态。在此情况下,无需等待L2回收操作。
大多数有序处理器在流水线中具有一个最后异常点,在该处不允许任何异常通过,并且尚未更新架构的寄存器。对于此类处理器,在异常时刷新指令相当简单,因为可以从流水线移除指令或将其标记为无效,并且只是以上述方式沿正常执行路径重新获取和重新发布指令。但是,处理器可以允许异常通过此点,即新近的异常,这显著增加了复杂性,因为不再可能只将指令标记为无效并重新获取所述指令。
对新近异常的一个解决方案是使处理器采用特殊的“流水线回收”机制,其中必须在流水线内本地重新发布已发布的出现异常以后的指令。在共同受让和共同未决的标题为“Improving Performance of an In-OrderProcessor by No Longer Requiring a Uniform Completion Point AcrossDifferent Execution Pipeline(通过不再需要不同执行流水线间的一致完成点来提高有序处理器的性能)”的美国专利申请No.11/184,349(代理案号AUS920050230US1)中提供了此方法的实例实施方式。
可以提供其中已发布加载的新的“I”状态。图5是示出将此新的“I”状态包括在图4B的状态图中的示例性状态图。“I”状态是在解除分配加载指令本身之前发布所述加载指令后的最后静止点。在发布加载指令时,将加载表表项临时放置在“I”状态510(转变512)。在发布加载指令之后加载指令保持在此“I”状态510,直到加载指令通过新近异常点为止。如果在加载指令超过新近异常点时没有强制本地重新发布的新近异常,则可以解除分配加载指令(转变514)。如果存在强制加载指令本地重新发布的新近异常,则加载指令的加载表表项将返回“命中”状态,等待被重新发布并且所述过程重复自身。
应当注意,如果发布了加载指令并将其标记为已刷新,则可以立刻从“命中”状态解除分配加载指令,无需等待达到新近异常点。如果加载处于未决状态,并且发生L2数据高速缓存回收操作,则导致正常转变到“命中”状态,然后转变到“I”状态,好像首次发布了具有“命中”状态的加载指令。如果当加载指令处于未决状态时出现新近异常,则对加载指令没有影响,因为所述加载指令尚未重新发布。
图6和7是概述示例性实施例的示例操作的流程图。应当理解,流程图中的每个方块以及流程图中的方块的组合可以由计算机程序指令来实现。可以将这些计算机程序指令提供给处理器或其他可编程数据处理装置以产生一种机器,以便在所述处理器或其他可编程数据处理装置上执行的指令将创建用于实现一个或多个流程图块中指定的功能的装置。这些计算机程序指令也可以被存储在能够以特定方式引导处理器或其他可编程数据处理装置执行功能的计算机可读存储器或存储介质中,以便存储在所述计算机可读存储器或存储介质中的所述指令将产生一件包括实现在一个或多个流程图块中指定的功能的指令装置的制品。
相应地,流程图的方块支持执行指定功能的装置的组合、执行指定功能的步骤的组合,以及执行指定功能的程序指令装置。还应理解,流程图中的每个方块,以及流程图中的方块的组合可以由执行指定功能和步骤的专用基于硬件的计算机系统,或专用硬件和计算机指令的组合来实现。
图6是概述根据一个示例性实施例的加载/存储流水线的示例操作的流程图。如图6所示,操作开始于发布单元将加载指令发布到两个或更多个异步流水线(步骤610)。加载/存储流水线尝试从L1数据高速缓存检索加载指令的数据(步骤615),并判定所述尝试是否导致高速缓存“命中”(步骤620)。如果所述尝试导致高速缓存“命中”,则加载表缓冲区使用加载指令的LTAG和对应于从L1数据高速缓存检索的加载指令的数据在加载表中创建表项,并将所述表项标记为“命中”状态(步骤625)。
加载/存储流水线判定加载表中的表项是否存在异常(步骤630)。如果否,则操作终止。如果异常存在,则加载/存储流水线标记相应LTAG表项的“F”位(步骤635),然后操作终止。应当注意,根据图6,所指的异常是从加载/存储流水线生成的异常。
如果尝试从L1高速缓存检索数据导致高速缓存“未命中”,则加载未命中队列单元在加载表中创建具有加载指令的LTAG的表项,并将所述表项标记为具有“未命中”状态(步骤640)。加载未命中队列单元判定是否由高速缓存“未命中”生成了异常(步骤645)。如果出现异常,则标记对应于LTAG表项的“F”位(步骤650),然后操作终止。
如果步骤645中未出现异常,则加载未命中队列单元从L2数据高速缓存请求加载指令的数据(步骤655),然后接收来自L2数据高速缓存的数据(步骤660)并判定从L2数据高速缓存检索数据期间是否出现异常(步骤665)。如果未出现异常,则将来自L2数据高速缓存的有效数据加载到加载表中的对应表项(步骤680),并将所述表项标记为“命中”(步骤685)。
如果在从L2数据高速缓存检索数据期间生成了异常(步骤665),则判定加载表中的LTAG表项是否处于未决状态(步骤670)。如果否,则设置加载表中对应LTAG表项的“F”位(步骤635)。如果加载表中的LTAG表项处于未决状态(步骤670),则解除分配LTAG,并且LTAG表项继续到解除分配状态(步骤675)。然后操作终止。
图7是概述根据一个示例性实施例的指令流水线的示例操作的流程图。如图7所示,操作开始于指令流水线发布加载指令(步骤710)。加载目标缓冲区标识加载表数据结构中对应于已发布的加载指令的LTAG的表项(步骤720),并判定是否已设置此表项的“F”位(步骤730)。如果是,则加载目标缓冲区驱动加载指令的“消除”操作(步骤740),并解除分配LTAG和加载表表项(步骤750)。
如果未设置与发布的加载指令的LTAG对应的表项的“F”位(步骤730),则加载目标缓冲区判定所述表项是否被标记为“命中”(步骤760)。如果所述表项被标记为“命中”,则加载目标缓冲区将加载表的表项中的数据加载到寄存器堆(步骤820)。加载目标缓冲区判定是否出现新近的异常(步骤830)。应当注意,根据图7,异常是由指令流水线及其执行单元生成的异常。
如果未出现新近异常,则解除分配LTAG和加载表表项(步骤750)。如果已出现新近异常,则加载目标缓冲区执行在本地重新发布加载指令(步骤840),操作返回步骤820。
如果所述表项未被标记为“命中”(步骤760),则加载目标缓冲区消除加载指令发布的任何影响(步骤770),并将指令存储在加载表数据结构表项中,等待从L2数据高速缓存检索数据(步骤780)。加载目标缓冲区判定是否从L2数据高速缓存返回了有效加载数据(步骤790)。如果否,则操作返回步骤790,直到从L2数据高速缓存返回有效数据为止。如果从L2数据高速缓存回收了加载指令的有效加载数据,则加载目标缓冲区将回收的加载数据存储在加载指令的加载表表项中(步骤800)。加载目标缓冲区然后将所述表项标记为“命中”,并将加载指令重新发布到指令流水线(步骤810)。如上所述,操作然后继续到步骤820-840。
因此,本发明的示例性实施例提供了处理异步流水线的数据高速缓存未命中乱序的机制。示例性实施例的机制还提供了处理异步流水线中的新近异常的方法。
可以在微处理器体系结构的一个或多个处理器中提供示例性实施例的机制。同样,可以在集成电路芯片上的集成电路中实现示例性实施例的机制。芯片设计可以使用图形计算机编程语言创建并存储于计算机存储介质(例如,盘、磁带、物理硬驱动器或诸如存储存取网络中的虚拟硬驱动器)中。如果设计者未制造芯片或用于制造芯片的光刻掩模,则设计者通过物理方法(例如,提供存储设计的存储介质的副本)或电子方法(例如,通过互联网)直接或间接地将结果设计传输到此类实体。然后将存储的设计转换为适当的格式(例如,GDSII)以便制造光刻掩模,它通常包括要在晶片上形成的所述芯片设计的多个副本。所述光刻掩模用于限定要蚀刻或要以其他方式处理的晶片(和/或其上的层)的区域。
制造者可以以原始晶片形式(即,作为具有多个未封装芯片的单晶片)、作为裸小片或以封装的形式分发所得到的集成电路芯片。在后者的情况中,以单芯片封装(例如,引线固定到母板的塑料载体或其他更高级别的载体)或多芯片封装(例如,具有一个或两个表面互连或掩埋互连的陶瓷载体)来安装芯片。在任何情况下,所述芯片然后都作为(a)中间产品(如母板)或(b)最终产品的一部分与其他芯片、分离电路元件和/或其他信号处理装置集成。最终产品可以是任何包括集成电路芯片的产品,范围从玩具和其他低端应用到具有显示器、键盘或其他输入设备及中央处理器的高级计算机产品。
出于示例和说明目的给出了对示例性实施例的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。
权利要求
1.一种在具有指令流水线和加载/存储流水线的数据处理设备中的用于处理加载指令的方法,所述方法包括接收加载指令;将所述加载指令与加载标记关联;向所述加载/存储流水线发布所述加载指令和所述加载标记;尝试从第一高速缓存检索与所述加载指令对应的数据;判定所述尝试检索与所述加载指令对应的数据是导致高速缓存命中还是高速缓存未命中;以及根据所述加载标记和所述尝试检索与所述加载指令对应的数据的结果来在加载目标缓冲区的加载表数据结构中生成表项。
2.根据权利要求1中所述的方法,其中在所述加载表数据结构中生成表项包括在由与所述加载指令关联的加载标记索引的加载表中生成表项;以及根据判定所述尝试检索与所述加载指令对应的数据是导致高速缓存命中还是导致高速缓存未命中的结果,将所述表项标记为高速缓存命中或高速缓存未命中。
3.根据权利要求2中所述的方法,其中如果判定的结果为高速缓存未命中,则所述方法还包括从存储器子系统回收与所述加载指令对应的数据;以及将所述回收的数据存储在所述加载表内的所述表项中。
4.根据权利要求3中所述的方法,其中从存储器子系统回收与所述加载指令对应的数据包括在加载未命中队列单元中维护标识了与所述加载指令关联的加载标记的数据结构和与被回收的数据对应的加载指令关联的加载地址;以及根据所述加载未命中队列单元中的所述数据结构来将所述回收的数据与所述加载指令相关联,以响应从所述存储器子系统回收所述数据,其中根据所述加载未命中队列单元中的所述数据结构内标识的所述加载指令的加载标记,将所述回收的数据存储在所述加载表内的所述表项中。
5.根据权利要求3中所述的方法,还包括只有当所述回收的数据有效时才将所述加载表中的所述表项标记为高速缓存命中;以及如果所述回收的数据无效,则将所述加载表中的所述表项标记为高速缓存未命中。
6.根据权利要求1中所述的方法,还包括将所述加载指令和所述加载标记发布到所述指令流水线;将所述加载指令从所述指令流水线发布到所述加载目标缓冲区;根据与所述发布的加载指令关联的加载标记来标识所述加载表中与所述发布的加载指令对应的表项;以及根据所述加载表中的所述标识的表项是标记为高速缓存命中还是高速缓存未命中,判定是否将与所述加载指令对应的数据存储在寄存器堆中。
7.根据权利要求6中所述的方法,还包括如果判定所述标识的表项标记为高速缓存命中,则将与所述加载指令对应的数据存储在所述寄存器堆中。
8.根据权利要求7中所述的方法,还包括将与所述加载指令对应的数据存储在所述寄存器堆中之后,解除分配所述加载标记和所述加载表中的所述表项。
9.根据权利要求6中所述的方法,还包括如果判定所述加载表中的所述标识的表项被标记为高速缓存未命中,则消除从所述指令流水线发布所述加载指令的任何影响;以及如果判定所述加载表中的所述标识的表项被标记为高速缓存未命中,则将所述加载表中的所述标识的所述表项更新为具有未决状态。
10.根据权利要求9中所述的方法,还包括如果判定将所述加载表中的所述标识的表项标记为高速缓存未命中,则将所述加载指令的表示存储在所述加载表的所述标识的表项中;以及根据所述标识的表项中的所述加载指令的所述表示,将所述加载指令重新发布到所述指令流水线,以响应从存储器子系统回收与所述加载指令对应的数据。
11.根据权利要求1中所述的方法,其中所述指令流水线和所述加载/存储流水线相对于彼此是异步的。
12.根据权利要求1中所述的方法,其中所述数据处理设备是处理器。
13.根据权利要求1中所述的方法,其中所述数据处理设备是多处理器异构数据处理系统的一部分。
14.根据权利要求13中所述的方法,其中所述多处理器异构数据处理系统包括控制处理器和一个或多个协处理器,并且其中所述数据处理设备是一个或多个所述控制处理器或是协处理器。
15.一种装置,所述装置包括发布单元;与所述发布单元相耦合的指令流水线;与所述发布单元相耦合的加载/存储流水线;以及与所述指令流水线和所述加载/存储流水线相耦合的加载目标缓冲区,其中所述发布单元接收加载指令,将所述加载指令与加载标记关联,以及将所述加载指令和加载标记发布到所述加载/存储流水线,所述加载/存储流水线尝试从一级高速缓存检索与所述加载指令对应的数据,并判定所述尝试检索与所述加载指令对应的数据是导致高速缓存命中还是导致高速缓存未命中,以及所述加载目标缓冲区根据所述加载标记和尝试检索与所述加载指令对应的数据的结果,在所述加载目标缓冲区的加载表数据结构中生成表项。
16.根据权利要求15中所述的装置,其中所述加载目标缓冲区通过以下操作在所述加载表数据结构中生成表项在由与所述加载指令关联的加载标记索引的加载表中生成表项;以及根据判定所述尝试检索与所述加载指令对应的数据是导致高速缓存命中还是导致高速缓存未命中的结果,将所述表项标记为高速缓存命中或高速缓存未命中。
17.根据权利要求16中所述的装置,还包括与所述加载/存储流水线相耦合的加载未命中队列单元,其中如果判定的结果为高速缓存未命中,则所述加载未命中队列单元从二级高速缓存回收与所述加载指令对应的数据,并将所述回收的数据存储在所述加载目标缓冲区的所述加载表内的表项中。
18.根据权利要求17中所述的装置,其中所述加载未命中队列单元通过以下操作从所述二级高速缓存回收与所述加载指令对应的数据在所述加载未命中队列单元中维护标识了与所述加载指令关联的加载标记的数据结构和与被回收的数据对应的加载指令关联的加载地址;以及根据所述加载未命中队列单元中的所述数据结构来将所述回收的数据与所述加载指令相关联,以响应从所述二级高速缓存回收所述数据,其中根据所述加载未命中队列单元中的所述数据结构内标识的所述加载指令的加载标记,将所述回收的数据存储在所述加载表内的所述表项中。
19.根据权利要求17中所述的装置,其中只有当所述回收的数据有效时,所述加载目标缓冲区才将所述加载表中的所述表项标记为高速缓存命中,并且如果所述回收的数据无效,则将所述加载表中的所述表项标记为高速缓存未命中。
20.根据权利要求15中所述的装置,其中所述发布单元向所述指令流水线发布所述加载指令和所述加载标记;所述指令流水线向所述加载目标缓冲区发布所述加载指令;以及所述加载目标缓冲区根据与所述发布的加载指令关联的加载标记来标识所述加载表中与所述发布的加载指令对应的表项,并且根据所述加载表中的所述标识的表项是标记为高速缓存命中还是高速缓存未命中,判定是否将与所述加载指令对应的数据存储在寄存器堆中。
21.根据权利要求20中所述的装置,其中如果判定所述标识的表项标记为高速缓存命中,则所述加载目标缓冲区将与所述加载指令对应的数据存储在所述寄存器堆中。
22.根据权利要求21中所述的装置,其中将与所述加载指令对应的数据存储在所述寄存器堆中之后,所述加载目标缓冲区开始解除分配所述加载标记和所述加载表中的所述表项。
23.根据权利要求20中所述的装置,其中如果判定所述加载表中的所述标识的表项被标记为高速缓存未命中,则所述加载目标缓冲区开始消除从所述指令流水线发布所述加载指令的任何影响,并且如果判定所述加载表中的所述标识的表项被标记为高速缓存未命中,则将所述加载表中的所述标识的所述表项更新为具有未决状态。
24.根据权利要求23中所述的装置,其中如果判定将所述加载表中的所述标识的表项标记为高速缓存未命中,则所述加载目标缓冲区将所述加载指令的表示存储在所述加载表的所述标识的表项中,并且根据所述标识的表项中的所述加载指令的所述表示,将所述加载指令重新发布到所述指令流水线,以响应从存储器子系统回收与所述加载指令对应的数据。
25.根据权利要求15中所述的装置,其中所述指令流水线和所述加载/存储流水线相对于彼此是异步的。
26.根据权利要求15中所述的装置,其中所述装置是多处理器异构数据处理系统的一部分。
27.根据权利要求26中所述的装置,其中所述多处理器异构数据处理系统包括控制处理器和一个或多个协处理器,并且其中所述装置是一个或多个所述控制处理器或是协处理器。
28.一种包括具有计算机可读程序的计算机可用介质的计算机程序产品,其中当所述计算机可读程序在计算设备上执行时,可以使所述计算设备执行根据权利要求1-14中的任一权利要求的方法。
全文摘要
本发明提供了一种用于处理异步流水线的数据高速缓存未命中乱序的装置和方法。所述装置和方法将加载标记(LTAG)标识符与加载指令关联,并使用它们作为加载目标缓冲区的加载表数据结构的索引来跟踪多个流水线间的加载指令。所述加载表用于管理高速缓存“命中”和“未命中”,并帮助从L2高速缓存回收数据。对于高速缓存未命中,加载标记索引的加载表允许以任何顺序从L2高速缓存回收加载数据。当所述加载指令发布并查看到其在所述加载表中的相应表项被标记为“未命中”时,消除发布所述加载指令的影响并将所述加载指令存储在所述加载表中,以便在以后回收所需数据时将所述加载指令重新发布到所述指令流水线。
文档编号G06F12/08GK101013361SQ20071000823
公开日2007年8月8日 申请日期2007年1月25日 优先权日2006年2月2日
发明者C·M·阿伯内西, J·P·布拉德福, T·H·海尔, R·哈尔, D·希比 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1