专利名称:一种片上共享高速缓存的替换装置和方法以及相应处理器的制作方法
技术领域:
本发明涉及计算机芯片领域,尤其涉及多核或众核处理器。
背景技术:
在过去的几年中,由于指令级并行的局限性、功耗以及芯片温度等问题,主流芯片 制造商均由生产单核芯片转向生产多核或众核芯片。多核或众核芯片的设计面临许多单核 时代所没有的挑战,其中之一就是片上共享高速缓存(cache)的设计。目前,多核/众核的 高速缓存设计有以下两种不同方式1私有的高速缓存每个小核私有一块高速缓存。这种方式的优点在于小核之间 是互相隔离的,一个小核的行为不会影响到其它小核的性能;缺点是不能有效地利用片上 的存储,尤其是在多个小核之间存在共享数据的情况下,会浪费大量的存储空间。2共享的高速缓存多个小核共享一块高速缓存。这种方式的优点在于可以较好 地利用片上存储的容量,尤其是在多个小核共享大量数据的情况下;缺点是缺乏隔离机制, 容易产生抖动现象(cache thrashing)。目前主流的多核处理器设计采用共享最后一级高速缓存(Last LevelCache),而 私有其他更高级的高速缓存。多个小核共享最后一级高速缓存虽然给小核之间的数据传递 提供了便利,但是也会产生一些问题虽然每个小核对共享高速缓存的访问是有较强的时 间和空间局部性,但是很多个小核访问总和的时空局部性很差。由于高速缓存是一种利用 访存时间和空间局部性的装置,这种整体缺乏时空局部性的访问可能会造成共享高速缓存 的严重抖动(cache thrashing)。图1示意了一个基于最近最久未使用(LRU)替换策略的组相联高速缓存替换部分 的被替换缓存块选取模块。每当有一个访存请求访问该高速缓存,该访存的地址会被分解 成3个部分标签(tag),索引(index)和偏移(offset)。索引用于指定具体访问该组相联 高速缓存的哪一个组(set),标签用于比较判断访问是否在缓存中命中。如图1所示,高速 缓存的替换模块首先并行地进行如下两个步骤通过比较对应组(set)的标签来检测访问是否命中;检查对应组(set)的访问信息存储器,根据各个缓存块过去的访问信息找出可能 被替换的缓存块(victim block)。然后,若访问命中高速缓存中的缓存块,则不对被替换的缓存块(victim block) 进行任何操作;若访问没有命中,则需要将被替换的缓存块移出高速缓存,并读入需要访问 的缓存块,与此同时被替换的缓存块的访问信息也需要被清除。图2示意了一个共享高速缓存抖动的例子。图2的上半部分给出了一个对4组相 联LRU高速缓存的特定组访问序列,其中地址AO为经常被访问的地址,而地址B0,B1,..., B12,...为不经常访问的地址。而根据图2下半部分所示,由于该高速缓存的历史窗口太 小,具体而言4路组相联的高速缓存的历史窗口大小仅为4,该高速缓存无法认出地址AO为 经常被访问的地址,导致地址AO被频繁地替换出高速缓存,造成严重的抖动现象。
需要说明的是,虽然图2描述的是LRU策略的高速缓存,但是实际上抖动问题存在 于所有的传统高速缓存中。例如在一个最不经常使用(LFU)策略的高速缓存中,地址AO需 要积累足够多的访问数(referencecoimt)来标示自己经常被访问。但是在图2的访问序 列中,含有地址AO的缓存块会被频繁替换出高速缓存,每次被替换出的时候地址AO的访问 数都会被清零,这导致LFU策略无法为地址AO积累足够多的访问数,从而导致LFU策略也 无法解决图2所示的抖动问题。由此可见,如何解决这种片上共享高速缓存的抖动问题在 多核/众核处理器设计领域是亟需解决的难题。
发明内容
本发明要解决如上所述的共享高速缓存抖动的技术问题。根据本发明的一个方面,提供了一种片上共享高速缓存的替换装置,包括局部性 打分模块和替换选择模块,其中所述局部性打分模块包括多个打分寄存器,所述打分寄存器用于存储缓存块地址和所述缓存块地址的分数;所述局部性打分模块用于对访问地址和已缓存数据对应的地址打分,并对打分寄 存器中所存储的缓存块地址和缓存块地址的分数进行更新;替换选择模块用于对于所述访问地址分数最低的情况,将所述访问地址旁路,否 则用所述访问地址所对应的数据替换分数最低的已缓存数据对应的地址所对应的数据。在上述装置中,所述局部性打分模块对打分寄存器中所存储的缓存块地址和缓存 块地址的分数进行更新时,判断正在打分的是访问地址还是已缓存数据对应的地址;对于 访问地址,判断所述访问地址是否命中打分寄存器中所存储的缓存块地址,对于没有命中 的情况,用打分地址替换打分寄存器中所存储的分数最低的缓存块地址并将分数置0,并更 新该缓存块地址的分数,否则直接更新该缓存块地址的分数。对于上述装置,当经过常数次访问后,所有打分寄存器中存储的分数右移一位。根据本发明的另一个方面,还提供了一种多核/众核处理器,包括上述片上共享 高速缓存的替换装置。根据本发明的又一方面,还提供了一种基于上述装置的片上共享高速缓存的替换 方法,包括下列步骤1)对访问地址和已缓存数据对应的地址打分;2)对于所述访问地址分数最低的情况,将所述访问地址旁路,否则用所述访问地 址所对应的数据替换分数最低的已缓存数据对应的地址所对应的数据;3)对打分寄存器中所存储的缓存块地址和缓存块地址的分数进行更新。在所述方法中,所述步骤幻进一步包括13)判断正在打分的是访问地址还是已缓存数据对应的地址;14)对于访问地址,判断所述访问地址是否命中打分寄存器中所存储的缓存块地 址,对于没有命中的情况,用打分地址替换打分寄存器中所存储的分数最低的缓存块地址 并将分数置0,并更新该缓存块地址的分数,否则直接更新该缓存块地址的分数。在所述方法中,所述步骤幻还包括当经过常数次访问后,将打分寄存器中所存 储的缓存块地址的分数除以2。在所述方法中,所述步骤1)与步骤3)并行操作。
本发明所提供的上述方法和系统有效解决了共享高速缓存的抖动问题,并且,通 过将共享高速缓存的缓存块地址和其分数分开存储,进一步有效提高了片上共享高速缓存 的命中率。
附图1是传统高速缓存替换的被替换缓存块选取的逻辑示意图;附图2是传统高速缓存抖动示例图;附图3是根据本发明一个优选实施例的高速缓存替换的被替换缓存块选取的逻 辑示意图;附图4是根据本发明一个优选实施例的用于存储地址访问的历史访问信息的打 分寄存器的结构示意图;附图5是根据本发明一个优选实施例的高速缓存替换方法的流程图;附图6是根据本发明一个优选实施例的局部性打分模块的流程图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对根据本发 明一个实施例的片上共享高速缓存的替换方法和装置进一步详细说明。应当理解,此处所 描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。图3是根据本发明一个优选实施例的组相联高速缓存替换的准备步骤的逻辑示 意图,与图1所给出的传统高速缓存的替换的准备步骤的逻辑示意图相比较,主要存在以 下区别1)不仅仅对高速缓存里存在的已缓存数据对应的地址打分,而且还对访问地址打 分。如果访问地址的分数低于所有已缓存数据对应的地址的分数,说明访问地址的局部性 较差,这种情况下可以选择将该次访问旁路(bypass)。旁路是指直接返回数据,而不把该次 访问数据写入高速缓存的存储中。2)另外,单独存储地址访问的历史访问信息,也就是说在本发明中,缓存块的访问 信息和其数据分开存储。这样,当一个缓存块被替换出高速缓存的时候,其访问的历史信息 就得以保留。由此,可以获得较长时间内地址的访问情况,更好地觉察出被访问数据的局部 性,以做出更准确的替换,进而提高高速缓存的命中率。基于如上区别,本发明的片上共享高速缓存的替换装置相对于现有装置,其包括 一个局部性打分模块,且该局部性打分模块中包括多个打分寄存器。该局部性打分模块与 比较模块一样,不仅从标签存储器接收已缓存数据对应的地址的标签还接收访问地址的标 签,从而能够对访问地址和已缓存数据对应的地址打分,并对打分寄存器中所存储的缓存 块地址和缓存块地址的分数进行更新,其中的打分寄存器,存储缓存块地址和缓存块地址 的分数。而且,本发明的装置中的替换选择模块,接收局部打分寄存器所打的分数,对于所 述访问地址分数最低的情况,能够将所述访问地址旁路。下面结合图5和图6,根据本发明的一个优选实施例对本发明的提高片上共享高 速缓存命中率的替换方法做进一步的更详细描述。在该优选实施例中,系统的状态如下
高速缓存的位内偏移位数为6(即缓存块大小为64byte),索引(index)位数为 11 (即该高速缓存有2048个组),标签位数为23。用于单独存储地址访问的历史访问信息的打分寄存器的基地址偏移为14(即每 个打分寄存器对应的地址范围为16KB),含有256个局部性打分寄存器,失效常数(Decay Constant)为2048,失效循环计数器目前的值为2047。优选地,多个打分寄存器位于该高速 缓存对应的局部性打分模块303中,该局部性打分模块303用于不仅仅对高速缓存里存在 的已缓存数据对应的地址打分,而且还对访问地址打分。图4是根据本发明一个优选实施 例的用于存储地址访问的历史访问信息的多个打分寄存器的结构示意图,其是一个类似内 容寻址存储器(CAM)的电路结构。该局部性打分寄存器中至少包括5个打分寄存器,每个 打分寄存器含有基地址和分数两个域。图5示出了根据本发明优选实施例的高速缓存替换方法的流程图,下面结合图5 以访问地址0x0123456789为例说明该替换方法的工作过程步骤501,地址拆分。具体地,把访问地址(0x0123456789)拆分成高速缓存对应的索引Qndex)和标签 (Tag)两个部分。其中索引(Index)值为0x59E,标签(Tag)值为0x91A2。步骤502,访问标签CTag)存储器301。读出标签存储器301中与地址0x0123456789对应的索引Qndex,值为0x59E)中 的所有标签。本发明根据步骤501和步骤502所获得的标签和索引分别执行步骤503和步骤 504。优选地,二者是并行执行的。步骤503,比较标签。比较模块302将步骤501得到的访问地址的标签(Tag,值为0x91A2)和步骤502 所读出的标签相比较。根据是否有相同的标签判断访问是否命中,若没有相同的标签则表 示此次访问没有命中,则转步骤505 ;若有相同的标签则表示此次访问命中,无需进行缓存 块替换操作,转步骤508。步骤504,局部性打分。将步骤502读出的标签(Tag)、步骤501得到的访问地址的标签(Tag,值为 0x91A2)和索引andex,值为0x59E)输入给局部性打分模块303。局部性打分模块303对 每个标签进行打分并将分数发送给替换选择模块304,而且更新其中的打分寄存器内存储 的分数。步骤505,替换选择。若步骤503中,比较标签的操作没有命中,这时就需要进行替换选择操作。替换选 择模块304从局部性打分模块303接收所有可能被替换的已缓存数据对应的地址的局部性 分数以及访问地址的局部性分数,并进行比较。根据访问地址的分数是否最低,发出是否需 要进行旁路的信息,同时,提供分数最低的已缓存数据对应的地址所对应的路,将该路作为 被替换路。步骤506,检查步骤505得到的旁路信息。若需要旁路,则不需要进行替换操作,转 步骤508 ;若不需要旁路,则转步骤507。步骤507,进行替换操作,根据由步骤505得到的被替换路将该路对应的缓存块内
6的数据移出高速缓存,用访问地址对应数据替换之,并且将标签存储器301中被替换路的 标签修改为访问地址的标签。步骤508,对于本次地址访问,替换方法结束。上述步骤504的具体过程如图6流程图所示,包括如下步骤步骤5041,重新生成完整地址。如图3所示,局部性打分模块303的输入是查找地址的标签,而不是完整的访问地 址,所以局部性打分模块303需要将地址的标签和地址的索引(index,值为0x59E)重新组 合成为完整的地址,其中,查找地址包括高速缓存中缓存块的地址和访问地址。例如,对于 访问地址,重新生成的完整地址为0x0123456780。步骤5042,对步骤5041生成的完整地址进行打分。由于打分寄存器的基地址偏移为14,所以将完整地址的低14位置为0,得到其对 应打分寄存器的基地址,例如完整地址0x0123456780的基地址为0x0123454000。若基地 址命中某一个打分寄存器的基地址部分,则返回该打分寄存器的分数;若没有命中,则返回 O0步骤5043,将步骤5042得到的局部性分数发送给替换选择模块304。步骤5044,判断目前正在进行局部性打分的地址是访问地址还是可能被替换的已 缓存数据对应的地址。若为访问地址,则需要对其进行替换和更新操作,即转步骤5045 ;若 不为访问地址,即该地址是目前hdex对应的缓存块中的地址,这些缓存块都是可能被替 换的缓存块,则对于本次访问,局部性打分模块的操作结束。步骤5045,判断该访问地址是否在局部性打分模块303中的打分寄存器中命中。在本实施例中,即查找是否有打分寄存器的基地址等于访问请求地址 0x0123454000。如果该地址没有命中,进行步骤5046 ;如果命中,则直接进行步骤5047。步骤5046,局部性打分模块进行替换操作。选择分数最低的打分寄存器,将其基地址替换为本次访问的基地址,同时将分数 清零。假设分数最低的打分寄存器的基地址为0x111110000,其分数为1 ;替换操作后其基 地址就换成当前访问地址的基地址0x0123454000,其分数为0。然后进行步骤5046。步骤5047,局部性打分模块进行更新操作,对于本次访问,局部性打分模块的操作结束。更新操作包括两个部分第一,当经过了失效常数次访问,失效循环计数器值更新 后的值为0时,将所有打分寄存器的分数右移一位,其中失效循环计数器值=(失效循环计 数器值+1)%失效常数;第二,当本次访问的地址命中某个打分寄存器,该打分寄存器的分 数加1,尤其值得注意,该打分寄存器包括新分配的打分寄存器。在本例中,失效循换计数器 值=(2047+1) % 2048 = 0,所以所有局部性打分寄存器的值向右移一位;且该访问命中基 地址为0x0123454000的打分寄存器,所以该打分寄存器的对应分数加1,最终该打分寄存 器的分数为0+1 = 1。本领域的普通技术人员可以理解,步骤5047中更新操作的第一操作是为了增强 打分寄存器中分数的时效性,也就是说让当前频繁访问的基地址比以前频繁访问的基地址 的分数更高,该操作也可以不存在或者用其它方式来实现。优选地,上述步骤5042、5043与步骤5044-5047在时间上并行操作,以有效节约时间。本发明的上述方法及装置可以从时间空间局部性均较差的访问数据中识别相对 局部性较强的数据,将这些数据缓存在高速缓存中,而旁路其他时间空间局部性均很差的 数据。由此,有效克服了片上共享高速缓存的抖动问题。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详 细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡 在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保 护范围之内。
权利要求
1.一种片上共享高速缓存的替换装置,包括局部性打分模块和替换选择模块,其中 所述局部性打分模块包括多个打分寄存器,所述打分寄存器用于存储缓存块地址和所述缓存块地址的分数;所述局部性打分模块用于对访问地址和已缓存数据对应的地址打分,并对打分寄存器 中所存储的缓存块地址和缓存块地址的分数进行更新;替换选择模块用于对于所述访问地址分数最低的情况,将所述访问地址旁路,否则用 所述访问地址所对应的数据替换分数最低的已缓存数据对应的地址所对应的数据。
2.根据权利要求1所述的装置,其特征在于,所述局部性打分模块对打分寄存器中所 存储的缓存块地址和缓存块地址的分数进行更新时,判断正在打分的是访问地址还是已缓 存数据对应的地址;对于访问地址,判断所述访问地址是否命中打分寄存器中所存储的缓 存块地址,对于没有命中的情况,用打分地址替换打分寄存器中所存储的分数最低的缓存 块地址并将分数置0,并更新该缓存块地址的分数,否则直接更新该缓存块地址的分数。
3.根据权利要求1所述的装置,其特征在于,所述打分寄存器包括基地址域和分数域。
4.根据权利要求3所述的装置,其特征在于,当经过常数次访问后,所有打分寄存器中 存储的分数右移一位。
5.一种多核/众核处理器,包括权利要求1所述的片上共享高速缓存的替换装置。
6.一种基于权利要求1的装置的片上共享高速缓存的替换方法,包括下列步骤1)对访问地址和已缓存数据对应的地址打分;2)对于所述访问地址分数最低的情况,将所述访问地址旁路,否则用所述访问地址所 对应的数据替换分数最低的已缓存数据对应的地址所对应的数据;3)对打分寄存器中所存储的缓存块地址和缓存块地址的分数进行更新。
7.根据权利要求6所述的方法,其特征在于,所述步骤幻进一步包括13)判断正在打分的是访问地址还是已缓存数据对应的地址;14)对于访问地址,判断所述访问地址是否命中打分寄存器中所存储的缓存块地址,对 于没有命中的情况,用打分地址替换打分寄存器中所存储的分数最低的缓存块地址并将分 数置0,并更新该缓存块地址的分数,否则直接更新该缓存块地址的分数。
8.根据权利要求6所述的方法,其特征在于,所述步骤幻还包括当经过常数次访问后,将打分寄存器中所存储的缓存块地址的分数除以2。
9.根据权利要求8所述的方法,其特征在于,所述常数为2048。
10.根据权利要求6所述的方法,其特征在于,所述步骤1)与步骤3)并行操作。
全文摘要
本发明提供一种片上共享高速缓存的替换装置和方法以及相应处理器,该装置包括局部性打分模块和替换选择模块,其中所述局部性打分模块包括多个打分寄存器,所述打分寄存器用于存储缓存块地址和所述缓存块地址的分数;所述局部性打分模块用于对访问地址和已缓存数据对应的地址打分,并对打分寄存器中所存储的缓存块地址和缓存块地址的分数进行更新;替换选择模块用于对于所述访问地址分数最低的情况,将所述访问地址旁路,否则用所述访问地址所对应的数据替换分数最低的已缓存数据对应的地址所对应的数据。本发明解决了多核/众核处理器中共享高速缓存抖动现象严重问题,更好地利用了共享高速缓存。
文档编号G06F15/167GK102110073SQ201110034399
公开日2011年6月29日 申请日期2011年2月1日 优先权日2011年2月1日
发明者张 浩, 张轮凯, 李海忠, 范东睿, 雷峥蒙 申请人:中国科学院计算技术研究所