CN111052095A - 使用动态预取深度的多行数据预取 - Google Patents

使用动态预取深度的多行数据预取 Download PDF

Info

Publication number
CN111052095A
CN111052095A CN201880056109.3A CN201880056109A CN111052095A CN 111052095 A CN111052095 A CN 111052095A CN 201880056109 A CN201880056109 A CN 201880056109A CN 111052095 A CN111052095 A CN 111052095A
Authority
CN
China
Prior art keywords
value
prefetch
cache
accuracy
depth value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201880056109.3A
Other languages
English (en)
Other versions
CN111052095B (zh
Inventor
H·A·李
Y·周
J·佩普
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Priority to CN202311329199.8A priority Critical patent/CN117271388A/zh
Publication of CN111052095A publication Critical patent/CN111052095A/zh
Application granted granted Critical
Publication of CN111052095B publication Critical patent/CN111052095B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/602Details relating to cache prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)

Abstract

一种用于为处理器预取数据的系统,包括处理器核心、被配置为存储供处理器核心使用的信息的存储器、被配置为从存储器获取和存储信息的高速缓存存储器,以及预取电路。预取电路可以被配置为发出多簇预取请求,以使用预测地址从存储器中检索信息以存储在高速缓存存储器中。多簇预取请求可以包括指示要检索的获取簇的数量的深度值。预取电路还可以被配置为基于特定时间间隔内经预取的信息的高速缓存命中率来生成准确度值,并且基于准确度值来修改深度值。

Description

