一种实现数据预取的方法及装置的制作方法

文档序号:6441072阅读:262来源:国知局
专利名称:一种实现数据预取的方法及装置的制作方法
技术领域
本发明涉及现代微处理器访存性能优化的方法,尤其涉及实现数据预取的方法及装置。
背景技术
随着集成电路制造工艺的进步,处理器与存储器的性能不断提高。但由于二者在生产工艺与发展路线上的差异,处理器的性能提升速度明显快于存储器,从而使得处理器与存储器之间的性能差距持续增大。这导致当访存指令发生片上缓存(On-chip Cache) 失效而需访问主存时,整个过程往往耗时上百个甚至几百个时钟周期,形成存储墙(Memory Wall)问题。基于程序访存局部性原理的高速缓存(Cache)和层次化存储结构(Memory Hierarchy)在填补处理器与存储器之间的性能鸿沟方面发挥了重要作用,但仍然不能有效地解决存储墙问题。对于科学计算等工作集规模很大且存储密集的程序,访存延时仍旧在程序执行时间中占据很大的比例。虽然超标量处理器可通过乱序执行(Out-of-Order Execution)和非阻塞高速缓存(Non-blocking Cache)等技术,使得访存指令在发生缓存失效并访问主存的过程中后续的与该指令数据无关的指令仍能够继续执行,从而使处理器具备了一定程度的访存延时包容能力;然而,由于失效访存指令仍然会阻塞后续数据相关指令的执行和所有指令的提交, 当发生片上缓存失效时,耗时的存储访问仍将导致流水线最终由于指令窗口溢出而停顿, 造成处理器性能损失。随着处理器与存储器之间性能差距的不断增大,访存延时逐渐成为制约处理器性能的关键因素。数据预取技术是在处理器真正需要某数据之前就预先向主存发出访存请求,以隐藏访存延时。数据预取技术主要可分为软件预取和硬件预取。其中,软件预取通常是由程序员或编译器在代码中插入预取指令实现,因而会引起额外的指令执行开销。硬件预取通过捕获程序动态执行过程中可重复的访存模式(Memory Access Pattern)来预测后续的访存地址,并自动发起预取请求,故能够有效地利用程序运行时刻的动态访存特性来隐藏访存延时。已有研究提出了很多经典的硬件预取方法。例如,跨距预取器(Mride Prefetcher),旨在对规则的跨距访存模式(即相邻访存地址的差值为常数的访存模式)进行预取。差值相关预取器(Delta Correlation Prefetcher)通过记录并捕获由失效地址流生成的差值流(相邻失效地址之差组成的差值流)中的相关性规律来进行预取。其中, 差值关联预取器既可以预取规则的跨距访存模式,又可以预取更加复杂的其它访存模式, 因此可以获得更好的性能优化效果,并且预取器需要花费的存储开销并不大。但是,差值相关预取器仍然存在很多优化空间。一方面,差值相关预取器使用循环队列结构的全局历史缓冲器(GHB,GlcAal History Buffer)按时间顺序保存最近发生缓存失效的所有失效地址,对于一个跨距访存模式,虽然使用上一个失效地址和跨距值即可完整表示,但差值相关预取器需使用多个全局历史缓冲器表项来保存该跨距访存模式中最近发生缓存失效的所有失效地址,因而存储利用效率较低。另一方面,差值相关预取器在遇到模式匹配时会按照规则发出多个预取请求,并且无法判断当前的预取地址是否为已预取过的地址,因此会产生大量冗余预取,浪费了处理器访问片上缓存的带宽和功耗。因此,需要对差值相关预取器的上述两个问题进行优化,通过改善差值相关预取器的存储利用效率以及过滤预取器发出的冗余预取,来提高处理器中预取器的效率。

