不同高速缓存级上具有关联集重叠同余组的多级高速缓存的制作方法

文档序号:6439431阅读:143来源:国知局
专利名称:不同高速缓存级上具有关联集重叠同余组的多级高速缓存的制作方法
技术领域
本发明涉及数字数据处理硬件,特别涉及数字数据处理设备的处理单元的高速缓冲存储器及支持硬件的设计和操作。
背景技术
在20世纪后期,出现了称为信息革命的现象。虽然信息革命是一种历史的发展,其所波及的范围比任何事件或任何机器都广,但是没有任何设备能比电子数字计算机更能代表信息革命。计算机系统的发展的确是一场革命。每年,计算机系统都迅速地发展,存储更多的数据,并为它们的用户提供更多的应用程序。
现代计算机系统一般包括中央处理单元(CPU)和存储、检索及传送信息所必要的支持硬件,例如通信总线和存储器。它还包括与外界通信所必要的硬件,例如输入/输出控制器或存储器控制器,以及附加于其上的设备,例如键盘、显示器、磁带驱动器、磁盘驱动器、耦合到网络的通信线路等。CPU是系统的心脏。它执行包括计算机程序的指令,并且控制其它系统组件的操作。
从计算机硬件的立场来看,大多数系统以基本相同的方式操作。处理器能够执行一组有限的非常简单的操作,例如算术、逻辑比较和将数据从一个位置移动到另一个位置。但是,每个操作都执行得非常快。控制计算机执行大量这些简单操作的程序给人们一种幻觉,仿佛计算机在做着一些复杂的事情。用户所感知到的计算机系统的新的或改进的性能,是通过使计算机实质上执行相同的一组非常简单的操作、但却执行得更快来实现的。因此,对计算机系统的继续改进,需要使这些系统运行得比以前更快。
计算机系统的总速度(也被称为“吞吐量”)可用每单位时间执行的操作的数量来大致测量。在概念上,对系统速度的所有可能改进中最简单的,就是增加各种组件的时钟速度,特别是处理器的时钟速度。例如,如果所有的事情都以两倍速度运行,但都以完全相同的方式工作,则系统将以一半的时间执行给定的任务。早期的计算机处理器由很多离散的组件构成,通过缩小并且组合组件可以得到显著的时钟速度改进,并且最终将整个处理器封装成单个芯片上的集成电路,所以通过进一步的尺寸缩小和其它改进来获得增加的时钟速度始终是一个目标。除了提高时钟速度之外,通过增加每时钟周期执行的操作的平均数量,有可能增加单个CPU的吞吐量。
典型的计算机系统能够存储大量数据,并且可以请求处理器以使用数据的任何部分。一般用于存储海量数据的设备(例如旋转硬磁盘驱动器存储单元)需要较长的延迟时间来访问其上存储的数据。如果处理器在它每次执行一个操作时,都要直接从这种大容量存储设备中访问数据,则它将会花费几乎全部的时间来等待存储设备返回数据,而其吞吐量将会非常低。因此,计算机系统将数据存储在存储器或存储设备的分级体系中,每个后继的级具有更快的速度,但是存储更少的数据。大容量存储单元处于最低级,它能够在相对慢的存储区中存储所有数据。沿分级体系向上是主存储器,它通常是半导体存储器。主存储器的数据容量比存储单元的要小得多,但访问速度要快得多。再向上是高速缓存,它可以是该分级体系中的一级或多级(级别1是最高级)。高速缓存也是半导体存储器,但是比主存储器快,并且同样具有较小的数据容量。人们甚至还可以考虑将外部存储的数据,例如可通过网络连接访问的数据,也作为该分级体系的一个低于计算机系统自身的大容量存储单元的级别,因为通过网络连接(例如因特网)潜在可用的数据量更大,而访问时间更长。
当处理器产生存储器基准地址时,它首先在高速缓存中寻找所需的数据(这可能需要搜索多个高速缓存级)。如果数据不在那里(称为“高速缓存未中(cachemiss)”),处理器就从主存储器获取数据,或者如果有必要,从大容量存储单元获取数据。存储器访问需要相对大量的处理器周期,而在这期间处理器通常是空闲的。理想地,在与处理器最近的高速缓存级中存储处理器当前所需要的数据,以便当处理器产生存储器引用时,不必等待较长的延迟时间来完成数据访问。然而,由于任何高速缓存级的容量都仅仅是主存储器容量的一小部分,而主存储器自身的容量又仅仅是大容量存储单元容量的一小部分,因此不可能将所有数据简单地装载到高速缓存中。必须利用一些技术来选择将要被存储到高速缓存中的数据,以便当处理器需要特定数据项时,该数据项很可能在那里。
高速缓存一般被划分为称为行(line)的多个数据单元,一行是能够被独立地装载到高速缓存中或从高速缓存中清除的最小数据单元。为了支持任何类型的高速缓存技术,通常使用高速缓存行的关联集(associative set)来对高速缓存寻址。一个关联集是一个高速缓存行的集合,所有这些高速缓存行共享一个公共高速缓存索引号。高速缓存索引号通常是从引用的地址的高位得出的,尽管其还可能包含其它位。由于高速缓存比主存储器小得多,一个关联集仅包含与该高速缓存索引号相对应的一小部分主存储器地址。由于每个关联集通常包含多个高速缓存行,可以根据各种技术,可从主存储器中有选择地选出关联集的内容。
通常,当发生高速缓存未中时,数据被装载到一高级的高速缓存中。选择将要存储在高速缓存中的数据的传统技术还包含各种预取技术,这类技术试图在实际存储器引用高速缓存行之前,预测所需要的该特定高速缓存行中的数据,并且相应地将该数据装载到高速缓存中以待将来的需要。由于高速缓存的容量有限,当发生高速缓存未中时或者通过预取来装载数据,必然意味着高速缓存中当前的一些数据将被从高速缓存中清除或者抛弃。此外,存在用于确定在这种情况下将抛弃哪些数据的各种传统技术。
尽管用于选择高速缓存内容的传统技术已经获得了有限的成就,但是人们已经注意到,在很多环境下,当发生高速缓存未中时处理器仍然花费大块时间处于空闲。解决这类问题的典型途径是增加高速缓存的大小和/或结合性,这两种途径都涉及到重要的附加硬件。所以,需要对设计和运行高速缓存的改进技术。