使用动态预取深度的多行数据预取
背景
技术领域
本文公开的实施例一般而言涉及处理器,并且更具体地,涉及数据预取系统的实现。
背景技术
为了提高执行性能,处理器可以包括用于一个或多个高速缓存存储器的预取电路,以减少存储器访问时间,该预取电路在本文中也称为预取器(prefetcher)。用于给定高速缓存的预取器可以预测来自该高速缓存的即将到来的请求从而从较低级别的高速缓存或系统存储器中读取数据,即,在处理核心请求数据之前获取数据。预取器可以跟踪与在处理核心中运行的多个软件进程之一对应的存储器访问模式。使用这些模式,预取器然后可以在高速缓存请求数据之前读取数据。
在一些情况下,运行在处理器上的应用可能会以类似流(stream-like)的模式访问数据,在该模式中该应用访问许多连续的地址,但访问不是连续的。在遇到此类模式时预取大量数据可以提高高速缓存的效率,直到该连续存储器地址的例外(exception)被访问。
发明内容
用于为处理器预取数据的系统的各种实施例可以包括处理器核心、被配置为存储供处理器核心使用的信息的存储器、被配置为从存储器获取和存储信息的高速缓存存储器,以及预取电路。预取电路可以被配置为发出多簇(multi-group)预取请求,以使用预测地址从存储器中检索信息以存储在高速缓存存储器中。多簇预取请求可以包括深度值,该深度值指示要检索的预取簇的数量。预取电路还可以被配置为基于特定时间间隔内所预取的信息的高速缓存命中率来生成准确度值,并且基于该准确度值来修改深度值。
在一个实施例中,为了修改深度值,预取电路还可以被配置为响应于确定准确度值满足上限阈值而增加深度值,以及响应于确定准确度值满足下限阈值而减小深度值。在另一个实施例中,为了增加深度值,预取电路还可以被配置为响应于确定当前深度值等于最大允许深度值而维持当前深度值。
在另一个实施例中,为了减小深度值,预取电路还可以被配置为响应于确定当前深度值等于最小允许深度值而在至少下一个时间间隔内暂停发出预取请求。在实施例中,为了生成准确度值,预取电路还可以被配置为在特定时间间隔内跟踪第一值,该第一值指示响应于一个或多个预取请求而被存储在高速缓存存储器中的信息的量。预取电路还可以被配置为在该特定时间间隔内跟踪第二值,该第二值指示高速缓存行的高速缓存命中数,这些高速缓存行包括响应于至少一个预取请求而被存储在高速缓存存储器中的信息。
在另一个实施例中,预取电路还可以被配置为基于第一值、第二值以及响应于一个或多个预取请求而存储的信息总量的加权滑动平均值来确定准确度值。在一个实施例中,为了发出多簇预取请求,预取电路还可以被配置为发出多个单簇预取请求,其中单簇预取请求的数量是基于深度值的。
附图说明
以下详细描述参考了附图,现在简要描述附图。
图1是图示处理器中的存储器子系统的实施例的框图。
图2示出了处理器中的存储器预取子系统的实施例的框图。
图3描绘了与高速缓存和准确度监视器相关联的数据表的实施例。
图4图示了与处理器存储器子系统相关联的数据表的实施例。
图5包括用于处理器中的存储器预取子系统的实施例的操作时间线。
图6描绘了用于基于所确定的准确度来执行多簇预取请求的方法的实施例的流程图。
图7图示了用于基于所确定的准确度来执行多簇预取请求的方法的另一个实施例的流程图。
图8示出了用于确定存储器预取子系统的准确度的方法的实施例的流程图。
图9描绘了图示多核处理器的实施例的框图。
虽然本公开可以有各种修改和替代形式,但是其具体实施例在附图中以示例的方式示出并且将在本文中进行详细描述。然而,应该理解的是,附图及其详细描述并非旨在将本公开限制为所示的特定形式,相反,其意图是涵盖落入如由所附权利要求书所定义的本公开的精神和范围内的所有修改、等同形式和替代形式。本文使用的标题仅用于组织目的,并不意味着用来限制本说明书的范围。如在本申请中通篇所使用的,词语“可以”以允许的意义(即,意味着有可能)使用,而不是以强制性的意义(即,必须)使用。类似地,词语“包括”、“包含”是指包括但不限于。
具体实施方式
一般而言,处理器核心(或简称为“核心”)可以指能够独立于处理器内的其它处理器核心而执行程序指令并处理数据的处理器单元,使得多个核心可以同时执行指令。处理器核心的性能可能受到多个因素的影响,这些因素包括但不限于处理器时钟速度、处理器中核心的数量、处理器中高速缓存存储器(或简称为“高速缓存”)的数量,以及所包含的高速缓存的大小。
在一些计算系统中,可以利用预取器。如本文所使用的,“预取器”是指被配置为在处理器核心中的执行单元或其它处理电路请求一个或多个指令之前获取该一个或多个指令的电路。在与高速缓存组合使用的情况下,预取器可以通过预测特定软件进程(本文也称为“处理线程”)可能访问哪些存储器地址并在处理器发出针对这些地址的请求之前从这些地址读取信息来改善信息到处理器的流动。如果预取器已经准确地预测了处理器的数据需求,那么响应于来自处理器的存储器请求,所请求的信息可以在很少延迟或没有延迟的情况下就对处理器可用。如本文所使用的,“信息”是指计算系统中的处理器或其它处理逻辑所使用的指令和/或数据值。
数据可以由各种请求者中的任何一个从各种存储器中获取。多核心处理器中的每个核心都可以从获取单元或预取器生成存储器请求。可以在两个或更多个核心之间共享的一些高速缓存可以包括获取电路和预取器。预取器的有效性可以至少部分地基于预取电路识别处理线程的存储器访问的模式并正确预测该模式何时被重复的能力。诸如,例如,如果正在播放大型媒体文件,那么一些处理线程可能会以大块的连续地址访问存储器。在这种情况下,以较大的预取簇(即,要预取的一组连续存储器地址)来预取信息可以提高存储器访问资源的效率,从而提高计算系统的性能。
然而,如果处理线程对存储器的访问偏离了这些连续地址,那么由预取器请求的信息当中的某些信息将不会被利用。这种情况可以被称为预取地址错误预测或预取未命中。
在本公开中讨论了预取器的各种实施例和用于管理预取操作的方法。附图中图示并在下面描述的实施例可以提供用于管理计算系统中的存储器预取操作的大小的技术,该技术可以减少预取器的错误预测的发生。
图1图示了图示计算系统的实施例的框图。计算系统100包括耦合到高速缓存存储器102的处理器核心101。高速缓存存储器102还耦合到存储器103和预取电路104。
处理器核心101可以被配置为根据特定的指令集体系架构(ISA)执行指令并处理数据。在各种实施例中,处理器核心101可以被配置为实现任何合适的ISA,诸如,例如,
Figure BDA0002394601610000051
V9、x86、
Figure BDA0002394601610000052
Figure BDA0002394601610000053
此外,在一些实施例中,处理器核心101可以被配置为同时执行多个线程(在本文中称为“多线程”),其中每个线程可以包括可以独立于来自另一个线程的指令而执行的一组指令。虽然图示了单个处理器核心101,但是在其它实施例中,可以预期在处理器内可以包括任何合适数量的核心,并且每个这样的核心都可以是多线程的。
高速缓存存储器102可以驻留在处理器核心101内,或者可以驻留在处理器核心101与其它存储器之间。在一个实施例中,高速缓存存储器102可以被配置为临时存储或者说“高速缓存”指令和数据以供处理器核心101使用。高速缓存存储器102可以对应于各种级别的高速缓存存储器中的任何一个,诸如,例如,L1、L2和L3。例如,处理器的一个实施例可以包括处理器核心101内的L1高速缓存,而L2高速缓存可以由高速缓存存储器102表示,并且L3高速缓存被包括作为存储器103的一部分。在多核心处理器中,每个核心可以具有一个或多个L1高速缓存存储器,并且可以共享一个或多个L2和/或L3高速缓存。在各种实施例中,可以使用集合关联(set-associative)或直接映射(direct-mapped)技术来实现高速缓存存储器102。
注意的是,高速缓存存储器102中的条目可以被称为高速缓存行。高速缓存存储器102中的每个高速缓存行可以包括正在被存储的数据、与一致性状态对应的标志,以及地址标签。高速缓存标签可以包括正被存储在高速缓存行中的数据的原始地址的全部或一部分、指示经高速缓存的数据被存储在哪个高速缓存行中的索引,以及指示特定数据在每个高速缓存行中的位置的偏移量。给定的处理器核心可以利用存储器位置的直接地址、基于查找表的转换地址或通过基于指令的地址模式计算出的地址来访问高速缓存。
在所示的实施例中,存储器103包括用于存储可由处理器核心101(包括诸如例如正由处理器核心101执行的应用或操作系统之类的活动软件)使用的信息的系统存储器。在一些实施例中,存储器103还可以包括用于在L2和/或L3高速缓存中存储信息的保留位置。在一些实施例中,存储器103可以包括一个或多个存储器接口,用于访问被包括在与包括处理器核心101的集成电路(IC)分离的集成电路(IC)上的一个或多个类型的系统存储器。这样的存储器接口可以被配置为响应于高速缓存获取请求来管理高速缓存存储器102和存储器103之间的数据传送。存储器103可以包括任何合适类型的存储器,例如,诸如全缓冲双列直插式存储器模块(FB-DIMM)、双数据速率同步动态随机存取存储器(DDR/DDR2/DDR3/DDR4SDRAM)或减少延迟的动态随机存取存储器(RLDRAM)。
在所示的实施例中,预取电路104使用预测地址来生成存储器预取请求,以便用将由处理器核心101使用的信息(即,数据和/或指令)填充高速缓存存储器102中的一个或多个高速缓存行。在具有多于一个级别的高速缓存存储器的系统中,预取电路104可以生成用于一个高速缓存存储器(诸如,例如L2高速缓存)的存储器预取请求。在一些实施例中,可以包括多个预取电路,每个预取电路生成用于特定高速缓存存储器的存储器请求。预取电路104可以生成导致信息从更高级别的高速缓存中被检索的存储器预取请求。例如,如果预取电路104生成用于L2高速缓存的预取请求,那么这些预取请求可以被发送到L3高速缓存。如本文所使用的,“更高”的高速缓存或“更高”的存储器是指从处理器核心101移开得更远的高速缓存和存储器,并且“更低”的高速缓存是指相反情况。例如,系统存储器高于L3高速缓存,并且L2高速缓存低于L3高速缓存。如果特定的预取请求在L3高速缓存中未命中,则L3高速缓存生成从存储器103中所包含的系统存储器中请求所请求的信息的存储器获取请求。如本文中所使用的,高速缓存“命中”是指从高速缓存存储器请求信息,其中该高速缓存存储器当前正存储有所请求的信息,而高速缓存“未命中”是指高速缓存存储器当前未存储所请求的信息并且因此必须从更高级别的高速缓存或系统存储器中检索该信息的情况。此外,如本文所使用的,“高速缓存命中率”可以指在特定时间间隔内高速缓存命中发生的次数。
成功的预取请求可以使得高速缓存存储器102在处理器核心101请求信息之前就接收该信息,从而允许处理器核心101执行指令而无需等待存储器访问返回所请求的信息。在一些情况下,响应于预取请求而检索的信息(即,“经预取的信息”)可能在处理器核心101准备好使用该信息之前尚未到达高速缓存存储器102,但是预取仍然可以减少从处理器核心101为信息做好准备到信息可用时的时间。错误的地址预测可能导致预取请求失败。地址预测基于随着时间的推移对用于存储器访问的地址模式的观察。如果处理器核心101偏离该模式,或者如果模式被不正确地识别,则可能发生错误预测,从而导致信息在该信息当前不被需要时被检索。错误预测可能会通过不必要地消耗处理器资源并替换高速缓存中的有用信息而负面地影响性能。
在一些情况下,预取电路104可以发出“多行”或“多簇”预取请求。如本文所使用的,“获取簇(fetch group)”是指在单个预取操作中检索的存储器位置。在一些实施例中,获取簇可以对应于要填充高速缓存存储器102的一个高速缓存行的信息。在这种情况下,“获取行”可以与“获取簇”互换使用。在其它情况下,获取簇可能不对应于高速缓存行大小,而是包含比给定高速缓存行中存储的信息更少或更多的信息。如本文所使用的,“多簇”预取请求是指导致用于检索多个连续寻址的获取簇的多个预取操作的单个预取请求。在所示的实施例中,为了发出多簇预取请求,预取电路104将深度值存储在存储器位置或寄存器中。该深度值对应于可以用单个多簇预取请求预取的获取簇的数量。例如,如果深度值当前具有值四,那么预取电路104可以发出多簇预取请求以检索来自具有连续获取地址的四个获取簇的信息。在各个实施例中,连续地址可以按照地址值的升序或降序。
在所示的实施例中,预取电路104还包括用于监视预取器的准确度的电路系统。通过使用该监视电路系统,预取电路104可以调整深度值。准确度监视器跟踪作为预取请求的结果而被高速缓存的信息的使用。如果所预取的信息被频繁使用,那么预取电路104的对应准确度为高,并且可以通过在每个多簇预取请求中检索更多信息来增加深度值以利用预取电路104的当前准确度。作为对照,如果较少的经预取的信息被使用,那么对应的准确度可能较低,并且深度值相应地降低。对应于多簇预取调整的附加细节在下面给出。
注意的是,图1仅仅是示例。所示的实施例包括与所公开的概念相关的部件。在其它实施例中,可以包括附加部件。例如,其它实施例可以包括若干个级别的高速缓存存储器和/或多个处理器核心。
转到图2,示出了处理器IC中的存储器预取子系统的实施例的框图。存储器子系统200包括高速缓存存储器202和预取电路204。此外,获取管道(pipeline)216耦合到高速缓存存储器202和预取电路204。在一些实施例中,获取管道216可以被包括作为高速缓存存储器202的一部分或作为耦合到高速缓存存储器202的单独电路。可以对应于图1中的预取电路104的预取电路204包括各种子电路,诸如深度调节器210、预取生成器212和准确度监视器214。在其它实施例中,深度调节器210、预取生成器212和准确度监视器214可以耦合到预取电路204,而不是被包括在预取电路204内。
在所示的实施例中,获取管道216包括用于从更高级别的存储器获取信息并填充高速缓存存储器202中的高速缓存行的硬件资源。响应于由于来自处理器核心(诸如,例如,图1中的处理器核心101)的存储器请求而导致的高速缓存存储器202中的高速缓存未命中,高速缓存存储器202中的电路使获取管道216从更高的存储器(即,更高级别的高速缓存、系统存储器或非易失性存储器)请求未命中的信息。类似地,在所示的实施例中,预取电路204可以利用获取管道216来发出预取请求,以用已经被预测将由处理器核心101访问的信息来填充高速缓存存储器202。
在所示的实施例中,预取生成器212基于预测地址发出预取请求以填充高速缓存存储器202中的高速缓存行。预取生成器212可以发出单簇预取请求或多簇预取请求。为了发出多簇预取请求,预取生成器212向获取管道216发出多个单簇请求。单簇预取请求的数量对应于发起多簇预取请求时的深度值的值。预取生成器212可以包括用于跟踪针对特定多簇预取请求而发出的多个单簇获取请求的寄存器。此外,预取生成器212可以包括队列,该多个单簇预取请求被存储在该队列中,直到它们被发出给获取管道216。
在所示的实施例中,存储器子系统200包括准确度监视器214。准确度监视器214包括用于监视由于预取电路204发出的预取请求而被预取到高速缓存存储器202中的高速缓存行的电路系统。准确度监视器214可以递增两个计数值。第一计数值对应于总计数值,并且对于由预取电路204获取的每个高速缓存行递增。第二计数值对应于已使用的计数值,并且在这些经预取的高速缓存行之一被较低的存储器(例如,处理器核心101中的L1高速缓存或获取单元)访问时递增。准确度监视器214在特定时间间隔内递增这两个计数值。在该特定时间间隔结束时,准确度监视器214使用这两个计数值来确定指示由预取电路204生成的预取请求的准确度的值。例如,准确度监视器214可以通过将已使用的计数值除以总计数值来生成准确度比率。在一些实施例中,准确度监视器214可以附加地将商乘以预定值,以便生成具有在特定值范围内的值的结果。该准确度值然后可以被发送到深度调节器210。准确度监视器214可以清除这两个计数值,并且在下一个时间间隔期间如所描述那样重新开始递增每个值。
在一些实施例中,准确度监视器214可以跟踪总计数值和已用计数值的移动平均值。在这样的实施例中,在特定时间间隔结束时,可以将当前总计数值和当前已用值各自添加到相应的滑动平均值(running average)。例如,在特定时间间隔结束时,当前总计数值和平均总计数值两者都可以除以2(例如,每个二进制值右移一位),并且然后加在一起以生成新的平均总计数值。这样的滑动平均值可以使平均总计数值更偏重于最近的总计数值,同时为较旧的总计数值维持一定的影响。可以使用类似的处理来使用当前已用计数值生成平均已用计数值。在确定平均总计数值和平均已用计数值之后,可以为下一个时间间隔清除当前总计数值和当前已用计数值,同时新确定的平均计数值将其当前值维持到下一个时间间隔。然后可以使用例如以上针对准确度比率描述的处理来使用这些平均计数值以确定准确度值。
在所示的实施例中,深度调节器210接收准确度值,并基于该准确度值确定是否针对下一时间间隔调节深度值。深度调节器210将接收到的准确度值与上限阈值和下限阈值进行比较。如果准确度值高于上限阈值,那么深度调节器210可以递增深度值以增加用每个多簇预取请求检索的获取簇的数量。通过在单个多簇请求中预取更多的获取簇,可以在活动处理线程正在访问大量连续数据的时间期间提高存储器子系统200的效率。作为对照,如果准确度值小于下限阈值,那么深度调节器210可以递减深度值以减少用每个多簇预取请求检索的获取簇的数量。通过在单个多簇请求中预取更少的获取簇,可以在活动处理线程正在请求非连续的存储器访问的时间期间减少存储器子系统200中的预取错误预测。
为了识别已经被预取在高速缓存存储器202中的高速缓存行,这些经预取的高速缓存行在被存储在高速缓存存储器202中时可以被标记。例如,高速缓存行可以包括一个或多个位(在本文中称为“预取标识符”或“预取ID”),该一个或多个位在预取发生之后被设置为特定值以指示高速缓存行响应于预取电路204发出的预取请求而被获取,否则被重置为替代值。当使用被标识的经预取的高速缓存行时,除了递增当前已用计数值之外,还可以重置预取ID。通过在第一次使用对应的高速缓存行之后重置预取ID,可以在确定准确度值时对每个经预取的高速缓存行计数一次。否则,如果正由处理器核心101执行的软件进程重复访问与特定高速缓存行相关联的地址,则可能对每次访问都递增当前已用计数值。这可能在即使没有使用其它经预取的高速缓存行的情况下也生成高准确度值。仅对每个经预取的高速缓存行计数一次可以提高准确度值的有用性。注意的是,如果经预取的高速缓存行被使用并且然后被清除(即,逐出)并且之后再次被预取,则预取ID将在第二预取操作之后被设置。
还应该注意的是,图2的系统仅是示例,并且功能电路仅限于强调存储器预取系统的功能。在其它实施例中,可以包括附加的和/或不同的功能电路。
准确度监视器的其它操作细节在图3中图示。数据表300图示了与高速缓存和准确度监视器相关联的数据表的示例。在所示的实施例中,处理器核心301可以对应于图1中的处理器核心101,并且示出了核心内的指令流水线(pipeline)的一部分。高速缓存存储器302描绘了数据如何在高速缓存存储器(诸如,例如,高速缓存存储器102或202)内被组织的逻辑表示。准确度监视器314示出了可以由准确度监视电路(例如,诸如准确度监视器214)跟踪的四个值。
高速缓存存储器302可以对应于处理系统中的任何合适的高速缓存存储器。在所示的实施例中,高速缓存存储器302对应于L1高速缓存存储器,该L1高速缓存存储器耦合到预取电路,诸如例如图2中的预取电路204。高速缓存存储器302可以被组织成如由行_0至行_6所指示的多个高速缓存行,每个行包括经高速缓存的信息以及标志。每行可以保持与一系列存储器地址对应的任何合适数量字节的信息。在所示的实施例中,针对每个高速缓存行示出了四片信息,但是在其它实施例中可以使用任何合适的数量。经高速缓存的信息包括响应于来自预取电路204的预取请求而获取的信息,以及由高速缓存存储器302中的获取电路所获取的信息。每个高速缓存行包括关于该高速缓存行的信息,包括一个位以指示相应高速缓存行是由高速缓存存储器302中的获取电路获取的(在本文中由值“0”表示)还是由预取电路204获取的(在本文中由值“1”表示)。高速缓存行可以包括附加标志,以及包括标签,该标签包括对信息在系统存储器中的原始地址的引用。附加标志可以包括与其中可以存储相同信息的其它存储器相关的一致性数据和/或存储的信息的类型,诸如指令或数据。为了清楚起见,该附加信息未被表示在图3中。
当软件程序被执行时,处理器核心301可以从高速缓存存储器302中检索各片信息。如图所示,处理器核心301从行_0检索项目D2、从行_1检索项目D5、从行_2检索项目D8,并且从行_3检索项目D12。如每个高速缓存行的标志所指示的,行_0和行_3是被高速缓存存储器302的获取电路获取的,而行_1和行_2是被预取电路204获取的。
在所示的实施例中,准确度监视器314如上文针对准确度监视器214所述的那样起作用。准确度监视器314跟踪四个值:当前总计数、平均总计数、当前已用计数和平均已用计数。在一些实施例中,当前总计数值和当前已用计数值可以被实现为相应的计数器电路。在所示的示例中,假设已在当前时间间隔内获取了高速缓存行行_0至行_6。在该当前时间间隔中,所获取的高速缓存行当中的四个是已经由预取电路204获取的,包括行_1、行_2、行_4和行_5。剩余的高速缓存行是已经被由高速缓存存储器302的获取电路获取的。在当前时间间隔中,来自经预取的高速缓存行当中的两个行(行_1和行_2)的信息已经被处理器核心301使用。注意的是,指示行_1和行_2被预取的标志值在图3A中保持设置为“1”。如图所示,在准确度监视器314将当前已用值递增到“2”之后,这两个已使用的经预取的高速缓存行的标志值将被重置为“0”。
如图所示,平均总计数和平均已用计数的值可以反映在先前时间间隔完成之后的值。在当前时间间隔结束时,准确度监视器314基于该时间间隔结束时当前总计数和当前已用计数的值来确定平均总计数和平均已用计数两者的新值。在一个实施例中,如果所示的值反映了该时间间隔结束时的计数值,则准确度监视器314通过将每个值除以2并且然后将已经被除的当前总计数(即,“2”)与已经被除的平均计数(即,“1”)相加以设置新的平均总计数(“3”)来确定新的平均计数值。可以类似地确定新的平均已用值,从而得到新的平均已用计数“1”。然后,准确度监视器314可以使用这些新值来确定准确度值。在一个实施例中,准确度监视器314将新的平均已用计数(“1”)除以新的平均总计数(“3”),从而得到准确度值0.3333。该值可以乘以合适的值以生成整数值,诸如,例如乘以100以生成准确度值33或乘以1000以生成准确度值333。在所示的实施例中,该准确度值被发送到其它电路(诸如例如图2中的深度调节器210),以便确定是否要在下一个时间间隔中调节深度值。
注意的是,图3的表仅仅是示例。在其它实施例中,附加信息(诸如相关的地址信息之类)可以被包括在高速缓存存储器302中。图3的表并非旨在表示高速缓存存储器或其它电路中所存储的数据的物理布置,而是旨在仅图示数据的逻辑组织。
转到图4,描绘了与处理器存储器子系统(诸如,例如,图2中的存储器子系统200)相关联的附加数据表。存储器子系统400包括高速缓存存储器402、存储器403、深度调节器410和预取生成器412。高速缓存存储器402和存储器403各自描绘了如何分别在高速缓存存储器和系统存储器内组织数据的逻辑表示。深度调节器410包括四个值:深度值和最大深度(它们每个都是整数值)以及上限阈值和下限阈值(它们每个都是百分比值)。预取生成器412包括处理队列中的六个条目以及当前地址和当前计数值。
在所示的实施例中,预取生成器412生成并发出预取请求以填充高速缓存存储器402中的高速缓存行。在一些实施例中,预取生成器412对应于图2的预取生成器212,并且因此能够生成多簇预取请求。在本示例中,一个获取簇对应于高速缓存存储器402的一个行,并且预取生成器412生成六个多簇预取命令,每个命令具有地址和深度值,并将它们存储在处理队列中,最早的请求位于队列的左侧。
为了生成第一多簇预取请求,预取生成器在生成请求时从深度调节器410读取深度值。在这个示例中,处理队列中最早的请求包括地址“A0”和深度值“3”,其对应于生成该请求时的深度值。为了处理该请求,预取生成器412将地址值复制到当前地址寄存器中,并将深度值复制到当前计数值中。在所示的实施例中,预取生成器412向高速缓存存储器402中的获取电路(诸如例如获取管道216)发出单簇预取请求。该单簇预取请求是使用当前地址发出的。响应于发出该单簇预取请求,预取生成器412将当前地址递增与获取簇的大小对应的值,在这个示例中,是一个高速缓存行,即,4个地址位置。预取生成器412还递减当前计数值。在当前计数值达到“0”时,多簇预取请求已完成,并且下一个多簇预取请求被处理。
在图4的示例中,具有地址“A24”的多簇预取请求正在被处理。当前地址是A28,其反映第二个单簇预取请求已被被发出到高速缓存存储器402,并且高速缓存行_7正被对应的数据填充。计数值为“0”,指示针对当前的多簇预取请求正在执行最后一个单簇预取请求,并且预取生成器412可以移动到具有地址值“A32”的下一个请求。通过以这种方式发出多簇预取请求,能够增加可以由处理队列中的预取请求填充的高速缓存存储器402中的高速缓存行的数量。在该示例中,处理队列中的六个所示出的请求可以填充14个高速缓存行。如果将这六个多簇预取请求替换为单簇预取请求,那么这六个请求只能填充六个高速缓存行。通过对存储在连续地址中的信息发出多簇预取请求,被访问的存储器(在该示例中为存储器403)也可以能够以更及时的方式来提供数据。
注意的是,在生成具有地址“A12”的请求和具有地址“A24”的请求之间,深度值从三减小到二。预取生成器412接收到对应于少于30%的总经预取的高速缓存行在特定时间间隔内被使用的准确度值。作为响应,当准确度低于下限阈值时,深度值被减小以限制由预取生成器412发出的预取数量。如果在以后的时间间隔中,准确度值上升到高于上限阈值,则深度值可以递增。如前所述,在一些实施例中,在深度值被调节之前,准确度值可能在两个或更多个连续的时间间隔内保持在下限阈值之下或上限阈值之上。如果准确度值仍然高,则深度调节器410可以继续递增深度值,直到达到最大值。最大值对应于深度值的最大允许值。由于各种原因,深度值可以被限制为最大值,诸如,以防止预取请求使存储器获取资源(诸如例如获取管道216)过载。此外,如果深度值被设得太高,则预取错误预测的风险可能会增加。
在一些实施例中,深度调节器410还可以包括最小允许深度值。如果当前深度值处于最小允许深度值并且准确度值低于下限阈值,则可以暂停预取请求,而不是继续减小深度值。这样的暂停可以持续预定数量的时间间隔。在所示的实施例中,最小允许深度值可以被固定为“1”,使得如果深度值递减到“0”,则预取请求被暂停。
注意的是,图4的表仅仅是示例。图4的表旨在图示数据的逻辑组织,而不旨在表示相关联电路中存储的数据的物理布置。在其它实施例中,诸如相关的地址信息之类的附加信息可以被包括在高速缓存存储器402中。存储在任何所示表中的实际数据的量可能大于图4中示出的数据量。
进行到图5,示出了用于处理器存储器预取系统的实施例的操作时间线。时间线500可以分别应用于图1和图2中的计算系统100或存储器子系统200的实施例。在所示的实施例中,时间线500包括五个时间间隔;时间间隔521至时间间隔525。这些时间间隔可以对应于上面讨论的时间间隔。参考图2中的存储器子系统200和图5,时间线500以时间间隔521开始。
在时间间隔521期间,预取电路204是活动的,并且来自预取电路204的预取请求的准确度由准确度监视器214监视。深度值当前被设置为2。在时间间隔521结束时,准确度监视器214将新确定的准确度值发送到深度调节器210。在所示的实施例中,深度调节器210确定准确度值满足上限准确度阈值,并且作为响应,将深度值从二递增到三。
在时间间隔522中,准确度监视器214继续操作,同时预取电路204可以继续发出预取请求。在时间间隔522结束时,准确度监视器214将新的准确度值发送到深度调节器210。在当前示例中,深度调节器确定准确度值满足下限准确度阈值,并且作为响应,将深度值递减回到值二。准确度监视器214的操作在时间间隔523和524中可以与其在时间间隔522的操作相同,并且深度调节器210可以在时间间隔523结束时将深度值从二减小到一,并且然后在时间间隔524结束时再次减小到值零。时间间隔522至524中减少的准确度可能是由于当前正在执行的处理线程的操作的改变引起的。例如,该处理线程可以从读取大文件过渡到执行其中访问不同存储器位置的不同任务,从而导致来自预取电路204的预取请求的准确度下降。通过监视预取操作的准确度,深度调节器210可以在准确度值高的时间期间增加深度值,从而导致存储器子系统更高效率,并且还可以对处理线程的操作变化做出反应并在准确度低的时间期间减少深度值,从而导致较少的预取错误预测。
在一些实施例中,在深度调节器210修改深度值之前,准确度值可能需要在两个或更多个连续时间间隔内满足上限阈值或下限阈值。在所示的实施例中,在一个时间间隔内满足阈值就足以改变深度值。
注意的是,图5的时间线是用于说明所公开的概念的示例。虽然时间间隔被示出为相似的长度,但是任何给定时间间隔中的时间量可能会基于所监视的数据而有所不同。例如,如果准确度值在连续的时间间隔之间变化很大,则可以缩短将来的时间间隔的长度,直到准确度值在间隔之间更为一致为止。
现在转向图6,描绘了用于基于所确定的准确度来执行多簇预取请求的方法的实施例的流程图。在各种实施例中,方法600可以应用于存储器子系统,诸如例如图2中的存储器子系统200。共同参考图2和图6,方法600在框601中开始。
生成多簇预取请求(框602)。预取生成器212生成多簇预取请求,该多簇预取请求包括地址值和当前深度值,该当前深度值与要为该请求进行处理的获取簇的数量对应。每个多簇预取请求可以被存储在处理队列中,诸如先进先出(FIFO)队列。在所示的实施例中,预取生成器212基于对应的地址值而初始化地址寄存器,并基于深度值的存储值而初始化计数值。预取生成器212继续向获取管道216发出一系列单簇预取请求以便执行多簇预取请求,从而针对发出的每个单簇预取请求而递减计数值。在计数值达到零之后,该多簇预取请求已经完成,并且处理队列中的下一个预取请求可以被处理。
生成准确度值(框603)。准确度监视器214确定特定时间间隔期间的准确度值。在该特定时间间隔期间,在所示的实施例中,准确度监视器214跟踪总计值以及跟踪已用值,该总计值与响应于预取请求而检索的获取簇的数量对应,该已用值与高速缓存行响应于预取请求而被填充的高速缓存存储器202中的高速缓存行命中数量对应。通过使用这些值,准确度监视器214确定预取请求的准确度值。下面关于图8呈现关于确定准确度值的附加细节。
进一步的操作可以取决于准确度值(框604)。在所示的实施例中,准确度值被发送到深度调节器210。深度调节器210将接收到的准确度值与一个或多个阈值进行比较。在一个实施例中,将上限阈值和下限阈值用于这些比较。如果满足至少一个阈值,例如,如果准确度值小于下限阈值或大于上限阈值,则该方法移动到框605以调节深度值。否则,该方法返回到框602以生成另一个多簇预取请求。
基于准确度值来调节深度值(框605)。如果满足至少一个阈值,则在所示的实施例中,深度调节器210修改深度值。例如,如果准确度值大于上限阈值,则可以增加深度值,从而允许在下一个多簇预取请求中获取更多信息。作为对照,如果准确度值小于下限阈值,则可以减小深度值,从而减少为下一个多簇预取请求获取的信息量。用于调节深度值的附加细节在下面图7中呈现。该方法可以返回到框602以生成另一个预取请求。
注意的是,图6的方法600是一个示例。图6所示的操作被描绘为以顺序方式执行。然而,在其它实施例中,一些操作可以并行或以不同的顺序执行。例如,框602和603可以并行执行。在一些实施例中,可以包括附加操作。
现在转到图7,图示了示出用于基于所确定的准确度来执行多簇预取请求的方法的另一个实施例的流程图。方法700类似于图6的方法600,但具有关于深度值的调节的附加细节。类似于方法600,方法700可以应用于存储器子系统,诸如例如图2中的存储器子系统200。共同参考图2和图7,方法700在框701中开始。
在所示的实施例中,生成多簇预取请求和准确度值(框702)。类似于方法600,方法700以预取生成器212生成具有对应地址和深度值的多簇预取请求并将该请求存储在处理队列中开始。当预取生成器212创建多簇预取请求时,准确度监视器214跟踪与预取请求相关联的总计值和已用值。准确度监视器214跟踪特定时间间隔内的总计值和已用值。该时间间隔可以对应于数十个处理器周期或数千个处理器周期或更多。在一些实施例中,预取生成器212可以在该特定时间间隔内生成数十个、数千个或更多的预取请求。在该时间间隔结束时,如针对方法600的框603所描述的那样,准确度监视器214基于所跟踪的总计值和已用值确定准确度值。
该方法的进一步操作可以取决于准确度值的值和上限阈值(框703)。在所示的实施例中,深度调节器210从准确度监视器214接收所确定的准确度值,并将该值与上限阈值进行比较。如果准确度值满足上限阈值,例如,准确度值大于或等于上限阈值,则该方法移动到框704以确定当前深度值是否被设置为最大值。否则,该方法移动到框706以确定准确度值是否满足下限阈值。
如果准确度值满足上限阈值,则进一步的操作可以取决于深度值的当前值(框704)。在所示的实施例中,深度调节器210将当前深度值与最大值进行比较。如果当前深度值等于最大值,或者在一些实施例中超过最大值,则该方法返回到框702而不调节当前深度值。否则,该方法移动到框705以增加深度值。
响应于确定准确度值满足上限阈值并且当前深度值低于最大深度值,增加深度值(框705)。如果当前深度值尚未被设置为最大值,并且准确度值指示预取生成器212的当前准确度满足上限阈值,则在所示的实施例中,递增当前深度值。在一些实施例中,深度值可以递增一,而在其它实施例中,可以使用任何合适的递增量。然后,该方法返回到框702以使用新的深度值来生成下一个预取请求。
如果在框703中准确度值不满足上限阈值,则随后的操作可以取决于下限阈值的值(框706)。在所示的实施例中,如果不满足上限阈值,则深度调节器210将准确度值与下限阈值进行比较。如果满足下限阈值,例如,准确度值小于或等于下限阈值,则该方法移动到框707以确定当前深度值是否被设置为最小值。否则,该方法返回到框702以生成另一个预取请求。
如果满足下限阈值,则方法700的后续操作可以取决于深度值的当前值(框707)。在一个实施例中,深度调节器210将当前深度值与最小深度值进行比较。如果当前深度值等于或者在一些实施例中小于最小深度值,则可以通过禁用预取生成器212来在下一个时间间隔内暂停预取。最小值可以被设置为任何合适的值,诸如例如被设置为一。如果深度值高于最小值,则该方法移动到框708以递减深度值。否则,该方法移动到框709以暂停预取请求。
如果当前准确度值满足下限阈值并且当前深度值大于最小值,则减小深度值(框708)。深度调节器210将深度值递减合适的递减量,诸如一或二。该方法返回到框702以使用新的深度值来生成下一个预取请求。
如果当前准确度值满足下限阈值并且当前深度值小于或等于最小值,则暂停预取(框709)。预取生成器212在下一个时间间隔内暂停新的预取请求的生成。在一些实施例中,深度调节器210可以断言暂停信号,这可以导致预取生成器212暂停新的预取请求的生成。在其它实施例中,深度调节器210可以将深度值设置为特定值以指示新的预取请求的暂停。例如,深度调节器210可以将深度值设置为零以指示暂停。预取生成器212中的逻辑可以识别该零值并且停止生成新的请求,直到深度值大于零。在暂停预取请求之后的下一个时间间隔结束时,或者在其它实施例中,在暂停之后两个或更多个时间间隔之后,深度调节器210可以指示预取请求的恢复。在各种实施例中,深度调节器210可以通过使暂停信号取消断言或通过将深度值设置为大于零的值来指示恢复。深度调节器210可以将深度值重置为用于恢复预取请求的任何合适的值,诸如例如,一、二、四等。该方法在框710处结束。
注意的是,图7所示的方法仅仅是示例实施例。虽然在图7的方法中图示的操作被描绘为以顺序的方式执行,但是在其它实施例中,一些操作可以并行或以不同的顺序执行。例如,在一些实施例中,可以在框707的操作之前执行框708的操作。在一些实施例中,可以包括附加操作。
现在转到图8,示出了用于确定存储器预取子系统的准确度的方法的流程图。方法800可以由准确度监视器(诸如例如准确度监视器214)来执行。在一些实施例中,方法800可以分别对应于图6和图7中的方法600的框603或方法700的框702中执行的操作。在其它实施例中,方法800可以与方法600或方法700并行执行。共同参考图2和图8中的流程图,该方法可以在框801中开始。
响应于发出预取请求,递增第一计数值(框802)。在所示的实施例中,当预取生成器212向获取管道216发出填充高速缓存存储器202中的一个或多个高速缓存行的预取请求时,准确度监视器214递增当前总计数值。在一些实施例中,准确度监视器214可以包括响应于发出预取请求而递增的第一计数器电路。当获取管道216履行预取请求时,经预取的高速缓存行的一个或多个标志位被设置为指示该行是被预取的。
对于对经预取的高速缓存行的每个高速缓存命中,递增第二计数值(框803)。在所示的实施例中,当高速缓存存储器202中的高速缓存行被命中并且被命中的该高速缓存行的一个或多个标志位被设置(从而指示该行是被预取的)时,准确度监视器214递增当前已用计数值。在一些实施例中,可以在计数值递增之后将该一个或多个标志位重置为替代值,以避免在确定预取准确度时对经预取的高速缓存行进行多次计数。为了递增当前已用计数值,在一些实施例中,准确度监视器214可以使第二计数器电路递增。
响应于时间间隔结束,为第一和第二值确定新的平均值(框804)。在一些实施例中,可以计算和保存总计数值和已用计数值的平均值。在所示的实施例中,通过将当前总计数值与平均总计数值相加并将和除以二来确定加权平均总计数值,从而使该平均值偏重于当前总计数值。在其它实施例中,可以使用用于计算平均值的任何合适的方法。可以使用类似的方法来确定平均已用计数值。
该方法的后续操作可以取决于平均总计数值(框805)。在所示的实施例中,准确度监视器214确定平均总计数值是否大于零。如果平均总计数值大于零,则该方法移动到框806,以基于平均总计数值和平均已用值来确定准确度值。否则,该方法移动到框807以将准确度值设置为特定值。
如果平均总计数值大于零,则使用平均总计数值和平均已用计数值来确定准确度值(框806)。在所示的实施例中,准确度监视器214通过例如确定平均总计数值和平均已用计数值的比率来使用平均总计数值和平均已用计数值来确定准确度值。在一些实施例中,平均已用计数值除以平均总计数值。然后可以通过将该结果乘以特定值(诸如,例如1000)来将该结果缩放到期望的范围。在一些实施例中,可以通过分别向左或向右移位二进制值来代替执行乘法或除法,从而简化计算。
如果平均总计数值为零,则准确度值被设置为特定值(框807)。如果平均总计数值为零,则可能无法确定平均已用计数值与平均总计数值的比率。在这种情况下,准确度值可以被设置为默认值,诸如例如设置为零。
所确定的平均总计数值和平均已用计数值被存储(框808)。当在下一时间间隔结束时新的当前总计数值和已用计数值可用时,在框804中确定的平均总计数值和平均已用计数值被存储以用于下一个时间间隔。这两个平均计数值可以被存储在准确度监视器214内的寄存器中,或者存储在准确度监视器214可访问的存储器阵列中的位置中。此外,可以将当前总计数值和已用计数值初始化为合适的起始值,以准备用于下一个时间间隔。可以将在框806或807中确定的准确度值发送到其它电路,诸如例如深度调节器210。该方法返回到框802以在下一个时间间隔重复该处理。
注意的是,图8的方法仅仅是示例。图8中的方法所示的操作被描绘为串行执行。然而,在其它实施例中,这些操作中的一些操作可以并行或以不同的顺序执行。在一些实施例中,可以包括附加操作。
在图9中将多核心处理器的示例描绘为可以包括如本文所述的一个或多个存储器子系统的处理器的示例。在所示的实施例中,处理器900包括处理器核心的十六个实例,被表示为核心901a至901p(或为了简洁起见简称为901a-p),但是为了清楚起见,在图1中未示出所有实例。核心901a-p各自可以包括相应的L1高速缓存902a-902p。核心901a-p可以通过总线910耦合到L2高速缓存920a至920d。此外,核心901a-p可以通过L2高速缓存920a-d耦合到存储器接口930。存储器接口930可以进一步耦合到L3高速缓存940以及系统存储器950。注意的是,在各种实施例中,图1的组织可以表示逻辑组织而不是物理组织,并且也可以采用其它部件。例如,在一些实施例中,核心901a-p和L2高速缓存920a-d可以不直接连接到总线910,而是可以通过中间逻辑与总线接口。L3高速缓存940和系统存储器可以驻留在处理器900的外部。
核心901a-p可以被配置为根据特定的指令集体系架构(ISA)执行指令和处理数据。在一个实施例中,核心901a-p可以被配置为实现
Figure BDA0002394601610000231
V9 ISA,但是在其它实施例中,可以设想可以采用任何期望的ISA,例如,诸如x86、
Figure BDA0002394601610000232
Figure BDA0002394601610000233
此外,如下面更详细描述的,在一些实施例中,核心901的每个实例可以被配置为同时执行多个线程,其中每个线程可以包括可以独立于来自另一个线程的指令执行的一组指令。在各种实施例中,可以预期,处理器内可以包括任何合适数量的核心901a-p,并且核心901a-p中的每一个可以同时处理一些数量的线程。
L1高速缓存902a-p可以驻留在核心901a-p内,或者可以驻留在核心901a-p与总线910之间。L1高速缓存902a-p可以被配置为对指令和数据进行高速缓存,以供它们各自的核心901a-p使用。在一些实施例中,可以使用组关联或直接映射技术来实现每个单独的高速缓存902a-p。例如,在一个实施例中,L1高速缓存902a-p可以是16千字节(KB)高速缓存,其中每个L1高速缓存902a-p是与16字节行大小相关联的2路设置,但是,其它的高速缓存大小和几何形状也是可能的和预期的。
高速缓存中的每个高速缓存行可以包括正被存储的数据、与一致性状态对应的标志,以及地址标签。高速缓存标签可以包括正在高速缓存行中存储的数据的原始地址的全部或一部分、指示经高速缓存的数据存储在哪个高速缓存行中的索引,以及指示特定数据在每个高速缓存行中的位置的偏移量。给定的处理器核心可以用存储器位置的直接地址、基于查找表的转换地址、或通过基于指令的地址模式计算出的地址来访问高速缓存。除了高速缓存行的一致性状态之外,标志可以包括一个或多个位,该一个或多个位指示存储在相应高速缓存行中的信息是响应于高速缓存未命中被获取的还是由预取电路预取的。
总线910可以被配置为管理核心901a-p和共享的L2高速缓存920a-d之间的数据流。在一个实施例中,总线910可以包括允许任何核心901a-p访问L2高速缓存920a-d的任何块组(bank)并且相反地允许数据从L2高速缓存920a-d的任何块组返回到任何核心901a-p的逻辑(例如,诸如多路复用器或交换架构)。总线910可以被配置为同时处理从核心901a-p到L2高速缓存920a-d的数据请求,以及从L2高速缓存920a-d到核心901a-p的数据响应。在一些实施例中,总线910可以包括使数据请求和/或响应排队从而使得在等待服务时请求和响应不会阻塞其它活动的逻辑。此外,在一个实施例中,总线910可以被配置为对在多个核心901a-p试图访问L2高速缓存920a-d的单个块组(或反之)时可能发生的冲突进行仲裁。注意的是,在各种实施例中,可以使用任何适当类型的互连网络来实现总线910,在一些实施例中,该互连网络可以对应于物理总线互连。
L2高速缓存920a-d可以被配置为对指令和数据进行高速缓存以供相应的一组核心901a-p使用。例如,L2高速缓存920a可以存储用于核心901a-d的数据、L2高速缓存920b可以存储用于核心901e-h的数据、L2高速缓存920c可以存储用于核心901i-l的数据,并且L2高速缓存920b可以类似地耦合到核心901m-p。随着核心901的数量增加,L2高速缓存920的大小和/或数量也可以增加,以便容纳附加核心901。例如,在包括16个核心的实施例中,L2高速缓存920可以被配置为4个高速缓存,每个高速缓存2MB,每个高速缓存包括4个512KB的单独的高速缓存块组,其中每个块组可以是与512个集合和64字节的行大小相关联的16路设置,但是也可以采用任何其它合适的高速缓存大小或几何形状。
在一些实施例中,L2高速缓存920a-b可以包括各种队列和缓冲器,其被配置为管理往返于总线910以及往返于L3高速缓存940的数据流。例如,L2高速缓存920a-b的这样的实施例可以实现被配置为存储从存储器接口930到达的填充数据的填充缓冲器、被配置为存储要写入到存储器的脏逐出数据(dirty evicted data)的写回缓冲器,和/或被配置为存储不能作为简单高速缓存命中来处理的L2高速缓存访问(例如,L2高速缓存未命中、与较早的未命中匹配的高速缓存访问、诸如可能需要多个高速缓存访问的原子操作的访问等)的未命中缓冲器。在一些实施例中,L2高速缓存920的多个块组可以共享某些数据结构或其它特征的单个实例。例如,填充缓冲器的单个实例可以由L2高速缓存920的多个块组共享,以便简化L2高速缓存920a-b的物理实现(例如,路由和平面规划)。尽管有这种共享,但是L2高速缓存920a-b的各个块组可以被配置为在这种并发性可能时同时且独立地处理对存储在块组内的数据的访问。
像L1高速缓存901a-p和L2高速缓存920a-b一样,L3高速缓存940可以被配置为对指令和数据进行高速缓存以供核心901a-p使用。在一些实施例中,L3高速缓存可以在处理器900外部的单独的存储器芯片上实现,并且可以通过存储器接口930访问。在其它实施例中,可以在与处理器900相同的晶圆(die)上实现L3高速缓存,在这种情况下,可以直接访问L3高速缓存940。类似于L1高速缓存902a-p,L3高速缓存940可以使用组关联或直接映射技术来实现。例如,在一个实施例中,L3高速缓存器940可以是8兆字节(MB)的高速缓存器,其中8MB块组是与16字节的行大小相关联的16路设置,但是其它高速缓存器大小和几何形状也是可能的和预期的。
可以建立高速缓存层次结构,使得任何核心901可以首先访问其相应的L1高速缓存902。如果对L1高速缓存902的访问未命中,则可以访问相应的L2高速缓存920。如果L2高速缓存920访问未命中,则接下来可以访问L3高速缓存940。如果所有三个高速缓存级别都未命中,则可以通过存储器接口930访问系统存储器950。
存储器接口930可以被配置为管理例如响应于L2填充请求和数据逐出而在L2高速缓存920a-b和L3高速缓存940和/或系统存储器950之间进行的数据传送。在一些实施例中,可以实现存储器接口930的多个实例,每个实例被配置为控制L3高速缓存940或系统存储器950的相应块组。存储器接口930可以被配置为与任何合适类型的存储器接口,例如,诸如全缓冲双列直插式存储器模块(FB-DIMM)、双倍数据速率或双倍数据速率2同步动态随机存取存储器(DDR/DDR2 SDRAM)或
Figure BDA0002394601610000261
DRAM
Figure BDA0002394601610000262
在一些实施例中,存储器接口930可以被配置为支持与多个不同类型的存储器的接口,使得L3高速缓存940和系统存储器950可以由所列出的类型中的两个或更多个类型组成。在其它实施例中,L3高速缓存940可以对应于系统存储器950的保留部分。
相应的预取电路系统,诸如,例如分别在图1和图2中的预取电路104或204,可以耦合到处理器900中的任何适当级别的高速缓存存储器。在一个实施例中,例如,相应的预取电路204可以耦合到L2高速缓存920a-d中的每一个。相应的深度调节器210、预取生成器212和准确度监视器214可以耦合到L2高速缓存920a至920d中的每一个。在这样的示例中,预取电路204可以为由特定L2高速缓存920支持的四个核心901中的每一个发出预取请求,包括多簇预取请求。例如,参考L2高速缓存920a,可以针对核心901a-d中的每一个跟踪准确度数据。准确度监视器214和深度调节器210可以包括与核心901a-d中的每个核心对应的一组计数器和/或寄存器。在一些实施例中,预取生成器212可以基于相应的准确度数据为每个核心901a-d生成具有不同深度值的多簇预取请求。在其它实施例中,深度调节器210可以基于预取电路204的整体准确度来调节所有四个核心901a-d的单个深度值。
应该注意的是,图9仅仅是多核心处理器的示例。在其它实施例中,处理器900可以包括网络和/或外围接口。该物理结构可以不由图9表示,因为许多其它物理布置是可能的和预期的。
还应该注意的是,本文描述的系统和电路可以以任何合适的数字逻辑处理来实现。例如,一些实施例可以利用互补金属氧化物半导体场效应晶体管(CMOS)处理。这种CMOS逻辑处理可以利用平面设备、非平面设备或两者的组合。以CMOS处理中所设计的电路可以包括较小的逻辑电路的各种组合,较小的逻辑电路诸如例如反相器、与门、或门、与非门、或非门以及数据捕获电路,诸如触发器(flip-flop)和锁存器(latch)。
一旦完全理解上述公开,许多变化和修改对于本领域技术人员将变得清楚。意图将以下权利要求解释为包含所有这样的变化和修改。

