定的组以及路,即图13中的组J以及路O。然而,需要注意的是,在高速缓存存储器102的每一组以及路中皆有分配讯号1301以及移除分配讯号1303。
[0179]命中产生逻辑1300包含了比较器1304,其接收卷标106以及内存地址MA[35:16]104。比较器1304也接收了图12中的大量模式指示1209。当大量模式指示1209为真,比较器1304把卷标106的全部20比特对照于内存地址MA[35:16]而产生输出指示匹配是否发生,例如图5中的方块506。然而,当大量模式指示1209为假,比较器1304只把卷标106较高的19比特对照于内存地址MA[35:17]而产生输出,分别是例如图3中的方块306、图8中的方块806以及图10中的方块1006。与门1306接收比较器1304的输出以及有效比特1302而产生组J路O的命中讯号1308-J0用来指向于是否有命中发生在组J路O。如图13所示,组J路O的命中讯号1308-J0专属于特定的组以及路,然而,需要注意的是,在高速缓存存储器102的每一组以及路中皆有组路的命中讯号1308。
[0180]命中产生逻辑1300还包含了第一或门1312-J,其接收组J路X的命中讯号1308-Jx用于组J的每一路,X表示为路的号码,也就是用于16个不同的路,其在图13中标示为O到15。或门1312-J产生组J的命中讯号1314-J。
[0181]命中产生逻辑1300还包含了第二或门1312-K,其接收组K路X的命中讯号1308-Kx用于组K的16路的每一路。组K在大量模式中是第二个被选取的组,例如:根据图5中的方块504,组是通过1:ΜΑ[15:6]而选出。或门1312-Κ产生组K的命中讯号1314-Κ。
[0182]命中产生逻辑1300还包含了或门1316,其接收组J命中讯号1314-J以及组K的命中讯号1314-Κ以产生大量模式命中讯号1318。命中产生逻辑1300还包含了多任务器1322,其接收组J的命中讯号1314-J以及大量模式命中讯号1318,若大量模式命中讯号1209为假则选择命中讯号1314-J反之若命中讯号1209为真则选择命中讯号1318以做为输出命中讯号1324,命中讯号1324指出高速缓存存储器102是否有命中发生,分别是例如图3中的方块312、图5中的方块512、图8中的方块812以及图10中的方块1012。
[0183]请参阅图14,图14所示为系统的操作流程图,此系统中的处理器包含了图1中的高速缓存存储器102。流程起始于方块1402。
[0184]在方块1402中,系统侦测运行中的新的进程或是程序。在其中一个实施例中,运行在处理器100上的系统软件侦测此新的进程,例如:装置的驱动程序监测运行中的系统进程表。系统软件可提供信息至处理器而该信息可被处理器用来侦测程序进入的每个不同时程,例如后图14Β所描述的,且系统软件可具体指出每个时程的不同模式。依据指令,处理器更新模式108且若初始时程标识符存在的话,将初始时程标识符(图14中的组件1412)加载至时程侦测器(图14Β中的组件1414)。在其中一个实施例中,处理器本身侦测新的进程,例如:处理器侦测进程前后标识符(process context identifier ,PCID)中的变换,例如:有一个新的值被加载到x86指令组结构CR3寄存器的PCID。在一个实施例中,处理器侦测目前运行中的程序转换至新的时程而不是程序的变换。流程接着进行至方块1404。
[0185]在方块1404中,高速缓存存储器102被转换,例如:经由模式指示108,转换至预先决定的新模式以做为程序或是时程的最佳执行模式,基于方块1402所侦测的进程脱机分析。在一个实施例中,处理器的微指令(microcode)改变高速缓存存储器102的模式108。若高速缓存存储器102转换离开大量模式,所有的内存操作都会停止,并进行如图6中所描述的操作,接着内存操作将恢复。在一个实施例中,当系统软件侦测到新的进程运行(方块1402),系统软件会提供新的模式。在一个实施例中,处理器100从内存(例如:处理器100的局部封闭内存(local private memory)或系统内存)取用新的模式以响应于侦测PCID的变换或是程序时程转换,在较佳的情况下,处理器100从使用PCID或是时程标识符从一列表中来识别新的模式。模式的信息可包含不同的模式以用于程序的不同时程而且是经由脱机分析来决定。流程结束于方块1404。
[0186]请参照图14B,图14所示为包含了如图1中高速缓存存储器102的处理器的部件方块图。处理器包含了图1的高速缓存存储器102。处理器包含了时程侦测器1414,其侦测已经进入新时程的运行中的程序。时程侦测器1414基于时程辨识码1412而做出上述的侦测,例如经由如图14A所描述的装置驱动程序。时程辨识码1412可包含程序指令的指令指示器(或是程序计数器)值。所述的指令可以是一个子程序调用指令,在这种情况下时程辨识码1412还可包含调用指令的目标指令的指令指示器值。更进一步来说,时程辨识码1412还可包含一或多个调用指令的参数值,例如:返回地址、寄存器值及/或堆栈值。时程侦测器的其中一个例子,如公元2013年10月10日申请的美国专利申请号14/050,687以及14/050,757所教示的指纹感测单元,其所有功效都可在此达成。处理器还包含了模式更新单元1416,其被时程侦测器1414通知有一个新的时程已被侦测且接收新时程的标识符。模式更新单元1416还接收模式信息,例如:来自于如图14A所述的装置驱动程序。模式更新单元1416更新高速缓存存储器102中的模式108,如图14C中所描述的。在一个实施例中,模式更新单元1416包含了涉及于时程侦测器1414的处理器的微指令。在另一个实施例中,模式更新单元1416包含了状态机,其从时程侦测器1414接收其侦测了一个新的时程的一个指示以及新时程的标识符。时程分析会在后图22有更详细的描述。
[0187]请参阅图14C,图14C所示为图14B中的处理器操作流程图,处理器包含了图1的高速缓存存储器102。流程起始于方块1422。
[0188]在方块1422中,图14B中的时程侦测器1414侦测运行中的程序已经进入新的时程。响应于侦测到的新时程,时程侦测器1414通知图14B中的模式更新单元1416。流程接着进行至方块1424。
[0189]在方块1424中,模式更新单元1416在模式信息1418(例如:从图14A的方块1404中装置驱动程序所接收到的信息)当中查询从时程侦测器1414所接收到的新时程的标识符并且以查询到的模式来更新高速缓存存储器102的模式108。除此之外,在必要时,模式更新单元1416以新时程标识符1412来更新时程侦测器1414。在一个实施例中,下一个要被查询的时程取决于目前的时程,因此,下一个要被加载到时程侦测器1414的时程标识符1412会取决于目前的时程而有所不同。流程接着进行至方块1426。
[0190]在方块1426中,处理器执行运行中的程序并且产生内存存取指令给高速缓存存储器102,接着高速缓存存储器102就会根据如方块1424中更新后的模式108来操作。流程结束于方块1426。
[0191]请参照图15,图15所示为包含了图1的高速缓存存储器102的处理器的系统操作流程图。流程起始于方块1502。
[0192]在方块1502中,处理器侦测高速缓存存储器102在目前的模式之下无效率地执行中。举例来说,执行计数器指出高速缓存存储器102目前的未命中率超过了临界值。流程接着进行至方块1504。
[0193]在方块1504中,高速缓存存储器102转换至一个不同于目前模式的新模式。在其中一个实施例中,处理器的微指令改变了高速缓存存储器102的模式108。若是高速缓存存储器102从大量模式中转换出来,所有的内存操作都会停止,进行如图6所述的操作,接着内存操作会恢复。在较佳的情况下,处理器(例如:微指令)持续追踪高速缓存存储器102模式的这种自动变化以避免模式被反复推移,例如在程序及/或数据组不论任何模式皆为高未命中率的情况。在一个实施例中,所有的模式(正常、大量、不同的各种少量模式)若有需要都会被使用。在其它实施例中,这些模式的子组会被使用。例如:因为在一般模式以及任何一个少量模式之间或是在其中一个少量模式以及另外的少量模式之间没有与转换有关联的写回-无效损失,子组可以被限制在除了大量模式之外的这些模式当中。不同的少量模式应该被理解是包含了不只有被限制在关于路的子组进入的高速缓存线如何分配的不同少量模式,还包含了更改卷标的一个或多个比特来选择以限制子组的不同少量模式,例如图9所有少量8路模式中的内存地址MA[ 17 ]、互斥或门XOR(内存地址MA[26]、MA[23]或MA[22]。流程结束于方块1504。
[0194]请参阅图16,图16所示为高速缓存存储器1602的方块图。高速缓存存储器1602类似于图1的高速缓存存储器102。图16中的高速缓存存储器1602的好处在于当其操作在不同分配模式的时候可以动态配置,具体是由分配模式输入1608来被指定。分配模式1608选择了内存地址104的卷标的一或多个比特的不同函数而判断出经由内存地址104的索引选取出高速缓存存储器1602会分配进入的组的路的一个子组,后面将做更详细的描述。
[0195]跟图1的实施例类似,图16的实施例中,内存地址104区分为三个部分,卷标1612、索引1614以及偏移1616,但使用的比特有些许不同。为了描述上的方便,举例一个内存地址104,其如图16所示大小有36比特且区分为卷标1612=MA[35:17],索引1614 = MA[16:6]以及偏移1616 =MA[5:0]。然而,需要注意的是,基于地址卷标比特的动态路选择的实施例可被执行于高速缓存存储器,其接收的内存地址104具有不同比特数且其卷标1612、索引1614以及偏移1616区分成不同比特数。图1以及图6所示例子的其它不同之处在于存储于图16的高速缓存存储器1602的项目中的卷标1606有19比特。
[0196]请参阅图17,图17所示为逻辑1702的方块图,其基于如图16所示的卷标1612以及分配模式1608选取高速缓存存储器102分配至的路的子组。逻辑1702包含了多任务器1736,其接收卷标1612的比特(例如19比特)并且选取一或多个卷标1612的比特,图17中标示为N比特1738,N是I或更多,取决于分配模式1608。逻辑1702还包含了组合逻辑1732,其根据分配模式1608来从多个函数中选出一个,接着对多任务器1736所输出的N比特1738执行所选取的函数以产生一个向量,其指向于高速缓存存储器102的分配逻辑分配至的路的子组1734,如后图18所述。
[0197]选取出的卷标1612的比特以及执行于所选取出的N比特1738的函数例子如下。举一个例子来说,子组是经由内存地址104中事先决定的一个比特而指定选取组的8奇数路或是选取组的8偶数路。在一个例子当中,事先决定的比特是卷标1612的最低有效比特。在其它的例子当中,事先决定的比特是经由其它的方法来产生。举例来说,事先决定的比特可以是由卷标1612的多个比特的布尔逻辑的互斥闸(XOR)来产生。如前面所叙述的,在高速缓存线不正常的别名化至同个组的时候,这可以带来好处。除了互斥闸之外的函数也可以被用来将卷标112的多个比特汇集成一个单一比特,例如布尔逻辑的或门、与门、非门或是其之间的不同组合。举第二个例子,卷标1612的二或更多比特被轮转分配模式1608指定的比特以限制高速缓存线可分配到全部路的一个子组,例如:从16到4,16到2或16到I,在这些情况下N比特1738分别是2,3或4。除此之外,在N比特1738是2,3或4的情况下,每一个N比特1738可以各自经由卷标1612中相同的或是不同的比特的布尔函数来产生。虽然指出了如上所述的多个实施例,需要注意的是,其它的实施例也可以用来计算由多任务器1736选取的卷标1612的数量以及特定的比特,而其它实施例也可以用来计算执行于所选取的N比特1738来选取路1734的子组的特定函数1732。
[0198]请参阅图18,图18所示为图16中的高速缓存存储器1602的操作流程图。流程起始于方块1802。
[0199]在方块1802中,当分配模式1608指向于目前的分配模式,高速缓存存储器1602接收来自于处理核心的加载请求。加载请求包含图16的内存地址104。流程接着进行至方块1804。
[0200]在方块1804中,高速缓存存储器1602利用索引1614而选取一个单一的组,如图18所示的组J。流程接着进行至方块1806。
[0201]在方块1806中,对于所选取的组J的全部16路的每个项目,高速缓存存储器1602把内存地址104的卷标1612对照于项目卷标1606。所述的对照一并确认以检视项目是否无效。流程接着进行至判断方块1808。
[0202]在方块1808中,高速缓存存储器1602判断在方块1806所执行的对照结果是否为有效匹配。若判断结果为是,流程接着进行至方块1812,若判断结果为否,则流程接着进行至方块1814。
[0203]在方块1814中,图17的逻辑1702基于分配模式1608指定的函数1732以及卷标1612的一或更多比特决定在方块1804所选取的组的路的子组1734。流程接着进行至方块1816。
[0204]在方块1816中,高速缓存存储器1602分配至所选取的组J中