发明内容
计算机系统包含主存储器、至少一个处理器和至少具有两级的高速缓冲存储器。较高级的高速缓存包含多个关联集(associativity set),每个关联集都包含在相应的同余组(congruence group)中,每个同余组都具有多个该较高级高速缓存的关联集。较低级的高速缓存类似地也包含多个关联集,每个关联集都包含在相应的同余组中,每个同余组都具有多个该较低级高速缓存的关联集。较高级高速缓存中关联集的高速缓存行地址,分布在较低级高速缓存中相同同余组内的多个关联集中。
在优选实施例的一个方面,较低级高速缓存是较高级高速缓存的受害高速缓存(victim cache),即当数据被从较高级高速缓存中抛弃时,就被装载到较低级的高速缓存中。数据在较高和较低高速缓存中最好不重复。当发生高速缓存未中时,从较低级高速缓存或者从其它源将高速缓存行装载到较高级高速缓存中,从而越过较低级高速缓存。当从较高级高速缓存中选择出要抛弃的高速缓存行时,它被自动装载到较低级的高速缓存中,从而使在较低级高速缓存中选择出要抛弃的行。
在优选实施例中,同余组包含较高级高速缓存中的一对关联集和较低级高速缓存中的三个关联集,它们共享特定的索引地址位。地址散列函数,例如模3,将较高级关联集中的一些非共享地址位变换成用于选择较低级的关联集的索引。
尽管这里使用了术语“较高级高速缓存”和“较低级高速缓存”,但是它们只用于指定相对的高速缓存级关系,而不表示系统只包含两级高速缓存。正如这里所使用的那样,“较高级”指距离处理器核心较近的级。在优选实施例中,在“较高级高速缓存”之上至少存在一个级的高速缓存,其根据各种传统原理操作。
尽管通常假设用于在高速缓存中为关联集建立索引的地址散列技术,会产生对关联集的存储器引用的随机分布,但申请人确定对于数据在其中具有较长的高速缓存生命周期的第二、第三或更低级的高速缓存来说,情况常常并非如此。通常,某些关联集会变得比其它的关联集明显更“热”。根据本发明的优选实施例,通过在较高级的多个关联集中有效地共享下一个最低高速缓存级中的关联集,有可能根据较高级高速缓存中的“热”关联集,来增加要抛弃的较低级高速缓存的可用关联性。结果,提高了由较低级高速缓存来满足较高级高速缓存中高速缓存未中的机会,从而降低了处理器在高速缓存未中时空闲等待的平均时间。


