具有基于线程标识符的缓存 清除的多线程缓存方法和装置
相关申请
本发明与美国专利申请代理人案卷No.1007-3所描述的发明相关,该发明与本发明同时提交,标题为“Method and Apparatus forMultithreaded Cache with Simplified Implementation of CacheReplacement Policy”,其全文在此合并作为参考。
技术领域
本发明一般涉及计算机结构的领域,尤其涉及用于在多线程处理器中使用的高速缓冲存储器。
背景技术
如所公知的,处理器通常与包括一个级别的不同存储器元件的存储器系统一起使用。例如,如M.J.Flynn的“Computer Architecture:Pipelined and Parallel Processor Design”,Jones and BartlettPublishers Boston,MA,1995中所描述的,这种内存系统可包括后备存储器、主存储器以及高速缓冲存储器。
后备存储器代表分级存储器系统中的最高级存储器,在访问时间方面与处理器相差很远,并通常需要大量的循环来访问。代表性的示例是硬盘驱动器。后备存储器具有吉比特级(GB)的容量,访问时间大约为10-3秒。
主存储器或1级存储器在访问时间方面还算接近处理器。代表性的示例是动态随机访问存储器(DRAM)。其典型的容量为兆比特(MB)级,但访问速度比后备存储器快得多,通常量级为10-8秒。
高速缓冲存储器,也被称为0级存储器或简称为“高速缓存”,其为最频繁使用的数据提供有效而高速的访问,在访问时间方面最接近于处理器。代表性的示例是静态随机访问存储器(SRAM)。其通常很小,容量为千字节(KB)级,而访问速度非常快,量级为10-9秒。
高速缓冲存储器依据局域性(locality)原理工作。局域性包括空间、时间或顺序局域性。空间局域性涉及这样的可能性:处理器执行的程序在执行期间将访问相同或邻近的存储位置。时间局域性涉及这样的性质:如果程序包括对多个不同位置的一系列访问,则非常可能该系列之后的访问也访问与该序列相联系的位置。顺序局域性涉及这样的性质:如果已经访问了特定的位置S,那么随后可能访问位置S+1。处理器数据访问在本文被称为“引用(reference)”。
由高速缓存控制器实现的地址映射控制功能确定如何在高速缓存中存储数据,以及如何将数据从1级或更高级存储器中移到高速缓存中。如果高速缓存满足了特定的处理器数据访问,则该访问被称为“高速缓存命中(cache hit)”,否则被称为“高速缓存未命中(cachemiss)”。高速缓存通常从更高级的存储器中取出多个存储行(line)。该行的大小通常被设计为与被执行的程序的预期空间局域性相一致。
可以组织高速缓存以按需取数据或预取数据。大多数处理器使用按需取的方法,从而当出现高速缓存未命中时,高速缓存控制器将清除当前行并用处理器所引用的行替换它。在预取方法中,高速缓存控制器试图预测将需求哪些行,并随后在处理器引用它们之前将这些行移到高速缓存中。
在常规高速缓冲存储器中使用的寻址映射控制的三种基本类型是全关联映射(fully associative mapping)、直接映射(direct mapping)和组关联映射(set-associate mapping)。全关联映射和直接映射方法分别在图1和2中示出。在这些附图中,为了使说明简化和清楚,省略了高速缓存控制器及至少一部分与其相应的映射逻辑电路。
图1示出了使用全关联地址映射的高速缓冲存储器100。该高速缓存100包括存储器阵列102和目录104。该图示出了高速缓存处理访问请求106的方式。访问请求106包括标签110、偏移112和字节/子(B/W)选择字段114。示例性地,访问请求106的部分110、112和114的长度可以分别是18比特、3比特和3比特。标签110与目录104中的条目(entry)比较。如果在目录104的特定条目104-k的标签120与访问请求106的标签110相匹配,则为高速缓存命中。在这种情况下,同样存储在目录104的条目104-k中的相应地址122被与访问请求106的偏移112相结合使用,以识别存储器阵列102中的特定行102-j。随后将所请求的行发送给处理器。如果标签110与目录104中存储的任何标签都不匹配,则为高速缓存未命中。所示的存储器阵列102包括4KB数据,每行8字节地排列在512行中。如图所示,存储器阵列102中的512行中的特定行被唯一的9位地址识别,该9位地址包括来自目录104的6位地址122和3位偏移112。
图2示出了使用直接映射的高速缓冲存储器200。高速缓存200包括存储器阵列202和目录204。图中示出了高速缓存处理访问请求206的方式。访问请求206包括标签210、索引211、偏移212和B/W字段214。示例性地,访问请求206的部分210、211、212和214的长度可以分别是10比特、8比特、3比特和3比特。依据直接映射的方法,索引211被用于识别目录204中的特定条目204-k。该特定条目204-k包括一标签220。由于只有索引211被用于识别目录204中的特定条目,因而对不同地址的访问请求将被映射到目录204中相同的位置。因此在比较器222中比较所得的标签220与访问请求206中的标签210,如果两个标签匹配,则其匹配输出被置为逻辑高电平,否则被置为逻辑低电平。匹配输出被用作门224的启用信号,门224判断根据索引211和偏移212所确定的存储器阵列202的特定条目202-j是否将提供给处理器。如果存储在目录204的条目204-k中的标签220与访问请求206中的标签210相匹配,则为高速缓存命中,否则为高速缓存未命中。所示的存储器阵列202包括16KB的数据,每行8字节地排列在2048行中。因此,存储器阵列202中的2048行中的特定行由唯一的11比特地址识别,该11比特地址包括8比特索引211加上3比特的偏移212。
组关联高速缓存的操作方式与上述的直接映射高速缓存200类似,只是可能出现对访问请求地址的多次选择机会。组关联高速缓存的存储器阵列被分为不同的部分或组,并且该目录在其各条目中包括多个标签,各标签与这些组中的一组相对应。各访问请求地址的标签部分与由访问请求的引用部分所标识的所述目录的特定条目中的各标签相比较。如果发现了匹配,则该比较结果还被用于从存储器阵列的一个组中选出一行,传送给处理器。
如果上述高速缓冲存储器之一发生了高速缓存未命中,则通常从高速缓存中清除(evict)相应的数据,获取正确的数据并存储在高速缓存中。可用来确定哪个数据被清除的替换策略很多。例如,最近最少使用(LRU)替换策略试图通过总是去除与缓存中没有被访问的最老位置相关联的数据利用时间局域性。为了维持状态信息来实现n个资源的LRU替换策略(其中n例如指明了在组关联高速缓冲存储器中的组数),一种已知的方法要求n2位的状态信息。如G.A.Blaauw等人的“Computer Architecture:concept andEvolution,”Addison-Wesley,Reading,MA,1997中所描述的,已经发展了进一步的改进,将对状态信息的要求降低到n(n-1)/2位,该文在此合并作为参考。在高速缓冲存储器中使用的替换策略的其他示例包括随机替换和先入先出(FIFO)替换。
图1和图2中的示例存储器高速缓存是在处理器从存储位置读取数据的上下文中描述的。对于处理器向存储位置写入数据来说,场景是类似的。主要差别在于数据被处理器写入高速缓存的存储器阵列中的适当位置,随后高速缓存必须确定何时将该数据写回主存储器。直写(write-through)高速缓存立即存储到主存储器和高速缓冲存储器阵列。如果一行中的任何位置发生了写入,则回写(copy-back)高速缓存将该给定行标记为“脏”,只有在该行将被清除并标记为脏时,才更新主存储器。
与上述类型的常规高速缓冲存储器相联系的重要问题是在与多线程处理器(也就是说,支持同时执行多个独立的指令序列或“线程”的处理器)一起使用时,它们通常不是最优的。因而存在着提高多线程处理器实现缓冲存储器的技术的需求。
发明内容
本发明提供了一种改进的多线程高速缓冲存储器,在示例性实施例中,在发生高速缓存未命中时,使用线程识别器来控制决定从高速缓存中清除一行或多行或其他条目。
依据本发明的一个方面,用于在多线程处理器中使用的高速缓冲存储器包括多个组关联线程高速缓存(thread cache),组关联线程高速缓存具有一个或多个线程高速缓存,每个线程高速缓存实现基于线程的清除处理,减少高速缓冲存储器中所要求的替换策略存储量。
在示例性实施例中,一个或多个线程高速缓存中的每一个包括具有多组存储位置的存储器阵列和用于存储标签的目录,每个标签与其中一个存储位置的特定地址的至少一部分相对应。该目录具有多个条目,每个条目存储多个标签,从而如果存储器阵列中有n组存储位置,则有n个标签与各目录条目相关联。目录被用于在访问请求和存储器阵列的存储位置之间实现组关联地址映射。至少部分地基于所述线程高速缓存的线程标识符,结合一个高速缓存未命中事件,从特定线程高速缓存中选出一个特定存储位置的条目用于清除。
作为更具体的示例,该目录可以被分为第一部分和第二部分,每个部分在目录中的给定条目中具有的两个或多个标签,所述线程标识符的最低位被用于选择目录的一部分,从该部分中,标签被选出用于从线程高速缓存中清除。在使用线程标识符的最低位选择出目录的特定部分之后,可使用一个或更多的替换策略比特来确定来自被选出部分的特定标签。随后将该特定标签及其相应存储位置条目从高速缓存中清除。
本发明有利地减少了高速缓冲存储器中的替换策略状态复杂度,允许用比其他情况所需电路较少的电路实现替换策略,从而比上述常规方法节省电路面积和功率。
附图说明
图1示出了利用全关联映射的常规高速缓冲存储器;
图2示出了利用直接映射的常规高速缓冲存储器;
图3A是其中实现了本发明的示例性处理系统的方框图;
图3B是图3A的处理系统中的多线程处理器的更详细的方框图,示出了其中实现了本发明的多线程高速缓存;
图4示出了利用可与本发明一起使用的组关联映射的高速缓冲存储器;
图5示出了依据本发明的示例性实施例的高速缓冲存储器。
具体实施方式
本发明在此被示意为在多线程处理器的多线程高速缓冲存储器中实现。然而,应该明白,本发明并不是必须使用示例性实施例中的特定多线程高速缓存以及处理器配置,本发明更一般地适用于任何涉及线程处理的组关联高速缓冲存储器应用,并用于降低所需的替换策略复杂度。
将结合图3A、图3B、图4和图5描述实现了依据本发明的多线程高速缓冲存储器的示例性处理系统300。图3A示出了处理器300,该处理器300包括与主存储器304相连接的多线程处理器302。图3B示出了多线程处理器302的一可能实现的更详细的视图。在该实施例中,多线程处理器302包括多线程高速缓存310、数据存储器312、高速缓存控制器314、指令解码器316、寄存器文件318和一组算数逻辑单元(ALU)320。多线程高速缓存310在本文中也被称为高速缓冲存储器。应该强调的是:图3A和图3B所示的特定结构是为了清楚地说明而被简化了的,可以包括图中未明确示出的另选或附加的部件,这对本领域的技术人员是显而易见的。
多线程高速缓存310包括多个线程高速缓存310-1、310-2、...、310-N,其中N泛指被多线程处理器支持的线程的数目。因而每个线程在多线程高速缓存310中具有与其关联的相应线程高速缓存。类似地,数据存储器312包括N个独立的数据存储器实例,由所示的数据存储器312-1、312-2、...、312-N指示。
多线程高速缓存310通过高速缓存控制器314与主存储器304相接。高速缓存控制器314可确保来自主存储器304的适当指令被载入多线程高速缓存310。在该示例性实施例中,高速缓存控制器314与各线程高速缓存310-1、310-2、...、310-N相关联的逻辑电路或其他处理部件协同操作,实现组关联地址映射和最近最少使用(LRU)替换策略的至少一部分。下面结合图4和图5更详细地描述组关联地址映射和LRU替换策略。然而示例性实施例的特定映射方法和LRU替换策略不应被解释为对本发明的限制。其他的组关联映射实现和另选的替换策略诸如随机替换或FIFO替换也可与本发明结合使用。
通常,多线程高速缓存310被用于存储将被多线程处理器302执行的存储指令,而数据存储器312存储被该指令操作的数据。由指令解码器316从多线程高速缓存310中取出指令,指令解码器316与寄存器文件318和ALU320协同操作,以常规方式控制指令的执行。多线程处理器部件诸如316、318、320的操作在本领域内是公知的,因此本文没有深入详细地描述。
图4示出了可以在多线程高速缓存310的一个特定线程高速缓存中实现的组关联地址映射。如图4所示,组关联地址映射不包括本发明的改进的基于线程的高速缓存清除技术。图5示出了被配置并入了依据本发明的基于线程的高速缓存清除的图4的线程高速缓存。
先参照图4,图4示出了利用组关联地址映射的线程高速缓存400。线程高速缓存400被假定为与图3B所示的多线程高速缓存310中的一个特定线程高速缓存相对应。多线程310中的其他线程高速缓存的子集或全部可以以类似的方式实现。所示的线程高速缓存400包括存储器阵列402和目录404。存储器阵列402包括许多不同的存储位置组。在该实施例中,不同的存储位置组的数目为4,该四个组由组1、组2、组3、组4指明,但其他的实施例使用的组也可多于或少于4个。目录404包括多个条目,每个条目存储4个标签。在目录404的给定条目中的每个标签对应于存储器阵列402中的一对应组中的特定存储位置的地址。更具体地,目录404中的给定条目404-k包括4个所示的不同标签。每个标签控制到存储器阵列402的组组1、组2、组3、组4之一中的相应存储位置的映射。通常,在这种类型的组关联高速缓存中,如果存储器阵列402包括n组存储位置,则目录404的每个条目中存储n个标签。因此目录404可被视为被分成了所示的4个部分。这些部分由图中的1、2、3、4指明,每个部分只与目录404中的各条目中的单个标签相关联。
在图4的组相关线程高速缓存400中,示例性访问请求406被包括标签410、索引411、偏移412和B/W字段214的高速缓存处理。访问请求可能来自于与多线程处理器302的指令获取操作相协同的指令解码器316。如图所示,访问请求406的部分410、411、412和414的长度可以分别是12比特、6比特、3比特和3比特。这些字段的长度和特定访问请求结构仅仅是示例的方式而已,无论如何也不能解释为对本发明的范围的限制。依据组相关映射方法,索引411被用于识别目录404中的特定条目404-k,该特定条目404-k与本实施例中各其他目录条目一样,包括所示的4个标签,每个标签与存储器阵列402的组组1、组2、组3或组4中的一个相关联。假定每个标签的长度不限于与标签410的长度(也就是说,本实施例中的12比特)相同。被识别出的条目404-k的这些标签中的每一个在4个比较器416的与其相应的一个比较器中与标签410相比较。更具体地,来自目录条目404-k的部分1的第一标签在比较器416-1中与标签410相比较,来自部分2的第二标签在比较器416-2中与标签410相比较,来自部分3的第三标签在比较器416-3中与标签410相比较,来自部分4的第四标签在比较器416-4中与标签410相比较。这些比较器416的输出形成一组选择信号,用于选择组组1、组2、组3或组4中与该信号对应的组。
如果在标签410和来自目录条目404-k的一个标签发生匹配,则对应的选择信号被启用,例如被驱动到逻辑高电平。否则,即为高速缓存未命中,而没有选择信号被启用。在给定的时间只启用选择信号中的一个。该选择信号被施加到多路复用器418的选择信号输入端,多路复用器418根据被启用的一个特定选择信号,从存储器阵列402的被选出的组中的对应存储位置选择该行,传送到处理器。更具体地,在本实施例中,所需的行将被传送到指令解码器316解码并在多线程处理器302中执行。
所示的存储器阵列402包括16KB的数据,每行8字节的排列在2048行中。各组组1、组2、组3和组4中的每一个包括512行。因此由唯一的9比特地址来标识存储器阵列402的四个不同组中的给定组中的特定一行,在本实施例中,该9比特地址包括6比特索引411加上3比特偏移412。
依据本发明的一个方面,在发生高速缓存未命中事件时,至少部分地基于给定线程高速缓存的线程标识符,选出存储器阵列402中的一个给定组中的一个特定存储位置中的一行或其他条目用于清除。如前面所指示的,将结合图5更详细地描述基于线程的清除处理。
现在参照图5,其示出了线程高速缓存400′。线程高速缓存400′对应于图3B的多线程高速缓存310中的一个特定线程高速缓存。可以以类似的方式配置多线程高速缓存310中的其他线程高速缓存的全部或子集。线程高速缓存400′包括存储器阵列402、目录404、比较器416和多路复用器418,在处理访问请求(例如访问请求406时),每一个的操作基本与前面结合图4的描述相同。线程高速缓存400′还包括:包括低位或最低有效位(LSB)504的线程标识符寄存器502、清除条目判定多路复用器506和508以及替换策略存储器元件,在本实施例中,该替换策略存储器元件为LRU状态寄存器510的形式。
虽然在图5中将线程识别寄存器502、清除条目判定多路复用器506和508以及LRU状态寄存器示为线程高速缓存400′的部件,但每个都可以部分或全部地在线程高速缓存之外实现。例如,在给定线程高速缓存中的地址映射和替换策略实现所相关的这些和其他元件可以部分或全部地在高速缓存控制器314或多线程处理器302的另一部分中实现。
线程标识符寄存器502存储一个多位的线程标识符,该多位线程标识符被多线程处理器302用于识别与线程高速缓存400′相对应的特定线程。这种线程标识符可以以常规的方式产生,这是本领域技术人员都清楚的。在该示例性实施例中,LRU状态寄存器510包括一个一位寄存器,其存储单个比特512的状态信息。
在本文所使用的术语“线程标识符”意在包括适于识别多线程处理器中的特定线程或一组多个线程的任何信息。示例性而非限制性地,该线程标识符可以与多线程处理器中的线程计数器的输出对应。更具体地,给定的多线程处理器可以配置为以预定的顺序(例如循环顺序(Round robin order))处理多个线程,线程计数器的输出被用于识别被执行的特定线程。在该实施例中,可以以循环顺序处理总计8个线程,每个线程被3位的识别器识别,从而3位计数器的输出可以用于识别被处理的特定线程。其他的实施例可以使用线程标识符的非计数器实现。适于与本发明一起使用的大量不同的线程标识符配置对本领域技术人员是显而易见的。
清除条目判定多路复用器506和508共同地确定将从目录404中清除的特定标签,从而从存储器阵列402的对应存储位置中清除一个条目。
如图5所示,目录404被分成所示的左部分和右部分。更具体地,目录的左部分404包括最左侧的部分1和2,目录404的右部分包括最右侧的部分3和4。因而左部分和右部分整体地包括了整个目录404。而左部分和右部分中的每一个包括用于目录404的每个条目的两个标签。线程标识符寄存器502的LSB 504作为选择信号被施加到多路复用器506,以从4个输入中选择两个用于传播到多路复用器508的输入端。多路复用器506的四个输入由所示的t0L、t1L,t0R、t1R指明,并分别对应于来自目录左部分的标签0、目录左部分的标签1、目录右部分的标签0、目录右部分的标签1。LSB504用于选择传播到多路复用器508的输入端的左目录标签或右目录标签。
多路复用器508的输入因而是左目录标签t0L、t1L或右目录标签t0R、t1R。将作为选择信号的LRU比特512提供给多路复用器508,并从而用于选择所施加的左或右目录标签中的一个,用于从线程高速缓存400′中清除。一旦选出了用于清除的给定标签,则可以以常规方式从线程高速缓存中清除该标签及其相应的存储位置,例如可以用本领域熟知的用新条目信息进行覆盖的方式。
上述基于线程的高速缓存清除技术相对于常规技术产生了显著的进步。例如该技术显著减少了必须被存储以实现LRU替换策略的状态信息的量。更具体地,在上述基于组关联高速缓存的示例性实施例中,具有4个组,也就是n=4,只需要单个的一位寄存器来存储用于LRU替换策略的状态信息。前述常规技术需要n
2或n(n-1)/2比特的替换策略状态信息,而上述假定只使用一位线程标识符的示例性实施例中的基于线程的清除技术需要n(n-2)/8位状态信息。该示例性实施例相对常规技术的改进在下表中作为n的示例值的函数示出。
组数(n) |
n2 |
n(n-1)/2 |
n(n-2)/8 |
2 |
4 |
1 |
0 |
4 |
16 |
6 |
1 |
8 |
64 |
28 |
6 |
16 |
256 |
120 |
28 |
32 |
1024 |
496 |
120 |
64 |
4096 |
2016 |
496 |
另外,通过减少实现替换策略所必须存储的状态信息的数量,本发明还减少了多线程高速缓冲存储器所需的电路面积和功率。
如上所述,前述表格假定只使用一位的线程标识符来实现本发明的高速缓存清除技术。然而,可以使用多于一位的线程标识符。例如,n=8的实施例可以将其目录分成4个部分,每个部分在每个目录条目中具有两个标签,线程标识符的两个最低比特用于选择四个部分中的一个特定部分,根据替换策略状态信息,从该特定部分中选出一个标签用于清除。在该示例中,与图5的示例性实施例一样,只需要一个比特的替换策略信息。
虽然本发明是结合对高速缓冲存储器的存储器阵列中的存储位置的读访问进行描述的,但本发明还可用于对这种位置的写访问。另外,可以根据本文的公开,以直截了当的方式修改常规的写技术以实现本发明的用于写访问的技术。
如前面所指出的,本发明可以在能够配置用于实现组关联映射的任何多线程处理器中使用。这种处理器更具体的示例在2001年12月20日提交的美国专利申请No.60/341,289中详细描述,该申请在此被合并作为参考。
本发明的上述实施例仅仅是实施例性的,在所附权利要求范围内的大量可选实施例对本领域技术人员是显而易见的。例如,在图5中,给定的线程高速缓存目录可以分为比只分成左部分和右部分更多的部分,也就是说,可以被分成三个或更多的独立部分,并适当地增加用于选择从目录条目中清除的特定标签的线程标识符和替换策略比特。在该示例性实施例中用于实现清除条目判定的特定电路结构可以被可选的结构所替换。如上面所指明的,可以改变组的数目n。另外,可以使用其他的替换策略,诸如随机替换或FIFO替换,来代替示例性实施例的LRU替换策略。作为关于随机替换的更具体的示例,一个或更多比特的线程标识符可以被用于判定在给定的目录内,在什么地方发生特定的随机替换。