用于预取指令线的方法和处理器的制作方法

文档序号:6571336阅读:397来源:国知局
专利名称:用于预取指令线的方法和处理器的制作方法
技术领域
本发明总体涉及计算机处理器领域。更具体地说,本发明涉及一种计算机处理器使用的高速缓冲存储机制。
背景技术
现代的计算机系统通常包含多个集成电路(IC),其中包括可以用于在所述计算机系统中处理信息的处理器。由处理器处理的数据可以包括由处理器执行的计算机指令以及由处理器使用计算机指令而操纵的数据。所述计算机指令和数据通常存储在计算机系统中的主存储器中。
处理器通常通过以一系列小步骤执行指令来处理指令。在一些情况下,为了增大由处理器处理的指令的数目(并因此提高处理器的速度),可以使处理器流水线化(pipeline)。流水线化指的是在处理器中提供分离的多个级(stage),其中,每个级执行用于执行指令所需要的一个或多个小步骤。在一些情况下,(除了其它电路之外)流水线也可以置于处理器中的被称为处理器核芯的部分中。一些处理器可以具有多个处理器核芯。
作为在流水线中执行指令的示例,当接收到第一指令时,第一流水线级可以处理所述指令的一小部分。当第一流水线级已经结束处理指令的该小部分时,第二流水线级可以开始处理所述第一指令的另一小部分,同时第一流水线级接收并开始处理第二指令的一小部分。因此,处理器可以同时(并行地)处理两个或多个指令。
为了提供对于数据和指令的更快的访问以及更好地利用处理器,处理器可以具有多个高速缓冲存储器。高速缓冲存储器是通常小于主存储器的存储器,并且通常与处理器制造在同一集成块(die)(即芯片)上。现代处理器通常具有多个高速缓冲存储器级别(level)。最接近处理器核芯的最快的高速缓冲存储器被称为第1级别高速缓冲存储器(L1高速缓冲存储器)。除了L1高速缓冲存储器之外,处理器通常还具有另一更大的高速缓冲存储器,被称为第2级别高速缓冲存储器(L2高速缓冲存储器)。在一些情况下,处理器可以具有其它的附加高速缓冲存储器级别(例如,L3高速缓冲存储器和L4高速缓冲存储器)。
为了向处理器提供用于填充(fill)处理器的流水线的每个级的足够指令,处理器可以从L2高速缓冲存储器以被称为指令线的包含多个指令的组来取出指令。所取出的指令线可以被置于L1指令高速缓冲存储器(I-高速缓冲存储器),其中,处理器的核芯可以访问在指令线中的指令。要由处理器处理的数据块可以类似地从L2高速缓冲存储器取出,并置于L1高速缓冲存储器数据高速缓冲存储器(D-高速缓冲存储器)中。
从较高的高速缓冲存储器级别取出信息以及将所述信息置于较低的高速缓冲存储器级别的处理可以被称为读取(fetching),并且通常需要一定的时间量(等待时间)。例如,如果处理器核芯请求信息并且所述信息不在L1高速缓冲存储器中(被称为高速缓冲存储器未中(cache miss)),则从L2高速缓冲存储器读取所述信息。当向下一个高速缓冲存储器/存储器级别搜索所请求的信息时,每个高速缓冲存储器未中导致另外的等待时间。例如,如果所请求的信息不在L2高速缓冲存储器中,则所述处理器可以在L3高速缓冲存储器或者在主存储器中查找所述信息。
在一些情况下,处理器可能比从高速缓冲存储器和/或存储器取出指令和数据更快地处理所述指令和数据。例如,在已经处理了指令线后,需要花时间来访问要处理的下一个指令线(例如,如果当向L1高速缓冲存储器搜索包含下一个指令的指令线时存在高速缓冲存储器未中)。当处理器正在从更高级别的高速缓冲存储器或存储器取出下一个指令线时,流水线级可能完成了处理先前的指令,并且没有剩下的要处理的指令(被称为流水线停止(stall))。当流水线停止时,处理器未被充分使用,并且损失流水线化的处理器核芯提供的益处。
因为指令(并且因此指令线)通常被依序处理,因此一些处理器试图通过读取依序编址的指令线的块来防止流水线停止。通过读取依序编址的指令线的块,当需要时在L1高速缓冲存储器中可以已经获得下一个指令线,以便处理器核芯当它结束处理在当前指令线中的指令时可以容易地访问在下一个指令线中的指令。
在一些情况下,读取依序编址的指令线的块不能防止流水线停止。例如,被称为退出分支指令(exit branch instructions)的一些指令可以使处理器分支到在依序编址的指令线的块之外的指令(被称为目标指令)。一些退出分支指令可以分支到不在当前指令线或下一个已经读取的依序编址的指令线中的目标指令。因此,当处理器确定进行该分支时,在L1高速缓冲存储器中可能不能获得包含所述退出分支的目标指令的下一个指令线。结果,流水线可能停止,并且处理器可能低效率地运行。
关于读取数据,在指令访问数据的情况下,处理器可能试图在L1高速缓冲存储器中定位包含所述数据的数据线。如果所述数据线不能被定位在L1高速缓冲存储器中,则所述处理器可能在对存储器的L2高速缓冲存储器和更高的级别搜索期望的数据线时停止。因为期望数据的地址可能直到执行指令时才知道,因此处理器可能直到执行所述指令时才能够去搜索期望的数据线。当处理器搜索数据线时,可能发生高速缓冲存储器未中,导致流水线停止。
一些处理器可以通过读取包含当前访问的数据地址附近的数据地址的数据线块,来防止这样的高速缓冲存储器未中。读取附近的数据线依赖于这样的假设当访问在数据线中的数据地址时,也将通常访问附近的数据地址(被称为引用局域性(locality of reference))。但是,在一些情况下,该假定可能证明是错误的,如通过指令来访问不在当前数据线附近的数据线中的数据,由此导致高速缓冲存储器未中和处理器低效率。
因此,需要在使用高速缓冲存储的存储器的处理器中的取出指令和数据的改进的方法。