参照附图能够更好地理解本发明的结构和操作的细节,其中相同的附图标记表示相同的部件,其中图1是根据本发明优选实施例的计算机系统的主要硬件部件的高层方框图,该计算机系统利用不同高速缓存级中的重叠关联集的同余组;图2是优选实施例的计算机系统中CPU核心的主要部件的高层方框图;图3更详细地示出了根据优选实施例的用于存储和寻址数据的各种高速缓存及相关结构的层次结构;图4是根据优选实施例的在上下高速缓存级中关联集的同余组的概念表示;
图5示出根据优选实施例的包含关联访问机制的L2高速缓存的结构;和图6示出根据优选实施例的包含关联访问机制的L3高速缓存的结构。
具体实施例方式
参照附图,其中在附图中相同的标号表示相同的部件。图1是根据本发明优选实施例的计算机系统100的主要硬件部件的高层表示,该计算机系统利用不同高速缓存级中的重叠关联集的同余组。计算机系统100的主要组成部分包含一个或多个中央处理单元(CPU)101A-101D、主存储器102、高速缓冲存储器106、终端接口111、存储器接口112、I/O设备接口113和通信/网络接口114,所有这些部件经由总线103、104及总线接口105耦合以便进行部件间通信。
系统100包含一个或多个通用可编程中央处理单元(CPU)101A-101D,这里统称为特征101。在优选实施例中,系统100通常作为较大系统包含多个处理器;然而,系统100也可以是单CPU系统。每个处理器101执行存储在存储器102中的指令。指令和数据被从主存储器102装载到高速缓冲存储器106中以用于处理。主存储器102是用于存储数据和程序的随机存取半导体存储器。尽管在图1中概念性地将主存储器102和高速缓存106表示成单独的实体,但是可以理解实际上它们更加复杂,尤其是高速缓冲存储器存在于多个不同的级上,正如本文所详细描述的。
存储器总线103为在CPU101与高速缓存106、主存储器102和I/O总线接口单元105之间传输数据提供数据通信路径。I/O总线接口105还耦合到系统I/O总线104,用于向和从各种I/O单元传送数据。I/O总线接口105通过系统I/O总线104与多个I/O接口单元111-114通信,这些I/O接口单元也被称为I/O处理器(IOP)或I/O适配器(IOA)。系统I/O总线可以是例如工业标准PCI总线或者任何其它适当的总线技术。I/O接口单元支持与各种存储器和I/O设备的通信。例如,终端接口单元111支持附加一个或多个用户终端121-124。存储器接口单元112支持附加一个或多个直接存取存储设备(DASD)125-127(它们通常是旋转磁盘驱动存储设备,尽管它们还可替换地是其它设备,包括配置成对主机表现为单个大容量存储设备的磁盘驱动器阵列)。I/O和其它设备接口113提供对于任何各种其它输入/输出设备或其它类型设备的接口。图1的示例性实施例中示出了两个这种设备,即打印机128和传真机129,应该理解还可有很多这种其它设备,它们可以是不同类型的。网络接口114提供从系统100到其它数字设备及计算机系统的一个或多个通信路径;这种路径可以包括例如因特网、局域网或其它网络等的一个或多个网络130,或者还可以包括远程设备通信线、无线连接等等。
应该理解,图1用于在高层次上描述系统100的主要代表性部件,各个部件可以具有比图1所示的部件更大的复杂性,除图1所示的那些部件之外的部件可以是现有的,而这样的部件的数量、类型及配置可以不同。本文揭示了这种附加复杂性或附加变化的若干示例,应该理解这些仅是通过示例进行说明,而不限于仅仅这样的变化。
尽管在图1中示出的主存储器102为单独的单片电路实体,但存储器还可以分布到并与不同的CPU或CPU组相关联,如众所周知的各种所谓的非统一内存访问(NUMA)计算机体系结构中的任何一种。尽管在图1中存储器总线103被表示得相对简单的单总线结构,用于在高速缓存106、主存储器102和I/O总线接口105之间提供直接通信路径,但实际上存储器总线103可以包括多种不同的总线或通信路径,它们可以用各种形式来安排,例如在分层结构、星形或万维网结构中的点对点链路、多级总线、并行和冗余路径等。此外,虽然I/O总线接口105和I/O总线104被分别表示为单个单元,系统100实际上还可以包含多个I/O总线接口单元105和/或多个I/O总线104。虽然示出了多个I/O接口单元,它们将系统I/O总线104与到各种I/O设备的各种通信路径分离开来,但是还可以替代地将一些或全部I/O设备直接连接到一个或多个系统I/O总线。
图1所示的计算机系统100具有多个附加的终端121-124,例如可以是典型的多用户“大型机”计算机系统。典型地,在这种情况下,附加设备的实际数量大于图1所示设备的数量,而本发明不限于任何特定规模的系统。可替换地,计算机系统100还可以是单用户系统,这类系统典型地只包含一个单用户显示器和键盘输入,或者可以是服务器或类似设备,这类设备具有较少的或没有直接的用户接口,而是接收来自其它计算机系统(客户机)的请求。
虽然已经在高层次上描述并示出了各种系统部件,应该理解典型的计算机系统包含很多没有示出的其它部件,而这些部件对于理解本发明来说无关紧要。
图2是根据优选实施例的具有特定的关联高速缓存结构的CPU101的主要部件的高层方框图。其比图1更详细地示出了CPU101。在本实施例中,两个CPU与特定的高速缓存结构一起被封装在单个半导体芯片中,因此CPU101有时也被称为“处理器核心”或“CPU核心”,以便将其与包含一对CPU的芯片区分开来。CPU101包含指令单元部分201、执行单元部分201、级1指令高速缓存(L1 I-高速缓存)205、级1数据高速缓存(L1 D-高速缓存)206和地址翻译硬件207。图2所示的级2高速缓存(L2高速缓存)208实际上由单个芯片内的两个CPU核心共享,并且因此不被认为是CPU101的一部分。通常,指令单元201从L1 I-高速缓存205获取指令,解码指令以确定要执行的操作,并且决定分支条件以控制程序流。执行单元211对寄存器中的数据执行算术和逻辑运算,并且装载或存储来自L1 D-高速缓存的数据。L2高速缓存208是级2高速缓存,通常大于L1 I-高速缓存或L1 D-高速缓存,为L1 I-高速缓存205和L1 D-高速缓存206提供数据。L2高速缓存208通过外部接口从较低级高速缓存或主存储器获取数据。
指令单元201包括分支单元211、指令解码/调度单元203以及指令寄存器和缓冲器204。在执行之前,来自L1 I-高速缓存205的指令被装载到缓冲器204。取决于CPU设计,可以有多个缓冲器(例如一个用于指令的串行序列,其它用于分支位置),每个缓冲器中可以包含多条指令。解码/调度单元203从缓冲器之一中接收将要执行的当前指令,并且解码该指令以确定要执行的操作或分支条件。分支单元202通过评估分支条件来控制程序流,并由L1 I-高速缓存205再装满缓冲器。
执行单元211包括一组用于存储数据的通用寄存器212和整数算术逻辑单元(ALU)213,整数ALU 213响应于由指令单元201解码的指令而对通用寄存器212中的数据执行算术和逻辑运算。执行单元还包括复杂运算子单元214,用于执行数学密集的运算,例如浮点运算。子单元214可以包含其自身的专用寄存器(未示出)。整数ALU 213和复杂运算子单元214通常被实施为多级流水线。除图2所示的组件之外,执行单元还可以包含附加的专用寄存器和计数器、用于从高速缓存或存储器获取数据或者将数据存储到高速缓存或存储器中的装载及存储硬件、控制硬件等。特别是,除整数ALU 213和复杂运算子单元214之外,执行单元211可以包含流水线(未示出)。附加流水线,例如取指令及解码流水线,可以存在于处理器101之内。
地址翻译硬件207将由指令单元201或执行单元211产生的有效地址翻译成存储器中相应的实际地址。在优选实施例中,处理器产生与每个执行过程相对应的有效地址空间中的“有效地址”。有效地址被翻译成在更大的通用虚拟地址空间中的“虚拟地址”,这是由所有过程共享的一个虚拟地址空间。虚拟地址再被翻译成“实际地址”,该地址与数据所位于的实际存储器位置相对应。然而,应该理解,各种计算机体系结构采用不同的寻址结构,而本发明不限于任何特定方式的寻址。
最好使用实际地址对高速缓存寻址,因此由处理器产生的有效地址首先被地址翻译硬件207翻译成实际地址,以便访问高速缓存中的数据。在图2中,地址翻译硬件207被示为单个的概念实体,并且可以包含任何现有技术中已知的各种翻译机制,例如翻译后备缓冲器、段后备缓冲器、有效到实际地址翻译表或其它机制,还包含在任何这些结构中与访问和翻译数据相关的硬件。可替换地,正如在一些计算机系统设计中已知的,还可以使用由处理器产生的有效地址,访问一些或所有高速缓存级。
L1 I-高速缓存205和L1 D-高速缓存206是向指令及执行单元提供数据的分立指令和数据高速缓存。L2高速缓存是包含指令和非指令数据两者的无区分的高速缓存。通常,由指令或执行单元从L1高速缓存读取数据或将数据存储到L1高速缓存中,并且如果在L1高速缓存中没有可用数据,则将数据从L2高速缓存208中装载到L1高速缓存中,L2高速缓存208又从外部位置获取该数据,并且接着将其从L1高速缓存传送到相应的单元。依据处理器的设计,可以越过L1高速缓存,而将数据从L2高速缓存208装载到执行或指令寄存器中。
在优选实施例中,CPU101支持多线程(最好是两个)的并发执行。对于每个线程,都存在一组单独的通用寄存器212(未示出)以及其它特定结构。然而,所支持的线程的数量可以不同,并且本发明也可以用于仅支持执行一个单线程的处理器中。
虽然已经在高层次上描述和示出了各种CPU部件,应该理解,优选实施例的CPU包含很多未示出的其它部件,这些部件对于理解本发明来说不是必要的。例如,在典型设计中将需要各种附加的专用寄存器。而且,应该理解,图2的CPU仅仅是CPU体系结构的一个示例,并且在CPU101内部件的数量、类型及安排上存在很多变化,除所示部件之外还存在未示出的部件,而且并不是所有示出的部件都要出现在CPU设计中。例如,缓冲器和高速缓存的数量和配置可以改变;执行单元流水线的数量和功能可以改变;可以用不同的阵列和组来配置寄存器;专用浮点硬件可有可无,等等。而且,CPU101可以具有简单的或者复杂的指令集,该指令集随着每个处理器周期支持对单操作或多操作的调度。
在图2中,L1高速缓存205和206被示为CPU101的一部分,因为每个CPU都具有其各自的L1高速缓存。在结构上,高速缓冲存储器可以被看作存储器102的一部分,或者被看作为CPU的一部分,或者可以被看作完全独立的实体。图2的表示是典型的,并且不用于将本发明限制在任何特定的物理高速缓存的实现。处理器芯片或芯片组可以包含比图2所示更多的或更少的高速缓存。
图3更详细地说明了根据优选实施例的用于存储和寻址数据的各种高速缓存及相关结构的层次结构。在本实施例中,除主存储器之外,有三级高速缓存。处理器101被封装在集成电路处理器芯片301A、301B(这里统称为特征301)上,每个处理器芯片包含一对处理器101(处理器核心)、由芯片上的两个处理器共享的单个L2高速缓存208A,208B(这里统称为特征208)、由芯片上的两个处理器共享的单个L3高速缓存目录302A、302B(这里统称为特征302),以及外部数据接口304A、304B(这里统称为特征304)。与每个L3高速缓存目录302相关的L3高速缓存303A、303B(这里统称为特征303)与处理器芯片分离,位于物理上距离处理器比主存储器102更近的位置。例如,L3高速缓存303可以被封装在单独的集成电路芯片上、与相应的处理器芯片301一起安装在公共的印制电路卡上。外部数据接口304处理数据越过处理器芯片边界经由存储器总线103的传输,它可以位于在处理器芯片与主存储器102之间,或者位于处理器芯片与L3高速缓存303之间,或者是一些其它结构。
级3高速缓存充当级2高速缓存的受害高速缓存。来自主存储器的数据越过L3高速缓存303,首先被装载到L2高速缓存208中。当数据被从L2高速缓存中抛弃时,它被装载到L3中,它可以从L3再装载到L2中,或者最终被抛弃到主存储器中。数据被从L2高速缓存中装载到L1 I-高速缓存205或L1 D-高速缓存206。依据设计,当装载数据时还有可能越过其它的高速缓存级,例如将数据从L3高速缓存直接装载到L1高速缓存中。
最好是,在L2和L3高速缓存中数据不重复。即,在任何给定的时间,数据的高速缓存行可以在两个高速缓存的任何一个中,但不是在两个中。
在优选实施例中,在L2高速缓存和L3高速缓存之间存在一一对应关系,尽管这不是必需的,而且对于每个L3高速缓存可以存在多个L2高速缓存。最好是,L2/L3高速缓存对由单个芯片301上的一对处理器(处理器核心)共享。
高速缓存在更高级(距离处理器更近)上,变得更快,并且存储更少的数据。在本文所述的示例性实施例中,在大型计算机系统的典型情况下,每个L2高速缓存208具有128字节的高速缓存行大小和48M字节的总存储容量。L2高速缓存是8路关联的(8-way associative),并且被划分成16K关联集(即每个关联集包含8个数据高速缓存线或1K字节)。L3高速缓存是16路关联的(16-wayassociative),并且被划分成24K关联集(即每个关联集包含16个数据高速缓存行或2K字节)。到L2高速缓存的访问时间大约是20个处理器周期,而到L3高速缓存的访问时间大约是100个处理器周期。为了进行比较,到主存储器的访问时间大约为1000处理器周期,所以如果利用L3高速缓存中的数据能够解决L2或更高级的高速缓存未中,相对于访问主存储器就能够实现实质的性能效益。L1高速缓存通常较小,并且具有较快的访问速度。然而,应该理解,这些参数仅仅代表使用当前技术的大型系统中的典型高速缓存。这些典型的参数将随着技术的进步而改变。较小的计算机系统通常相应地具有较小的高速缓存,并可能具有较少的高速缓存级。本发明不限于任何特定的高速缓存大小、访问时间、高速缓存行大小、高速缓存级的数量、特定级的高速缓存是否由多个处理器共享或专用于单个处理器、或者类似的设计参数。
正如现有技术中已知的,通过从选择的地址位(或者在某些情况下为附加位,例如线程标识符位)中解码关联集的标识,并且比较关联集中高速缓存行的地址与所需的数据地址,来访问高速缓存。例如,在高速缓存中有1K关联集的情况下,需要1K中的10位来规定特定关联集。理想情况下,确定这10位,以使每个关联集具有相同的被访问的概率。
传统地,计算机系统的设计者通常使用低位实际地址位来确定关联集,假设这些低位位对应于存储器访问的随机分布,并且作为结果以相同的频率来访问每个关联集。然而,鉴于不必完全理解的各种原因,在很多情况下,在典型的L2或L3高速缓存级上,存储器访问不是随机分布在低位地址片(slice)中的。这种现象似乎至少部分地是由很多数据库及其它软件数据结构的设计而引起的,尽管其它因素也可以导致这种现象。这些数据结构常常在特定的寻址边界上对齐,从而引起在某些低级地址位上的数据被更加频繁地访问。这种现象通常在L1高速缓存级上是无关紧要的,因为L1高速缓存级具有较少数量的关联集以及在高速缓存中较短的数据平均寿命。但是,在L2或L3高速缓存级上,就有可能检测到不同的关联集中访问频率的显著偏差,在具有较低访问频率的其它关联集中产生某些“热”集。
根据本发明的优选实施例,在L2或L3高速缓存级上建立关联集的同余组,每个同余组包含L2级上的多个关联集和L3级上的多个关联集。具体地说,在优选实施例中,每个组包含L2级上的两个关联集和L3级上的三个关联集。在一个同余组内的L2级上的每个关联集,共享相同同余组内的L3级上的所有关联集。因此,如果L2级上的一个关联集热而其它关联集不热,则可以使用在相同同余组内的L3高速缓存的关联集,主要用于存储与L2高速缓存的热关联集相对应的数据,从而从L2高速缓存的热关联集的角度,有效地增加了L3高速缓存的关联性。
图4是根据优选实施例的L2和L3高速缓存中关联集的同余组的概念表示。如图4所示,同余组401包括L2高速缓存208内的两个关联集402,403和L3高速缓存303内的三个关联集404-406。同余组401中的每个L2关联集(即关联集402和403)对应于该同余组中的三个L3关联集。即,被映射到L2关联集例如关联集402的数据地址,以分布方式被映射到三个L3关联集404-406。理想情况下,这些地址分布在三个L3关联集中,以使对所有三个关联集的数据访问频率相同。
由于在L2高速缓存中有16K关联集,每个同余组包含两个这样的关联集,并且在L3高速缓存中有24K关联集,每个同余组包含三个这种关联集,因此对于L2/L3高速缓存对来说,总共有8K同余组。一个系统可以具有超过一个的L2/L3高速缓存对,在这种情况下,每个这种高速缓存对具有8K同余组。
如图4所示,将被访问的数据的实际地址411用于选择L2和L3高速缓存的关联集。在该表示中,实际地址411包括52位,编号为12到63,其中位63是最低位。7个最低地址位、即位57-63,构成地址的偏移量部分,中间范围的位(位43-56)是索引部分,而最高位位(位12-42)有时被称为标签。偏移量位确定128-位高速缓存行内的数据地址。由于在L2高速缓存208中有16K关联集,需要14位来规定L2高速缓存208的16K关联集中的一个关联集。在优选实施例中,索引位(实际地址位43-56)是紧随偏移量的最低位实际地址,它用于在L2高速缓存中选择关联集。不加改变地使用这些实际地址位,在高级高速缓存中选择关联集。在本实施例中,同余组401中的两个L2关联集402,403共享相同的位43-55(13位),以便在有效位43-55中确定同余组,而位56用于选择该同余组的两个关联集之一。
使用未改变的实际地址位的组合和散列函数,来选择L3高速缓存中的关联集。具体地说,使用实际地址索引位43-55(13位)来规定同余组,这些位是与用于规定L2高速缓存中的同余组相同的位。散列函数用于在该同余组内选择三个关联集404-406之一。
散列函数可以是任何如下函数,即这种函数对于任何给定的数据地址是可重复的,并且在同余组的三个关联集间产生数据访问的大致均等的分布。在优选实施例中,散列函数是实际地址的一部分的模3函数。有可能得到实际地址的所有标签位(即实际地址位12-42,是高于7位偏移量和14位索引的位)的模3函数,但是由于附加位带来附加的延迟和/或电路需求,并且在高位上提供日益减少的益处,因此最好只使用这些位中的一部分。例如,可以从实际地址位35-42得到模3函数。然而,也可以使用其它位组合或其它散列函数,这些散列函数可以使用其它实际地址位。可以观察到,不可能从为2的幂(power)范围中获得对于三个关联集的数据地址的精确的均等分配,但是如果在散列函数中使用足够多数量的地址位,这种差异就无关紧要了。
散列函数最好分散在较低级高速缓存中的地址分配。即,如果考虑高于索引位的地址位(实际地址位12-42),那么该范围内的顺序地址通常被分配给较低级高速缓存中不同的关联集。在模3的情况下,通常基于轮循来分配该范围内的地址。但是,尽管通常应当大致均等地并且以小粒度(最好是一个高速缓存行的粒度)地分布地址,散列函数也能够执行不严格轮循的分配。
图5说明根据优选实施例的包含关联访问机制的L2高速缓存208的结构。参照图5,L2高速缓存包括高速缓存数据表505和索引504。数据表505包含多个数据高速缓存行501,高速缓存行501被分组在关联集402中。在优选实施例中,每个高速缓存行501包含128字节,并且每个关联集402包含8个高速缓存行。索引504包含索引项502的行503,每个行503与关联集402相对应,并且包含8个索引项。每个索引项502至少包含相应高速缓存行501的实际地址511的一部分以及特定控制位512。控制位可以包含但不限于修改位(dirty bit);用于选择将要抛弃的高速缓存行的一位或多位,例如最近最少使用(LRU)位,用作维持高速缓存一致性的信号量、锁或类似机制的一个或多个位;等等,如现有技术中已知的。
通过使用选择器逻辑506,选择与所需数据的实际地址411的一部分相对应的索引504的行503,来引用高速缓存行。在优选实施例中,处于43-56位位置上的14位实际地址被输入到选择器逻辑506中。接着,由比较器逻辑508对所选择的行503的每个相应的索引项502中的实际地址511与引用数据的实际地址411进行比较。实际上,由于位43-56根据行选择自然进行比较,而且偏移量位57-63对于确定高速缓存行不是必要的,因此只需要比较实际地址的高位位部分(即12-42位)。如果匹配,比较器逻辑508就输出与8个索引项中的匹配项相对应的选择信号。选择器逻辑507使用与选择器506所使用的相同的实际地址位,来选择高速缓存行501的关联集402,并且比较器508的输出在所选择的关联集内选择8个高速缓存行501中的一个。
尽管在图5中选择器506和507被示为分离的实体,可以看出,它们执行相同的功能。依据芯片的设计,它们实际上可以是一个选择器,具有同时选择索引504中的索引行503和高速缓存数据表505中的关联集402的输出。
L3高速缓存与之类似,但是除未改变的实际地址位之外,采用散列函数来选择高速缓存行的关联集。图6示出根据优选实施例的L3高速缓存303的结构、L3高速缓存目录302和关联的访问机制。
参照图6,L3高速缓存包括高速缓存数据表605和索引604。数据表605包含多个数据高速缓存行601,高速缓存行601被分组为关联集404。在优选实施例中,每个高速缓存行601包含128字节,并且每个关联集404包含16个高速缓存行。索引604包含索引项602的行,每个行与关联集404相对应,并且包含16个索引项。每个索引项至少包含相应的高速缓存行601的实际地址611的一部分以及特定控制位612。控制位可以包含但不限于修改位;用于选择要抛弃的高速缓存行的一个或多个位,例如最近最少使用(LRU)位,用作维持高速缓存一致性的信号量、锁或类似机制等的一个或多个位;等等,如现有技术中已知的。
通过使用选择器逻辑606,选择与所需数据的实际地址411的一部分相对应的索引604的一组三个行603,来引用高速缓存行。该三行组对应于同余组401。在优选实施例中,处于位位置43-55上的13位实际地址被输入到选择器逻辑606中,以选择该同余组。接着,使用散列函数生成器609的输出,从选择器606所选择的三个行的组中,选择行603中的一个。如上所述,尽管可以替换地使用其它散列函数,散列函数最好是部分实际地址的模3函数。然后,由比较器逻辑608对所选择的行603的每个相应的索引项602中的实际地址部分611与引用数据的实际地址部分411进行比较。如果匹配,比较器逻辑608就输出与16个索引项中的匹配项相对应的选择信号。选择器逻辑607使用与选择器606所使用的相同的实际地址位来选择高速缓存行601的一组三个关联集(即同余组)。使用散列函数生成器609的输出,从三个关联集中选择同余组内的一个关联集404。比较器608的输出在所选择的关联集404内选择16个高速缓存行601中的一个。
有时将图6所示的整个结构称为L3高速缓存,或者可替换地,将高速缓存数据表605和特定关联结构称为L3高速缓存。在优选实施例中,在处理器芯片301中物理地实现L3高速缓存目录302,L3高速缓存目录302通常包括索引表604、选择器逻辑606、散列函数生成器609和比较器608,而高速缓存数据表605和选择器逻辑607物理地在芯片之外实现。可以在L3高速缓存的不在芯片上的部分中重复设置散列函数生成器609,在图3中将L3高速缓存一般地表示为特征303。
在操作中,如果可能的话,由L1高速缓存来解决存储器引用。在L1高速缓存未中的情况下,使用选择的实际地址位来同时访问L2和L3高速缓存索引(目录),以便确定所需数据是在两个高速缓存的哪个之中。如果数据在L2中,则通常将其从L2高速缓存装载到L1高速缓存中,而在L2中保持不变。(因为L2高速缓存是共享的,可能存在这种情形,其中数据在另一个处理器的L1高速缓存中而暂时不可用。)如果数据在L3中(即不在L2中),则将其从L3并发地装载到L2和L1中。在这种情况下,使用各种传统选择技术,例如最近最少使用,来选择L2的高速缓存行,以将其抛弃到L3中。由于L3正在将它的一行装载到L2中,被装载到L2中的行为将自L2中抛弃行腾出空间,而不必抛弃L3中的线。为了在L1高速缓存中腾出空间,将选择现有行之一来抛弃;然而,由于L1高速缓存项是在L2中重复的,该抛弃行必然已经在L2中,所以不必为其腾出空间。
如果数据既不在L2中也不在L3中,就将数据从主存储器中读取到L2和L1中。在这种情况下,使用任何常规技术选择L2中的高速缓存行以便抛弃到L3中。为了在L3中腾出空间,仍使用任何常规技术,必须选择L3中的另一高速缓存行,以便将其抛弃到主存储器中。
在如上所述的优选实施例中,只在需要时才装载L2高速缓存(即当产生引用数据时出现高速缓存未中的情况下),L3高速缓存是L2的受害高速缓存,并且数据在L2和L3高速缓存中不重复。然而,有可能使用任何现在已知的或以后开发出的不同的选择策略,来操作这些高速缓存中的一个或两个。例如,在实际数据引用和高速缓存未中发生之前,可以采用一些预取技术预先将数据装载到L2高速缓存或L3高速缓存中。
在优选实施例中,一个同余组包含高速缓存较高级上的两个关联集和较低级上的三个关联集。然而,应该理解这些数字只代表一种实施方式,而同余组可以包含不同数量的关联集。在同余组中关联集的数量与访问复杂性之间要进行一些设计权衡。一般地,每个同余组中较大数量的关联集通常将改进随机性,也将增加实现的复杂性。
最好是,为了避免在较低级关联集中出现无法预见的热行为,选择同余组中关联集的数量和散列函数,以便使地址在相同的幂2边界(power-of-twoboundary)上被分布在较低级高速缓存的不同关联集中。为此目的,使用不具有公因数的数对是有利的,例如2和3,正如在优选实施例中那样。例如,在较低级高速缓存在每个同余组中包含三个关联集的情况下,模3散列函数将地址分散在任何幂2边界上。然而,只使用适当的散列函数也可以实现相同的效果。例如,在较高级高速缓存中有两个关联集,在较低级高速缓存中有四个关联集,这时使用分散地址定位的散列函数,来选择同余组内的较低级高速缓存关联集。
尽管最好是如上所述在较低级高速缓存中将地址定位分散在幂2边界上,但这不是严格需要的,并且可以用其它方式或者不分散地址定位来实现本发明的特定效益。例如,可替换地,可以在较高级高速缓存中分散地址定位(例如,使用每个同余组中的三个较高级关联集)。
在优选实施例中,使用实际地址的高位位的模3散列函数,将较高级的关联集中的地址分布在较低级的三个关联集中。不同的散列函数或其它函数可以用于将较高级的关联集中的地址分布在较低级的多个关联集中。最好是以小粒度或粒度为1来分布较高级的地址,这意味着对于在实际地址索引之上用于确定较高级高速缓存中的关联集的每个顺序的实际地址部分,通常在较低级高速缓存中选择不同的关联集。然而,可替换地,还可以分配实际地址索引之上的实际地址部分的相邻块。
在优选实施例中,计算机系统使用三级地址机制,其中当访问高速缓存或存储器时,将有效地址翻译成虚拟地址,而虚拟地址又被翻译成实际地址。然而,本发明不限于任何特定的寻址方案,而且可应用于具有少于三级寻址或者多于三级寻址的系统。
虽然已经公开了本发明的具体实施例以及特定的替换方案,本领域技术人员应该意识到,在本发明所限定的范围内,可以进行形式和细节上的各种附加改变。
权利要求
1.一种数字数据处理设备,包括至少一个处理器;存储器;第一高速缓存,用于临时保存所述存储器的部分内容,所述第一高速缓存包含多个可寻址的关联集,每个关联集包含一个或多个相应的高速缓存行;和第二高速缓存,用于临时保存所述存储器的部分内容,所述第二高速缓存包含多个可寻址的关联集,每个关联集包含一个或多个相应的高速缓存行;其中,所述第一高速缓存的关联集和所述第二高速缓存的关联集与多个同余组相对应,每个同余组包含所述第一高速缓存的相应多个关联集和所述第二高速缓存的相应多个关联集;其中,与所述第一高速缓存的每个相应关联集相对应的地址,被分配在与该第一高速缓存的相应关联集在相同同余组内的所述第二高速缓存的多个关联集中。
2.如权利要求1所述的数字数据处理设备,其中,使用与用于确定相应的关联集的地址位不同的至少部分地址位的散列函数,在相同同余组内的所述第二高速缓存的多个关联集中,分配与所述第一高速缓存的每个相应的关联集相对应的地址。
3.如权利要求2所述的数字数据处理设备,其中,所述散列函数是模N函数,其中N是所述同余组内所述第二高速缓存的关联集的数量。
4.如权利要求1所述的数字数据处理设备,其中,每个所述同余组包含所述第一高速缓存的M个关联集和所述第二高速缓存的N个关联集,其中M和N的最大公因数是1。
5.如权利要求1所述的数字数据处理设备,其中,数据在所述第一高速缓存和所述第二高速缓存中不重复。
6.如权利要求1所述的数字数据处理设备,其中,所述第一高速缓存位于比所述第二高速缓存高的级上。
7.如权利要求6所述的数字数据处理设备,其中,所述第二高速缓存是所述第一高速缓存的受害高速缓存。
8.如权利要求6所述的数字数据处理设备,其中,所述数字数据处理设备包括第三高速缓存,所述第三高速缓存位于比所述第一高速缓存和所述第二高速缓存高的级上。
9.如权利要求1所述的数字数据处理设备,其中,所述第一高速缓存和所述第二高速缓存是可使用实际存储器地址寻址的。
10.如权利要求1所述的数字数据处理设备,其中,所述第一高速缓存中的每个所述关联集包含相应的多个高速缓存行,并且所述第二高速缓存中每个所述关联集包含相应的多个高速缓存行。
11.一种用于数字数据处理的集成电路芯片,包括至少一个处理器核心;第一高速缓存访问逻辑部件,用于访问第一高速缓存,所述第一高速缓存用于临时保存存储器的部分内容,所述第一高速缓存访问逻辑部件从所述第一高速缓存的多个关联集中,确定与由所述处理器核心产生的输入地址相对应的所述第一高速缓存的关联集,每个关联集包含一个或多个相应的高速缓存行;和第二高速缓存访问逻辑部件,用于访问第二高速缓存,所述第二高速缓存用于临时保存存储器的部分内容,所述第二高速缓存访问逻辑部件从所述第二高速缓存的多个关联集中,确定与由所述处理器核心产生的所述输入地址相对应的所述第二高速缓存的关联集,每个关联集包含一个或多个相应的高速缓存行;和其中,所述第一高速缓存的所述关联集和所述第二高速缓存的所述关联集与多个同余组相对应,每个同余组包含所述第一高速缓存的相应多个关联集和所述第二高速缓存的相应多个关联集;其中,与所述第一高速缓存的每个相应关联集相对应的地址,被分配在与该第一高速缓存的相应关联集在相同同余组内的所述第二高速缓存的多个关联集中。
12.如权利要求11所述的集成电路芯片,其中,使用与用于确定相应的关联集的地址位不同的至少部分地址位的散列函数,在相同同余组内的所述第二高速缓存的多个关联集中,分配与所述第一高速缓存的每个相应的关联集相对应的地址。
13.如权利要求12所述的集成电路芯片,其中,所述散列函数是模N函数,其中N是所述同余组内的所述第二高速缓存的关联集的数量。
14.如权利要求11所述的集成电路芯片,其中,每个所述同余组包含所述第一高速缓存的M个关联集和所述第二高速缓存的N个关联集,其中M和N的最大公因数是1。
15.如权利要求11所述的集成电路芯片,其中,数据在所述第一高速缓存和所述第二高速缓存中不重复。
16.如权利要求11所述的集成电路芯片,其中,所述第一高速缓存位于比所述第二高速缓存高的级上。
17.如权利要求16所述的集成电路芯片,其中,所述第二高速缓存是所述第一高速缓存的受害高速缓存。
18.如权利要求11所述的集成电路芯片,其中,所述第一高速缓存和所述第二高速缓存是可使用实际存储器地址寻址的。
19.如权利要求11所述的集成电路芯片,其中,所述第一高速缓存中的每个所述关联集包含相应的多个高速缓存行,并且所述第二高速缓存中每个所述关联集包含相应的多个高速缓存行。
20.如权利要求11所述的集成电路芯片,其中,所述芯片包含所述第一高速缓存和所述第二高速缓存中的至少一个。
21.如权利要求11所述的集成电路芯片,其中,所述芯片包含多个处理器核心,并且所述多个处理器核心共享所述第一高速缓存和所述第二高速缓存。
22.一种操作数字数据处理设备中的高速缓冲存储器的方法,包括如下步骤响应于输入地址,从第一高速缓存的多个关联集中确定出与所述输入地址相对应的该第一高速缓存的关联集,每个关联集包含一个或多个相应的高速缓存行;响应于所述确定第一高速缓存关联集的步骤,确定由所述确定第一高速缓存关联集的步骤所确定的关联集中是否包含与所述输入地址相对应的数据;响应于所述输入地址,从第二高速缓存的多个关联集中确定与所述输入地址相对应的该第二高速缓存的关联集,每个关联集包含一个或多个相应的高速缓存行;响应于所述确定第二高速缓存关联集的步骤,确定由所述确定第二高速缓存关联集的步骤所确定的关联集中是否包含与所述输入地址相对应的数据;其中,所述第一高速缓存的关联集和所述第二高速缓存的关联集与多个同余组相对应,每个同余组包含所述第一高速缓存的相应多个关联集和所述第二高速缓存的相应多个关联集;其中,与所述第一高速缓存的每个相应关联集相对应的地址,被分配在与该第一高速缓存的相应关联集在相同同余组内的所述第二高速缓存的多个关联集中。
23.如权利要求22所述的方法,其中,使用与用于确定相应的关联集的地址位不同的至少部分地址位的散列函数,在相同同余组内的所述第二高速缓存的多个关联集中,分配与所述第一高速缓存的每个相应的关联集相对应的地址。
24.如权利要求23所述的方法,其中,所述散列函数是模N函数,其中N是所述同余组内的所述第二高速缓存的关联集的数量。
25.如权利要求22所述的方法,其中,每个所述同余组包含所述第一高速缓存的M个关联集和所述第二高速缓存的N个关联集,其中M和N的最大公因数是1。
26.如权利要求22所述的方法,其中,数据在所述第一高速缓存和所述第二高速缓存中不重复。
27.如权利要求22所述的方法,其中,所述第一高速缓存位于比所述第二高速缓存高的级上。
28.如权利要求27所述的方法,其中,所述第二高速缓存是所述第一高速缓存的受害高速缓存。
29.如权利要求22所述的方法,其中,所述第一高速缓存和所述第二高速缓存是可使用实际存储器地址寻址的。
30.如权利要求22所述的方法,其中,所述第一高速缓存中的每个所述关联集包含相应的多个高速缓存行,并且所述第二高速缓存中每个所述关联集包含相应的多个高速缓存行。
31.一种数字数据处理设备,包括至少一个处理器;存储器;第一高速缓存,用于临时保存所述存储器的部分内容,所述第一高速缓存包含多个可寻址的关联集,每个关联集包含一个或多个相应的高速缓存行;和第二高速缓存,用于临时保存所述存储器的部分内容,所述第二高速缓存包含多个可寻址的关联集,每个关联集包含一个或多个相应的高速缓存行;其中,所述第一高速缓存的每个所述关联集与相应的多个可存储在所述第一高速缓存的关联集中的数据的地址相对应,并且所述第二高速缓存的每个所述关联集与相应的多个可存储在所述第二高速缓存的关联集中的数据的地址相对应;其中,与所述第一高速缓存的每个相应关联集相对应的地址,被分配在所述第二高速缓存的相应多个关联集中;其中,与所述第二高速缓存的每个相应关联集相对应的地址,被分配在所述第一高速缓存的相应多个关联集中。
32.如权利要求31所述的数字数据处理设备,其中,使用与用于确定所述第一高速缓存的相应关联集的地址位不同的至少部分地址位的散列函数,在第二高速缓存的多个关联集中,分配与所述第一高速缓存的每个相应关联集相对应的地址。
33.如权利要求32所述的数字数据处理设备,其中,所述散列函数是模N函数,其中N是所述第一高速缓存的关联集中的地址被分配到的所述第二高速缓存的关联集的数量。
34.如权利要求31所述的数字数据处理设备,其中,数据在所述第一高速缓存和所述第二高速缓存中不重复。
35.如权利要求31所述的数字数据处理设备,其中,所述第一高速缓存位于比所述第二高速缓存高的级上。
36.如权利要求35所述的数字数据处理设备,其中,所述第二高速缓存是所述第一高速缓存的受害高速缓存。
全文摘要
本发明涉及一种具有至少两级的计算机高速缓冲存储器,其包含分配到同余组中的关联集。每个同余组具有较高级高速缓存中的多个关联集(最好是两个)和较低级高速缓存中的多个关联集(最好是三个)。较高级高速缓存中关联集的地址范围被分布在相同同余组内的较低级高速缓存中的所有关联集中,从而使这些较低级关联集被相同同余组内的较高级上的所有关联集有效地共享。最好,较低级高速缓存是较高级高速缓存的受害高速缓存。这种由较高级上的不同关联集对较低级关联集的共享,有效地增加了较低级保存较高级上的热关联集的抛弃数据的关联性。
文档编号G06F12/00GK1652092SQ200410092640
公开日2005年8月10日 申请日期2004年11月16日 优先权日2003年12月9日
发明者阿伦·C·索迪 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1