用于预取数据线的方法和处理器的制作方法

文档序号:6571343阅读:294来源:国知局
专利名称:用于预取数据线的方法和处理器的制作方法
技术领域
本发明总体涉及计算机处理器领域。更具体地说,本发明涉及计算机处理器所使用的高速缓存机制。
背景技术
现代计算机系统通常包含几个集成电路(IC),它们包括在计算系统中可以被用于处理信息的处理器。由处理器所处理的数据可以包括由该处理器所执行的计算机指令以及该处理器使用计算机指令所操作的数据。通常将计算机指令和数据存储在计算机系统中的主存储器中。
处理器通常通过以一系列小步骤执行指令来处理指令。在某些情况下,为了增加正在由处理器所处理的指令数量(因此增加处理器的速度),可以将处理器流水线化(pipeline)。流水线化是指在处理器中提供分离的级,其中每个级执行完成执行指令所需要的一个或多个小步骤。在某些情况下,可以将流水线(除其他电路之外)放置在被称作处理器内核的处理器部分中。某些处理器可以具有多个处理器内核。
作为在流水线中执行指令的例子,当接收到第一指令时,第一流水线级可以处理该指令的一小部分。当第一流水线级已经完成了处理所述指令的所述小部分时,第二流水线级可以开始处理所述第一指令的另外一小部分,同时第一流水线级接收并且开始处理第二指令的一小部分。因此,处理器可以同时(并行地)处理两个或者多个指令。
为了提供对数据和指令的更快存取以及更好地利用处理器,处理器可以具有几个高速缓存。高速缓存是通常小于主存储器并且通常被制造在与处理器相同的晶片(即,芯片)上的存储器。现代处理器通常具有多级高速缓存。将最为靠近处理器内核的最快的高速缓存称为一级高速缓存(L1高速缓存)。在L1高速缓存之外,处理器通常具有第二个较大的高速缓存,称为二级高速缓存(L2高速缓存)。在某些情况下,处理器可以具有其他额外的高速缓存级(例如,L3高速缓存和L4高速缓存)。
为了将足够的指令提供给处理器以填充处理器的流水线的每一级,处理器可以以包含多个指令的组(称为指令线(I线))从L2高速缓存中取回(retrieve)指令。可以将所取回的I线放置在其中处理器的内核可以存取该I线中的指令的L1指令高速缓存(I-高速缓存)中。可以类似地从L2高速缓存中取回要由处理器处理的数据块,并且将该数据块放置在L1高速缓存数据高速缓存(D-高速缓存)中。
可以将从较高的高速缓存级取回信息和将该信息放置在较低高速缓存级的过程称为读取(fetch),其通常需要一定量的时间(延迟)。例如,如果处理器内核请求不在L1高速缓存中的信息和数据(称为高速缓存未命中(cache miss)),可以从L2高速缓存中读取信息。因为搜索下一个高速缓存/存储器以寻找所请求的信息,所以每个高速缓存未命中导致附加的延迟。例如,如果所请求的信息不在L2高速缓存中,则处理器可以在L3高速缓存或者主存储器中寻找信息。
在某些情况下,处理器可以比从高速缓存和/或存储器中取回的指令和数据更快地处理指令和数据。例如,在已经处理了I线之后,可能需要时间来存取要被处理的下一个I线(例如,如果当搜索L1高速缓存器以寻找包含下一个指令的I线时存在高速缓存未命中)。当处理器正在从较高级的高速缓存或者存储器取回下一个I线时,流水线级可能完成处理之前的指令并且不具有剩余要进行处理的指令(称为流水线停滞(pipeline stall))。当流水线停滞时,处理器未被充分使用并且失去了流水线化的处理器内核提供的益处。
因为通常顺序地处理指令(因此顺序地处理I线),所以某些处理器试图通过读取顺序编址的I线的块来防止流水线停滞。通过读取顺序编址的I线的块,当需要的时候在L1高速缓存中可能已经可以获得下一个I线,从而当处理器完成处理当前I线中的指令时其可以准备好存取在下一个I线中的指令。
在某些情况下,存取顺序编址的I线的块可能不会防止流水线停滞。例如,被称为退出转移指令的某些指令可以导致处理器分支到顺序编址的I线的块之外的指令(称为目标指令)。某些退出转移指令可能分支到不在当前I线中或者不在下一个已经读取的、顺序编址的I线中的目标指令。因此,当处理器确定采用该分支时在L1高速缓存中可能不能获得包含退出分支的目标指令的下一个I线。结果,流水线可能停滞并且处理器可能低效率地操作。
关于读取数据,在指令存取数据的情况下,处理器能够试图在L1高速缓存中定位包含数据的数据线(D线)。如果在L1高速缓存中不能定位D线,则处理器在搜索L2高速缓存和较高级的存储器以寻找所需要的D线时可能停滞。因为可能直到执行指令为止都不知道所需要的数据的地址,所以处理器可能直到执行指令为止都不能搜索所需要的D线。当处理器搜索D线时,可能发生高速缓存未命中,导致流水线停滞。
某些处理器试图通过读取包含靠近(相邻于)当前正在被存取的数据地址的数据地址的D线的块来防止这种高速缓存未命中。读取靠近的D线依赖于这样的假设当存取D线中的数据地址时,也将很可能存取靠近的数据地址(将这种概念称为引用的本地性)。然而,在某些情况下,可能证明这种假设不正确,从而通过指令存取不位于当前D线附近的D线中的数据,因而导致高速缓存未命中和处理器低效。
因此,需要在利用高速缓存化的存储器的处理器中取回指令和数据的改进方法。

发明内容
本发明的实施方式提供用于读取数据线的方法和设备。在一种实施方式中,本方法包括从第二级高速缓存中读取第一指令;从第一指令线中提取标识包含被在第一指令线或者不同指令线中所包含的数据存取指令定为目标的数据的第一数据线的地址;以及使用所提取的地址从第二级高速缓存预取第一数据线。
在一种实施方式中,提供处理器。该处理器包括第二级高速缓存、第一级高速缓存、处理器内核和电路。第一级高速缓存被配置为从第二级高速缓存中接收指令线,其中每个指令线包括一个或多个指令。将处理器内核配置为执行从第一级高速缓存取回的指令。将电路配置为从第二级高速缓存中读取第一指令线,在第一指令线中标识用以标识包含被在第一指令线或者不同指令线中所包含的数据存取指令定为目标的数据的第一数据线的地址,以及使用所提取的地址从第二级高速缓存中预取第一数据线。
在一种实施方式中,提供将数据目标地址存储在指令线中的方法。该方法包括执行指令线中的一个或多个指令,确定该一个或多个指令是否存取数据线中的数据以及是否导致高速缓存未命中,以及如果是这样的情况,则将与该数据线对应的数据目标地址存储在预取机制可以存取的位置中。


