用于多线程和多核心系统的高速缓存及其方法 【技术领域】
本公开涉及用于提高处理器的性能的高速缓存,更具体地说,涉及用于多线程和/或多核心系统以提高处理器的高速缓存的性能的高速缓存。
【发明内容】
本申请的一个方面涉及一种用于处理器的高速缓存,所述高速缓存包括:
多个指令队列,用于处理至少一个无序指令返回;
数据随机存取存储器(RAM),其能够存储多个数据;
标签RAM,其能够存储所述数据RAM中所存储的所述多个数据的存储器地址和数据;
未完成RAM,其能够
为转发到下一级存储器子系统的所有未完成的请求保存信息;
在所述请求已被完成之后清除与所服务的请求相关联的信息;
确定随后的请求是否与提供给已经处于到所述下一级存储器子系统的未完成状态的一个或多个请求的地址相匹配;
将由所述下一级存储器子系统服务的所完成的请求匹配到至少一个请求者,其中所述请求者在原始请求处于到所述下一级存储器子系统的未完成状态时发出请求;以及
存储每个请求特有的信息,所述信息包括组属性和路属性,所述组和路属性用于识别一旦数据被返回,那么所返回的数据应当被保存在所述数据RAM中的何处,所述每个请求特有的信息还包括线程ID、指令队列位置和用于识别对所述高速缓存进行请求的请求线程中的连续流的颜色指示符,其中所述颜色指示符用于允许所述请求线程确定所述数据是有效的还是过期的;以及
仲裁器,用于调度命中和未命中数据返回。
本申请的另一个方面涉及一种多核心和多线程系统,所述系统包括:
多个核心;以及
连接到所述多个核心的高速缓存,所述高速缓存包括:
多个指令队列,用于处理至少一个无序指令返回;
数据随机存取存储器(RAM),其能够存储多个数据;
标签RAM,其能够存储所述数据RAM中所存储的所述多个数据的存储器地址和数据;
未完成RAM,其能够
为转发到下一级存储器子系统的所有未完成的请求保存信息;
在所述请求已被完成之后清除与所服务的请求相关联的信息;
确定随后的请求是否与提供给已经处于到所述下一级存储器子系统的未完成状态的一个或多个请求的地址相匹配;
将由所述下一级存储器子系统服务的所完成的请求匹配到至少一个请求者,其中所述请求者在原始请求处于到所述下一级存储器子系统的未完成状态时发出请求;以及
存储每个请求特有的信息,所述信息包括组属性和路属性,
所述组和路属性用于识别一旦数据被返回,那么所返回的数据应当被保存在所述数据RAM中的何处,所述每个请求特有的信息还包括线程ID、指令队列位置和用于识别对所述高速缓存进行请求的请求线程中的连续流的颜色指示符,其中所述颜色指示符用于允许所述请求线程确定所述数据是有效的还是过期的;以及
仲裁器,用于调度命中和未命中数据返回。
本申请的再一个方面涉及一种用于提高处理器的高速缓存的性能的方法,所述方法包括:
在数据随机存取存储器(RAM)中存储多个数据;
在标签RAM中存储所述数据RAM中所存储的所述多个数据的存储器地址;
为转发到下一级存储器子系统的所有未完成的请求保存信息;
在所述请求已被完成之后清除与所服务的请求相关联的信息;
确定随后的请求是否与提供给已经处于到所述下一级存储器子系统的未完成状态的一个或多个请求的地址相匹配;
将由所述下一级存储器子系统服务的所完成的请求匹配到至少一个请求者,其中所述请求者在原始请求处于到所述下一级存储器子系统的未完成状态时发出请求;
存储每个请求特有的信息,所述信息包括组属性和路属性,所述组和路属性用于识别一旦数据被返回,那么所返回的数据应当被保存在所述数据RAM中的何处,所述每个请求特有的信息还包括线程ID、指令队列位置和用于识别对所述高速缓存进行请求的请求线程中的连续流的颜色指示符,其中所述颜色指示符用于允许所述请求线程确定所述数据是有效的还是过期的;以及
调度命中和未命中数据返回。
【附图说明】
结合附图,参照以下详细地描述和权利要求,将会更好地理解本公开的优点和特征,其中用相同的符号表示相同的元件,其中:
图1是说明了根据本公开的示例性实施例的、用于提高处理器的性能的多线程和多核心的框图;
图2是说明了根据本公开的示例性实施例的高速缓存的架构的框图;以及
图3是说明了根据本发明的示例性实施例的、用于提高处理器的高速缓存的性能的方法的流程图。
【具体实施方式】
为了透彻地理解本公开,结合上述附图,参照包括所附权利要求的以下的详细的描述。尽管结合示例性实施例来描述本公开,但是本公开并不旨在被限定为本文阐述的具体形式。应当理解,等价物的省略和替换视情况而定,其旨在在不背离本公开的权利要求的精神或范围的情况下,覆盖应用或实现。此外,应当理解,本文使用的措辞和术语是为了描述的目的,不应当被认为是限定性的。
本文的术语“第一”、“第二”等不表示任何顺序、数量或重要性,而是用于将一个元素与另一个元素相区分。本文的术语“一”和“一个”不表示数量的限定,而是表示存在至少一个引用对象。
图1是说明了用于提高处理器的性能的多线程和多核心系统102的框图。系统可以包括多个核心104、106、108和110以及连接到多个核心104、106、108和110的高速缓存112。高速缓存112可以支持多个核心104、106、108和110,同时对高速缓存112的性能产生很小的影响。多个核心104、106、108和110可以同时处理多个线程,由此增强了处理器的性能。下面结合图2详细地描述高速缓存112的一个示例性架构。
图2是说明了高速缓存112的架构的框图200。高速缓存112可以包括多个指令队列202、204、206和208;数据随机存取存储器(RAM)210;标签RAM 212;未完成RAM(in‑flight RAM)214;以及仲裁器220。多个指令队列202、204、206和208可以用于捕获由核心发出的对高速缓存的请求。数据RAM 210能够存储各种形式的多个数据。仲裁器220可以指示返回到每个执行单元的命中和未命中的数据可能碰撞并需要仲裁的点,以便遵守接收单元的任何限制,例如每个时钟周期仅发送回一个响应。
在一些实施例中,每个执行单元(EU)可以用于处理无序的返回。EU可以和每个指令取请求一起提供指令队列位置,以便一旦高速缓存行(cacheline)返回便放置其。因为每个线程可以具有例如3个缓冲的高速缓存行,所以2b代码会是足够的。在图2中其被指示为IQ[1:0],用于指令队列地址[1:0]。此外,请求可以是针对高速缓存行中的奇指令(odd instruction)的,例如未对齐的跳转地址的情况。在图2中该信号被指示为“O/E”信令“奇”(odd)或“偶”(even)。
在一些实施例中,每个执行单元可以有一个指令队列。本文描述的高速缓存架构可以在发出时间丢弃队列的头部,这是因为每个发出被确保完成(即,它可以不需要重新发出),并且任何路由或元数据可以用请求携带,在队列的头部可以没有阻滞,因此不需要使队列变扁平以暴露所有条目。指令缓冲器的最大深度可以是由性能决定的,仅受执行单元的指令FIFO中的目的地的总数的限制。例如,其可以被限制为12(即,4线程/EU×3高速缓存行深度/指令缓冲器(inst‑buffer))。
标签RAM 212可以用于存储在数据RAM 210中存储的多个数据的存储器地址。标签RAM 212可以识别来自存储器的数据,所述数据目前存储在数据RAM 210中。在标签RAM 212中存储的存储器地址可以确定高速缓存查找结果是命中还是未命中。标签RAM 212的大小可以与数据RAM112的容量和结构成比例。
在一些实施例中,标签可以花费多于一个时钟来比较并更新。例如,可以使用3个时钟。因此,可能存在以下情况,即,对于给定的发出来说,命中一标签,其可能由于之前的未命中而改变,但是还没有被写入标签RAM 212。在最近3个时钟期间内发出的组地址的副本可以被存储(例如,位于图2中仲裁器的右侧的寄存器中)并且与每个队列的头部进行比较。这可能需要多个平行的比较器,在图2中显示为标签未完成(tag in‑flight)逻辑240。如果在队列的头部与最近3个时钟内发出的组中的仅仅一个之间存在匹配,那么会阻止队列仲裁。
高速缓存命中可以被转发到命中FIFO 242,其深度可以是由性能/成本决定的。由于有限的深度,FIFO有时会填满。命中FIFO跟踪电路跟踪FIFO242的当前深度,其可以由一些组合逻辑以及加法器或其它电路组成。每次发出发生时,命中/未命中结果未知,并且加法器可以采取旧的路径并假定命中。所以,将1加到其当前的值上。如果之后确定结果是未命中,那么加法器可以减1。加法器还可以对从FIFO移除并转发到高速缓存RAM的每个条目减1。由于转发和误预测命中会在相同的时钟内发生,所以可以支持减2的功能。从命中路径返回的高速缓存行可以针对单个线程。可以存在少量的逻辑以仅仅启用适当的线程,来将16个信道IQ O/E信令合成到旁路MUX。
高速缓存未命中可以转发到未命中逻辑244。该电路可以为每个高速缓存行保持等待该行填充的EU指令队列位置。该信息可以保存在未完成RAM 214中(例如,128个条目,每个高速缓存行一个)。RAM的宽度可以改变。对于每个未命中,可以向未完成RAM 214查询组/路。如果对于该行没有未完成的请求,那么未命中可以被转发到未命中队列,并且可以更新RAM中的线程的位置以显示等待行填充的线程。如果查询表明一个或多个可以已经处于未完成状态,那么可以挤进未命中并且更新线程的位置。未命中数据可以经由填充逻辑返回,所述填充逻辑可以看到来自L2的所有高速缓存行返回。对于每个返回,可以对在未完成RAM 214中的关联组执行查找,指出等待该数据的高速缓存行的填充的所有请求EU。高速缓存行数据和向EU指示所有挂起的填充的控制以及指令队列位置可以被发送到指令总线。旁路mux仲裁器可以结合命中和未命中填充并且驱动指令总线。它可以越过命中返回服务未命中返回。在一些实施例中,未命中返回可以引起命中队列上的背压(back pressure)。
未完成RAM 214可以用于维护在任意时刻所有未完成的未命中的识别和记账信息。识别可以包括确定:哪个线程和执行单元(EU)发出了请求,对应于组和路的、将最终返回的数据置入数据RAM中的目的地位置,以及颜色指示符,其可以识别请求属于哪个来自请求线程/EU的连续流。当高速缓存开始处理请求时,可以在标签RAM 212中检查所请求的地址,并且如果没有发现匹配(即,导致未命中),那么请求可以被转发到未完成RAM 214和其支持逻辑。RAM 214和逻辑可以将新的未命中请求的地址与保存在未完成RAM 214中的、有可能匹配的、所有未完成的请求的地址的子集(通常映射到相同的高速缓存组)进行比较。如果匹配存在,那么与该地址对应的请求已由之前的未命中转发到下一级存储器子系统(即,该请求已经是未完成的),并且将新的未命中请求和其关联的识别和记账信息记录到未完成RAM 214中,并且不向下一级存储器子系统发出请求。如果没有发现匹配,表明对于该地址没有到下一级存储器子系统的未完成的请求,那么将未命中识别和记账信息记录到未完成RAM 214中,并且请求可以被转发到下一级存储器子系统。一旦下一级存储器子系统完成了由该高速缓存提供的未命中请求,那么它可以基于实现选择返回所请求的数据以及所请求的地址和/或关联的记账信息。为了发现一个或多个匹配,可以将地址/记账信息与在未完成RAM 214内容中保持的子集潜在匹配(通常映射到相同的组)进行比较。发现的匹配的集合可以指示已请求了该相同数据的EU/线程组合的列表。未完成RAM 214和其关联的逻辑可以将指令数据广播到处理器的多个核心104、106、108和110中的多个线程,从而提高了处理器的性能。此外,对于来自另一高速缓存的未命中请求返回,可以在未完成RAM214中执行查找并且可以在单个时钟内应答等待所述指令数据的所有挂起的线程。因此,高速缓存112的架构向多个线程提供了对指令数据的存取。
到每个执行单元(EU)的高速缓存112的输出接口可以对于每个EU/线程/指令队列条目/颜色排列设置返回给每个EU的单独的数据有效位,以允许将返回的数据指示为对EU执行中所提供的所有可能的目的地位置同时有效。此外,改变未完成RAM 214存储设备以存储该组属性和路属性。因此,高速缓存112的架构可以在单个时钟内向多个请求提供对多个数据的存取。此外,与通常的高速缓存实现相比,高速缓存112的整体性能提高了。
高速缓存112与EU的接口包括颜色比特,以允许EU以推测性的方式在其执行的点之前来预取指令,并且之后,当返回数据时,识别返回的数据是有效的还是过期的。为了实现这一点,“颜色比特”,即多状态变量可以用于识别与线程正在执行的当前连续指令流关联的当前的和任意的“颜色”。在一些实施例中,可以为每个EU的每个线程维护颜色。每当随着EU执行指令遇到指令请求流中的不连续时,例如,在“跳转”指令的情况下,可以改变颜色比特的值。颜色信息可以作为任何高速缓存请求的一部分发送到高速缓存。本文描述的高速缓存112可以支持处理每个线程两个颜色,尽管这可以容易地扩展到处理“n”个颜色。EU用对高速缓存的每个请求提供颜色比特,并且当请求正在被服务时高速缓存用保持的所有记账信息来维护颜色比特。在由高速缓存将数据返回给EU时,高速缓存可以返回作为原始请求的一部分所发送的颜色比特的值。这允许EU/线程将返回的颜色与本地维护的执行单元(EU)的当前的颜色进行比较。颜色匹配表明EU仍在当向高速缓存发出请求时有效的连续指令流上工作,因此返回的数据可以与正在执行的指令流相关;未匹配可以表明在请求未完成期间,EU/线程已经遇到指令流不连续,因此所返回的数据可能与执行的当前的流不相关,并且可以被丢弃。该机制允许EU/线程在每个指令流不连续处用新颜色做出推测性的指令请求,尽管可以有对于高速缓存112中的相同线程挂起的未完成的和可能过期的请求。这可以通过在数据返回的时间确定返回的数据的有效性,来提高具有引起较低命中率的大内核的高速缓存112的整体性能。
仲裁器220可以用于调度到EU的数据返回。在任意给定的时钟,来自命中或未命中或这两者的数据可以是准备好返回的。在一些实施例中,仲裁算法可以用于确定关于哪个数据返回到服务的规则。
图3是说明了用于提高处理器的性能的方法的流程图。该方法可以包括将多个数据存储在数据随机存取存储器(RAM)中(302)。该方法还可以包括为转发到下一级存储器子系统的所有未完成的请求保存信息(304)。该方法还可以包括在已经完成所述请求之后清除与所服务的请求相关联的信息(306)。方法还可以包括确定随后的请求是否与提供给已经处于到下一级存储器子系统的未完成状态的一个或多个请求的地址相匹配(308)。方法还可以包括将由下一级存储器子系统服务的所完成的请求匹配到至少一个请求者,所述请求者在原始请求处于到下一级存储器子系统的未完成状态时发出请求(310)。方法可以还包括存储每个请求特有的信息,所述信息包括组属性和路属性,所述组和路属性用于识别一旦数据被返回,返回的数据应当被保存在数据RAM中的哪里,每个请求特有的信息还包括线程ID和颜色(312)。方法可以还包括调度命中和未命中数据返回(314)。
为了说明和描述的目的,示出了本公开的具体的实施例的上述描述。其并不旨在穷举或限制本公开为所公开的精确的形式,根据上述教导,可以进行多个变型和改变。为了最佳地解释本公开的原理和其实际应用,选择并描述了实施例,由此使得本领域的其它技术人员能够最佳地使用本公开和适于特定应用的具有各种变形的各种实施例。应当理解,等价物的省略和替换视情况而定,其旨在在不背离本公开的权利要求的精神或范围的情况下,覆盖应用或实现。