发明内容
本发明所要解决的技术问题是提供一种实现数据预取的方法及装置,能够改善差值相关预取器的存储利用效率。为了解决上述技术问题,本发明提供了一种实现数据预取的预取器装置,其特征在于,包括访存模式识别单元,用于将全局失效地址流划分为局部失效地址流,按时间顺序将所述局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成相应的预取地址。进一步地,该装置还包括全局历史缓冲器,用于按时间顺序保存属于同一局部失效地址流中除了所述最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于所述同一局部失效地址流的地址信息,以计算生成局部差值流捕获差值相关访存模式并生成相应的预取地址。进一步地,访存模式识别单元含有全相联或组相联结构的多个表项,每个表项保存一个局部失效地址流的历史访存信息,并通过缓存失效地址的标签位作为索引查找,每一表项包含如下各个域标签域,用于标识不同的局部失效地址流;最近缓存失效的第一地址索引域、第二地址索引域,用于按时间顺序保存局部失效地址流中最近发生的两个缓存失效的地址各自的行索引部分;状态域,用于标识每一表项所处的状态,包括捕获外状态、初始捕获状态、跨距捕获状态以及差值状态中的任意一种;跨距访存模式频度域,用于记录被捕获到的跨距访存模式的次数;局部失效地址序列链接域,用于作为指向表项所对应的在全局历史缓冲器中局部失效地址序列的指针。进一步地,状态域所包括的捕获外状态,用于表示访存模式识别单元相应的表项尚未分配给任何存储区域, 不参与到访存模式捕获过程中;初始捕获状态,用于表示缓存失效地址进入跨距访存模式的初始捕获;跨距捕获状态,用于捕获跨距访存模式以及使用跨距访存模式频度域的值控制跨距访存模式的预取地址生成;差值状态,用于捕获跨距访存模式或其它可重复的访存模式。
进一步地,该装置还包括差值缓冲器,用于与全局历史缓冲器和所述访存模式识别单元相配合,计算出两个依序发生的缓存失效的地址差值,并将计算出的地址差值的序列作为局部差值流缓存, 以通过比较找到匹配的差值对,生成可重复访存模式的预取地址。进一步地,该装置还包括预取队列单元,用于通过预取队列按时间顺序保存访存模式识别单元或差值缓冲器生成的预取地址;在新生成的预取地址被放入预取队列之前,与预取队列中的预取地址逐个比较,若预取队列中没有与该新生成的预取地址相同的预取地址,则将该新产生的预取地址放入预取队列,并针对队列中的预取地址逐个向存储系统发出预取请求;否则过滤该新生成的预取地址。进一步地,该装置还包括设置有多个表项的预取过滤器,其中预取过滤器,预取地址被从预取队列单元中替换出后,若用该预取地址的高位和低位索引命中一个表项,则将该表项的值置为命中值,否则将该表项的值置为非命中值;当通过新产生的预取地址的高位和低位索引到一个表项,且该表项的值为命中值,则过滤该新产生的预取地址;否则将该新产生的预取地址存入预取队列单元,等待发往存储系统。为了解决上述技术问题,本发明提供了一种实现数据预取的方法,包括通过访存模式识别单元划分全局失效地址流为局部失效地址流,按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址。进一步地,该方法还包括通过全局历史缓冲器按时间顺序保存属于同一局部失效地址流中除了最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于所述同一局部失效地址流的地址信息,以计算生成局部差值流捕获可重复的访存模式并生成预取地址。进一步地,该访存模式识别单元含有全相联或组相联结构的多个表项,每个表项保存一个局部失效地址流的历史访存信息,并通过缓存失效地址的标签位作为索引查找, 每一表项包含如下各个域标签域,用于标识不同的局部失效地址流;
最近缓存失效的第一地址索引域、第二地址索引域,用于按时间顺序保存所述局部失效地址流中最近发生的两个缓存失效的地址各自的行索引部分;状态域,用于标识每一表项所处的状态,包括捕获外状态、初始捕获状态、跨距捕获状态以及差值状态中的任意一种;跨距访存模式频度域,用于记录被捕获到的跨距访存模式的次数;局部失效地址序列链接域,用于作为指向表项所对应的在全局历史缓冲器中局部失效地址序列的指针。进一步地,状态域所包括的捕获外状态,用于表示访存模式识别单元相应的表项尚未分配给任何存储区域, 不参与到访存模式捕获过程中;初始捕获状态,用于表示缓存失效地址进入跨距访存模式的初始捕获;跨距捕获状态,用于捕获跨距访存模式以及使用跨距访存模式频度域的值控制生
8成跨距访存模式的预取地址;差值状态,用于捕获跨距访存模式或其它可重复的访存模式。进一步地,该方法还包括为缓存中每个缓存行增加预取标志位,用于在预取回来的数据填入缓存时,置相应缓存行的预取标志位为“已预取数据”的值;当发生缓存命中且命中行的预取标志位为该 “已预取数据”的值时,将相应的预取标志位清零,并使用该次访问的地址更新预取器。进一步地,通过访存模式识别单元按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址,具体包括对于每一个缓存失效或缓存命中且命中行的预取标志位为“已预取数据”的值,若用缓存失效地址的标签位查找访存模式识别单元表项的标签域命中,则将为该缓存失效地址分配访存模式识别单元的一个新表项或根据替换算法选择出的一个旧表项,然后将该表项设置为初始捕获状态,并将第二地址索引域的初始值设为该缓存失效地址的行索引,同时设置跨距访存模式频度域为初始值0 ;初始捕获状态下,如果后续缓存失效地址的标签位与访存模式识别单元所述表项的标签域的值相同,则将该表项的第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到跨距捕获状态;在跨距捕获状态下,若最新的缓存失效地址的行索引与第二地址索引域两值的差值与第二地址索引域与第一地址索引域两值的差值相同,则将跨距访存模式频度域的值加 1 ;在初次捕获到跨距访存模式时,根据预取度发出多个预取请求,并使用第二地址索引域与第一地址索引域两值的差值计算预取地址。进一步地,通过全局历史缓冲器计算生成局部差值流捕获差值相关访存模式并生成预取地址,具体包括计算出两个依序发生的缓存失效的地址差值,并将计算出的地址差值的序列作为局部差值流缓存在一差值缓冲器中;在所述跨距捕获状态下,若最新的缓存失效地址的行索引与第二地址索引域两个值的差值和第二地址索引域与第一地址索引域两个值的差值不相同,则将第一地址索引域的值保存到全局历史缓冲器中,并使局部失效地址序列链接域的指针指向全局历史缓冲器中保存第一地址索引域的值的表项,同时,将第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到差值状态;在差值状态下,若最新的缓存失效地址的行索引与访存模式识别单元表项中的第二地址索引域两个值的差值,与该表项中第二地址索引域与第一地址索引域两个值的差值不相同,则保持表项仍处在差值状态,使用最新的缓存失效地址的行索引与第二地址索引域两个值的差值和第二地址索引域与第一地址索引域两个值的差值组成源差值对,将第一地址索引域的值保存到全局历史缓冲器中,并更新相应表项的局部失效地址序列链接域的指针,同时,将第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引;随后用缓存失效地址计算得到的源差值对按时间顺序与由访存模式识别单元表项的第二地址索引域、第一地址索引域和所述全局历史缓冲器中保存的局部失效地址序列组成的局部失效地址流计算出来的局部差值流中的目标差值对进行比较,若比较结果相等,则根据预取度发出多个预取请求,并使用差值缓冲器中保存的差值生成预取地址。进一步地,该方法还包括预取器通过预取队列按时间顺序缓存生成的预取地址,并逐个向存储系统发出预取请求。进一步地,预取器在将新产生的预取地址缓存在预取队列单元之前,还包括预取器将该新产生的预取地址与预取队列中的预取地址逐个比较,若发现预取队列中有与该新产生的预取地址相同的预取地址,则过滤新产生的预取地址,否则,将该新产生的预取地址放入预取队列。进一步地,该方法还包括当预取地址被从预取队列单元中替换出去后,若用该预取地址的高位和低位索引命中一设置多个表项的预取过滤器中的一个表项,则将命中表项的值置为“命中值”,否则将命中表项的值置为“非命中值”。进一步地,预取器在将新产生的预取地址缓存在预取队列单元之前,还包括预取器用该新产生的预取地址的高位和低位索引命中预取过滤器中的一个表项, 且索引到的表项值为“命中值”,则过滤该新产生的预取地址;否则将该新产生的预取地址存入预取队列单元,等待发往存储系统。本发明通过改善差值相关预取器的存储利用效率,并通过减少对预取器性能提升没有贡献的冗余预取,使得预取器在相同存储开销的情况下能够获得更好的性能优化效果,同时可有效降低预取器访问片上缓存的带宽需求和功耗开销。