所以通过参照在附图中图示的其实施方式,可以获得其中实现本发明的上述特点、优点和目的的方式,可以用上面所概括的本发明的详细的、更加具体的描述来理解该方式。
然而应该注意,因为本发明承认其他等效实施方式,所以附图仅仅示出了本发明的典型实施方式,而不应该被认为是对其范围的限制。在附图中图1是示出根据本发明一种实施方式的系统的框图;图2是示出根据本发明一种实施方式的计算机处理器的框图;图3是示出根据本发明一种实施方式存取D线的I线的示意图;图4是示出根据本发明一种实施方式防止D-高速缓存未命中的过程的流程图;图5是示出根据本发明一种实施方式的、包含数据存取地址的I线的框图;图6是示出根据本发明一种实施方式的、预取指令和D线的电路的框图;图7是示出根据本发明一种实施方式的、用于正在被存储在多个I线中的单个I线中的数据存取指令的多个数据目标地址的框图;图8是示出根据本发明一种实施方式的、用于存储与数据存取指令对应的数据目标地址的过程的流程图;和图9是示出根据本发明一种实施方式的用于预取指令和D线的影子高速缓存的框图。
具体实施例方式
本发明的实施方式提供用于预取D线的方法和设备。对于某些实施方式,可以针对数据存取指令(例如,加载或者存储指令)检查正在被读取的I线以确定目标数据是否在D线中。可以提取这些数据存取指令的目标数据地址,并且用于从L2高速缓存中预取包含被定为目标的数据的D线。结果,如果/当执行将该数据定为目标的指令时,被定为目标的D线可能已经在L1数据高速缓存(“D高速缓存”)中了,因此在某些情况下,避免了D高速缓存中的成本较高的未命中并且提高了总体性能。
对于某些实施方式,可以将预取数据(例如,被定为目标的地址)存储在传统高速缓冲存储器中在预取数据所属于的信息的对应块中(例如,配属到I线或者D线)。例如,因为从高速缓冲存储器中读取信息的对应线,所以可以检查包含在这里的预取数据,并且将该数据用于预取信息的其他相关线。然后使用在信息的每个其他预取的线中所存储的预取数据来执行类似的预取。通过使用预取的I线内的信息来预取包含被I线中的指令定为目标的数据的D线,可以防止与信息的被读取块相关联的高速缓存未命中。
根据本发明的一个方面,将预取数据存储在高速缓存中作为I线的一部分可以去除对排他地存储预取和预测数据的特殊高速缓存或者存储器的需要。然而如下面所述,在某些情况下,可以将这种信息存储在任何位置,包括专门存储这种历史信息的特殊高速缓存或者存储器。而且,在某些情况下,可以使用不同高速缓存(和高速缓存线)、缓存器、特殊目的高速缓存和其他位置的组合来存储这里所描述的历史信息。
下面是在附图中所示的本发明的实施方式的详细描述。这些实施方式是例子并且详细到清楚地呈现本发明的程度。然而,所提供的细节数量不试图限制实施方式的可预见变型。相反地,试图覆盖落入由所附权利要求所限定的本发明的精神和范围内的所有修改、等效和替代。
关于例如计算机系统之类的系统使用和在下面描述本发明的实施方式。如这里所使用的,系统可以包括使用处理器和高速缓冲存储器的任何系统,包括个人计算机、因特网设备、数据媒体设备、便携数字助理(PAD)、便携音乐/视频播放器和视频游戏控制台。虽然高速缓冲存储器可以位于作为使用该高速缓冲存储器的处理器的相同晶片上,但是在某些情况下,处理器和高速缓冲存储器可以位于不同晶片上(例如,分离的模块内的分离芯片或者单个模块内的分离芯片)。
虽然关于具有多个处理器内核和多个L1高速缓存的处理器在下面进行描述,其中每个处理器内核使用流水线以执行指令,但是可以用利用高速缓存的任何处理器来利用本发明的实施方式,包括具有单个处理内核的处理器和/或在执行指令时不利用流水线的处理器。总的来说,可以用任何处理器来利用本发明的实施方式,其不限于任何特定配置。
虽然关于具有被分为L1指令高速缓存(L1 I高速缓存,或者I高速缓存)和L1数据高速缓存(L1 D高速缓存,或者D高速缓存224)的L1高速缓存的处理器在下面进行描述,但是可以在其中利用统一L1高速缓存的配置中利用本发明的实施方式。而且,虽然关于从L2高速缓存中预取I线和D线并且将所预取的线放置在L1高速缓存中来进行下面的描述,但是可以利用本发明的实施方式来将I线和D线从任何高速缓存或者存储器中预取到任何其他高速缓存或者存储器级。
示例系统的概况图1是示出根据本发明一种实施方式的系统100的框图。系统100可以包括用于存储指令和数据的系统存储器102、用于图形处理的图形处理单元104、用于与外部设备通信的I/O接口、用于指令和数据的长期存储的存储设备108以及用于处理指令和数据的处理器110。
根据本发明的一种实施方式,处理器110可以具有L2高速缓存112以及多个L1高速缓存116,其中每个L1高速缓存116由多个处理器内核114之一利用。根据一种实施方式,可以将每个处理器内核114流水线化,其中以一系列由不同流水线级执行每个步骤的小步骤执行每个指令。
图2是描述根据本发明一种实施方式的处理器110的框图。为了简便,图2关于处理器110的单个内核114进行描述。在一种实施方式中,每个内核114可以是相同的(例如,包含带有相同流水线级的相同流水线)。在另一种实施方式中,每个内核114可以是不同的(例如,包含带有不同级的不同流水线)。
在本发明的一种实施方式中,L2高速缓存可以包含一部分正在由处理器110使用的指令和数据。在某些情况下,处理器110可以请求没有被包含在L2高速缓存112中的指令和数据。在所请求的指令和数据没有被包括在L2高速缓存112中的情况下,可以(从较高级的高速缓存或者系统存储器102中)取回所请求的指令并且将其放在L2高速缓存中。当处理器内核114从L2高速缓存112请求指令时,可以首先由预译码器和调度器(predecoder and scheduler)220(将在下面更加详细地描述)处理该指令。
在本发明的一种实施方式中,可以将图1中所示的L1高速缓存116分为两个部分用于存储I线的L1指令高速缓存222(L1 I高速缓存222)以及用于存储D线的L1数据高速缓存224(L1 D高速缓存)。在由预译码器和调度器220处理从L2高速缓存112取回的I线之后,可以将I线放置在I高速缓存222中。类似地,可以将从L2高速缓存112读取的D线存储在D高速缓存224中。可以将每条I线和D线中的比特用于跟踪在L2高速缓存112中的信息线是I线还是D线。
在本发明的一种实施方式中,可以以被称为I线的组从L2高速缓存112和I高速缓存222中读取指令,并且将所读取的指令放置在其中处理器内核114可能存取该I线中的指令的I线缓存器226中。类似地,可以以被称为D线的组从L2高速缓存112和D高速缓存224中读取数据。在一种实施方式中,可以使用I高速缓存222和I线缓存器226的一部分来存储有效地址并且控制比特(EA/CTL),内核114和/或预译码器和调度器220可能使用这些比特来处理例如每条I线以实施下面所描述的数据预取机制。
从L2高速缓存中预取D线图3是示出根据本发明的一种实施方式的、包含将D线中的数据(D41)定为目标的数据存取指令(I51)的示例I线的示意图。在一种实施方式中,I线(I线1)可以包含多个指令(例如,I11、I21、I31等)以及诸如有效地址和控制比特之类的控制信息。类似地,D线(D线1)可以包含多个数据字(例如,D11、D21、D31等)。在某种程度上,能够以诸如首先执行指令I11、其次执行I21、以此类推这样的顺序执行每条I线中的指令。因为顺序执行指令,所以通常顺序执行I线。因此,在某些情况下,每次将I线从L2高速缓存112移动到I高速缓存222,预译码器和调度器220都可以检查I线(例如,I线1)并且预取下一个顺序的I线(例如,I线2),从而下一个I线被放置在I高速缓存222中并且可以由处理器内核114存取。
在某些情况下,由处理器内核114所执行的I线可以包括诸如指令I51之类的数据存取指令(例如,加载或者存储指令)。数据存取指令将一地址(例如,D41)处的数据定为目标以执行操作(例如,加载或者存储)。在某些情况下,数据存取指令可以请求作为某个其他地址(例如,在数据寄存器中所存储的地址)的偏移的数据地址,从而当执行数据存取指令时计算数据地址。
当处理器内核114执行指令I51时,处理器内核114可以确定由该指令存取的数据D41。处理器内核114可以试图从D高速缓存224中读取包含数据D41的D线(D线1)。在某些情况下,在D高速缓存224中可能不存在D线1,因此导致高速缓存未命中。当在D高速缓存中检测到高速缓存未命中时,将针对D线1的读取请求发给L2高速缓存112。在某些情况下,当正在由L2高速缓存112处理读取请求时,在内核114中的处理器流水线可能停滞,因此停止处理器内核114的指令处理。如果D线1不在L2高速缓存112中,则处理器流水线在从较高高速缓存和/或存储器级读取D线时可能停滞较长时间。
根据本发明的一种实施方式,可以通过根据从当前正在被读取的I线中提取的数据目标地址预取D线来减少D高速缓存未命中的数量。
图4是示出根据本发明一种实施方式用于减少或者防止D高速缓存未命中的过程400的流程图。过程400可以在步骤404开始,其中从L2高速缓存112读取I线。在步骤406,可以标识数据存取指令,并且在步骤408可以提取被数据存取指令定为目标的数据的地址(称为数据目标地址)。然后,在步骤410,使用数据目标地址从L2高速缓存112预取包含被定为目标的数据的D线。通过预取包含被定为目标的数据的D线以及将所预取的数据放置在D高速缓存224中,如果/当执行数据存取指令时可以防止高速缓存未命中。在某些情况下,如果实际上存在D高速缓存未命中或者D高速缓存未命中历史,则仅仅存储数据目标地址。
在一种实施方式中,可以将数据目标地址直接存储在(配属到)图5所示的I线中。所存储的数据目标地址EA1可以是有效地址或者有效地址的一部分(例如,有效地址的高位32比特)。如所示的,数据目标地址EA1可以标识包含被数据存取指令I51定为目标的数据D41的地址的D线。
根据一种实施方式,I线还可以存储其他有效地址(例如,EA2)和控制比特(例如,CTL)。如下面所述的,可以使用其他有效地址来预取包含被I线或者附加D线中的转移指令定为目标的指令的I线。控制比特CTL可以包括指示数据存取指令的历史(DAH)以及数据存取指令的位置(LOC)的一个或多个比特。还在下面描述对在I线中所存储的这种信息的使用。
在本发明的一种实施方式中,可以将这里所描述的有效地址比特和控制比特存储在I线的否则不被使用的比特中。例如,在L2高速缓存112中的每个信息线可以具有额外数据比特,可以将该额外数据比特用于不同高速缓存级之间所传送的数据的纠错(例如,纠错码,ECC,用于确保所传送的数据不被损坏并且修复发生的损坏)。在某些情况下,每级高速缓存(例如,L2高速缓存112和I高速缓存222)可以包含每条I线的相同拷贝。在每级高速缓存都包含给定I线的拷贝的情况下,可以不使用ECC。替代地,例如,可以使用例如奇偶比特来确定在高速缓存之间是否适当地传送了I线。如果奇偶比特指示在高速缓存之间不适当地传送了I线,(因为高速缓存包括该线所以)则可以从传送高速缓存中重新读取I线而不是执行错误检查。
作为将地址和控制信息存储在I线的否则不被使用比特中的例子,考虑这样的纠错协议,其使用十一比特用于针对所存储的每两个字的纠错。在I线中,可以将十一比特之一用于存储针对每两个指令的奇偶比特(其中为每个字存储一个指令)。可以将每个指令的剩余五个比特用于存储关于每个指令的控制比特和/或地址比特。例如,可以使用五个比特中的四个来存储用于指令的(诸如历史比特之类的)控制比特,诸如关于指令的历史信息(例如,该指令是否是之前被进行的转移指令,或者该指令是否是之前导致D高速缓存未命中的数据存取指令)。如果I线包括32个指令,则可以使用剩余的32比特(一个比特用于一个指令)来存储例如所有或者部分数据目标地址或者分支退出地址。
电路示例预取图6是示出根据本发明一种实施方式用于预取指令和D线的电路的框图。在本发明的一种实施方式中,电路可以只预取D线。在本发明的另一种实施方式中,电路可以预取I线和D线。
每次从L2高速缓存112中读取I线和D线以分别将它们放置到I高速缓存222或者D高速缓存224中,由指令/数据(I/D)所控制的选择电路620可以将所读取的I线或者D线路由到适当的高速缓存。
预译码器和调度器220可以检查正在由L2高速缓存112输出的信息。在一种实施方式中,当利用多处理器内核114时,可以在多个处理器内核之间共享单个预译码器和调度器220。在另一种实施方式中,可以为每个处理器内核114分离地提供预译码器和调度器220。
在一种实施方式中,预译码器和调度器220可以具有预译码器控制电路610,其确定正在由L2高速缓存112输出的信息是I线还是D线。例如,L2高速缓存112可以将指定比特设置在L2高速缓存112中所包含的信息的每个块中,而且预译码器控制电路610可以检查所指定的比特以确定由L2高速缓存112输出的信息是I线还是D线。
如果预译码器控制电路610确定L2高速缓存112所输出的信息是I线,则预译码器控制电路610可以使用I线地址选择电路604和D线地址选择电路606,来选择I线中所包含的任何适当的有效地址(例如,EA1或者EA2)。然后由选择电路608使用选择(SEL)信号来选择有效地址。然后将所选择的有效地址输出到例如预取电路602作为32比特预取地址,以用于从L2高速缓存112中预取对应I线或者D线。
如上所述,可以使用第一I线中的数据目标地址来预取第一D线。在某些情况下,第一读取的I线还可以包含分支到第二I线中的目标指令(称为退出转移指令)的转移指令。在一种实施方式中,还可以将与第二I线对应的地址(称为退出地址)存储在第一读取的I线中。当读取第一I线时,可以使用所存储的退出地址来预取第二I线。在共同所有的、题为“SELF PREFECTCHING L2CACHE MECHANISM FOR INSTRUCTION LINES”的美国专利(律师卷号ROC920050278US1)中描述I线预取,通过参考将其整个合并于此。通过预取第二I线,如果允许第一I线中的分支并且从I高速缓存中请求第二I线中的目标指令,则可以避免I高速缓存未命中。
因此,在某些情况下,可以根据正在读取的单个I线将I线和D线的组(链)预取到I高速缓存222和D高速缓存224中,从而减少在所读取或者预取的I线中的退出转移指令或者数据存取指令导致I高速缓存未命中或者D高速缓存未命中。
当从L2高速缓存112预取由退出地址指示的第二I线时,在某些情况下,可以检查第二I线以确定第二I线是否包含与第二I线内的数据存取地址所存取的第二D线对应的数据目标地址。在所预取的I线包含与第二D线对应的数据目标地址的情况下,也预取第二D线。
在一种实施方式中,所预取的第二I线可以包含也可以被预取的第三I线的有效地址。而且,第三I线可以也包含可以被预取的目标D线的有效地址。可以重复预取I线和对应的D线的过程。每个预取的I线可以包含用于从主存储器中被预取的多条I线和/或多条D线的有效地址。
作为例子,在一种实施方式中,D高速缓存224可以是两端口高速缓存,以便从L2高速缓存112中读取两条D线并且将这些D线同时放置在两端口D高速缓存224中。在使用这种配置的情况下,可以将与两条D线对应的两个有效地址存储在每条I线中,并且如果从L2高速缓存112读取I线,则在某些情况下,可以使用有效地址从L2高速缓存112中同时预取两条D线并且将这些D线放置在D高速缓存224中,因此可以避免D高速缓存未命中。
因此,在某些情况下,可以根据正在读取的单个I线将I线和D线的组(链)预取到I高速缓存222和D高速缓存224中,从而减少在所读取或者预取的I线中的退出转移指令或者数据存取指令导致I高速缓存未命中或者D高速缓存未命中。
根据一种实施方式,在所预取的I线包含要被预取的多个有效地址的情况下,可以临时存储这些地址(例如,将它们存储在与译码器控制电路610或者I线地址选择电路604,或者某些其他的缓存器中),同时将每个有效地址发送到预取电路602。在另一种实施方式中,可以并行地将预取地址发送到预取电路602和/或L2高速缓存112。
预取电路602可以确定所请求的有效地址是否在L2高速缓存112中。例如,预取电路602可以包含诸如可以确定所请求的有效地址是否在L2高速缓存112中的翻译后援缓冲器(translation look-aside buffer,TLB)之类的内容可寻址存储器(CAM)。如果所请求的有效地址在L2高速缓存112中,则预取电路602可以发出请求给L2高速缓存以读取与所请求的有效地址对应的真实地址。然后可以将与该真实地址对应的信息的块输出到选择电路620并且引导(direct)到适当的L1高速缓存(例如,I高速缓存222或者D高速缓存224)。如果预取电路602确定所请求的有效地址不在L2高速缓存112中,则预取电路可以发送信号给较高级的高速缓存和/或存储器。例如,预取电路602可以发送针对地址的预取请求给L3高速缓存,其随后可以搜索所请求的地址。
在某些情况下,在预译码器和调度器220试图从L2高速缓存预取I线和D线之前,预译码器和调度器220(或者,可选地,预取电路602)可以确定正在被预取的所请求的I线和D线是否已经包含在I高速缓存222或者D高速缓存224中,或者是否已经发出了针对所请求的I线或者D线的预取请求。例如,可以使用包含最近读取或者预取的历史或者D线地址的小高速缓存来确定是否已经为I线或者D线发出了预取请求,或者所请求的I线或者D线是否已经在I高速缓存222或者D高速缓存224中。
如果所请求的I线或者D线已经位于I高速缓存222或者D高速缓存224中,则L2高速缓存预取可能是不必要的,因此可以不被执行。在某些情况下,在通过之前的预取请求使得第二预取请求成为不必要的情况下,将当前有效地址存储在I线中也是不必要的,允许将其他有效地址存储在I线中(下面将要描述)。
在本发明的一种实施方式中,预译码器和调度器220可以继续预取I线(D线)直到已经读取了I线和/或D线的阈值次数为止。可以用任何适当的方式来选择该阈值。例如,可以根据被分别放置在I高速缓存和D高速缓存中的I线和/或D线的数量来选择该阈值。在I高速缓存和/或D高速缓存具有较大容量的情况下可以选择大阈值预取次数,而在I高速缓存和/或D高速缓存具有较小容量的情况下可以选择小阈值预取次数。
作为另外一种实施方式,可以根据正在被读取的I线内的条件转移指令的可预测性来选择I线预取的阈值次数。在某些情况下,可以预测条件转移指令的结果(例如,是否采用该分支),因此,可以预测要预取的适当I线。然而,当I线之间的分支预测数量增加时,预测的总体准确度变小,从而可能存在较小的机会来存取给定I线。当使用不可预测的转移指令的预取次数增加时,不可预测性的级别可能增加。因此,在一种实施方式中,可以选择I线预取的阈值次数,从而存取所预取的I线的所预测的可能性不会落到给定百分比以下。而且,在某些情况下,在到达不可预测的分支(例如,其中针对该分支的可预测性值低于可预测性的阈值的分支)的情况下,可以针对转移指令的两条路径读取I线(例如,针对所预测的分支路径和未预测的分支路径)。
作为另一个例子,可以根据所读取的D线内数据存取的可预测性来执行D线预取的阈值次数。在一种实施方式中,可以针对包含被之前被执行时导致D高速缓存未命中的数据存取指令定为目标的数据的D线发出D线预取。还可以针对导致D高速缓存未命中的数据存取指令存储可预测性数据。在存储可预测性数据的情况下,可以根据针对正在被预取的D线发生的D高速缓存未命中的相对可预测性来执行阈值次数的预取。
在某些情况下,所选择的用于I线和D线预取的阈值可以是根据样本指令的测试运行而选择的固定次数。在某些情况下,在设计的时候可以执行测试运行和阈值选择,而且可以将阈值预先编程到处理器110中。可选地,在程序执行的初始“训练”阶段(将在下面详细描述)期间可能发生测试运行。在另一种实施方式中,处理器110可以跟踪包含不可预测的转移指令和/或不可预测的数据存取的所预取的I线和D线的数量,并且只有在已经预取了包含不可预测的转移指令或者不可预测的数据存取指令的给定数量的I线和D线之后才停止预取I线和D线,从而预取的I线的阈值次数根据I线的执行历史而动态变化。
在本发明的一种实施方式中,可以将针对I线中的指令的数据目标地址存储在不同I线中。图7是示出根据本发明一种实施方式的、用于在正在被存储于多条I线中的单个I线中的数据存取指令的多个数据目标地址的框图。如图所示,I线1可以包含三个数据存取指令(I41、I51、I61),其存取在三个分离的D线(D线1、D线2、D线3,由弯曲实线示出)中的数据目标地址D21、D42、D53。在本发明的一种实施方式中,可以将与一个或多个数据存取指令的目标地址对应的地址存储在I线(I线0或者I线2)中,其在读取序列中与源I线(I线1)相邻。
当在I线1中检测到数据存取指令I41、I51、I61时(如上所述),可以将与D线1、D线2和D线3对应的数据目标地址也分别存储位置EA1中的I线0、I线1和I线2中(由弯曲虚线示出)。在某些情况下,为了通过数据存取指令I41、I51、I61来跟踪对目标数据地址D21、D42、D53的存取,可以将指示数据目标信息(例如I线1)的源的位置信息存储在例如配属到该I线的位置(LOC)控制比特中。
因此,可以将用于D线1和I线1的有效地址存储在I线0中,将用于I线2和D线2的有效地址存储在I线1中,并且将用于D线3的有效地址存储在I线2中。当读取I线0时,可以使用在I线0和I线1中所存储的有效地址来分别预取I线1和I线2。当I线0不包含存取D线1的数据存取指令时,可以使用在I线0中所存储的有效地址来预取D线1,从而如果/当I线2中的指令I41试图存取D线1中的数据D21时可以避免D高速缓存未命中。当预取I线1和2时可以类似地预取作为D线2和D线3的D线,从而如果/当I线1中的指令I51和I61试图分别存取数据位置D42和D53时,可以避免D高速缓存未命中。
在不是每个I线都包含被存储的数据目标地址的情况下,将用于I线中的指令的数据目标地址存储在不同I线中是有用的。例如,在当存取目标地址处的数据导致D高速缓存未命中时存储数据目标地址的情况下,一条I线可以包含几个导致D高速缓存未命中的数据存取指令(例如,三个指令),同时其他I线可能不包含导致D高速缓存未命中的任何数据存取指令。因此,可以将用于在一条I线中导致D高速缓存未命中的数据存取指令的一个或多个数据目标地址存储在另外的I线中,从而将数据目标地址的存储展开到其他I线中(例如,可以将三个数据目标地址中的两个分别存储在两条另外的I线中)。
存储用于I线的D线预取地址根据本发明的一种实施方式,当执行数据存取指令并且请求包含数据目标地址的D线导致D高速缓存未命中时,可以提取数据存取指令的数据目标地址并且存储在I线中。
图8是示出根据本发明一种实施方式的、用于存储与数据存取指令对应的数据目标地址的过程800的流程图。过程800可以在步骤802开始,在该步骤中从例如I高速缓存222读取I线。在步骤804,可以执行在所读取的I线中的数据存取指令。在步骤806中,可以进行关于包含被数据存取指令定为目标的数据的D线是否位于D高速缓存224中的确定。在步骤808,如果包含被数据存取指令定为目标的数据的D线不在D高速缓存224中,则存储被定为目标的数据的有效地址作为数据目标地址。通过记录与被定为目标的数据对应的数据目标地址,下一次从L2高速缓存112中读取I线,可以从L2高速缓存112中预取包含被定为目标的数据的D线。通过预取D线,在某些情况下,可以防止如果/当执行数据存取指令时否则可能发生的数据高速缓存未命中。
作为另一种选择,可以在执行的时候确定数据存取指令的数据目标地址并且存储在I线中,而不论数据存取指令是否导致D高速缓存未命中。例如,可以提取用于每个数据存取指令的数据目标地址并且存储在I线中。可选地,可以提取用于最经常执行的数据存储指令的数据目标地址并且存储在I线中。将在下面更加详细的讨论确定和存储数据目标地址的其他方式。
在本发明的一种实施方式中,可以不计算数据目标地址,直到执行存取数据目标地址的数据存取指令为止。例如,数据存取指令可以指定从数据寄存器中所存储的地址的偏移值,应该从该处进行数据存取。当执行数据存取时,可以计算目标数据的有效地址,并且作为数据目标地址进行存储。在某些情况下,可以存储整个有效地址。然而,在其他情况下,仅仅只能存储有效地址的一部分。例如,如果仅仅使用有效地址的较高位的32个比特来定位所高速缓存的、包含数据存取指令的目标数据的D线,则只可以为了预取D线的目的将这32个比特保存为数据目标地址。
在本发明的另一种实施方式中,可以确定数据目标地址而不执行数据存取指令。例如,当从L2高速缓存112中读取D线时,可以在所读取的D线中从数据存取指令中提取数据目标地址。
跟踪和记录D线存取历史在本发明的一种实施方式中,可以存储不同数量的数据存取历史信息。在某些情况下,数据存取历史可以指示将要(或者可能要)执行I线中的哪个数据存取指令。可选择地,数据存取历史可以指示哪个数据存取指令将要导致(或者已经导致了)D高速缓存未命中。可以根据所存储的在实时执行期间或者在预执行“训练”时间段期间所产生的数据存取历史信息来确定将哪个或者哪些数据目标地址存储在I线中(和/或预取哪些D线)。
根据一种实施方式,如上所述,可以仅仅存储与I线中最近执行的数据存取指令对应的数据目标地址。存储与I线中最近存取的数据对应的数据目标地址有效地预测当顺序读取I线时将存取相同的数据。因此,可以预取包含用于之前所执行的数据存取指令的目标数据的D线。
在某些情况下,可以使用一个或多个比特来记录数据存取指令的历史。可以使用这些比特来确定最经常存取哪些D线或者当被存取时哪些D线导致D高速缓存未命中。例如,如图5中所示,在I线(I线1)中所存储的控制比特CTL可能包含指示I线中的哪个数据存取指令之前被执行了或者之前导致了D高速缓存未命中的信息(LOC)。I线还可以包含关于何时执行了数据存取指令或者何时导致高速缓存未命中的历史(DAH)(例如,在一定数量的之前操作中所执行的或者导致高速缓存未命中的指令的执行的所监测次数内的次数)。
作为如何使用数据存取指令位置LOC和数据存取历史DAH的例子,考虑还没有被读取到L1高速缓存222中的、L2高速缓存112中的I线。当将I线读取到L1高速缓存222中时,预译码器和调度器220可以初始地确定该I线不具有数据目标地址,并且因此可以不预取另一条D线。
在训练期间执行所读取的I线中的指令时,处理器内核114可以确定是否正在执行I线内的数据存取指令。如果检查到数据存取指令,则在将数据目标地址存储在EA1之外还可以将I线内的数据存取指令的位置存储在LOC中。如果每个I线包含32个指令,则LOC可以是五比特二进制数字,从而可以将数字0-31(对应于每个可能的指令位置)存储在LOC中以指示退出转移指令。可选择地,在LOC指示源指令和源I线(如上面关于存储用于多条I线中的单个I线的有效地址所描述的那样)的情况下,LOC可以包含附加比特以指示I线内的位置以及哪个是数据存取指令位于其中的相邻I线。
在一种实施方式中,也可以将值写到DAH中,该DAH指示被执行或者导致D高速缓存未命中的位于LOC中的数据存取指令。例如,如果DAH是单个比特,则在I线中的指令的第一执行期间,当执行数据存取指令时,可以将0写到用于该指令DAH中。在DAH中所存储的0可以指示一弱预测在I线中所包含的指令的顺序执行期间将执行位于LOC处的数据存取指令。可选地,在DAH中所存储的0可以指示一弱预测在I线中所包含的指令的顺序执行期间位于LOC处的数据存取指令将导致D高速缓存未命中。
如果在I线中的指令的顺序执行期间再次执行位于LOC处的数据存取指令(或者导致D高速缓存未命中),则可以将DAH设置到1。在DAH中所存储的1指示一强预测位于LOC的数据存取指令将被再次执行或者再次导致D高速缓存未命中。
然而,如果再次读取相同I线(DAH=1)并且采用不同的退出转移指令,则LOC和EA1的值可以保持相同,但是可以将DAH清除到0,指示一弱预测在I线中所包含的指令的顺序执行期间将采用之前所采用的分支。
在DAH为0(指示一弱预测)并且执行与LOC所指示的数据存取指令不同的数据存取指令(或者与LOC所指示的数据存取指令不同的数据存取指令被执行并且导致D高速缓存未命中)的情况下,可以用数据存取指令的数据目标地址来盖写数据目标地址EA1,并且将LOC改变为与I线中的所执行的数据存取指令(或者导致D高速缓存未命中的数据存取指令)对应的值。
因此,在使用数据存取历史比特的情况下,I线可能包含所存储的、与数据目标地址对应的数据目标地址。相比于不经常被执行的或者不经常导致D高速缓存未命中的数据存取指令来说,可能优选这种有规律地被执行的数据存取指令或者导致D高速缓存未命中的存取指令。然而,如果弱预测了数据存取指令而且另一个数据存取指令被执行或者导致D高速缓存未命中,则可以将数据目标地址改变为与该数据存取指令对应的地址,从而当其他数据存取指令被正在有规律地执行或者(可选地)有规律地导致高速缓存未命中时,不优选所弱预测的数据存取指令。
在一种实施方式中,DAH可以包含多个历史比特,从而可以存储由LOC所指示的数据存取指令的更长的历史。例如,如果DAH是两个二进制比特,则00可以对应于非常弱的预测(在这种情况下,执行其他数据存取指令或者确定其他数据存取指令导致D高速缓存未命中将盖写数据目标地址和LOC),而01、10和11可以分别对应于弱、强和非常强的预测(在这种情况下,执行其他数据存取指令或者检测到其他D高速缓存未命中可能不盖写数据目标地址或者LOC)。作为例子,为了代替与强预测的D高速缓存未命中对应的数据存取地址,处理器配置100可以要求在I线中指令的三个连续执行时三个其他数据存取指令导致D高速缓存未命中。
而且,在一种实施方式中,在某些情况下,只有DAH比特指示非常强地预测D高速缓存未命中(例如,当处理器内核114试图存取D线时)的情况下操预取与数据目标地址对应的D线。可选地,可以将不同等级的可预测性(例如,与非常强的可预测性相对的强可预测性)选择作为用于预取D线的先决条件。
在本发明的一种实施方式中,可以使用多个数据存取历史(例如,DAH1、DAH2等)、多个数据存取指令位置(例如,LOC1、LOC2等)和/或多个有效地址。例如,在一种实施方式中,可以使用DAH1、DAH2等来跟踪多个数据存取历史,但是仅仅将与DAH1、DAH2等中最可能预测的数据存取和/或预测的D高速缓存未命中的一个对应的一个数据目标地址存储在EA1中。可选地,可以将多个数据存取历史和多个数据目标地址存储在单个I线中。在一种实施方式中,只有在数据存取历史指示由LOC所指定的给定数据存取指令可以预测(例如,将被执行和/或导致D高速缓存未命中)的情况下,才可以使用数据目标地址来预取D线。可选地,通过预译码器和调度器220可以仅仅预取与几个所存储的地址中最可预测的数据目标地址对应的D线。
如上所述,在本发明的一种实施方式中,可以使用数据存取指令是否导致D高速缓存未命中来确定是否存储数据目标地址。例如,如果给定数据存取指令很少导致D高速缓存未命中,则可以不存储预该数据存取指令对应的数据目标地址,即使可能比I线中的其他数据存取指令更加频繁地执行该数据存取指令也是如此。如果I线中的另一个数据存取指令较不频繁地被执行但是通常导致更多的D高速缓存未命中,则可以将与该另外的数据存取指令对应的数据目标地址对应的数据目标地址存储在I线中。如上所述,可以使用诸如一个或多个D高速缓存“未命中”标记之类的历史比特来确定哪个数据存取指令更可能导致D高速缓存未命中。
在某些情况下,因为D高速缓存未命中或者因为预取,所以可以使用I线中所存储的比特来指示将D线放置在D高速缓存224中。可以由处理器110来使用该比特来确定预取的有效性以防止高速缓存未命中。在某些情况下,预译码器和调度器220(或者可选地,预取电路602)还可以确定预取是不必要的并且相应地改变I线中的比特。在例如因为正在被预取的信息已经在I高速缓存222或者D高速缓存224中,所以在预取是不必要的情况下,可以将与导致更多的I高速缓存和D高速缓存未命中的存取指令对应的其他数据目标地址存储在I线中。
在一种实施方式中,数据存取指令是否导致D高速缓存未命中可以是用于确定是否存储用于数据存取指令的数据目标地址的唯一因素。在另一种实施方式种,执行数据存取指令的可预测性和数据存取指令是否将导致D高速缓存未命中的可预测性两者可以一同用于确定是否存储数据目标地址。例如,可以将与存取历史和未命中历史对应的值相加、相乘,或者在某些其他公式中使用(例如用作权重)来确定是否存储数据目标地址和/或预取与数据目标地址对应的D线。
在本发明的一种实施方式中,可以在运行时连续地跟踪和更新数据目标地址、数据存取地址和数据存取指令位置,从而当执行给定集合的指令时,在I线中所存储的数据目标地址和其他值可以变化。因此,例如执行程序时,可以动态地修改数据目标地址和预取的D线。
在本发明的另一种实施方式中,在一组指令的初始执行阶段期间(例如,在执行程序的初始“训练”时间段期间),可以选择和存储数据目标地址。还可以将初始执行阶段称为初始化阶段或者训练阶段。在训练阶段,可以跟踪数据存储历史和数据目标地址,并且可以将一个或多个数据目标地址存储在I线中(例如,根据上述条件)。当完成该阶段时,所存储的数据目标地址可以继续用于从L2高速缓存112中预取D线,然而,不再跟踪和更新在所读取的I线中的数据目标地址。
在一种实施方式中,可以使用包含数据目标地址的I线中的一个或多个比特来指示在初始执行阶段期间是否正在更新数据目标地址。例如,在训练阶段可以清除比特。在清除该比特的同时,在执行I线中的指令时可以跟踪数据存取历史并且可以更新数据目标地址。当完成序列阶段时,可以设置该比特。当设置该比特时,不再更新该数据目标地址,而且可以完成初始执行阶段。
在一种实施方式中,初始执行阶段可以继续一特定时间段(例如,直到经过了一定数量的时钟周期为止)。在一种实施方式中,当经过特定时间段并且退出初始执行阶段时,可以将最近所存储的数据目标地址保持存储在I线中。在另一中实施方式中,可以将与最频繁地执行的数据存取指令对应的或者与导致最频繁数量的D高速缓存未命中的数据存取指令对应的数据目标地址存储在I线中,并且用于随后的预取。
在本发明另一种实施方式中,初始执行阶段可以继续直到满足一个或多个退出条件为止。例如,在存储数据存取历史的情况下,初始执行阶段可以继续直到在I线中的数据存取指令变为可预测(或者可强预测)为止,或者直到D高速缓存未命中变为可预测(或者可强预测)为止。当给定数据存取指令变为可预测时,可以在I线中设置锁定比特以指示完成了初始训练阶段、以及可以将可强预测的数据存取指令的数据目标地址用于当从L2高速缓存112读取I线时所执行的每个随后的D线预取。
在本发明另一种实施方式中,可以在间歇训练阶段中修改I线中的数据目标地址。例如,可以存储用于每个训练阶段的频率和持续时间值。每次经过一定数量的与频率对应的时钟周期,训练阶段都可以被启动并且可以继续一特定的持续时间值。在另一种实施方式中,每次已经经过了一定数量的与频率对应的时钟周期,训练阶段都可以被启动并且继续直到满足特定条件为止(例如,如上所述的,直到达到针对指令的、指定的数据存取水平或者高速缓存未命中可预测性为止)。
在本发明的一种实施方式中,在系统100中所使用的每级高速缓存和/或存储器都可以包含在I线中所包含的信息的拷贝。在本发明的另一种实施方式中,只有指定级的高速缓存和/或存储器包含I线中所包含的信息(例如,数据存取历史和数据目标地址)。在一种实施方式中,可以将本领域普通技术人员公知的高速缓存一致性原理(cache coherency principles)用于更新在每级高速缓存和/或存储器中的I线的拷贝。
应该注意,在使用指令高速缓存的传统系统中,通常不由处理器110来修改指令。因此,在传统系统中,在某些时间之后从I高速缓存222中I线通常因为过期被清除(age out)而不是被写回到L2高速缓存112。然而,如上所述,在某些实施方式中,可以将经修改的I线写回到L2高速缓存112中,从而允许将预取的数据维持在较高级的高速缓存和/或存储器中。
作为例子,当处理器内核已经处理了I线中的指令时(可能导致数据目标地址和其他历史信息被更新),可以将I线写到I高速缓存222中(称为回写),这可能盖写在I高速缓存222中所存储的I线的较旧的版本。在一种实施方式中,只可以将I线放置在其中已经对I线中所存储的信息进行了改变的I高速缓存222中。
根据本发明的实施方式,当将经修改的I线写回到L2高速缓存112中时,根据改变来标记I线。在将I线写回到I高速缓存222并且被标记为改变的情况下,在不同量的时间中I线可以保持在I高速缓存中。例如,如果正在由处理器内核114频繁地使用I线,则I线可以几次被读取并且返回到I高速缓存222,每次都可能进行更新。然而如果不频繁地使用I线(称为过期(aging)),则可以从I高速缓存222中清除I线。当从I高速缓存222中清除I线时,可以将该I线写回到L2高速缓存112中。在一种实施方式中,可以只将I线写回到L2高速缓存中,在该L2中将该I线标记为修改过。在另一种实施方式中,可以总将I线写回到L2高速缓存112中。在一种实施方式中,可以可选地一次将I线写回到几个高速缓存级(例如,到L2高速缓存112和I高速缓存222)或者到除了I高速缓存222之外的级(例如,直接到L2高速缓存112)。
在本发明的一种实施方式中,可以将数据目标地址存储在除了I线之外的位置。例如,可以将数据目标地址存储在影子高速缓存中。图9是示出根据本发明一种实施方式用于预取指令和D线的影子高速缓存902的框图。
在本发明的一种实施方式中,当(例如,因为数据存取指令被频繁地执行或者导致D高速缓存未命中,和/或根据上面列出的任何条件)要存储用于I线中的数据存取指令的数据目标地址时,可以将与I线对应的地址或者地址的一部分(例如I线的有效地址或者有效地址的高位的32比特)以及数据目标地址(或者其一部分)作为条目存储在影子高速缓存902中。在某些情况下,可以将用于单个I线的多个数据目标地址存储在影子高速缓存902中。可选地,用于I线的每个条目可以包含多个数据目标地址。
当从L2高速缓存112读取信息时,影子高速缓存902(或者使用影子高速缓存902的其他控制电路,例如预译码器控制电路610)可以确定所读取的信息是否为I线。如果确定了L2高速缓存112的输出为I线,则可以搜索影子高速缓存902(例如,影子高速缓存902可以是可编址的内容)以寻找与所读取的I线对应的条目(或者多个条目)(例如带有与所读取的I线相同的有效地址的条目)。如果发现了对应的条目,则预译码器控制电路610、在预译码器和调度器220中的其他电路、和预取电路602可以使用与该条目关联的数据目标地址,以预取影子高速缓存902所指示的数据目标地址。可选地,可以将分支退出地址存储在影子高速缓存902中(排他地或者与数据目标地址一起)。如上所述,在某些情况下,可以用其中所存储的有效地址和/或在所读取和预取的I线中所存储的有效地址使用影子高速缓存902来读取I线和D线的链/组。
在本发明的一种实施方式中,影子高速缓存902还可以存储上述的控制比特(例如,历史和位置比特)。可选地,如上所述,可以将这种控制比特存储在I线中。在任何一种情况下,在一种实施方式中,可以根据上面关于确定要将哪些条目存储在I线中所列举的任何原则来管理影子高速缓存902中的条目。作为(每个都可以用影子高速缓存902实施的上述许多技术的)例子,可以将导致强预测的D高速缓存未命中的数据存取指令的数据目标地址存储在影子高速缓存902中,而可以将与弱预测的D高速缓存未命中对应的数据目标地址盖写。
在使用上述的技术确定要将哪个条目存储在影子高速缓存902中之外,在一种实施方式中,可以排他地或者包括上述技术地使用传统高速缓存管理技术来管理影子高速缓存902。例如,在影子高速缓存902中的条目可以具有过期比特,其指示存取影子高速缓存902中的条目的频率。如果频繁地存取给定条目,则过期值可以保持较小(例如,新(young))。然而,如果不频繁地存取条目,则过期值可以增加,并且在某些情况下可以将该条目从影子高速缓存902中去除。
结论如上所述,可以存储和使用被第一I线中所包含的数据存取指令定为目标的数据的地址,以从L2高速缓存中预取包含被定为目标的数据的D线。结果,可以减少D高速缓存未命中的数量和存取数据的对应延迟,从而导致处理器性能的增加。
虽然上面的描述是关于本发明的实施方式进行的,但是在不偏离本发明的基本范围的情况下可以考虑本发明其他和进一步的实施方式,在所附的权利要求中确定了本发明的范围。
权利要求
1.一种预取数据线的方法,包括(a)从第二级高速缓存中读取第一指令线;(b)从所述第一指令线中提取标识包含被第一指令线或者不同指令线所包含的数据存取指令定为目标的数据的第一数据线的地址;和(c)使用所提取的地址从第二级高速缓存中预取所述第一数据线。
2.根据权利要求1所述的方法,还包括在所述第一指令线中标识将所述第一指令线之外的指令定为目标的转移指令;提取与所标识的转移指令对应的退出地址;和使用所提取的退出地址从所述第二级高速缓存中预取包含被定为目标的指令的第二指令线。
3.根据权利要求2所述的方法,还包括针对所述第二指令线重复步骤(a)到(c)以预取包含被第二数据存取指令定为目标的第二数据的第二数据线。
4.根据权利要求3所述的方法,其中所述第二数据存取指令在所述第二指令线中。
5.根据权利要求3所述的方法,其中所述第二数据存取指令在所述第一指令线中。
6.根据权利要求1所述的方法,还包括重复步骤(a)到(c)直到预取阈值数量的数据线为止。
7.根据权利要求1所述的方法,还包括在所述第一指令线中标识将第二数据定为目标的第二数据存取指令;从所标识的第二数据存取指令中提取第二地址;和使用所提取的第二地址从第二级高速缓存中预取包含被定为目标的第二数据的第二数据线。
8.根据权利要求1所述的方法,其中存储所提取的地址作为指令线中所包含的有效地址。
9.根据权利要求8所述的方法,其中所述指令线是所述第一指令线。
10.根据权利要求8所述的方法,其中在所标识的转移指令的之前执行期间计算所述有效地址。
11.根据权利要求1所述的方法,其中所述第一指令线包含将两个或更多数据定为目标的两个或更多个数据存取指令,并且在所述第一指令线中所存储的数据存取历史值指示所标识的数据存取指令被预测为将导致高速缓存未命中。
12.根据权利要1所述的方法,还包括在所述第一指令线中标识将第一数据定为目标的数据存取指令。
13.一种处理器,包括第二级高速缓存;第一级高速缓存,将其配置为从所述第二级高速缓存中接收指令线,其中每个指令线包括一个或多个指令;处理器内核,将其配置为执行从第一级高速缓存取回的指令;和电路,将其配置为(a)从第二级高速缓存中读取第一指令线;(b)在所述第一指令线中提取标识包含被所述第一指令线或者不同指令线中所包含的数据存取指令定为目标的数据的第一数据线的地址;和(c)使用所提取的地址从第二级高速缓存中预取所述第一数据线。
14.根据权利要求13所述的处理器,其中将所述控制电路进一步配置为在所述第一指令线中标识将所述第一指令线之外的指令定为目标的转移指令;提取与所标识的转移指令对应的退出地址;和使用所提取的退出地址从所述第二级高速缓存中预取包含所述被定为目标的指令的第二指令线。
15.根据权利要求14所述的处理器,其中将所述控制电路进一步配置为针对所述第二指令线重复步骤(a)到(c)以预取包含被第二数据存取指令定为目标的第二数据的第二数据线。
16.根据权利要求15所述的处理器,其中所述第二数据存取指令在所述第二指令线中。
17.根据权利要求15所述的处理器,其中所述第二数据存取指令在所述第一指令线中。
18.根据权利要求14所述的处理器,其中将所述控制电路进一步配置为重复步骤(a)到(c)直到预取阈值数量的数据线为止。
19.根据权利要求14所述的处理器,其中将所述控制电路进一步配置为在所述第一指令线中标识将第二数据定为目标的第二数据存取指令;从所标识的第二数据存取指令中提取第二地址;和使用所提取的第二地址从第二级高速缓存中预取包含被定为目标的第二数据的第二数据线。
20.根据权利要求13所述的处理器,其中存储所提取的地址作为在指令线中所包含的有效地址。
21.根据权利要求20所述的处理器,其中所述指令线是所述第一指令线。
22.根据权利要求20所述的处理器,其中在所标识的转移指令的之前执行期间计算所述有效地址。
23.根据权利要求22所述的处理器,其中在训练阶段期间计算所述有效地址。
24.根据权利要求13所述的处理器,其中所述第一指令线包含将两个或更多数据定为目标的两个或者更多个数据存取指令,并且在所述第一指令线中所存储的数据存取历史值指示将所标识的数据存取指令预测为导致高速缓存未命中。
25.一种将数据目标地址存储在指令线中的方法,该方法包括执行所述指令线中的一个或多个指令;确定所述一个或多个指令是否存取数据线中的数据以及是否导致高速缓存未命中;和如果是,则将与所述数据对应的数据目标地址存储在预取机制可以存取的位置。
26.根据权利要求25所述的方法,其中所述位置是所述指令线。
27.根据权利要求26所述的方法,还包括用所述目标数据地址将所述指令写回到第二级高速缓存中。
28.根据权利要求26所述的方法,还包括用所述数据目标地址将所述指令线存储第二级高速缓存中;用所述数据目标地址从所述第二级高速缓存中读取所述指令线,并且将该指令线放置在第一级高速缓存中;和使用所存储的数据目标地址预取所述数据。
29.根据权利要求25所述的方法,其中所述位置是影子高速缓存。
30.根据权利预取25所述的方法,还包括将与所述一个或多个指令对应的数据存取历史信息存储在所述位置。
31.根据权利要求30所述的方法,还包括在所述指令线中的一个或多个指令的随后执行期间,执行所述指令线中的一个或多个第二指令;如果所述一个或多个第二指令存取第二数据线中的数据,其中该存取导致第二高速缓存未命中,则确定与所述一个或多个指令对应的所述数据存取历史信息是否指示可预测所述高速缓存未命中;如果不可预测所述高速缓存未命中,将第二数据目标地址配属到与所述第二数据线对应的所述指令线上。
32.根据权利要求25所述的方法,其中在重复地执行一定数量的指令线的初始执行阶段期间执行存储所述数据存取地址的操作。
33.根据权利要求25所述的方法,还包括执行所述指令线中的一个或多个第二指令;确定所述一个或多个第二指令是否分支到另一个指令线中的指令;和如果是,则将与所述其他指令线对应的退出地址存储在所述位置。
34.根据权利要求25所述的方法,其中所述数据存取地址是在一个或者多个所述指令的执行期间所计算出的有效地址。
全文摘要
本发明的实施方式提供用于预取指令线的方法和设备。在一种实施方式中,该方法包括从第二级高速缓存中读取第一指令线;从所述第一指令线中读取地址,该地址标识包含被所述第一指令线或者不同指令线中所包含的数据存取指令定为目标的数据的第一数据线;和使用所提取的地址从所述第二级高速缓存中预取所述第一数据线。
文档编号G06F12/08GK101013401SQ20071000800
公开日2007年8月8日 申请日期2007年2月5日 优先权日2006年2月3日
发明者戴维·A·卢克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1