Claims (20)

1.一种系统,包括:
处理器核心;
存储器,被配置为存储供所述处理器核心使用的信息;
高速缓存存储器,被配置为从所述存储器获取和存储信息;以及
预取电路,被配置为:
发出多簇预取请求,以使用预测地址从所述存储器中检索信息以存储在所述高速缓存存储器中,其中所述多簇预取请求包括深度值,所述深度值指示要检索的获取簇的数量;
基于特定时间间隔内经预取的信息的高速缓存命中率来生成准确度值;以及
基于所述准确度值来修改所述深度值。
2.如权利要求1所述的系统,其中,为了修改所述深度值,所述预取电路还被配置为:
响应于确定所述准确度值满足上限阈值而增加所述深度值;以及
响应于确定所述准确度值满足下限阈值而减小所述深度值。
3.如权利要求2所述的系统,其中,为了增加所述深度值,所述预取电路还被配置为响应于确定当前深度值等于最大允许深度值而维持所述当前深度值。
4.如权利要求2所述的系统,其中,为了减小所述深度值,所述预取电路还被配置为响应于确定当前深度值等于最小允许深度值而在至少下一个时间间隔内暂停发出预取请求。
5.如权利要求1所述的系统,其中,为了生成所述准确度值,所述预取电路还被配置为:
在所述特定时间间隔内,跟踪第一值,所述第一值指示响应于一个或多个预取请求而被存储在所述高速缓存存储器中的信息的量;以及
在所述特定时间间隔内,跟踪第二值,所述第二值指示包括响应于至少一个预取请求而被存储在所述高速缓存存储器中的信息的高速缓存行的高速缓存命中数。
6.如权利要求5所述的系统,其中,所述预取电路还被配置为基于所述第一值、所述第二值以及响应于一个或多个预取请求而被存储的信息的量的加权滑动平均值来确定所述准确度值。
7.如权利要求1所述的系统,其中,为了发出所述多簇预取请求,所述预取电路还被配置为发出多个单簇预取请求,其中,所述单簇预取请求的数量基于所述深度值。
8.一种方法,包括:
由预取电路发出多簇预取请求,以使用预测地址从存储器中检索信息以存储在高速缓存存储器中,其中,所述多簇预取请求包括深度值,所述深度值与要检索的获取簇的数量对应;
基于特定时间间隔内经预取的信息的高速缓存命中率来生成准确度值;以及
基于所述准确度值来修改所述深度值。
9.如权利要求8所述的方法,还包括:
响应于确定所述准确度值满足上限阈值而增加所述深度值;以及
响应于确定所述准确度值满足下限阈值而减小所述深度值。
10.如权利要求9所述的方法,还包括响应于确定当前深度值等于最大允许深度值而维持所述当前深度值。
11.如权利要求9所述的方法,还包括响应于确定当前深度值等于最小允许深度值而在至少下一个时间间隔内暂停发出预取请求。
12.如权利要求8所述的方法,还包括:
在所述特定时间间隔内,跟踪第一值,所述第一值指示响应于一个或多个预取请求而被存储在所述高速缓存存储器中的信息的量;以及
在所述特定时间间隔内,跟踪第二值,所述第二值指示包括响应于至少一个预取请求而被存储在所述高速缓存存储器中的信息的高速缓存行的高速缓存命中数。
13.如权利要求12所述的方法,还包括基于所述第一值、所述第二值以及响应于一个或多个预取请求而被存储的信息量的加权滑动平均值来确定所述准确度值。
14.一种装置,包括:
预取生成器,被配置为:
生成多簇预取请求,所述多簇预取请求包括预测地址和深度值,所述深度值指示要从存储器中检索并存储在高速缓存中的获取簇的数量;
使用所述预测地址,发出与所述多簇预取请求对应的单簇预取请求;以及
响应于确定尚未获取要检索的所述数量的获取簇,发出与所述多簇预取请求对应的另一个单簇预取请求;准确度监视器,被配置为基于特定时间间隔内经预取的信息的高速缓存命中率来生成准确度值;以及
深度调节器,被配置为基于所述准确度值来修改所述深度值。
15.如权利要求14所述的装置,其中,为了修改所述深度值,所述深度调节器还被配置为:
响应于确定所述准确度值满足上限阈值而增加所述深度值;以及
响应于确定所述准确度值满足下限阈值而减小所述深度值。
16.如权利要求15所述的装置,其中,为了增加所述深度值,所述深度调节器还被配置为响应于确定当前深度值等于最大允许深度值而维持所述当前深度值。
17.如权利要求15所述的装置,其中,为了减小所述深度值,所述深度调节器还被配置为响应于确定当前深度值等于最小允许深度值而在至少下一个时间间隔内暂停发出预取请求。
18.如权利要求14所述的装置,其中,为了生成所述准确度值,所述准确度监视器还被配置为:
在所述特定时间间隔内,跟踪第一值,所述第一值指示响应于一个或多个预取请求而被存储在所述高速缓存存储器中的信息的量;以及
在所述特定时间间隔内,跟踪第二值,所述第二值指示包括响应于至少一个预取请求而被存储在所述高速缓存存储器中的信息的高速缓存行的高速缓存命中数。
19.如权利要求18所述的装置,其中,所述准确度监视器还被配置为基于所述第一值、所述第二值以及响应于一个或多个预取请求而被存储的信息的量的加权滑动平均值来确定所述准确度值。
20.如权利要求14所述的装置,其中,为了发出与所述多簇预取请求对应的所述另一个单簇预取请求,所述预取生成器被配置为将所述预测地址的值递增一基于高速缓存行的大小的量。
CN201880056109.3A 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取 Active CN111052095B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311329199.8A CN117271388A (zh) 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/691,351 2017-08-30
US15/691,351 US10579531B2 (en) 2017-08-30 2017-08-30 Multi-line data prefetching using dynamic prefetch depth
PCT/US2018/046506 WO2019046002A1 (en) 2017-08-30 2018-08-13 PRE-EXTRACTION OF MULTI-LINE DATA USING A DYNAMIC PRE-EXTRACTION DEPTH

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202311329199.8A Division CN117271388A (zh) 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取