发明内容
本发明的实施例提供了一种用于预取指令线的方法和装置。在一个实施例中,所述方法包括(a)从第2级别高速缓冲存储器读取第一指令线;(b)在第一指令线中识别以在第一指令线外部的指令为目标的分支指令;(c)从所识别的分支指令提取地址;以及(d)使用所提取的地址从第2级别高速缓冲存储器预取包含作为目标的指令的第二指令线。
在一个实施例中,提供了处理器。所述处理器包括第2级别高速缓冲存储器、第1级别高速缓冲存储器、处理器核芯、和电路。第1级别高速缓冲存储器被配置来从第2级别高速缓冲存储器接收指令线,其中,每个指令线包括一个或多个指令。所述处理器核芯被配置来执行从第1级别高速缓冲存储器取出的指令。所述电路被配置来(a)从第2级别高速缓冲存储器读取第一指令线;(b)在第一指令线中识别以在第一指令线外部的指令为目标的分支指令;(c)从所识别的分支指令提取地址;以及(d)使用所提取的地址从第2级别高速缓冲存储器预取包含作为目标的指令的第二指令线。
在一个实施例中,提供了一种用于在指令线中存储退出分支地址的方法。所述指令线包括一个或多个指令。所述方法包括执行在所述指令线中的一个或多个指令之一;确定是否所述一个或多个指令中的该一个分支到在另一指令线中的指令;以及,如果如此的话,则将退出地址附加到对应于另一指令线的指令线。


