具多样替换策略的集合关联快取内存的制作方法_2

文档序号:9921973阅读:来源:国知局
其用以将 结构指令解译为可被执行单元所执行的处理器的微指令集结构的微指令。处理器还包括内 存子系统,其用以提供内存操作元(memory operand)至执行单元并从执行单元接收内存操 作元。优选地,内存子系统包括一个或多个加载单元,一个或多个存储单元,加载列,存储 列,用于向内存请求快取线的填充列(f i 11 queue ),用于窥探(snooping)与处理器相互通 信(in communication)的内存总线(memory bus)的窥探列(snoop queue),和其他相关的 功能单元。内存子系统生成快取内存102的内存访问122。
[0066]请参照图2,其所绘示为根据本发明一实施例之映射108,所述映射108将MAT映射 到图1的快取内存102的分路子集。图2所例示的映射108包括32个MAT,其对应于表1。图2所 例示的映射108转载于下方的表2。

[0070] 表 2
[0071] 以图2为例子,当MAT 101为store_nt的内存访问122在快取内存102中未能命中 时,分配单元106仅分配所选定集合的分路0、4或8,亦即,仅分配经由映射108而关联于 store_nt MAT的分路子集内的分路。在另一个例子中,当MAT 101为load_descr的内存访问 122在快取内存102中未能命中时,分配单元106仅分配所选定集合的分路15,亦即,仅分配 经由映射108而关联于load_descr MAT的分路子集内的分路。
[0072] 在一实施例中,映射108包括具16位矢量(16-bit vector)的阵列。所述矢量的每 一位对应于快取内存102其16个分路之一。优选地,当对应的分路包含于子集时,位为1;而 当对应的分路不包含于子集时,位为0。所述阵列包括32个矢量,每一矢量用于一个MAT,且 所述32个矢量以MAT编号来索引。然而,本发明并不以此为限。在其他实施例中,映射108可 具有其它形式,其相关说明请参照图3和6。
[0073]此处值得理解的是,虽然图2(和表2)描述了一组特定的MAT以及将MAT关联到其对 应分路子集的特定映射,但前述的实施例仅用于示例之目的,本发明亦适用于具不同MAT组 合和不同的映射。事实上,在一实施例中,当处理器在运作时,映射可基于正在运行的程序 或程序阶段而动态地被更新(例如,通过图1的更新输入126),其更详细的相关内容请参照 图 7-9〇
[0074] 请参照图3,其所绘示为图1的快取内存102其部分之更详细方块示意图。在图3的 实施例中,图1的映射108包括矢量304,其用于32个MAT中的每一个。多功器(MUX)302用以接 收32个矢量304并基于内存访问122其MAT指定符101的值来选取32个矢量304的其中之一, 选定的矢量304被提供至图1的分配单元106。分配单元106还接收图1中选定集合的替换位 114,所述选定集合是指在快取内存102中由内存访问122内存地址的索引所选取的集合。基 于选定的矢量304和替换位114,分配单元106生成图1的替换分路116。分配单元106还基于 替换分路116的值来更新替换位114。举例来说,在一实施方案中,替换位114是pLRU矢量,其 用以指示选定集合里所有分路中的PLRU分路。在其它例子中,替换位114是真LRU矢量或轮 叫(round-robin)矢量。
[0075] 在一实施例中,矢量304为位矢量(bit vector),其包括一个相应位用于快取内存 102的每一分路(例如,16个分路)。当位值为真,代表其对应的分路包含于相关联MAT的子 集;当位值为伪,代表其对应的分路不包含于相关联MAT的子集。在一替代实施例中,矢量 304包括一对遮照(mask),其对pLRU矢量的替换位114进行布尔运算,相关说明请参照图6。
[0076] 在一替代实施例中,快取内存102可以包括逻辑(logic),其用以将具有较大数目 (例如32)的MAT映射到具有较小数目(例如4)的MAT群组(MAT group)。举例来说,在图3的实 施例中,MAT分组逻辑(MAT grouping logic,未示出)接收MAT 101且输出MAT群组编号。MAT 群组编号可作为选取输入(selection input)而被提供至多功器(MUX)302(而非MAT 101)。 MAT分组逻辑将这32个MAT的每一个映射到这4个MAT群组之一。MAT分组逻辑可以随着映射 108而被更新。映射108仅包括四个矢量304(而非32个),且多功器(MUX)302选取这四个矢量 304的其中之一并提供给分配单元。本实施例中可有益地减少硬件成本。MAT数目的减少可 能以可接受效率做交换,特别是对那些内存访问特征为聚集于不同MAT群组的程序而言更 是如此。MAT分组逻辑可适用于本发明的各种实施例,因而减少所需的硬件数目。再者,MAT 数目的减少与实施例所包含群组呈倍数相关,如图10-22所示。而将MAT映射到MAT群组的实 施例请参考图29-30。
[0077]请参照图4,其所绘示为一处理器其运作流程图,所述处理器具有图1的快取内存 102。所述流程开始于方块402。
[0078]在方块402中,处理器接收映射。所述映射将多个MAT(例如表1)中的每一个关联到 快取内存102之一个分路子集(例如,图2与表2所示的映射)。优选地,快取内存102于制造时 即具有默认(default)映射108。优选地,默认映射108用于多种程序使得快取内存102具有 更高的操作效能,或至少为了有可能被具有快取内存102之处理器所执行的程序而制造。所 述流程接着进行至方块404。
[0079]在方块404中,通过图1的更新输入126,处理器以在方块40 2所接收的映射来更新 快取内存102的映射108。优选地,映射108是在系统初始化(system initialization)且/或 操作系统(operating system)开机(boot)时,由系统软件(例如,BIOS或操作系统)所更新。 再者,优选地,映射108是以每个程序基础(per program basis)和/或每个程序阶段基础 (per program phase basis)被更新,其相关说明请参照图7-9。所述流程结束于方块404。
[0080] 请参照图5,其所绘示为图1的快取内存102其运作流程图。所述流程开始于方块 502〇
[0081] 在方块502中,快取内存102接收在快取内存102中未能命中的内存访问122。内存 访问122索引选取阵列104的一个集合。内存访问122指定MAT 101。所述流程接着进行至方 块504。
[0082] 在方块504中,快取内存102分配选定集合的一个分路。更具体地,分配单元106分 配分路子集中的一个分路,所述分路子集经由映射108关联于内存访问122的MAT 101。其相 关更详细的内容请参照图6。所述流程结束于方块504。
[0083] 请参照图6,其所绘示为根据本发明一实施例之图5的方块504其运作流程图。所述 流程开始于方块602。
[0084] 在方块602中,分配单元106基于目前的替换位114和内存访问122其MAT 101来判 定替换分路116及对替换位114产生一新的值。在一实施例中,分配单元106判定替换分路 116并对替换位114产生一新的值的方式请照图3的实施例,亦即,利用了由MAT 101所选定 的矢量304。在一实施例中,替换位114是pLRU矢量,且矢量304包括第一部分(AND_MASK)与 第二部分(〇R_MASK)。第一部分(AND_MASK)为布尔ANDed运算。布尔ANDed运算与pLRU矢量 114产生第一结果。第二部分(AND_MASK)为布尔ORed运算。布尔ORed运算与第一结果产生第 二结果。第二结果被用于判定替换分路116且生成所述新的值以更新pLRU矢量 MASK与0R_MASK的使用其相关更详细的内容请参照方块606。所述流程接着进行至方块604。
[0085]在方块604中,快取内存102分配替换分路116,其中替换分路116在方块602中由分 配单元106所指示出来。所述流程接着进行至方块606。
[0086]在方块606中,快取内存102以在方块602所生成的新的值来更新替换位114。所述 流程结束于方块606。
[0087]在一实施例中,用于具有16个分路的pLRU方案包括:每集合15个pLRU替换位114、 用于从替换位114解码出LRU分路的逻辑、用于在新的分配中更新替换位114的逻辑、以及在 内存访问122命中情况下,用于更新替换位114的逻辑。虽然分配在语意上与快取命中不同, 分配更新逻辑可以LRU分路馈入命中途径的方式而有效地成为命中逻辑。
[0088] 替换位114是一个15位矢量(15-bit vector),其本质地描述了 一个二进制树 (binary tree)且其每一位可视为一个内部节点(internal node,所述15个节点分成4阶 (level),每一叶(leaf)可视为一个分路。举例来说,如果所述15位被标记为A-0,所述pLRU 树可以定义为如下:
[0090] 由pLRU矢量来判定LRU分路之逻辑可经由pLRU树中各个节点位(node bit)A-0的 方向来确定。从根节点(root node)A开始,节点位A-Ο的值指出LRU的"方向",其中0表示"左 转"而1表示"右转"。例如在如下的例子中:
[0091] ABCDEFGHIJKLMN0
[0092] 000000010000000
[0093] LRU 分路是 01(A = 0、B = 0、D = 0、H=1)。
[0094] 此处应当值得注意是,在上述特定的例子中,LRU分路仅由四个节点位决定:A、B、D 和Η。其他节点仍然存在并且存储有用的信息,但是它们此处在这个000000010000000例子 中,并没有对LRU的判定作出贡献。
[0095]当因为命中或分配而使得pLRU阵列需要被更新时,此时需以当前状态与指定的分 路函数来算出PLRU位的下一个状态。所述更新是一个包括两个步骤的过程。首先,判定pLRU 节点位A-Ο中中的四个节点位{a、b、c、d},节点位{a、b、c、d}指向最近使用(the mos t recently used) (MRU)位置。第二,对于pLRU节点位A-0中的每一个节点位X来说,如果X在 {a、b、c、d}中的话,此节点位被更新为指向远离所考虑的分路。
[0096 ] 举例来说,在上述例子中,在分路05中命中的加载会更新节点{A = > 1、B = >0、E = > l、J = >〇},使得这四个节点位中的每一个指向分路05的相反的方向。
[0097]以下将更详细地描述上述方块602中所提到的矢量304的第一部分(AND_MASK)和 第二部分(〇r_Mask)的使用。假设分路子集中需要被分配的分路是分路{0、5、6、7}。首先,将 分路子集基于树形图(tree diagram)转换成如下所示的AND_MASK和0R_Mask。
[0098] ABCDEFGHIJKLMNO
[0099] AND_MASK = 01-01-0-11 --
[0100] 0r_Mask 的=00_00-0-10----
[0101] 此处虚线代表"无需注意"("don't cares")的位位置(bit position),因为遮照 会避開他fl]。举例来说,结点位C是无需注意的,因为AND_MASK的节点位A为0,这意味着左边 的分枝(branch)将会一直被用来决定LRU。
[0102] 因命中或分配而更新LRU的方式与正常情况下pLRU的更新一样。然而,因为相对于 LRU的行为,pLRU是较不完善(imperfect)的,因此,由于共享更换位114的性质,用于两个相 互排斥(mutually exclusive)的子集的pLRU更新会相互影响。但是在大多数的情况,相互 干扰(crosstalk)是可容忍的。
[0103] 请参照图7,其所绘示为一系统其运作流程图,所述系统具有一种处理器,所述处 理器具有图1的快取内存102。所述流程开始于方块702。
[0104] 方块702中,设备驱动器(device driver)(或系统软件的其它部件)判定正在运行 的程序(或正准备运行,例如,在操作系统的进程表(process table)中指出的程序),并且 所述程序是在设备驱动器所知道的程序表里而用于更新图1其映射108的映像或配置 (configuration)存在。举例来说,用于对处理器上运行的程序的离线分析(通过处理器的 软件仿真(software simulation)或处理器的实际一部份)已被执行来判定用于改善快取 内存102效率的映射。应当理解的是,所述映射并不提供100%的命中率;然而,所述映射可 以提高快取内存102的效率。此外,此处应当理解的是,某些程序并不会从其相应的映射中 获得显着的效率提升;然而,一些程序的分析显示,其确具有从映射中获益的倾向。所述流 程接着进行至方块704。
[0105]在方块704中,处理器执行指令(例如,写入到模块指定缓存器(model specific register,MSR),例如,X86 WRMSR指令),其用以指示(instruct)处理器以指令所提供的映 射来更新快取内存102的映射108。在一实施例中,映射位于内存,而映像的位置其内存地址 由指令提供。优选地,指令是设备驱动程序代码(device driver code)的一部分。设备驱动 器还可以提供信息,其可被用于处理器去检测(detect)程序是否已进入各个不同阶段,其 相关说明请参照图8。设备驱动器可以为每个阶段提供不同的映射。因应于指令,处理器更 新映射108并且将初始阶段标识符(initial phase identifier)(如果提供的话)加载于阶 段检测器(phase detector)(图8的804)。所述流程结束于方块704。
[0106] 请参考图8,其所绘示为一处理器的组件示意图,所述处理器包括图1的快取内存 102。所述处理器包括阶段检测器804,其用以检测正在运行的程序是否已经进入一个新的 阶段。阶段检测器804是基于其所接收的阶段标识符(phase identifier)802来做上述之检 测,而阶段标识符802例如通过图7的组件驱动器所提供。阶段标识符802可包括程序指令的 指令指标符(instruction pointer)(或程序计数器(program counter))值。指令可以是子 程序调用指令(subroutine cal 1 instruction),在这种情况下,阶段标识符802还可以包 括调用指令的目标指令(target instruction)之指令指标符(或程序计数器)值。此外,阶 段标识符802还可以包括一个或多个调用指令的参数值,例如,返回地址,缓存器值和/或堆 栈(stack)值。一个阶段检测器例子为指纹单元(fingerprint unit),其更详细的说明请参 考美国专利申请号14/050687和14/050757,二者提交于2013年10月10日,这两个专利皆主 张美国临时申请号61/880620,提交于2013年9月20日之优先权,而这两个专利的全部内容 在此皆做为参考之用。处理器还包括映射更新单元(mapping update unit)806。当阶段检 测器804检测出已有新的阶段时,阶段检测器804即通知映射更新单元806接收所述新的阶 段时的标识符(identifier)。映射更新单元806还接收映射信息(mapping information), 例如,从图7的组件驱动器而来的信息。映射更新单元806用以更新位于快取内存102的映射 108,其相关说明请参照图9。在一实施例中,映射更新单元806包括所述处理器其被阶段检 测器804所调用的微码(microcode)。在一替代实施例中,映射更新单元806包括状态机 (state machine)。当阶段检测器804检测出已有新的阶段时,阶段检测器804即通知状态机 接收所述新的阶段时的标识符。阶段分析其相关说明请参照图36。
[0107] 请参照图9,其所绘示为图8的处理器其运作流程图,所述处理器具有图1的快取内 存102。所述流程开始于方块902。
[0108] 在方块902中,图8的阶段检测器804检测正在运行的程序已经进入一个新的阶段。 因应于检测到新的阶段,阶段检测器804通知图8的映射更新单元806。所述流程接着进行至 方块904。
[0109] 在方块904中,映射更新单元806在映射信息808(例如,从图7的方块704中设备驱 动器所接收)中查找(look up)从阶段检测器804所接收的所述新阶段的标识符,并以所述 查找中所发现的映射来更新快取内存102的映射108。此外,如果需要的话,映射更新单元 806以新的阶段标识符802来更新阶段检测器804。在一实施例中,下一个需要被检视的阶段 取决于目前的阶段;因此,即将被加载到阶段检测器804的阶段标识符802会取决于当前的 阶段而有所不同。所述流程接着进行至方块906。
[0110]在方块906中,所述处理器执行正在运行的程序且生成内存访问到快取内存102, 以因应于使得快取内存102基于方块904中更新的映射108,并用相关于图5-6所描述的方式 来分配分路子集。所述流程结束于方块906。
[0111]此处应当理解的是,尽管本发明实施例所揭露的快取内存其具有特定数目和大小 的分路、集合、内存线、标签、状态协议(status protocols)等等,但本发明不以此为限。在 其它实施例中,快取内存可具有其它数目和大小的的分路、集合、内存线、标签、状态协议等 等。
[0112]请参照图10,其所绘示为一集合关联快取内存1002之方块示意图。图10的快取内 存1002在许多方面与图1的快取内存102相似,此外,其具有类似编号的组件亦相似。然而, 图10的快取内存1002其所包括的映射1008与图1的映射108不同。在图10的快取内存1002 中,每一个集合属于多个彼此互斥的L个群组(group) 1001其中之一。更具体地说,图10的映 射1008用以将每一个MAT关联到阵列104中多个分路的一个子集(更关联至L个群组中的一 个群组1001)。亦即,对L个群组中的每个群组1001而言,可视为图2的映射108有效地包含于 图10的映射1008中。因此,图2的映射108可被MAT 101编号以一维方式来索引,而图10的映 射1008可被MAT 101编号以二维方式来索引。
[0113]在图10的例子中,其具有四个集合群组(set group),分别表示为群组0 1001-0, 其包括集合0-511;群组1 1001-1,其包括集合512-1023;群组2 1001-2,其包括集合1024-1535;以及群组3 1001-3,其包括集合1536-2047。因此,对此四个群组1001的每一个来说, 映射1008用以将每一个MAT关联到阵列104中16个分路的其中一个子集。也就是说,图10的 映射1008不仅将MAT映像到分路子集,更以集合群组为基础做所述的映射,而不是如图1所 示实施例中以整个快取内存102为基础做所述的映射。因此,分配单元106将依据内存访问 122的MAT以及所选定集合和所属的群组1001来分配分路子集。
[0114] 前述的分配对那些可能会聚集内存访问于快取内存1002特定集合合群组之某几 个MATs的程序来说是特别有利的。举例来说,对于给定程序来说,具与堆栈操作(stack operation)相关的MAT的内存访问倾向于聚集于快取内存1002其最初几个集合。在此情况 下的,映射1008可使相关于MATs(其相关于包含快取内存1002的第一少数集合群组的堆栈 操作)的子集包括具有极大数目分路。所述倾向可以在程序执行时,通过程序和程序线程 (program thrend)的离线分析观察到,而判定出一种有效的映射并提供给快取内存1002, 其用于更新映射1008使得快取内存1002更有效率,其相关详细说明请参照图7-9。
[0115] 此处应当理解的是,尽管本发明实施例所揭露的群组其具有特定数目(例如,如图 10的4个群组),但本发明不以此为限。在其它实施例中,群组1001可具有其它数目。此外,此 处应当理解的是,群组1001的数目愈大,映射1008的尺寸也愈大。在一实施例中,群组的数 目可以小到相等于快取内存1002其集合的数目。
[0116] 请参照图11,其所绘示为图10的快取内存1002其部分之更详细方块示意图。图10 所绘示的快取内存1002的所述部分在许多方面与图3相类似。图10的快取内存1002还包括 群组选取逻辑(group selection logic)1106,其用以将内存访问122映射到群组1001。更 具体地,群组选取逻辑1106接收内存访问122(或更具体的,接收内存地址的索引)且生成集 合群组编号(set group number)1104,以因应于具有被内存访问122索引所选定集合的群 组1001所指定的数目。集合群组编号1104作为一个选取输入而被提供到多功器(mu X)1102。 多功器(muX)1102为每个集合组群(例如,图11的四个组群)接收矢量304(例如,每一个矢量 304用于一个MAT,类似于图3)并选取与群组1
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1