Publications (2)

Publication Number Publication Date
CN111052095A true CN111052095A (zh) 2020-04-21
CN111052095B CN111052095B (zh) 2023-10-31

Family

ID=63449683

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201880056109.3A Active CN111052095B (zh) 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取
CN202311329199.8A Pending CN117271388A (zh) 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202311329199.8A Pending CN117271388A (zh) 2017-08-30 2018-08-13 使用动态预取深度的多行数据预取

Country Status (5)

Country Link
US (2) US10579531B2 (zh)
EP (1) EP3676712B1 (zh)
CN (2) CN111052095B (zh)
TW (2) TWI784882B (zh)
WO (1) WO2019046002A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651120A (zh) * 2020-04-28 2020-09-11 中国科学院微电子研究所 预取数据的方法及装置
CN113407119A (zh) * 2021-06-28 2021-09-17 海光信息技术股份有限公司 数据预取方法、数据预取装置、处理器
CN114546927A (zh) * 2020-11-24 2022-05-27 北京灵汐科技有限公司 数据传输方法、核心、计算机可读介质、电子设备

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10579531B2 (en) * 2017-08-30 2020-03-03 Oracle International Corporation Multi-line data prefetching using dynamic prefetch depth
US10963392B1 (en) * 2018-07-30 2021-03-30 Apple Inc. Victim allocations in shared system cache
US11301386B2 (en) 2019-08-01 2022-04-12 International Business Machines Corporation Dynamically adjusting prefetch depth
US11163683B2 (en) 2019-08-01 2021-11-02 International Business Machines Corporation Dynamically adjusting prefetch depth
US11461101B2 (en) * 2019-09-27 2022-10-04 Arm Technology (China) Co. LTD Circuitry and method for selectively controlling prefetching of program instructions
TWI739227B (zh) * 2019-12-03 2021-09-11 智成電子股份有限公司 避免多餘記憶體存取的系統單晶片模組
CN112561197B (zh) * 2020-12-23 2022-08-23 国网江苏省电力有限公司南京供电分公司 一种带有主动防御影响范围的电力数据预取与缓存方法
US12013786B2 (en) 2021-12-22 2024-06-18 Samsung Electronics Co., Ltd. Multi-port queueing cache and data processing system including the same

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205298A1 (en) * 2003-04-14 2004-10-14 Bearden Brian S. Method of adaptive read cache pre-fetching to increase host read throughput
US20110113199A1 (en) * 2009-11-09 2011-05-12 Tang Puqi P Prefetch optimization in shared resource multi-core systems
US20110173397A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Programmable stream prefetch with resource optimization
US20120311270A1 (en) * 2011-05-31 2012-12-06 Illinois Institute Of Technology Timing-aware data prefetching for microprocessors
US20140101388A1 (en) * 2012-10-10 2014-04-10 Advanced Micro Devices, Inc. Controlling prefetch aggressiveness based on thrash events
US20140108740A1 (en) * 2012-10-17 2014-04-17 Advanced Micro Devices, Inc. Prefetch throttling
US20140149668A1 (en) * 2012-11-27 2014-05-29 Nvidia Corporation Prefetching according to attributes of access requests
US20140149678A1 (en) * 2012-11-27 2014-05-29 Nvidia Corporation Using cache hit information to manage prefetches
US20150356014A1 (en) * 2014-06-04 2015-12-10 Oracle International Corporation Dynamically adjusting the hardware stream prefetcher prefetch ahead distance
US20160117250A1 (en) * 2014-10-22 2016-04-28 Imagination Technologies Limited Apparatus and Method of Throttling Hardware Pre-fetch

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6460115B1 (en) 1999-11-08 2002-10-01 International Business Machines Corporation System and method for prefetching data to multiple levels of cache including selectively using a software hint to override a hardware prefetch mechanism
US6412046B1 (en) * 2000-05-01 2002-06-25 Hewlett Packard Company Verification of cache prefetch mechanism
US7228387B2 (en) 2003-06-30 2007-06-05 Intel Corporation Apparatus and method for an adaptive multiple line prefetcher
WO2006038991A2 (en) * 2004-08-17 2006-04-13 Nvidia Corporation System, apparatus and method for managing predictions of various access types to a memory associated with cache
US7350029B2 (en) 2005-02-10 2008-03-25 International Business Machines Corporation Data stream prefetching in a microprocessor
US7380066B2 (en) 2005-02-10 2008-05-27 International Business Machines Corporation Store stream prefetching in a microprocessor
US8103832B2 (en) 2007-06-26 2012-01-24 International Business Machines Corporation Method and apparatus of prefetching streams of varying prefetch depth
US7925865B2 (en) * 2008-06-02 2011-04-12 Oracle America, Inc. Accuracy of correlation prefetching via block correlation and adaptive prefetch degree selection
US9081501B2 (en) * 2010-01-08 2015-07-14 International Business Machines Corporation Multi-petascale highly efficient parallel supercomputer
US8892822B2 (en) * 2011-11-29 2014-11-18 Oracle International Corporation Selectively dropping prefetch requests based on prefetch accuracy information
US9110810B2 (en) * 2011-12-06 2015-08-18 Nvidia Corporation Multi-level instruction cache prefetching
US9442727B2 (en) * 2013-10-14 2016-09-13 Oracle International Corporation Filtering out redundant software prefetch instructions
US10162660B2 (en) * 2015-12-03 2018-12-25 International Business Machines Corporation Application-level processor parameter management
US10579531B2 (en) * 2017-08-30 2020-03-03 Oracle International Corporation Multi-line data prefetching using dynamic prefetch depth
CN109284240B (zh) * 2018-10-15 2020-06-16 上海兆芯集成电路有限公司 存储器集成电路及其预取方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205298A1 (en) * 2003-04-14 2004-10-14 Bearden Brian S. Method of adaptive read cache pre-fetching to increase host read throughput
US20110113199A1 (en) * 2009-11-09 2011-05-12 Tang Puqi P Prefetch optimization in shared resource multi-core systems
US20110173397A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Programmable stream prefetch with resource optimization
US20120311270A1 (en) * 2011-05-31 2012-12-06 Illinois Institute Of Technology Timing-aware data prefetching for microprocessors
US20140101388A1 (en) * 2012-10-10 2014-04-10 Advanced Micro Devices, Inc. Controlling prefetch aggressiveness based on thrash events
US20140108740A1 (en) * 2012-10-17 2014-04-17 Advanced Micro Devices, Inc. Prefetch throttling
US20140149668A1 (en) * 2012-11-27 2014-05-29 Nvidia Corporation Prefetching according to attributes of access requests
US20140149678A1 (en) * 2012-11-27 2014-05-29 Nvidia Corporation Using cache hit information to manage prefetches
US20150356014A1 (en) * 2014-06-04 2015-12-10 Oracle International Corporation Dynamically adjusting the hardware stream prefetcher prefetch ahead distance
US20160117250A1 (en) * 2014-10-22 2016-04-28 Imagination Technologies Limited Apparatus and Method of Throttling Hardware Pre-fetch

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
V. JIMÉNEZ 等: "Making data prefetch smarter: Adaptive prefetching on POWER7", pages 137 - 146 *
辛愿: "面向嵌入式系统的自调数据预取", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 06, pages 137 - 132 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651120A (zh) * 2020-04-28 2020-09-11 中国科学院微电子研究所 预取数据的方法及装置
CN111651120B (zh) * 2020-04-28 2023-08-08 中国科学院微电子研究所 预取数据的方法及装置
CN114546927A (zh) * 2020-11-24 2022-05-27 北京灵汐科技有限公司 数据传输方法、核心、计算机可读介质、电子设备
CN114546927B (zh) * 2020-11-24 2023-08-08 北京灵汐科技有限公司 数据传输方法、核心、计算机可读介质、电子设备
CN113407119A (zh) * 2021-06-28 2021-09-17 海光信息技术股份有限公司 数据预取方法、数据预取装置、处理器