为了使得获得和详细地理解本发明的上述特征、优点和目的,可以通过参见在附图中图解的本发明的实施例来获得上面简单总结的本发明的更具体的说明。
但是,应当注意,所附的附图仅仅图解本发明的典型实施例,因此不被理解为限制其范围,因为本发明可以允许其它等同效果的实施例。
图1是描述按照本发明的一个实施例的系统的方框图。
图2是描述按照本发明的一个实施例的计算机处理器的方框图。
图3是描述按照本发明的一个实施例的多个示例性指令线(I-线)的图。
图4是描述按照本发明的一个实施例的用于防止L1I-高速缓冲存储器未中的处理的流程图。
图5是描述按照本发明的一个实施例的包含分支退出地址的I-线的方框图。
图6是描述按照本发明的一个实施例的用于预取指令和数据线的电路的方框图。
图7是描述按照本发明的一个实施例的用于存储对应于退出分支指令的分支退出地址的处理的流程图。
具体实施例方式
本发明的实施例提供了一种用于预取指令线的方法和装置。对于一些实施例,可以对被读取的指令线检查分支到位于所述指令线外部的(目标)指令的“退出分支指令”。这些退出分支指令的目标地址可以被提取并用于从L2高速缓冲存储器预取包含作为目标的指令的指令线。结果,如果/当进行退出分支时,作为目标的指令线可能已经在L1指令高速缓冲存储器(“I-高速缓冲存储器”)中,由此避免在I-高速缓冲存储器中的高代价的未中,并且改进整体性能。
对于一些实施例,预取的数据可以被存储在该预取数据涉及的对应的信息块(例如,指令线或者数据线)中的传统高速缓冲存储器的存储器中。当从高速缓冲存储器的存储器读取信息的对应块时,所述信息块可以被检查并用于预取其它的、相关联的信息块。然后可以使用在每个其它预取的信息块中存储的预取数据来执行预取。通过使用在读取的信息块内的信息来预取与读取的信息块相关联的其它信息块,可以防止与被读取的信息块相关联的高速缓冲存储器未中。
按照本发明的一个实施例,在传统的高速缓冲存储器中将预取和预测数据存储为信息块的一部分可以不需要专门用来存储预取和预测数据(例如,用于数据线和/或指令线的预取和预测数据)的特殊高速缓冲存储器或者存储器。然而,虽然下面相对于在指令线中存储这样的信息而进行说明,但是,这样的信息可以被存储在任何存储单元(location),包括用于存储这样的历史信息的特殊高速缓冲存储器或者存储器。在一些情况下,可以使用不同高速缓冲存储器(和高速缓冲存储器线)、缓冲器、特定用途高速缓冲存储器、和其它存储单元的组合来存储在此所描述的历史信息。
下面是在附图中所描述的本发明的实施例的详细说明。所述实施例是示例并且被详细说明以清楚地阐述本发明。但是,所提供的细节量不意欲限制实施例的预期改变;而是相反,本发明要涵盖落入由所附的权利要求限定的本发明的精神和范围内的所有修改、等同物和替代品。
本发明的实施例可以被用于系统,诸如计算机系统,下面相对于诸如计算机系统的系统来说明本发明的实施例。在此所使用的系统可以包括使用处理器和高速缓冲存储器的存储器的任何系统,包括个人计算机、因特网设备、数字媒体设备、便携式数字助理(PDA)、便携式音乐/视频播放器和视频游戏控制台。虽然高速缓冲存储器的存储器可以与使用所述高速缓冲存储器的存储器的处理器位于同一集成块上,但是,在一些情况下,处理器和高速缓冲存储器的存储器可以位于不同的集成块(例如,在分离的模块内的分离芯片或者在单个模块中的分离芯片)上。
虽然下面关于具有多个处理器核芯和多个L1高速缓冲存储器的处理器来进行说明,其中,每个处理器核芯使用流水线来执行指令,但是本发明的实施例可以用于使用高速缓冲存储器的任何处理器,包括具有单个处理核芯的处理器和/或在执行指令中不使用流水线的处理器。总体上,可以将本发明的实施例用于任何处理器,并且不限于任何特定配置。
虽然下面关于具有被划分为L1指令高速缓冲存储器(L1I-高速缓冲存储器)和L1数据高速缓冲存储器(L1D-高速缓冲存储器)的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,并且关于处理器110的单个核芯114而被说明。在一个实施例中,每个核芯114可以相同(例如,包含具有相同的流水线级的相同流水线)。在另一个实施例中,每个核芯114可以不同(例如,包含具有不同级的不同流水线)。
在本发明的一个实施例中,L2高速缓冲存储器可以包含被处理器110使用的指令和数据的一部分。在一些情况下,处理器110可以请求在L2高速缓冲存储器112中不包含的指令和数据。当被请求的指令和数据未被包含在L2高速缓冲存储器112中时,所请求的指令和数据可以(从更高级别的高速缓冲存储器,或者从系统存储器102)被取出,并且被置于L2高速缓冲存储器中。当所述处理器核芯114从L2高速缓冲存储器112请求指令时,所述指令可以首先被预解码器和调度器220处理(下面更详细说明)。
在本发明的一个实施例中,在图1中所述的L1高速缓冲存储器116可以被划分为两个部分L1指令高速缓冲存储器222(L1I-高速缓冲存储器222),用于存储指令线;以及L1数据高速缓冲存储器224(L1D-高速缓冲存储器224),用于存储数据线(D-线)。在从L2高速缓冲存储器112取出的I-线被预解码器和调度器220处理后,所述I-线可以置于I-高速缓冲存储器222中。
在本发明的一个实施例中,可以从成组的L2高速缓冲存储器112和I-高速缓冲存储器222读取指令,所述成组的L2高速缓冲存储器112和I-高速缓冲存储器222被称为指令线(I-线)并被置于I-线缓冲器226中,其中,处理器核芯114可以访问在该I-线中的指令。在一个实施例中,可以使用I-高速缓冲存储器222和I-线缓冲器226的一部分来存储有效地址和控制比特(EA/CTL),所述有效地址和控制比特(EA/CTL)可以被核芯114和/或预解码器和调度器220使用来处理例如每个I-线,以实现如下所述的指令预取机制。
从L2高速缓冲存储器预取指令线图3是描述按照本发明的一个实施例的多个示例性I-线的图。在一个实施例中,每个I-线可以包含多个指令(例如I1、I2、I3等)、以及诸如有效地址和控制比特之类的控制信息。在一定程度上,在每个I-线中的指令可以依序执行,从而首先执行指令I1,然后执行I2,等等。因为依序执行指令,因此也通常依序执行I-线。因此,在一些情况下,每次从L2高速缓冲存储器112向I-高速缓冲存储器222移动I-线时,预解码器和调度器220可以检查I-线(例如I-线1),并且预取下一顺序的I-线(例如I-线2),以便下一I-线被置于I-高速缓冲存储器222中,并且可由处理器核芯114访问。
在一些情况下,由处理器核芯114执行的I-线可以包括分支指令(例如条件分支指令)。分支指令是分支到另一个指令(在此被称为目标指令)的指令。在一些情况下,所述目标指令可以与分支指令在同一I-线内。例如,在图3中所描述的指令I21可以指定如果满足一定条件(例如,如果在存储器中存储的值是0)则应当执行目标指令I41。因为包含目标指令的I-线(I-线1)可能已经在I-高速缓冲存储器222中,因此如果进行分支到指令I41,则可能不发生I-高速缓冲存储器未中,使得处理器核芯114能够继续有效地处理指令。
在一些情况下,分支指令可以分支到在包含该分支指令的当前I-线外部的指令,分支到当前I-线之外的I-线的分支指令在此被称为退出分支指令或者退出分支。退出分支指令可以是无条件的分支(例如,总是分支)或者条件分支指令(例如,如果等于0则分支)。例如,如果满足对应的条件,则在I-线1中的指令I51可以是分支到在I-线2中的指令I42的条件分支指令。在一些情况下,假定I-线2成功读取并且已经定位在I-高速缓冲存储器222中,如果进行条件分支,则处理器核芯114可以成功地从I-高速缓冲存储器222请求指令I42,而不会发生I-高速缓冲存储器未中。
但是,在一些情况下,条件分支指令(例如,指令I61)可以分支到不位于I-高速缓冲存储器222内的I-线中的指令(例如,在I-线X中的指令I4x),导致高速缓冲存储器未中和处理器110的低效率运行。
按照本发明的一个实施例,可以通过按照从当前被读取的I-线提取的分支退出地址而预取目标I-线,来降低I-高速缓冲存储器未中的次数。
图4是描述按照本发明的一个实施例的用于防止I-高速缓冲存储器未中的处理400的流程图。处理400可以在步骤404开始,其中,从L2高速缓冲存储器112读取I-线。在步骤406,可以识别从I-线退出的分支指令,并且在步骤408,可以提取被该退出分支指令作为目标的指令的地址(称为分支退出地址)。然后,在步骤410,可以使用所述分支退出地址来从L2高速缓冲存储器112预取包含该作为目标的指令的指令线。通过预取包含该作为目标的指令的指令线并且将预取的指令置于I-高速缓冲存储器222中,如果/当取该退出分支时,由此可以防止高速缓冲存储器未中。
在一个实施例中,可以直接在I-线中存储(向I-线附加)所述分支退出地址。图5是描述按照本发明的一个实施例的包含I-线分支退出地址(EA1)的I-线(I-线1)的方框图。所存储的分支退出地址EA1可以是有效地址或者有效地址的一部分。如所述,分支退出地址EA1可以识别包含被分支指令I61作为目标的指令I4x的I-线。
按照一个实施例,所述I-线也可以存储其它的有效地址(例如EA2)和控制比特(例如CTL)。如下所述,可以使用其它的有效地址来预取与在I-线中的数据访问指令或者附加分支指令地址相对应的数据线。控制比特CTL可以包括一个或多个比特,它们指示分支指令的历史(CBH)、以及在I-线内的分支指令的位置(CB-LOC)。下面也说明在I-线中存储的信息的使用。
示例性预取电路图6是描述按照本发明的一个实施例的用于预取指令和数据线的电路的方框图。在本发明的一个实施例中,所述电路可以预取仅仅D-线或者仅仅I-线。在本发明的另一个实施例中,所述电路可以预取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)。然后可以使用选择(SEL)信号来由选择电路608选择所述有效地址。所选择的有效地址可以然后被输出到例如预取电路602,来作为用于从L2高速缓冲存储器112预取对应的I-线或D-线的32比特预取地址。
在一些情况下,所读取的I-线可以包含对应于要从主存储器预取的第二I-线的单个有效地址(例如,包含由退出分支指令作为目标的指令)。在其它情况下,所述I-线可以包含要从主存储器预取的目标I-线的有效地址、以及要从主存储器预取的目标D-线的有效地址。在其它实施例中,每个I-线可以包含要从主存储器预取的多个I-线和/或者多个D-线的有效地址。按照一个实施例,当I-线包含要预取的多个有效地址时,所述地址可以被临时存储(例如,在预解码器控制电路610或者I-线地址选择电路604或者一些其它的缓冲器中),同时每个有效地址被发送到预取电路602。在另一个实施例中,预取地址可以被并行发送到预取电路602和/或L2高速缓冲存储器112。
预取电路602可以确定是否所请求的有效地址在L2高速缓冲存储器112中。例如,预取电路602可以包含内容可编址存储器(CAM),诸如翻译后备缓冲器(TLB),它可以确定是否所请求的有效地址在L2高速缓冲存储器112中。如果所请求的有效地址在L2高速缓冲存储器112中,则预取电路602可以向L2高速缓冲存储器发出请求,以读取对应于所请求的有效地址的实际地址。对应于实际地址的信息块可以然后被输出到选择电路620,并且被引导到适当的L1高速缓冲存储器(例如,I-高速缓冲存储器222或D-高速缓冲存储器224)。如果预取电路602确定所请求的有效地址不在L2高速缓冲存储器112中,则预取电路可以向更高级别的高速缓冲存储器和/或存储器发送信号。例如,预取电路602可以向L3高速缓冲存储器发送对于地址的预取请求,然后可以向L3高速缓冲存储器搜索所请求的地址。
在一些情况下,在预解码器和调度器220试图从L2高速缓冲存储器112预取I-线或D-线之前,预解码器和调度器220(或者,作为选项,预取电路602)可以确定是否正在被预取的所请求的I-线或者D-线已经包含在I-高速缓冲存储器222或者D-高速缓冲存储器224中。如果所请求的I-线或D-线已经位于I-高速缓冲存储器222或者D-高速缓冲存储器224中,则L2高速缓冲存储器预取可能没有必要,因此可能不执行。在一些情况下,当使得预取不必要时,在I-线中存储当前的有效地址也可能不必要,使得其它有效地址可以被存储在I-线中(如下所述)。
在一个实施例中,当从L2高速缓冲存储器112读取每个预取线的信息时,所述预取信息也可以被预解码器和调度器220检查以确定是否所预取信息线是I-线。如果所预取信息是I-线,则可以由预解码器控制电路610来检查I-线,以确定是否所预取的I-线包含任何对应于例如另一I-线的任何有效地址,所述另一I-线包含被在所预取的I-线中的分支指令作为目标的指令。如果所预取I-线包含指向另一I-线的有效地址,则也可以预取所述另一I-线。可以对该第二预取I-线重复同一处理,以便可以根据在每个I-线中包含的分支退出地址来预取多个I-线的链。
在本发明的一个实施例中,预解码器和调度器220可以继续预取I-线(和D-线),直到已经读取了阈值数目的I-线和/或D-线。可以以任何适当的方式来选择所述阈值。例如,可以根据可以被分别置于I-高速缓冲存储器和D-高速缓冲存储器中的I-线和/或D-线的数目来选择阈值。当I-高速缓冲存储器和/或D-高速缓冲存储器具有大容量时,可以选择大阈值数目的预取,而当I-高速缓冲存储器和/或D-高速缓冲存储器具有小容量时,可以选择小阈值数目的预取。
作为另一个示例,可以根据在正被读取的I-线内的条件分支指令的可预测性来选择预取的阈值数目。在一些情况下,可以预测条件分支指令的结果(例如,该分支是否被进行),因此,可以预测要预取的适当I-线。但是,当在I-线之间的分支预测的数目提高时,预测的整体精度可能变小,使得访问给定的I-线的机会变小。当使用不可预测分支指令的预取数目增加时,不可预测性的级别可能提高。
因此,在一个实施例中,可以选择预取的阈值数目,从而访问预取I-线的预测可能性不落入低于给定的百分比。在一些情况下,所选择的阈值可以是按照采样指令的测试运行而选择的固定数目。在一些情况下,可以在设计时执行阈值的测试运行和选择,并且可以将阈值预先编程到处理器110中。可选地,测试运行可以发生在程序执行的初始“训练(training)”阶段期间(如下更详细所述)。在另一个实施例中,处理器110可以跟踪包含不可预测分支指令的预取I-线的数目,并且仅仅在已经预取了包含不可预测分支指令的给定数目的I-线后才停止预取I-线,以便所预取I-线的阈值数目根据I-线的内容而动态地改变。而且,在一些情况下,当达到不可预测分支时(例如,分支的不可预测性值低于可预测性阈值情况下的分支),可以对分支指令的路径读取I-线(例如,对预测分支路径和未预测分支路径二者)。
存储指令线的分支退出地址按照本发明的一个实施例,可以通过执行在I-线中的指令来确定在I-线内的分支指令和对应于那些分支指令的目标的分支退出地址。执行I-线中指令也可以用于记录分支指令的分支历史,从而确定分支将被跟随到在另一I-线中的目标指令由此引起I-高速缓冲存储器未中的可能性。
图7是描述按照本发明的一个实施例的、用于存储对应于退出分支指令的分支退出地址的处理700的流程图。所述处理700可以在步骤704开始,在此,例如从I-高速缓冲存储器222读取指令线。在步骤706,可以执行在所读取的指令线中的退出分支。在步骤708,如果进行该退出分支,则可以确定被该退出分支作为目标的指令是否位于读取的指令线中。在步骤710,如果由该退出分支作为目标的指令不在指令线中,则将作为目标的指令的有效地址存储为退出地址。通过记录对应于作为目标的指令的分支退出地址,当下一次从L2高速缓冲存储器112读取指令线时,可以从L2高速缓冲存储器112预取包含作为目标的指令的I-线。
在本发明的一个实施例中,可以直到执行了分支到所述分支退出地址的分支指令时才计算分支退出地址。例如,所述分支指令可以指定从所述分支应当指向的当前指令的地址的偏移值。当执行分支指令并进行该分支时,该分支目标的有效地址可以被计算并存储为分支退出地址。在一些情况下,可以存储整体的有效地址。但是,在其它情况下,仅仅可以存储有效地址的一部分。例如,可以仅仅使用有效地址的高阶32比特来定位包含分支的目标指令的高速缓冲存储的I-线,因此,可以仅仅将那32比特存储为用于预取I-线的分支退出地址。
跟踪和记录分支历史在本发明的一个实施例中,可以存储各种量的分支历史信息。在一些情况下,分支历史可以指示在I-线中的哪个分支或者哪些分支将被进行或者已经进行。可以根据在实时执行期间或者在预执行“训练”期间产生的所存储的分支历史信息来确定在I-线中存储了哪个或者哪些分支退出地址。
按照一个实施例,如上所述,可以存储对应于I-线中最近进行的退出分支的分支退出地址。存储对应于I-线中最近进行的分支的分支退出地址有效地预测出当随后读取I-线时将进行同一退出分支。因此,可以预取包含先前进行的退出分支指令的目标指令的I-线。
在一些情况下,可以使用一个或多个比特来记录从I-线退出的退出分支的历史,并且预测当执行在所读取的I-线中的指令时将进行哪个退出分支。例如,如图5中所示,在指令线(I-线1)中存储的控制比特CTL可以包含用于指示I-线中哪个退出分支先前被进行的信息(CB-LOC)、以及何时进行了所述分支的历史(CBH)(例如,在某个数目的先前执行中多少次进行那个分支)。
作为可以如何使用分支位置CB-LOC和分支历史CBH的示例,考虑还没有被读取到L1高速缓冲存储器222的L2高速缓冲存储器112中的I-线。当向L1高速缓冲存储器222读取I-线时,预解码器和调度器220可以确定该I-线不具有分支退出地址,并且因此可以不预取另一I-线。可选地,预解码器和调度器220可以从当前的I-线预取位于下一顺序地址的I-线。
当执行在所读取的I-线中的指令时,处理器核芯114可以确定在I-线中的分支是否分支到在另一I-线中的目标指令。如果检测到这样的退出分支,则除了存储EA1中的分支退出地址之外,还在CB-LOC中存储该I-线内的分支的位置。如果每个I-线包含32个指令,则CB-LOC可以是5比特的二进制数,因此数0-31(对应于每个可能的指令位置)可以存储在CB-LOC中以指示退出分支指令。
在一个实施例中,值也可以被写入到CBH中,CBH指示进行了位于CB-LOC的退出分支指令。例如,如果CBH是单个比特,则在I-线中的指令的首次执行期间,当执行退出分支指令时,可以向CBH写入0。在CBH中存储的0可以指示这样的弱预测,即在I-线中包含的指令的随后执行期间将进行位于CB-LOC的退出分支指令。
如果在I-线中的指令的随后执行期间再次进行位于CB-LOC的退出分支,则CBH将被设置为1。在CBH中存储的1可以指示如下强预测,即将再次进行位于CB-LOC的退出分支指令。
但是,如果再次读取同一I-线(CBH=1)并且进行不同的退出分支指令,则CB-LOC和EA1的值可以保持相同,但是,CBH可以被清空为0,用于指示弱预测,即在I-线中包含的指令的随后执行期间将进行先前取用的分支。
当CBH是0(指示弱分支预测)并且进行不同于由CB-LOC指示的退出分支的退出分支时,可以以所进行的退出分支的目标地址来盖写分支退出地址EA1,并且可以将CB-LOC改变为对应于在I-线中所进行的退出分支的值。
因此,当使用分支历史比特时,I-线可以包含对应于预测的退出分支的所存储的分支退出地址。这样经常地进行的退出分支可以比不常进行的退出分支更可取。但是,如果弱预测出退出分支并且进行另一退出分支,则分支退出地址可以被改变为对应于所进行的退出分支的地址,以便当经常地进行其它退出分支时,弱预测的退出分支不是优选的。
在一个实施例中,CBH可以包含多个历史比特,以便可以存储由CB-LOC指示的分支指令的较长的历史。例如,如果CBH是两个二进制比特,则00可以对应于很弱的预测(在这种情况下,进行其它分支将盖写分支退出地址和CB-LOC),而01、10和11可以分别对应于弱、强和很强的预测(在这种情况下,进行其它的分支可不盖写分支退出地址或者CB-LOC)。作为示例,为了替换对应于强预测的退出分支的分支退出地址,可能需要在I-线中的指令的三次连续执行时进行三个其它的退出分支。
在本发明的一个实施例中,可以使用多个分支历史(例如,CBH1、CBH2等)、多个分支位置(例如,CB-LOC1、CB-LOC2等)和/或多个有效地址。例如,在一个实施例中,可以使用CBH1、CBH2等来跟踪多个分支历史,而在EA1中仅仅可以存储对应于CBH1、CBH2等中的最可预测分支的一个分支退出地址。可选地,可以在单个I-线中存储多个分支历史和多个分支退出地址。在一个实施例中,仅仅当分支历史指示可以预测由CB-LOC指定的给定分支时,所述分支退出地址可以用于预取I-线。可选地,可以由预解码器和调度器220预取仅仅对应于在多个所存储地址中的最可预测的分支退出地址的I-线。
在本发明的一个实施例中,可以使用是否退出分支指令引起I-高速缓冲存储器未中来确定是否存储分支退出地址。例如,如果给定的退出分支很少引起I-高速缓冲存储器未中,则可以不存储对应于退出分支的分支退出地址,即使可以比在I-线中的其它退出分支更经常地进行所述退出分支。如果在I-线中的另一个退出分支不常被进行,而是总体上引起更多的I-高速缓冲存储器未中,则可以在I-线中存储对应于所述其它退出分支的分支退出地址。诸如I-高速缓冲存储器“未中”标志的历史比特可以如上所述用于确定哪个退出分支最可能引起I-高速缓冲存储器未中。
在一些情况下,在I-线中存储的比特可以用于指示是否因为I-高速缓冲存储器未中或者因为预取而在I-高速缓冲存储器222中设置了指令线。所述比特可以由处理器110使用来确定在防止高速缓冲存储器未中过程中的预取的有效性。在一些情况下,预解码器和调度器220(或者可选地,预取电路602)也可以确定预取是不必要的,并且因此改变在I-线中的比特。当,例如,因为正在被预取的信息已经在I-高速缓冲存储器222或者D-高速缓冲存储器224中,因而预取不必要时,可以在I-线冲存储对应于引起更多的I-高速缓冲存储器未中和D-高速缓冲存储器未中的指令的其它分支退出地址。
在一个实施例中,是否退出分支引起I-高速缓冲存储器未中可以是用于确定是否存储退出分支的分支退出地址的唯一因素。在另一实施例中,退出分支的可预测性和是否退出分支将引起I-高速缓冲存储器未中的可预测性可以一起用于确定是否存储分支退出地址。例如,可以在一些其它公式中相加、相乘或者使用对应于分支历史和I-高速缓冲存储器未中历史的值(例如作为权重),以确定是否存储分支退出地址和/或预取对应于该分支退出地址的I-线。
在本发明的一个实施例中,可以在运行时间连续地跟踪和更新分支退出地址、退出分支历史和退出分支位置,以便当执行给定的一组指令时,分支退出地址和在I-线中存储的其它值可以随着时间而改变。因此,例如,当执行程序时,可以动态地修改分支退出地址和预取的I-线。
在本发明的另一实施例中,可以在一组指令的初始执行阶段期间(例如在其中执行程序的初始时段期间)选择和存储分支退出地址。初始执行阶段也可以被称为初始化阶段或者训练阶段。在初始化阶段期间,可以跟踪分支历史和分支退出地址,并且可以(例如按照如上所述的标准)在I-线中存储一个或多个分支退出地址。当完成初始执行阶段时,所存储的分支退出地址可以继续用于从L2高速缓冲存储器112预取I-线,但是,可以不再跟踪和更新在所读取的I-线中的一个或多个分支退出地址。
在一个实施例中,在包含所述一个或多个分支退出地址的I-线中的一个或多个比特可以用于指示是否在初始执行阶段期间正在更新分支退出地址。例如,可以在训练阶段期间清空比特。当所述比特被清空时,在执行在I-线中的指令时,可以跟踪分支历史,并且可以更新一个或多个分支退出地址。当完成训练阶段时,可以置位所述比特。当置位所述比特时,可以不再更新所述一个或多个分支退出地址,并且初始执行阶段可以完成。
在一个实施例中,初始执行阶段可以持续指定的时段(例如,直到已经过去了多个时钟周期)。在一个实施例中,当所述指定时段已经过去并且退出初始执行阶段时,最近存储的分支退出地址可以保持存储在I-线中。在另一实施例中,对应于最常进行的退出分支、或者对应于引起最频繁次数的I-高速缓冲存储器未中的退出分支的分支退出地址可以被存储在I-线中并且用于随后的预取。
在本发明的另一个实施例中,初始执行阶段可以继续,直到满足一个或多个退出标准。例如,当存储分支历史时,初始执行阶段可以继续,直到在I-线中的分支之一变得可以预测(或者可以强预测),或者直到I-高速缓冲存储器未中变为可以预测(或者可以强预测)。当给定的退出分支变为可预测时,可以在I-线中置位锁定比特,用于指示初始训练阶段完成,并且所述可强预测的退出分支的分支退出地址可以用于当从L2高速缓冲存储器112读取I-线时执行的每个随后的预取。
在本发明的另一个实施例中,可以以间歇的训练阶段来修改在I-线中的分支退出地址。例如,可以存储每个训练阶段的频率和持续时间值。每次对应于该频率的多个时钟周期已经过去时,训练阶段可以启动,并且可以持续所指定的持续时间值。在另一个实施例中,每次对应于该频率的多个时钟周期已经过去时,训练阶段可以启动和持续,直到满足了所指定的条件(例如,直到达到了分支的分支可预测性的指定级别,如上所述)。
在本发明的一个实施例中,在系统100中使用的高速缓冲存储器和/或存储器的每个级别可以包含在I-线中包含的信息的拷贝。在本发明的另一个实施例中,仅仅高速缓冲存储器和/或存储器的所指定级别可以包含在I-线中包含的信息(例如,分支历史和退出分支)。在一个实施例中,可以使用本领域内的技术人员公知的高速缓冲存储器的一致性原理(coherency principle)来更新在高速缓冲存储器和/或存储器的每个级别中的I-线的拷贝。
注意,在使用指令高速缓冲存储器的传统系统中,通常不由处理器110来修改指令。因此,在传统的系统中,通常I-线在被处理后丢弃,而不是被写回I-高速缓冲存储器。但是,如在此所述,在一些实施例中,修改的I-线可以被写回I-高速缓冲存储器222中。
作为示例,当已经由处理器核芯处理了在I-线中的指令(可能使得更新分支退出地址和其它的历史信息)时,可以向I-高速缓冲存储器222中写入I-线(称为写回),可能盖写在I-高速缓冲存储器222中存储的I-线的更旧的版本。在一个实施例中,当已经对在I-线中存储的信息进行改变时,I-线可以仅仅被置于I-高速缓冲存储器222中。
按照本发明的一个实施例,当向I-高速缓冲存储器222写回修改的I-线时,可以将I-线标注为被改变。当I-线被写回I-高速缓冲存储器222并且被标注为被改变时,所述I-线可以在I-高速缓冲存储器中保持不同的时间量。例如,如果由处理器核芯114经常使用I-线,则I-线可以被读取并返回到I-高速缓冲存储器222多次,并可能每次被更新。但是,如果不频繁使用I-线(称为老化(aging)),则可以从I-高速缓冲存储器222清除该I-线。当从I-高速缓冲存储器222清除该I-线时,可以向L2高速缓冲存储器112写回I-线。在一个实施例中,只在该I-线标注为被修改时,可以向L2高速缓冲存储器写回该I-线。在另一个实施例中,I-线可以总被写回到L2高速缓冲存储器112。在一个实施例中,可以可选地将I-线一次写回多个高速缓冲存储器级别(例如写回到L2高速缓冲存储器112和I-高速缓冲存储器222)、或者除了I-高速缓冲存储器222之外的级别(例如,直接写回到L2高速缓冲存储器112)。
结论如上所述,由在第一I-线中包含的退出分支指令作为目标的指令的地址可以被存储并用于从L2高速缓冲存储器预取包含作为目标的指令的第二I-线。结果,可以减少I-高速缓冲存储器未中的数目和访问指令的相应的等待时间,使得处理器性能提高。
虽然上述涉及本发明的实施例,但是在不脱离本发明的基本范围的情况下,可以设计本发明的其它和另外的实施例,并且本发明的范围由所附的权利要求确定。
权利要求
1.一种预取指令线的方法,包括(a)从第2级别高速缓冲存储器读取第一指令线;(b)在所述第一指令线中识别以在所述第一指令线外部的指令为目标的分支指令;(c)从所识别的分支指令提取地址;以及(d)使用所提取的地址从所述第2级别高速缓冲存储器预取包含作为目标的指令的第二指令线。
2.按照权利要求1的方法,还包括重复步骤(a)-(d)以预取包含由在所述第二指令线中的分支指令作为目标的指令的第三指令线。
3.按照权利要求1的方法,还包括重复步骤(a)-(d),直到预取了阈值数目的指令线。
4.按照权利要求1的方法,还包括重复步骤(a)-(d),直到从所述第2级别高速缓冲存储器预取了包含阈值数目的不可预测退出分支指令的多个预取的指令线。
5.按照权利要求1的方法,还包括在所述第一指令线中识别以在所述第一指令线外部的第二指令作为目标的第二分支指令;从所识别的第二分支指令中提取第二地址;以及使用所提取的第二地址来从所述第2级别高速缓冲存储器预取包含作为目标的第二指令的第三指令线。
6.按照权利要求1的方法,其中,所提取的地址存储为附加到所述第一指令线的有效地址。
7.按照权利要求6的方法,其中,在所识别的分支指令的先前执行期间计算所述有效地址。
8.按照权利要求1的方法,其中,所述第一指令线包含以在所述第一指令线外部的二个或更多指令作为目标的二个或更多分支指令,并且其中,在所述第一指令线中存储的分支历史值指示所识别的分支指令是所述第一指令线的预测的分支。
9.一种处理器,包括第2级别高速缓冲存储器;第1级别高速缓冲存储器,被配置来从所述第2级别高速缓冲存储器接收指令线,其中,每个指令线包括一个或多个指令;处理器核芯,被配置来执行从所述第1级别高速缓冲存储器取出的指令;以及电路,被配置来(a)从第2级别高速缓冲存储器读取第一指令线;(b)在所述第一指令线中识别以在所述第一指令线外部的指令为目标的分支指令;(c)从所识别的分支指令提取地址;以及(d)使用所提取的地址从所述第2级别高速缓冲存储器预取包含作为目标的指令的第二指令线。
10.按照权利要求9的处理器,其中,所述控制电路还被配置来重复步骤(a)-(d),以预取包含被在所述第二指令线中的分支指令作为目标的指令的第三指令线。
11.按照权利要求9的处理器,其中,所述控制电路还被配置来重复步骤(a)-(d),直到预取了阈值数目的指令线。
12.按照权利要求9的处理器,其中,所述控制电路还被配置来重复步骤(a)-(d),直到从所述第2级别高速缓冲存储器预取了包含阈值数目的不可预测的退出分支指令的多个预取的指令线。
13.按照权利要求9的处理器,其中,所述控制电路还被配置来在所述第一指令线中识别以在所述第一指令线外部的第二指令作为目标的第二分支指令;从所识别的第二分支指令提取第二地址;以及使用所提取的第二地址来从所述第2级别高速缓冲存储器预取包含作为目标的第二指令的第三指令线。
14.按照权利要求9的处理器,其中,所提取的地址被存储为附加到所述第一指令线的有效地址。
15.按照权利要求14的处理器,其中,由所述处理器核芯在所识别的分支指令的先前执行期间计算所述有效地址。
16.按照权利要求9的处理器,其中,所述第一指令线包含以在所述第一指令线外部的二个或更多指令为目标的二个或更多分支指令,并且其中,在所述第一指令线中存储的分支历史值指示所识别的分支指令是所述第一指令线的预测的分支。
17.一种在指令线中存储退出分支地址的方法,其中,所述指令线包括一个或多个指令,所述方法包括执行在所述指令线中的所述一个或多个指令中的一个;确定所述一个或多个指令中的所述一个是否分支到另一指令线中的指令;以及如果是,则将退出地址附加到对应于另一指令线的指令线。
18.按照权利要求17的方法,其中,具有所附加的退出地址的指令线被写回第2级别高速缓冲存储器。
19.按照权利要求17的方法,其中,在所述指令线中存储与所述一个或多个指令中的所述一个相对应的分支历史信息。
20.按照权利要求19的方法,还包括在所述指令线中的所述一个或多个指令的随后执行期间,执行在所述指令线中的所述一个或多个指令中的第二个;如果所述一个或多个指令中的所述第二个分支到在第二指令线中的第二指令,则确定对应于所述一个或多个指令中的一个的所述分支历史信息是否指示所述分支可预测;如果所述分支不可预测,则向对应于所述第二指令线的指令线附加第二退出地址。
21.按照权利要求17的方法,其中,在其中重复地执行多个指令线的初始执行阶段期间,执行存储所述退出地址。
22.按照权利要求17的方法,还包括在第2级别高速缓冲存储器中存储具有所附加的退出地址的所述指令线;从所述第2级别高速缓冲存储器读取具有所附加的退出地址的所述指令线,并且将所述指令线置于第1级别高速缓冲存储器中;以及使用附加到所述指令线的所述退出地址来预取另一指令线。
23.按照权利要求17的方法,其中,只有在执行所述退出分支指令引起高速缓冲存储器未中的情况下,所述退出地址被附加到所述指令线。
24.按照权利要求17的方法,其中,所述退出地址是在所述一个或多个指令的所述一个的执行期间计算的有效地址。
全文摘要
本发明的实施例提供了一种用于预取指令线的方法和装置。在一个实施例中,所述方法包括从第2级别高速缓冲存储器读取第一指令线;在第一指令线中识别以在该第一指令线外部的指令为目标的分支指令;从所识别的分支指令提取地址;以及使用所提取的地址从第2级别高速缓冲存储器预取包含作为目标的指令的第二指令线。
文档编号G06F12/08GK101013360SQ20071000773
公开日2007年8月8日 申请日期2007年1月29日 优先权日2006年2月3日
发明者戴维·A·卢克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1