图1为本发明的实现数据预取的预取器装置实施例的内部结构示意图;图2为本发明的实施例的访存模式识别单元的状态机工作示意图。
具体实施例方式以下结合附图和优选实施例对本发明的技术方案进行详细地阐述。应当理解,以下描述的实施例仅用于说明和解释本发明,并不用于限定本发明的技术方案。如图1所示,表示了本发明的实现数据预取的预取器装置实施例的内部结构,包括访存模式识别单元,其中访存模式识别单元,用于将全局失效地址流划分为局部失效地址流,按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址。上述预取器装置实施例还包括全局历史缓冲器(GHB),其中全局历史缓冲器,用于按时间顺序保存属于同一局部失效地址流中除了最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于同一局部失效地址流的地址信息,以计算生成局部差值流捕获差值相关访存模式并生成预取地址。
在上述预取器装置实施例中,访存模式识别单元含有全相联或组相联结构的多个表项,每个表项保存一个局部失效地址流(即一个存储区域)的历史访存信息,并通过缓存失效地址的高位(Tag)作为索引查找,每一表项包含如下6个域标签域(Tag),用于标识不同的局部失效地址流(即不同的存储区域);最近缓存失效的第一地址索引域(LastIdxO)、第二地址索引域(LastIdxl),用于按时间顺序保存局部失效地址流中最近发生的两个缓存失效的地址各自的行索引部分,在捕获跨距访存模式时生成跨距值,在捕获非跨距访存模式时与全局历史缓冲器中的局部失效地址序列一起组成失效地址流;状态域(State),用于标识每一表项所处的状态,包括捕获外状态(INV)、初始捕获状态(INIT)、跨距捕获状态(STRIDE)以及差值状态(DELTA)中的任意一种;跨距访存模式频度域(Cnt),用于记录被捕获到的跨距访存模式的次数,以判断该跨距访存模式是否被初次捕获;局部失效地址序列链接域(Ptr),用于作为指向表项所对应的在全局历史缓冲器中局部失效地址序列的指针。对于每一个局部失效地址流,预取器通过对应的访存模式识别单元表项保存最近的两个缓存失效地址的行索引,更旧的缓存失效地址的行索引则保存在全局历史缓冲器中,由全局历史缓冲器用指针(Ptr)链接起来组成局部失效地址序列,如图1所示;即访存模式识别单元中的行索引和全局历史缓冲器中的局部失效地址序列组成了局部失效地址流。 上述预取器装置实施例还包括差值缓冲器,用于与全局历史缓冲器和访存模式识别单元相配合,计算出两个依序发生的缓存失效的地址差值(如图1中的各个小三角所示),并将计算出的地址差值的序列作为局部差值流缓存,以通过差值对比较找到匹配的差值对,从而生成可重复访存模式的预取地址。对于非跨距访存模式,本发明使用当前的缓存失效地址和访存模式识别单元中保存的两个缓存失效地址一起共三个缓存失效地址计算出来的两个差值(差值对),按时间顺序(从新到旧)与差值缓冲器中缓存的局部差值流中的差值对比较,若比较结果相等,则捕获到相匹配的可重复访存模式,可通过后续的差值和当前的缓存失效地址之和计算生成预取地址。上述预取器装置实施例还包括预取队列单元,用于按时间顺序保存访存模式识别单元或差值缓冲器生成的预取地址;在将新产生的预取地址放入预取队列之前,通过与预取队列中保存的预取地址(包括已发往存储系统的和尚未发往存储系统的)逐个比较,发现有比较结果相同的预取地址,则过滤该新产生的预取地址,否则将该新产生的预取地址放入预取队列,并针对队列中的预取地址逐个向存储系统(本实施例中为L2Cache)发出预取请求。本发明的预取器装置实施例基于上述预取队列单元实现了精确的冗余预取过滤机制。上述预取器装置实施例还包括
预取过滤器,包括多个表项,每一表项保存“命中值”(譬如为1)或“非命中值”(譬如为0),并通过预取地址的高位和低位异或的结果索引;当预取地址被从预取队列单元中替换出去后,若用该预取地址的高位和低位索引命中一个表项,则将命中表项的值置为“命中值”;若用预取器新产生的预取地址的高位和低位索引命中一个表项,并且索引到的表项值为“命中值”,则过滤该预取地址;否则将该预取地址存入预取队列单元,等待发往存储系统;预取器在将新产生的预取地址与预取队列中的预取地址进行比较的同时,还将新产生的预取地址输出给预取过滤器。预取过滤器用该新产生的预取地址的高位和低位索引命中一个表项;预取器将未过滤掉的预取地址放入预取队列单元中,等待访问存储系统。本发明可通过三种过滤机制对预取器发出的冗余预取进行识别和过滤,以减少对性能提升没有贡献的冗余预取,从而降低预取器访问片上缓存的带宽需求和功耗开销。第一种过滤机制,通过访存模式识别单元实现。当访存模式识别单元初次捕获到一个跨距访存模式时,根据预取度Prefetch Degree,譬如为4)发出多个预取请求;当再次捕获到该跨距访存模式时,计算出该局部失效地址流中尚未被预取的下一个地址,并以该地址作为预取地址发出一个预取请求。通过上述过程可在预取跨距访存模式的地址时,避免发出冗余预取。第二种过滤机制,通过预取队列单元实现。预取器通过预取队列单元按时间顺序保存生成的预取地址,并逐个向存储系统发出预取请求。预取器在将新产生的预取地址放入预取队列之前,使用新产生的预取地址与预取队列中的预取地址逐个比较,若发现预取队列中有与该新产生的预取地址相同的预取地址,则表明该新产生的预取地址是冗余的,直接将其过滤掉,否则,将新产生的预取地址放入预取队列,等待访问存储系统。可以看出,上述第二种过滤机制通过与已产生的预取地址逐个进行比较进行过滤,因此,能够实现精确的冗余预取过滤。第三种过滤机制,通过预取过滤器实现。由于预取队列单元中的表项数目有限(例如在本发明的实施例中为预取队列单元配置为32个表项),因此,只能过滤与最近的数目有限的预取地址重复的新生成的预取地址。为了扩大预取队列单元过滤的范围,本发明采用预取过滤器进行非精确的冗余预取过滤。也即预取器通过将预取地址的高位和低位异或的结果索引预取过滤器中的表项, 实际上是将预取地址的范围折半,对经过折半范围的预取地址进行过滤,显然是一种非精确的冗余预取过滤,它存在着误判的可能性。为了减少预取过滤器出现误判的概率,本发明的预取器定期将预取过滤器的所有表项清零。在本发明的上述装置实施例中,为预取过滤器配置IOM个表项,且预取器每发出100个预取请求,便将预取过滤器清零。此外,为了防止对预取回来的缓存行的访问打乱程序原有的失效地址流(某些访问在不进行预取时是失效,而在进行预取时变成了命中),本发明为缓存中每个缓存行增加预取标志位(譬如为1位),用于在预取回来的数据填入缓存时,置相应缓存行的预取标志位为“已预取数据”的值(譬如为1);当发生缓存命中且命中行的预取标志位为该“已预取数据”的值时,将命中行的预取标志位清零,并像发生缓存失效时一样使用该次访问的地址更新预取器。图2展示了本发明的预取器装置实施例中跨距访存模式过滤单元每一表项的状态机的流程,每个表项被分配到一局部缓存失效地址流(即一个存储区域)到开始进行数据预取的过程中,可能会处于如下四个状态之一(1)捕获外状态(INV),表示相应的表项尚未分配给任何存储区域,不参与到访存模式捕获过程中。如图1中所示的INV状态的表项中各个域的值均为空。(2)初始捕获状态(INIT),表示缓存失效地址进入跨距访存模式的初始捕获。对于每一个缓存失效或缓存命中且命中行的预取标志位为“已预取数据”的值,使用缓存失效地址的Tag域查找访存模式识别单元,若查找未命中,则该缓存失效地址不属于任何已在预取监测范围的局部缓存失效地址流(存储区域),此时,将为该缓存失效地址分配一个处于INV状态的新表项或根据替换算法选择出来一个旧表项,以对该缓存失效地址所在的存储区域进行监测,然后将该表项设置为初始捕获状态(INIT),并将LastIdxl域的初始值设为该缓存失效地址的行索引,将Cnt的初始值设置为0,表示缓存失效地址进入跨距访存模式的初始捕获。如图2中所示的3个途径的①,其中一个“首次分配”是分配一个处于INV状态的新表项,另外两个重新分配是据替换算法选择出一个旧表项;无论是分配新表项还是旧表项,都要将其状态更改为INIT状态。(3)跨距捕获状态(STRIDE),用于捕获跨距访存模式以及使用Cnt域的值控制跨距访存模式的预取地址生成。在INIT状态下,如果后续缓存失效地址的高位(Tag)与访存模式识别单元表项的Tag域的值相同,说明该缓存失效地址属于该表项,则将表项的LastIdxl域的值赋给 LastIdxO域,并将LastIdxl的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到跨距捕获状态(STRIDE),如图2中所示的②。在STRIDE状态下,若最新的缓存失效地址的行索引与LastIdxl域两值的差值,与 LastIdxl域与LastIdxO域两值的差值相同,表示捕获到一次跨距访存模式,则将Cnt域的值加1。在初次捕获到跨距访存模式(Cnt的值为1)时,根据预取度(Prefetch Degree)发出多个预取请求,并使用LastIdxl域与LastIdxO域两值的差值计算预取地址。随后,每捕获到一次跨距访存模式,表明一个预取的缓存行被处理器消耗,则继续往后预取一个尚未被预取的缓存行。(4)差值状态(DELTA),用于捕获跨距访存模式或其它可重复的访存模式。在STRIDE状态下,若最新的缓存失效地址的行索引与LastIdxl域两个值的差值和LastIdxl域与LastIdxO域两个值的差值不相同,表示缓存失效地址流不符合跨距访存模式,则将LastIdxO域的值保存到全局历史缓冲器中,并使Ptr域的指针指向全局历史缓冲器中保存LastIdxO域的值的表项,同时,将LastIdxl域的值赋给LastIdxO域,并将 LastIdxl域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到差值状态 (DELTA),如图2所示的③。在DELTA状态下,若最新的缓存失效地址的行索引与表项中的LastIdxl域两个值的差值,与表项中LastIdxl域与LastIdxO域两个值的差值相同,表示捕获到一次跨距访存模式,则将表项中Cnt域的值设置为1,根据预取度(Prefetch Degree)发出多个预取请求,并将该表项的状态转换到STRIDE状态,如图2所示的④;否则,表项仍旧保持在 DELTA状态,使用最新的缓存失效地址的行索引与LastIdxl域两个值的差值和LastIdxl 域与LastIdxO域两个值的差值组成源差值对,并将LastIdxO域的值保存到全局历史缓冲器中,并更新相应表项的Ptr域的指针,同时,将LastIdxl域的值赋给LastIdxO域,并将 LastIdxl域的值设置为当前缓存失效地址的行索引;随后使用缓存失效地址计算得到的源差值对按时间顺序(从新到旧)与由访存模式识别单元表项的LastIdxl域、LastIdxO域和全局历史缓冲器中保存的局部失效地址序列组成的局部失效地址流计算出来的局部差值流中的目标差值对进行比较(源差值对与目标差值对比较时,从局部差值流中比源差值对旧的目标差值对开始比较,以避免源差值对与自己进行比较),若比较结果相等,表示找到了相匹配的可重复访存模式,则根据预取度(Prefetch Degree)发出多个预取请求,并使用差值缓冲器中保存的差值生成预取地址。若比较结果不相等,则不发出预取请求。本发明针对上述预取器装置实施例,相应地还提供了实现数据预取的方法实施例,涉及访存模式识别单元,该方法包括通过访存模式识别单元划分全局失效地址流为局部失效地址流,按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址。上述方法实施例还涉及全局历史缓冲器(GHB),该方法还包括通过全局历史缓冲器按时间顺序保存属于同一局部失效地址流中除了最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于同一局部失效地址流的地址信息,以计算生成局部差值流捕获差值相关访存模式并生成预取地址。在上述方法实施例中,访存模式识别单元采用全相联或组相联结构的多个表项, 每个表项保存一个局部失效地址流的历史访存信息,并通过缓存失效地址的Tag位作为索引查找,每一表项包含如下6个域标签域(Tag),用于标识不同的局部失效地址流;最近缓存失效的第一地址索引域(LastIdxO)、第二地址索引域(LastIdxl),用于按时间顺序保存局部失效地址流中最近发生的两个缓存失效的地址的行索引部分,在捕获跨距访存模式时用以生成跨距值,在捕获非跨距访存模式时与全局历史缓冲器中的局部失效地址序列一起组成失效地址流;状态域(State),用于标识每一表项所处的状态,包括捕获外状态(INV)、初始捕获状态(INIT)、跨距捕获状态(STRIDE)以及差值状态(DELTA)中的任意一种;跨距访存模式频度域(Cnt),用于记录被捕获到的跨距访存模式的次数,以判断是否初次捕获跨距访存模式;局部失效地址序列链接域(Ptr),用于作为指向表项所对应的在全局历史缓冲器中局部失效地址序列的指针。在上述方法实施例中,状态域(Mate)所包括的捕获外状态,用于表示访存模式识别单元相应的表项尚未分配给任何存储区域, 不参与到访存模式捕获过程中;
初始捕获状态,用于表示缓存失效地址进入跨距访存模式的初始捕获;跨距捕获状态,用于捕获跨距访存模式以及使用Cnt域的值控制跨距访存模式的预取地址生成;差值状态,用于捕获跨距访存模式或其它可重复的访存模式。在上述方法实施例中,还包括为缓存中每个缓存行增加预取标志位,用于在预取回来的数据填入缓存时,置相应缓存行的预取标志位为“已预取数据”的值;当发生缓存命中且命中行的预取标志位为该 “已预取数据”的值时,将相应的预取标志位清零,并使用该次访问的地址更新预取器。在上述方法实施例中,通过访存模式识别单元按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址,具体包括对于每一个缓存失效或缓存命中且命中行的预取标志位为“已预取数据”的值,使用缓存失效地址的标签位查找访存模式识别单元,若查找未命中,则将为该缓存失效地址分配一个新表项或根据替换算法选择出来一个旧表项,以对该缓存失效地址所在的存储区域进行监测,然后将该表项设置为初始捕获状态,并将LastIdxl域的初始值设为该缓存失效地址的行索引,设置Cnt域的值为初始值0 ;在初始捕获状态下,如果后续缓存失效地址的Tag位与访存模式识别单元表项的 Tag域的值相同,则将表项的LastIdxl域的值赋给LastIdxO域,并将LastIdxl的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到跨距捕获状态;在跨距捕获状态下,若最新的缓存失效地址的行索引与LastIdxl域两值的差值, 与LastIdxl域与LastIdxO域两值的差值相同,则将Cnt域的值加1 ;在初次捕获到跨距访存模式(Cnt的值为1)时,根据预取度发出多个预取请求,并使用LastIdxl域与LastIdxO 域两值的差值计算预取地址。随后,每捕获到一次跨距访存模式,表明一个预取的缓存行被处理器消耗,则继续往后预取一个尚未被预取的缓存行。上述方法实施例还涉及差值缓冲器;通过全局历史缓冲器计算生成局部差值流捕获差值相关访存模式并生成预取地址,具体包括计算出两个依序发生的缓存失效的地址差值,并将计算出的地址差值的序列作为局部差值流缓存在差值缓冲器;在跨距捕获状态下,若最新的缓存失效地址的行索引与LastIdxl域两个值的差值和LastIdxl域与LastIdxO域两个值的差值不相同,则将LastIdxO域的值保存到全局历史缓冲器中,并使Ptr域的指针指向全局历史缓冲器中保存LastIdxO域的值的表项,同时, 将LastIdxl域的值赋给LastIdxO域,并将LastIdxl域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到差值状态;在差值状态下,若最新的缓存失效地址的行索引与表项中的LastIdxl域两个值的差值,与表项中LastIdxl域与LastIdxO域两个值的差值不相同,则保持表项仍处在差值状态,使用最新的缓存失效地址的行索引与LastIdxl域两个值的差值和LastIdxl域与 LastIdxO域两个值的差值组成源差值对,将LastIdxO域的值保存到全局历史缓冲器中,并更新相应表项的Ptr域的指针,同时,将LastIdxl域的值赋给LastIdxO域,并将LastIdxl域的值设置为当前缓存失效地址的行索引;随后使用缓存失效地址计算得到的源差值对按时间顺序与由访存模式识别单元表项的LastIdxl域、LastIdxO域和全局历史缓冲器中保存的局部失效地址序列组成的局部失效地址流计算出来的局部差值流中的目标差值对进行比较,若比较结果相等,则根据预取度发出多个预取请求,并使用差值缓冲器中保存的差值生成预取地址。在上述方法实施例中,通过全局历史缓冲器计算生成局部差值流捕获差值相关访存模式并生成预取地址,还包括在差值状态下,若最新的缓存失效地址的行索引与表项中的LastIdxl域两个值的差值,与表项中LastIdxl域与LastIdxO域两个值的差值相同,则将表项中Cnt域的值设置为1,根据预取度发出多个预取请求,并将该表项的状态转换到跨距捕获状态。上述方法实施例还涉及预取队列单元,该方法还包括预取器通过预取队列单元按时间顺序缓存生成的预取地址,并逐个向存储系统发出预取请求。在上述方法实施例中,预取器在将新产生的预取地址缓存在预取队列单元之前, 还包括预取器将新产生的预取地址与预取队列中的预取地址逐个比较,若发现预取队列中有与该新产生的预取地址相同的预取地址,则过滤新产生的预取地址,否则,将新产生的预取地址放入预取队列。上述方法实施例还涉及设置多个表项的预取过滤器,该方法还包括当预取地址被从预取队列单元中替换出去后,若用该预取地址的高位和低位索引命中该预取过滤器中的一个表项,则将命中表项的值置为“命中值”,否则将命中表项的值置为“非命中值”。在上述方法实施例中,预取器在将新产生的预取地址缓存在预取队列单元之前, 还包括预取器用该新产生的预取地址的高位和低位索引命中预取过滤器中的一个表项, 且索引到的表项值为“命中值”,则过滤该预取地址;否则将该预取地址存入预取队列单元, 等待发往存储系统。对于本领域的专业人员来说,在了解了本发明内容和原理后,能够在不背离本发明的原理和范围的情况下,根据本发明的方法进行形式和细节上的各种修正和改变,但是这些基于本发明的修正和改变仍在本发明的权利要求保护范围之内。
权利要求
1.一种实现数据预取的预取器装置,其特征在于,包括访存模式识别单元,用于将全局失效地址流划分为局部失效地址流,按时间顺序将所述局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成相应的预取地址。
2.按照权利要求1所述的预取器装置,其特征在于,还包括全局历史缓冲器,用于按时间顺序保存属于同一局部失效地址流中除了所述最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于所述同一局部失效地址流的地址信息,以计算生成局部差值流捕获可重复的访存模式并生成相应的预取地址。
3.按照权利要求2所述的预取器装置,其特征在于,所述访存模式识别单元含有全相联或组相联结构的多个表项,每个表项保存一个局部失效地址流的历史访存信息,并通过缓存失效地址的标签位作为索引查找,所述表项包含如下各个域标签域,用于标识不同的局部失效地址流;最近缓存失效的第一地址索引域、第二地址索引域,用于按时间顺序保存局部失效地址流中最近发生的两个缓存失效的地址各自的行索引部分;状态域,用于标识每一表项所处的状态,包括捕获外状态、初始捕获状态、跨距捕获状态以及差值状态中的任意一种;跨距访存模式频度域,用于记录被捕获到的跨距访存模式的次数; 局部失效地址序列链接域,用于作为指向表项所对应的在所述全局历史缓冲器中局部失效地址序列的指针。
4.按照权利要求3所述的预取器装置,其特征在于,所述状态域所包括的所述捕获外状态,用于表示访存模式识别单元相应的表项尚未分配给任何存储区域, 不参与到访存模式捕获过程中;所述初始捕获状态,用于表示所述缓存失效地址进入跨距访存模式的初始捕获; 所述跨距捕获状态,用于捕获所述跨距访存模式以及使用所述跨距访存模式频度域的值控制跨距访存模式的预取地址生成;所述差值状态,用于捕获所述跨距访存模式或其它可重复的访存模式。
5.按照权利要求4所述的预取器装置,其特征在于,还包括差值缓冲器,用于与所述全局历史缓冲器和所述访存模式识别单元相配合,计算出两个依序发生的缓存失效的地址差值,并将计算出的地址差值的序列作为局部差值流缓存, 以通过比较找到匹配的差值对,生成所述可重复访存模式的预取地址。
6.按照权利要求5所述的预取器装置,其特征在于,还包括预取队列单元,用于通过预取队列按时间顺序保存所述访存模式识别单元或所述差值缓冲器生成的预取地址;在新生成的预取地址被放入所述预取队列之前,与所述预取队列中的预取地址逐个比较,若所述预取队列中没有与该新生成的预取地址相同的预取地址, 则将该新产生的预取地址放入所述预取队列,并针对队列中的预取地址逐个向存储系统发出预取请求;否则过滤该新生成的预取地址。
7.按照权利要求6所述的预取器装置,其特征在于,还包括设置有多个表项的预取过滤器,其中预取过滤器,所述预取地址被从所述预取队列单元中替换出后,若用该预取地址的高位和低位索引命中一个表项,则将该表项的值置为命中值,否则将该表项的值置为非命中值;当通过新产生的预取地址的高位和低位索引到一个表项,且该表项的值为所述命中值, 则过滤该新产生的预取地址;否则将该新产生的预取地址存入预取队列单元,等待发往存储系统。
8.一种实现数据预取的方法,其特征在于,包括通过访存模式识别单元划分全局失效地址流为局部失效地址流,按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址。
9.按照权利要求8所述的方法,其特征在于,还包括通过全局历史缓冲器按时间顺序保存属于同一局部失效地址流中除了所述最近发生的两个缓存失效的地址以外的其它缓存失效地址序列信息,并链接属于所述同一局部失效地址流的地址信息,以计算生成局部差值流捕获可重复的访存模式并生成预取地址。
10.按照权利要求9所述的方法,其特征在于,所述访存模式识别单元含有全相联或组相联结构的多个表项,每个表项保存一个局部失效地址流的历史访存信息,并通过缓存失效地址的标签位作为索引查找,所述表项包含如下各个域标签域,用于标识不同的局部失效地址流;最近缓存失效的第一地址索引域、第二地址索引域,用于按时间顺序保存所述局部失效地址流中最近发生的两个缓存失效的地址各自的行索引部分;状态域,用于标识每一表项所处的状态,包括捕获外状态、初始捕获状态、跨距捕获状态以及差值状态中的任意一种;跨距访存模式频度域,用于记录被捕获到的跨距访存模式的次数;局部失效地址序列链接域,用于作为指向表项所对应的在所述全局历史缓冲器中局部失效地址序列的指针。
11.按照权利要求10所述的方法,其特征在于,所述状态域所包括的所述捕获外状态,用于表示访存模式识别单元相应的表项尚未分配给任何存储区域, 不参与到访存模式捕获过程中;所述初始捕获状态,用于表示所述缓存失效地址进入跨距访存模式的初始捕获;所述跨距捕获状态,用于捕获所述跨距访存模式以及使用所述跨距访存模式频度域的值控制生成跨距访存模式的预取地址;所述差值状态,用于捕获所述跨距访存模式或其它可重复的访存模式。
12.按照权利要求11所述的方法,其特征在于,还包括为缓存中每个缓存行增加预取标志位,用于在预取回来的数据填入缓存时,置相应缓存行的预取标志位为“已预取数据”的值;当发生缓存命中且命中行的预取标志位为该“已预取数据”的值时,将相应的预取标志位清零,并使用该次访问的地址更新预取器。
13.按照权利要求12所述的方法,其特征在于,所述通过访存模式识别单元按时间顺序将该局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成预取地址,具体包括对于每一个缓存失效或缓存命中且命中行的所述预取标志位为所述“已预取数据”的值,若用缓存失效地址的标签位查找所述访存模式识别单元所述表项的标签域命中,则将为该缓存失效地址分配所述访存模式识别单元的一个新表项或根据替换算法选择出的一个旧表项,然后将该表项设置为所述初始捕获状态,并将第二地址索引域的初始值设为该缓存失效地址的行索引,同时设置所述跨距访存模式频度域为初始值0 ;在所述初始捕获状态下,如果后续缓存失效地址的标签位与所述访存模式识别单元所述表项的标签域的值相同,则将该表项的第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到所述跨距捕获状态;在所述跨距捕获状态下,若最新的缓存失效地址的行索引与第二地址索引域两值的差值与第二地址索引域与第一地址索引域两值的差值相同,则将所述跨距访存模式频度域的值加1 ;在初次捕获到所述跨距访存模式时,根据预取度发出多个预取请求,并使用第二地址索引域与第一地址索引域两值的差值计算预取地址。
14.按照权利要求13所述的方法,其特征在于,所述通过全局历史缓冲器计算生成局部差值流捕获差值相关访存模式并生成预取地址,具体包括计算出两个依序发生的缓存失效的地址差值,并将计算出的地址差值的序列作为局部差值流缓存在一差值缓冲器中;在所述跨距捕获状态下,若最新的缓存失效地址的行索引与第二地址索引域两个值的差值和第二地址索引域与第一地址索引域两个值的差值不相同,则将第一地址索引域的值保存到所述全局历史缓冲器中,并使所述局部失效地址序列链接域的指针指向所述全局历史缓冲器中保存第一地址索引域的值的表项,同时,将第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引,然后将该表项的状态转换到所述差值状态;在所述差值状态下,若最新的缓存失效地址的行索引与所述访存模式识别单元所述表项中的第二地址索引域两个值的差值与该表项中第二地址索引域与第一地址索引域两个值的差值不相同,则保持表项仍处在差值状态,使用最新的缓存失效地址的行索引与第二地址索引域两个值的差值和第二地址索引域与第一地址索引域两个值的差值组成源差值对,将第一地址索引域的值保存到所述全局历史缓冲器中,并更新相应表项的所述局部失效地址序列链接域的指针,同时,将第二地址索引域的值赋给第一地址索引域,并将第二地址索引域的值设置为当前缓存失效地址的行索引;随后用缓存失效地址计算得到的源差值对按时间顺序与由所述访存模式识别单元表项的第二地址索引域、第一地址索引域和所述全局历史缓冲器中保存的局部失效地址序列组成的局部失效地址流计算出来的局部差值流中的目标差值对进行比较,若比较结果相等,则根据预取度发出多个预取请求,并使用差值缓冲器中保存的差值生成预取地址。
15.按照权利要求14所述的方法,其特征在于,还包括预取器通过预取队列按时间顺序缓存生成的预取地址,并逐个向存储系统发出预取请求。
16.按照权利要求15所述的方法,其特征在于,所述预取器在将新产生的预取地址缓存在预取队列单元之前,还包括所述预取器将该新产生的预取地址与预取队列中的预取地址逐个比较,若发现预取队列中有与该新产生的预取地址相同的预取地址,则过滤新产生的预取地址,否则,将该新产生的预取地址放入所述预取队列。
17.按照权利要求14所述的方法,其特征在于,还包括当预取地址被从预取队列单元中替换出去后,若用该预取地址的高位和低位索引命中一设置多个表项的预取过滤器中的一个表项,则将命中表项的值置为“命中值”,否则将命中表项的值置为“非命中值”。
18.按照权利要求17所述的方法,其特征在于,所述预取器在将新产生的预取地址缓存在预取队列单元之前,还包括所述预取器用该新产生的预取地址的高位和低位索引命中预取过滤器中的一个表项, 且索引到的表项值为所述“命中值”,则过滤该新产生的预取地址;否则将该新产生的预取地址存入预取队列单元,等待发往存储系统。
全文摘要
本发明提供了一种实现数据预取的方法及装置,其中预取器装置包括访存模式识别单元将全局失效地址流划分为局部失效地址流,按时间顺序将局部失效地址流中最近发生的两个缓存失效的地址信息记录为历史访存信息,并根据该记录捕获跨距访存模式并生成相应的预取地址。本发明通过改善差值相关预取器的存储利用效率,并通过减少对预取器性能提升没有贡献的冗余预取,使得预取器在相同存储开销的情况下能够获得更好的性能优化效果,同时可有效降低预取器访问片上缓存的带宽需求和功耗开销。
文档编号G06F12/08GK102521158SQ20111041540
公开日2012年6月27日 申请日期2011年12月13日 优先权日2011年12月13日
发明者佟冬, 党向磊, 易江芳, 王克义, 王箫音, 程旭, 陆俊林 申请人:北京北大众志微系统科技有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1