Also Published As

Publication number Publication date
TWI784882B (zh) 2022-11-21
US11126555B2 (en) 2021-09-21
EP3676712A1 (en) 2020-07-08
US20190065377A1 (en) 2019-02-28
TWI757539B (zh) 2022-03-11
TW201931130A (zh) 2019-08-01
EP3676712B1 (en) 2024-04-03
WO2019046002A1 (en) 2019-03-07
US20200201771A1 (en) 2020-06-25
US10579531B2 (en) 2020-03-03
CN111052095B (zh) 2023-10-31
CN117271388A (zh) 2023-12-22
TW202221510A (zh) 2022-06-01

Similar Documents

Publication Publication Date Title
CN111052095B (zh) 使用动态预取深度的多行数据预取
CN110869914B (zh) 硬件预取器的基于利用率的节流
US8473689B2 (en) Predictive sequential prefetching for data caching
JP2022534892A (ja) 書き込みミスエントリのドレインをサポートする犠牲キャッシュ
EP2476060B1 (en) Store aware prefetching for a datastream
US9015422B2 (en) Access map-pattern match based prefetch unit for a processor
EP2430551B1 (en) Cache coherent support for flash in a memory hierarchy
US7925865B2 (en) Accuracy of correlation prefetching via block correlation and adaptive prefetch degree selection
US20110072218A1 (en) Prefetch promotion mechanism to reduce cache pollution
US9256541B2 (en) Dynamically adjusting the hardware stream prefetcher prefetch ahead distance
US10331567B1 (en) Prefetch circuit with global quality factor to reduce aggressiveness in low power modes
US20080320228A1 (en) Method and apparatus for efficient replacement algorithm for pre-fetcher oriented data cache
US20170168957A1 (en) Aware Cache Replacement Policy
US20080140934A1 (en) Store-Through L2 Cache Mode
WO2018004801A1 (en) Multi-level system memory with near memory scrubbing based on predicted far memory idle time
EP1304619A1 (en) Cache memory operation
US10963392B1 (en) Victim allocations in shared system cache
US6801982B2 (en) Read prediction algorithm to provide low latency reads with SDRAM cache
CN118093020A (zh) 数据预取方法、装置、电子设备、电子装置和介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant