用于在一个多线程处理器内在多个线程之间划分资源的方法和装置的制作方法

文档序号:6468760阅读:255来源:国知局
专利名称:用于在一个多线程处理器内在多个线程之间划分资源的方法和装置的制作方法
技术领域
本发明通常涉及多线程处理器领域,更具体地说,涉及一种用于在一个多线程处理器内划分一个处理器资源的方法和装置。
发明
背景技术
多线程处理器设计近来已经被认为是一个越来越吸引人的、用于增加处理器性能的选择。在一个处理器内的多线程,特别提供了用于更有效地使用各种处理器资源、和尤其用于更有效地使用在一个处理器内的执行逻辑的可能性。具体地说,通过传送多个线程到一个处理器的执行逻辑,否则将由于在一个特定线程的处理过程中的停止或者其它延迟而成为空闲的时钟周期可以被利用以服务于另一个线程。在一个特定线程处理过程中的停止可以由在一个处理器流水线内的许多事件引起。例如,对于一条包含在一个线程内的指令的一个高速缓存未中或者一个转移预测错误(即,一个长的延迟操作)通常会导致相关线程处理过程停止。长延迟操作在执行逻辑效率上的副作用由近来在执行逻辑吞吐量中的增加而加重,其中该增加在存储器访问和检索速率中具有超前的提高。
鉴于由许多流行的操作系统、诸如Windows NT和UNIX操作系统对这种多线程计算机应用的支持,多线程计算机应用也变得越来越普遍。多线程计算机应用在多媒体领域是尤其有效的。
依据在相关处理器内使用的线程交叉或切换方案,多线程处理器大致可以被分为两类(即,精细或者粗略设计)。精细多线程设计在一个处理器内支持多个有效线程,而且通常在一个周期接一个周期的基础上交叉两个不同的线程。粗略多线程设计通常在发生某些长延迟事件、诸如一个高速缓存未中时交叉不同线程中的指令。一个粗略多线程设计在1996年5月、The 23rd Annual InternationalSymposium on Computer Architecture的203-212页上、由Eickemayer,R.;Johnson,R.;等人所著的“Evaluation ofMultithreaded Uniprocessors for Commercial ApplicationEnvironments”中进行了论述。在Massachusetts(麻萨诸塞州)Norwell的Kluwer Academic出版社于1994年出版的、由R.A.Iannuci等人编辑的Multithreaded Computer ArchitecturesASummary of the State of the Art的167-200页上,由Laudon,J;Gupta,A所著的“Architectural and Implementation Tradeoffsin the Design of Multiple-Context Processors”中进一步论述了在精细和粗略设计之间的区别。Laudon进一步提出了一种把一个精细设计的周期接周期的切换和一个粗略设计的完全流水线互锁(或者分块方案)组合在一起的交叉方案。为此,Laudon提出了一条让一个特定线程(或者环境)不可用于一个特定周期数的“补偿”指令。可以在发生预定事件、诸如一个高速缓存未中时发布这样一条“补偿”指令。这样,Laudon通过简单地使一个线程不可用而避免了执行一个实际的线程切换。
在一个多线程处理器内实现资源共享的地方(即,有有限的或者非重复的功能单元用于由该处理器支持的每个线程),在这些线程之间有效地共享资源是所希望的。
附图简要说明本发明通过示例进行了说明且不局限于附图中的图表,其中类似的标记指示类似的单元,附图包含

图1是一个框图,说明了一个在其中可以实现本发明的处理器中的一个示范性流水线。
图2是一个框图,以一个通用多线程微处理器的形式说明了一个可以在其中实现本发明的处理器的示范性实施例。
图3是一个说明了一个示范性多线程微处理器的选定组件的框图,并且具体地描述了各个提供一个缓存(或者存储)能力的功能单元,作为在逻辑上划分以容纳多个线程。
图4是一个框图,其显示了有关一个示范性轨迹传送引擎(TDE)的各个组分的更多细节。
图5是一个说明了一个示范性轨迹高速缓存填充缓存的进一步结构细节的框图。
图6是一个说明了一个示范性轨迹高速缓存(TC)的进一步结构细节的框图。
图7是一个说明了一个示范性轨迹高速缓存(TC)的进一步构造细节的框图。
图8是一个说明了示范性线程选择逻辑的各个输入输出的框图。
图9是一个框图,其以一个线程选择状态机、以及用于一个第二线程的一个计数器和比较器的形式说明了示范性线程选择逻辑的三个示范性组件。
图10是一个说明了一个示范性线程选择状态机的示范性操作的状态图。
图11是一个说明了牺牲选择逻辑的一个示范性实施例结构细节的框图。
图12是一个流程图,说明了在一个多线程处理器内、划分诸如例如一个轨迹高速缓存的一个存储器资源的一种示范性方法。
图13是一个流程图,其利用与相关存储器资源有关的一个最近最少使用(LRU)历史记录,以一个存储器资源的示范性形式说明了划分一个资源的一种示范性方法。
图14是一个说明了一个示范性LRU历史记录数据结构的框图。
图15是一个框图,说明了与到示范性牺牲选择逻辑的输入以及从示范性牺牲选择逻辑的输出有关的更多细节。
详细说明描述了一种用于在一个多线程处理器内划分一个处理器资源的方法和装置。在下面的描述中,为了说明起见,阐述了许多具体的细节以便提供对本发明的一个彻底了解。然而,对于本领域技术人员来说,显然没有这些具体细节也可以实践本发明。
为了本说明书起见,术语“事件”应当被用作包含对一个处理器内部或者外部的任何事件,其导致对在一个处理器内的一个指令流(宏或者微指令)服务的变化或者中断。据此,术语“事件”应当被用作包含但不局限于可以在该处理器内或者外部产生的转移指令、例外和中断。
为了本说明书起见,术语“处理器”应当被用作涉及任何能够执行一个指令(例如,宏或者微指令)序列的机器,而且应当被用作以包含但不局限于通用微处理器、专用微处理器、图形控制器、音频控制器、多媒体控制器以及微型控制器。此外,术语“处理器”应当被用作特别地涉及复杂指令集计算机(CISC)、简化指令集计算机(RISC)、或者超长指令字(VLIW)处理器。
为了本说明书起见,术语“资源”应当被用作包含一个处理器的任何单元、组件或者模块,而且应当被用作包含但不局限于一个存储器资源、一个处理资源、一个缓存资源、一个通信资源或者总线、一个定序资源或者一个转换资源。
处理器流水线图1是一个高级框图,说明了一个在其中可以实现本发明的处理器流水线10的一个示范性实施例。流水线10包含多个流水线阶段,从一个检索指令(例如,宏指令)并且把指令送入该流水线10的取指令流水线阶段12开始。例如,一条宏指令可以从与该处理器集成或者与该处理器紧密相关的一个高速缓冲存储器中检索得到,或者可以经由一条处理器总线从一个外部主存储器中检索得到。宏指令从该取指令阶段12传送到一个解码流水线阶段14,在该阶段宏指令被转换为适于在该处理器内执行的微指令(也称为“微码”)。然后该微指令向下传送到一个分配流水线阶段16,在那儿依据可用性和需要把处理器资源分配给各个微指令。然后该微指令在被退出之前在一个执行阶段18处执行,或者在一个退出流水线阶段20处“写回”(例如,确认到一个体系结构状态)。
微处理器体系结构图2是一个框图,以一个通用微处理器的形式说明了一个可以在其中实现本发明的处理器30的一个示范性实施例。如下描述的处理器30是一个多线程(MT)处理器,而且因此能够同时处理多个指令线程(或者环境)。然而,在该说明书中下面提供的许多示教不专门针对一个多线程处理器,并且可以在一个单线程处理器中找到应用。在一个示范性实施例中,处理器30可以包含一个能够执行Intel体系结构指令集的Intel体系结构(IA)微处理器。这样一个Intel体系结构微处理器的一个示例是由California,SantaClara的Intel公司制造的Pentium Pro微处理器或者PentiumIII微处理器。
处理器30包含一个有序前端和一个无序后端。该有序前端包含一个总线接口单元32,其起到在处理器30和一个在其中可以使用处理器30的计算机系统中的其他组件(例如,主存储器)之间的管道作用。为此,该总线接口单元32把处理器30连接到一条处理器总线(没有显示),经由该处理器总线可以在处理器30处接收数据和控制信息以及从处理器30传送数据和控制信息。总线接口单元32包含控制经由该处理器总线的通信的前侧总线(FSB)逻辑34。总线接口单元32进一步包含一个总线队列36,其对于通过该处理器总线的通信提供一个缓冲作用。总线接口单元32被显示为从一个存储器执行单元42中接收总线请求38,以及发送探听或者总线返回40到该存储器执行单元42,该存储器执行单元42在处理器30内提供一个局部存储器能力。该存储器执行单元42包含一个统一的数据与指令高速缓存44、一个数据转换后备缓冲区(TLB)46、以及存储器排序缓存48。存储器执行单元42从一个微指令转换引擎54中接收取指令请求50,并且传送原始指令52(即,编码的宏指令)到该微指令转换引擎54。该微指令转换引擎54把接收到的宏指令转换成为一组相应微指令。
如果发生一个轨迹高速缓存未中时,该微指令转换引擎54进行操作以传送微指令到一个轨迹高速缓存62,该微指令转换引擎54事实上操作作为一个轨迹高速缓存“未中处理器”。为此,如果发生一个轨迹高速缓存未中时,微指令转换引擎54起到提供取指令和解码流水线阶段12和14的作用。显示的微指令转换引擎54包含一个下一指令指针(NIP)100、一个指令转换后备缓冲器(TLB)102、一个转移预测器104、一个指令流缓存106、一个指令预解码器108、指令控制逻辑110、一个指令解码器112、和一个转移地址计算器114。下一指令指针100、TLB 102、转移预测器104以及指令流缓存106一起构成一个转移预测单元(BPU)99。该指令解码器112和转移地址计算器114一起组成一个指令转换(IX)单元113。
下一指令指针100发布下一指令请求到统一的高速缓存44。在其中处理器30包含一个能够处理两个线程的多线程微处理器的示范性实施例中,下一指令指针100可以包含一个多路复用器(MUX)(没有显示),其在与第一个或者第二个线程相关联的指令指针之间进行选择,用于包含在由此发布的下一指令请求内。在一个实施例中,假定用于两个线程的指令都已经被请求了,而且用于两个线程的指令流缓存106资源都还没有用尽的话,则该下一指令指针100将在一个周期接着一个周期(“往复转换”)的基础上,交叉用于第一和第二线程的下一指令请求。取决于初始请求地址是否是在一个32字节或者64字节定位行的上半部,下一指令指针请求可以用于16、32或者64字节。下一指令指针100可以由转移预测器104、转移地址计算器114或者由轨迹高速缓存62重定向,其中的一个轨迹高速缓存未中请求是最高优先级的重定向请求。
当下一指令指针100做出一个到统一高速缓存44的指令请求时,它产生一个两位的“请求标识符”,该标识符与该指令请求相关联并且起一个用于相关指令请求的“标记”作用。当响应于一个指令请求返回数据时,该统一的高速缓存44和数据一起返回下列标记或者标识符1.由下一指令指针100提供的“请求标识符”;2.一个标识了返回块的三位“块标识符”;以及3.一个标识了返回数据所属线程的“线程标识符”。
下一指令请求从下一指令指针100传送到指令TLB 102,该TLB102执行一个地址查找操作,并且传送一个物理地址到统一的高速缓存44。统一的高速缓存44传送一条相应的宏指令到指令流缓存106。每一个下一指令请求也从下一指令指针100直接传送到该指令流缓存106,以便允许该指令流缓存106标识从该统一高速缓存44接收到的一个宏指令属于哪个线程。来自第一和第二线程的宏指令然后从该指令流缓存106发布到指令预解码器108,指令预解码器108对于一个接收的指令流(宏指令)执行多个长度计算和字节标记操作。具体地说,该指令预解码器108产生一系列字节标记向量,其特别地起到把在该指令流内、要传送到指令控制逻辑110的宏指令划分开的作用。
然后为了解码目的,指令控制逻辑110利用字节标记向量来引导离散的宏指令到指令解码器112中。为了转移地址计算的目的,宏指令也从该指令控制逻辑110传送到转移地址计算器114。然后把微指令从该指令解码器112传送到轨迹传送引擎60。
在解码期间,流标记与每个微指令相关联。一个流标记指示相关微指令的一个特征,而且可以,例如,指示相关的微指令是在表示一个宏指令的一个微码序列中的第一条或者最后一条微指令。流标记包含一个“宏指令开始”(BOM)和一个“宏指令末端”(EOM)流标记。根据本发明,解码器112可以进一步解码该微指令以具有与此相关的共享资源(多处理器)(SHRMP)流标记和同步(SYNC)流标记。具体地说,一个共享资源流标记把一条微指令标识为在一个特定线程内的一个位置,和在该线程中的别处相比,在该位置处可以中断该线程(例如,重新启动或者暂停)具有较少的负后果。在本发明的一个示范性实施例中,解码器112被构造为用一个共享资源流标记标记包含一条源宏指令结尾或者开始的微指令。一个同步流标记把一个微指令标识为在一个特定线程内的一个位置,在该位置处,响应于例如在另一个线程内的一条同步指令,该线程可以与另一个线程同步。
被解码了的指令(即,微指令)从微指令转换引擎54发送到一个轨迹传送引擎60。该轨迹传送引擎60包含轨迹高速缓存62、一个轨迹转移预测器(BTB)64、一个微码定序器66和一个微码(uop)队列68。轨迹传送引擎60起一个微指令高速缓存的作用,并且是用于一个下游执行单元70的主要微指令来源。通过在该处理器流水线内提供一个微指令高速缓存功能,该轨迹传送引擎60,具体来说该轨迹高速缓存62,允许由起杠杆作用的该微指令转换引擎54执行的转换工作以提供一个增加了的微指令带宽。在一个示范性实施例中,该轨迹高速缓存62可以包含一个256组、8路组的相关存储器。在当前示范性实施例中,术语“轨迹”可以涉及存储在该轨迹高速缓存62的入口内的一序列微指令,每一个入口包含指向包含该轨迹的、在前面和正在进行的微指令的指针。以这种方式,因为在当前访问完成之前,为了获得一个后续微指令而接下来要被访问的入口的地址是已知的,所以该轨迹高速缓存62便于高性能的定序。轨迹可以被视作通过轨迹头而彼此区别的指令“块”,并且当遇到一个间接转移或者到达多个给定阈值条件中的一个时被终止,这些阈值条件诸如在单个轨迹中可以被容纳的条件转移数目或者可以组成一个轨迹的最大微指令总数。轨迹高速缓存转移预测单元64提供了与在该轨迹高速缓存62内的轨迹有关的本地转移预测。轨迹高速缓存62和微码定序器66提供微指令到微码队列68,然后微指令从该微码队列68被送到一个无序执行群集。此外,微码定序器66包含多个以微码形式体现的事件处理器,这些事件处理器67响应于一个诸如例外或者中断的事件的发生而在处理器30内实现多个操作。事件处理器67由包含在处理器30后端的一个寄存器重命名器74内的一个事件检测器(没有显示)调用。
处理器30可以被看作具有一个包含总线接口单元32、存储器执行单元42、微指令转换引擎54和轨迹传送引擎60的有序前端以及将在下面被详细描述的一个无序后端。
从微码队列68发送的微指令被接收到这个无序群集71中,该无序群集71包含一个调度器72、寄存器重命名器74、一个分配器76、一个重新排序缓存78以及一个重放队列80。该调度器72包含一组预留位置,并且操作来调度和发送用于由该执行单元70执行的微指令。寄存器重命名器74对于隐藏的整数和浮点寄存器执行一个寄存器重命名功能(在一个处理器30执行Intel体系结构指令集的地方,可以被使用来代替任意八个通用寄存器或者任意八个浮点寄存器)。分配器76依据可用性和需要进行操作以把执行单元70和群集71的资源分配给微指令。如果没有足够的资源可以用来处理一条微指令的话,分配器76负责声明一个停止信号82,该信号通过轨迹传送引擎60传送到微指令转换引擎54,如在58处所示那样。已经让它们的源字段由寄存器重命名器74调整的微指令以严格的程序次序被放置到重新排序缓存78中。当在重新排序缓存78内的微指令已经完成执行并且准备用于退出时,然后把它们从重新排序缓存162中去掉。重放队列80传送要被重放的微指令到执行单元70。
显示的执行单元70包含一个浮点执行引擎84、一个整数执行引擎86、和一个0级数据高速缓存88。在其中处理器30执行Intel体系结构指令集的一个示范性实施例中,浮点执行引擎84可以进一步执行MMX指令。
多线程实现在图2中说明的处理器30的示范性实施例中,可以有有限的资源重复或者复制来支持一个多线程性能,并且因此必须在线程之间实现某种程度的资源共享。将要理解,使用的资源共享方案取决于该处理器能够同时处理的线程数目。因为在一个处理器内的功能单元通常提供某些缓存(或者存储)功能和传送功能,所以资源共享的发布可以被看作包含(1)存储和(2)处理/传送带宽共享组件。例如,在一个支持同时处理两个线程的处理器中,在各个功能单元内的缓存资源可以被静态地或者逻辑上在两个线程之间进行划分。类似地,由一个路径提供的、用于在两个功能单元之间传送信息的带宽必须在两个线程之间进行划分和分配。因为可以在一个处理器流水线内的多个位置处产生这些资源共享问题,根据该特定位置的指令和特征,在这些不同位置处可以使用不同的资源共享方案。将要理解鉴于变化的功能和操作特性,不同的资源共享方案可能适于不同的位置。
图3是一个框图,说明了在图2中说明的处理器30中的选定组件,并且描述了提供一个缓存性能的各个功能单元,该缓存性能逻辑上被划分以容纳两个线程(即线程0和线程1)。通过分配在一个缓存资源内的一个第一预定组入口到一个第一线程以及分配在该缓存资源内的一个第二预定组入口到一个第二线程,可以实现用于一个功能单元缓存(或者存储)和处理设备中的两个线程的逻辑划分。具体来说,这可以通过提供两对读和写指针来实现,其中第一对读和写指针与一个第一线程相关联,而第二对读和写指针与一个第二线程相关联。第一组读和写指针可以被限制在一个缓存资源内的一个第一预定数目入口,而第二组读和写指针可以被限制在在同一个缓存资源内的一个第二预定数目入口。在示范性实施例中,显示指令流缓存106、轨迹高速缓存62、和一个指令队列103对每一个都提供了一个在第一和第二线程之间进行逻辑划分的存储容量。这些单元中的每一个还被显示为包含一个“共享”的容量,依据相应的实施例,它可以依据某些条件被动态地分配给第一个或者第二个线程。
轨迹传送引擎作为在一个轨迹传送引擎60内的实现,以及具体地相对于一个轨迹高速缓存62,在下面描述本发明的一个实施例。然而,将要理解本发明可以应用于划分在一个处理器内或者与一个处理器有关的任何资源,而且该轨迹传送引擎60仅仅被提供作为一个示范性实施例。
如说明提到的那样,通过提供相对小的延迟以及高的带宽,在高性能周期期间轨迹传送引擎60可以起到一个微指令主来源的作用。具体地说,对于诸如Intel体系结构x86指令集的一个CISC指令集而言,因为这种指令的可变长度使并行解码操作变得复杂,所以解码宏指令以传送微指令可以引入一个性能瓶颈。通过提供微指令的高速缓存,轨迹传送引擎60试图在某种程度上解决这个问题,因此排除了由执行单元17执行的微指令被连续解码的需要。
为了提供高速缓存微指令的高性能定序,轨迹传送引擎60创建可以方便地被标记为“轨迹”的入口(或者微指令)序列。因为在一个当前存取操作期间,以及在一个当前存取操作完成之前,一个后续入口的地址能够是已知的,所以在一个实施例中,一个轨迹可以便于定序。在一个实施例中,一个微指令轨迹仅仅可以经由一个所谓的“头部”入口进入,该“头部”入口包含一个确定该保存在连续组中的轨迹事件的一组后续入口的线性地址,每个入口(除一个尾部入口之外)包含一个指向下一入口的路线指针。类似地,每个入口(除一个头部入口之外)包含一个指向前一入口的路线指针。
在一个实施例中,该轨迹传送引擎60可以实现两种模式以提供到该处的输入或者从其中的输出。当相对于一个轨迹高速缓存62发生一个未中时,轨迹传送引擎60可以实现一种“构造模式”,这样的一个未中被传递到微指令转换引擎54上。在该“构造模式”中,该微指令转换引擎54然后将在从统一的高速缓存44接收的、或者通过经由该处理器总线执行一个存储器访问操作接收的宏指令上执行一个转换操作。微指令转换引擎54然后提供从宏指令(多条)导出的微指令到轨迹传送引擎60,该轨迹传送引擎60用这些微指令填充轨迹高速缓存62。
当发生一个轨迹高速缓存命中时,轨迹传送引擎60以一种“流模式”操作,其中一个或者多个微指令轨迹经由微指令队列68从轨迹传送引擎60、具体地说从轨迹高速缓存62传送到处理器后端。
图4是一个框图,显示了有关在图2中所示的轨迹传送引擎(TDE)60的各个组件的更多细节。形成微指令转换引擎54一部分的下一指令指针100,被显示为从轨迹转移预测单元64接收一个预测输出65。下一指令指针100提供一个可以相应于预测输出65的指令指针输出67到轨迹高速缓存62。
一个轨迹转移地址计算器(TBAC)120监控微序列器微指令队列68的输出,并且执行多个功能以提供输出到一个轨迹转移信息表格122。具体地说,该轨迹转移地址计算器120负责伪转移检测、转移目标以及转移预测操作的验证、用于为每条指令计算下一线性指令指针(NILIP)、以及用于为每条指令检测限制违背。
轨迹转移信息表格(TBIT)122存储为更新该轨迹转移预测单元64所要求的信息。该表格122还保持用于事件的信息,而且在一个实施例中,该表格被硬划分以支持多线程。当然,在一个替换实施例中,表格122可以被动态地划分。
轨迹转移信息表格122提供输入到一个轨迹转移目标缓存(轨迹BTB)124,该缓存124操作以预测“脱离轨迹”条件和“轨迹末端”转移。为此,该缓存124可以操作以使微指令无效。
当以上述提及的“构造模式”操作时,微指令经由一个轨迹高速缓存填充缓存(TCFB)125接收到轨迹高速缓存62中,在图4中显示的TCFB 125提供到轨迹高速缓存62的输入。
图5是一个说明了轨迹高速缓存填充缓存125的进一步结构细节的框图。在缓存125的一个实施例中,包含第一和第二缓存134和136,每个专用于一个特定的线程(例如,线程0和线程1)。缓存134和136中每一个都提供了用于一个相关线程的四(4)个入口,并且输出微指令到一个分段缓存138,微指令从该分段缓存138传递到轨迹高速缓存62。轨迹高速缓存填充缓存125以硬件的形式实现了一种实现该“构造模式”的构造算法,并且提供微指令定位、以及“行尾”和“轨迹末端”条件的检测。
在图4中显示的轨迹高速缓存62包含一个数据数组128以及一个相关的标记数组126。在一个实施例中,数据数组128提供一个用于12KB微指令的存储器。
图6是一个说明了与轨迹高速缓存62有关的进一步结构细节的框图。线程选择逻辑140实现一个线程选择状态机,其在一个实施例中,在一个周期接着一个周期的基础上,确定多个线程(例如,线程0或者线程1)中的哪一个被传送到一个处理器30的后续流水线阶段。
图6还说明了把轨迹高速缓存62分区成为三个部分(或者区域),即专用于第一线程的第一部分148、专用于第二线程的第二部分152、以及在第一和第二线程之间被动态地共享的第三部分150。在该示范性实施例中,第一和第二部分148和152中每一个都包含轨迹高速缓存62的两(2)路数据数组128(以及相关的标记数组126)。第三、即共享部分150构成四(4)路数据数组128、以及相关的标记数组126。通过将在下面进一步详细描述的牺牲选择逻辑154,实现了轨迹高速缓存62的说明分区。
图7是一个框图,其依据一个实施例说明了轨迹高速缓存62的一个示范性结构。显示的标记数组126和数据数组128中每一个都包含一个八路、组结合的方案,其包含256个组,因此在每一标记和数据数组126和128内提供了总共2048个入口。显示的在标记数组126内的每个入口148都特别地为在数据128内的每个相应入口156存储标记字段信息151、一个线程位153、一个有效位155以及一个最近最少使用(LRU)位240。线程位153标记在该相关入口156内的数据为属于例如第一或者第二线程。有效位155标记在数据数组128中的相应入口156内的数据为有效或者无效。
如在图7中说明的那样,轨迹高速缓存62的一个实施例还可以进一步包含一个小型标记数组127,这是完全标记数组126的一个子集,其被用于执行高速标记匹配操作,以及用于减小与相对于轨迹高速缓存62执行一个查找相关的能量消耗。在该小型数组127上的一次命中可以被认为是“互斥的”,如将在下面进一步详细描述的那样。
线程选择逻辑首先处理线程选择逻辑140,其特别地确定轨迹高速缓存62的输出,图8是一个说明了线程选择逻辑140的各个输入和输出的框图。显示的线程选择逻辑140从(1)一个位于微指令转换引擎接口中的轨迹高速缓存构造引擎139、(2)微指令队列68以及(3)轨迹高速缓存/微定序器控制逻辑137中获取输入。利用这些输入,线程选择逻辑140试图为一个特定的周期产生一个有利的线程选择(例如,线程0或者线程1)。在一个实施例中,在一个周期接一个周期的基础上执行线程选择并且试图最优化性能同时没有使任何一个线程的处理器资源缺乏。
显示的线程选择逻辑140的输出被传递到微码定序器66、轨迹转移预测单元60以及轨迹高速缓存62,以影响在这些单元中的每一个内的线程选择。
图9是一个说明了线程选择逻辑140的三个组件的框图,这三个组件即一个线程选择状态机160、一个用于第一线程(例如,线程0)的计数器和比较器162以及一个用于第二线程(例如,线程1)的进一步的计数器和比较器164。
显示的线程选择状态机160接收构造和模式信号161,以指示该处理器是以一种多线程(MT)还是单线程(ST)模式进行操作,而且如果以一种多线程模式进行操作的话,则指示每个线程是否是在一种构造模式中。显示的线程选择状态机160还从计数器和比较器单元162和164接收相应的完全输入172和174。该完全信号172和174指示用于一个特定线程的一个微指令阈值数量是否在该轨迹传送引擎160范围之内。在一个实施例中,单元162和164的每一个都允许在轨迹传送引擎60内的总共4×6个微指令行。响应于哪一个这样的单元负责循环它们的状态,完全信号172和174被路由到在轨迹传送引擎160内的所有单元。显示的每一个计数器比较器单元162和164从微码定序器66接收一个队列重新分配信号166,从轨迹高速缓存标记数组126接收一个清除、毁灭(nuke)、重置和存储信号集合168以及有效位170。
图10是一个状态图,说明了在图9中说明的线程选择状态机160的操作。当在多线程模式中时,该状态机试图在一个周期接一个周期的基础上时间-多路复用多个线程。当一个线程遭遇一个相对长的停止时,该状态机160试图提供全部带宽给没有被停止的线程。当多个线程(例如,线程0和线程1)经历长的延迟停止时,在某些环境中,状态机160可以要求一个一周期的磁泡(例如,如果两个线程都被停止了、而且状态机160处于“线程0”状态中以及一个“线程1”停止被删除了的话)。
回过来参考图6,会注意到从线程选择逻辑140输出的选择信号141本身不被认为是一个“有效位”,但是相反被用作到MUX 142的一个2-1 MUX选择控制。MUX 142进行操作以在从第一线程控制144和第二线程控制146输出的控制信号之间进行选择。控制144和146的输出取决于为相关的线程设置的有效位。例如,选择信号141可以指示用于一个特定线程(例如,线程0)的一个线程入口要从该轨迹高速缓存62中输出。然而,用于相关的入口的有效位可以被设置为0,以指示一个无效的入口。
牺牲选择逻辑如在图6中说明的那样,在一个实施例中,轨迹高速缓存62的分区可以由牺牲选择逻辑154实现。牺牲选择逻辑154负责标识一条微指令(在标记数组126和数据数组128中)被写入的路线。
图11是一个说明了牺牲选择逻辑154的一个实施例结构细节的框图。显示的牺牲选择逻辑154包含小型标记牺牲选择逻辑180、有效牺牲选择逻辑182和最近最少使用(LRU)牺牲选择逻辑184。通过一个优先级MUX 186在选择逻辑180、182和184的输出上执行一个优先级多路复用操作。由该优先级MUX 186实现的优先次序如下所示1.小型标记牺牲;2.有效牺牲;以及3.LRU牺牲。
一个多线程锁存器结构190用来把该优先级MUX的结果传递到轨迹高速缓存62。
图12是一个流程图,其依据一个实施例说明了在一个多线程处理器内、划分诸如例如轨迹高速缓存的一个存储器资源的一种示范性方法200。将参考在图12中显示的流程图描述在图11中说明的牺牲选择逻辑154的各个单元的操作。
方法200在块202处开始,在那儿小型标记牺牲选择逻辑180相对于该小型标记数组127执行一个小型标记牺牲确定。具体地说,逻辑180试图标识在一个现有有效小型标记数组入口和一个当前指令指针(例如,当前线性指令指针(CLIP))之间的一个冲突。
在判定框204处,进行关于在块202处是否定位了一个小型标记牺牲的判定。如果是这样的话,则方法200前进到块212,在那儿相关的轨迹高速缓存数据(例如,一条微指令)被写入到在该轨迹高速缓存62内所标识的牺牲入口中。因为一个小型标记命中被认为是“互斥的”,所以一个标识的小型标记牺牲由牺牲选择逻辑154给定最高的优先级。
继在判定框204处的一个否定判定之后,在块206处,由有效牺牲选择逻辑182执行一个有效牺牲判定操作。这个操作涉及通过检查存储在轨迹高速缓存62的标记数组126内的有效位155,简单地标识在轨迹高速缓存62内的一个无效入口。继在判定框208处的一个肯定判定之后,该方法200前进到块212。另一方面,继在判定框208处的一个否定判定(即,没有标识无效入口)之后,方法200继续到方框210,在那儿执行一个LRU牺牲判定操作。继在块210处的操作完成之后,该方法200再次前进到块212。方法200然后在步骤214处结束。
图13是一个流程图,其依据一个实施例,利用与相关存储器资源有关的一个LRU历史记录,以一个存储器资源的示范性形式说明了划分一个资源的一种示范性方法210。
图14是一个框图,说明了可以在方法210的执行中利用的一个示范性LRU历史记录240,将参考图10描述方法210的执行。
方法210在块222处开始,用于在牺牲选择逻辑154处接收一条微指令,以及相关的标记信息。
在块224处,标识微指令可能可以写入的一个组(例如,通过一个写入指针)。
在块226处,已经标识了一个牺牲组,该LRU牺牲选择逻辑184为相关的组检查LRU历史记录。图14说明了如在轨迹高速缓存184的标记数组126内保持的那样的LRU历史记录240,其中该LRU历史记录240为在数据数组128内的每个组包含一个LRU历史记录。
在判定框228处,LRU牺牲选择逻辑184确定指示在该组内的一个特定路线的尾部入口对于一个相关的线程(例如,线程0或者线程1)是否可用。如上所述,在一个示范性实施例中,路0和1仅仅可以用于一个第一线程(例如,线程0),路6和7可以仅仅用于一个第二线程(例如,线程1)而且路2-5可以动态地被多个线程共享。参考用于一组N的示范性LRU历史记录,由尾部入口指示的路6作为在相关组N中的最近最少使用路。例如,假定要被高速缓存的微指令属于一个第一线程(例如,线程0),由于路6已经仅仅专用于用于一个第二线程(例如,线程1)的微指令的存储,所以路6不会用来在第一线程中接收该微指令。
返回到图13,继在判定框228处的一个否定判定之后,LRU牺牲选择逻辑184继续为在该尾部入口后面的相关组检查在LRU历史记录252内的入口,以标识一条可以接收用于相关线程的微指令的路线。如在块230处指示的那样,LRU牺牲选择逻辑184检查尾部入口的一个预定组M(例如,三个最接近于用于该组的LRU历史记录252尾部的入口)以定位一条路线,其中该路线是相关线程可用的、最接近于该LRU历史记录尾部的路线。
在图14中提供的示例中,在用于相关组的LRU历史记录内的倒数第二个入口标识路3,其在如上所述的方案下面,将可以用来接收一条用于第一线程(例如,线程0)的微指令,这是因为路3位于轨迹高速缓存62的“共享”部分中。
图14说明了因为路3被指定用于相关微指令的存储而在相关组的LRU历史记录252内、用于路3的入口如何移动到LRU历史记录252的头部。
返回到在图13中的流程图,在块232处,标识在可以用于相关线程的相关组内的牺牲入口(即,牺牲路),而且该微指令被写入到在该组内的那个路中。然后在步骤234处结束方法220。
图15是一个框图,说明了与到牺牲选择逻辑184的输入以及从牺牲选择逻辑184的输出有关的更多细节。在一个实施例中,牺牲选择逻辑184包含实现如上所述的方法的离散逻辑组件。在一个替换实施例中,牺牲选择逻辑184可以执行代码以实现描述的方法。具体地说,显示的逻辑接收一个7位待决多线程(PENDING_MT)信号250、一个28位最近最少使用(LRU)信号252、一个第二线程状态(NT1)信号254和一个第一线程状态(MTO)信号256作为输入。信号250指示由选择逻辑184选择以接收当前线程或者另一个线程(除了当前被考虑的一个线程以外)的一条微指令的路线,如由在前一个牺牲选择操作期间的选择逻辑184所指示的那样,或者如由与该另一个线程有关的进一步牺牲选择逻辑154所确定的那样。信号250由LRU牺牲选择逻辑184使用以确保选择逻辑184不在两个线程之间“双重选择”同一条路线,或者多个LRU牺牲选择逻辑184不在两个线程之间选择同一条路线。为此,牺牲选择逻辑184实现了离散逻辑,以防止它选择与由信号250所指示的相同的路线。
因此在一个实施例中,信号250指示先前被选择作为一个牺牲品的路线,同时LRU信号252向逻辑184提供用于相关组的LRU历史记录252。状态信号254和256向逻辑184指示哪个线程在一个处理器30内是“有效的”或者正在执行。逻辑184然后输出一个用于一个相关组的7位选择信号260,指示为了在轨迹高速缓存62内的高速缓存目的,该微指令应当被写入到在一个相关组内的哪个路线中。
通过实现一个诸如轨迹高速缓存62的资源的伪动态划分,本发明保证了在一个多线程处理器内的某一个预定最小阈值的资源容量总是被保留并且可用于一个特定线程。尽管如此,通过定义一个由两个线程都能访问的“共享”部分,本发明便于依据这种线程的要求,在多个线程之间动态地重新分配一个资源的容量。
此外,上述LRU牺牲选择方法允许命中发生在分配给一个另外的线程的路线上,但是简单地不允许这样一个命中的验证,并且迫使LRU牺牲选择算法依据一个LRU历史记录,选择一个另外的、可用于一个特定线程的路线。
如上所述,用于实现上述方法中任何一个的逻辑可以被实现作为在一个功能单元内的离散逻辑,或者可以包含一个在该处理器内执行以实现该方法的指令序列(例如,代码)。将要理解,指令序列可以存储在任何介质上,可用从该介质中检索该指令序列用于执行。这些介质的示例可以是一个可移动存储介质(例如,磁盘、CD-ROM)或者与一个处理器有关,或者包含在一个处理器内的一个存储器资源(例如,随机存取存储器(RAM)、高速缓存存储器等)。因此,任何这样的介质都应当被认为是包含一种“计算机可读的”介质,并且可以被包含在一个处理器中,或者可由在一个计算机系统内使用的一个处理器访问。
因此,已经描述了一种用于在一个多线程处理器内划分一个处理器资源的方法和装置。虽然已经参考具体的示范性实施例描述了本发明,但是显然可以对这些实施例进行各种修改和改变而不背离本发明宽阔的精神范围。因此,说明书和附图被视作是说明性的而不是限制性的。
权利要求
1.一种方法包含把一个资源的一个第一部分仅仅专用于一个第一线程;把该资源的一个第二部分仅仅专用于一个第二线程;以及在第一和第二线程之间动态地共享该资源的一个第三部分。
2.如权利要求1所述的方法,其特征在于依据相应第一和第二线程的资源需求执行该资源第三部分的动态共享。
3.如权利要求1所述的方法,其特征在于该资源包含一个存储器资源,该存储器资源包含分别专用于第一和第二线程的第一和第二部分、以及在第一和第二线程之间共享的一个第三部分,该方法包含标识在该存储器资源内的一个第一位置作为接收与第一个线程有关的一个信息项的一个候选位置;确定该候选位置是否在专用于第一线程的第一或者第三部分存储器资源的范围之内;如果该候选位置是在该存储器资源的第一或者第三部分的范围之内,则在该候选位置存储与第一线程相关的信息;以及如果该候选位置是在该存储器资源的第二部分范围之内,则标识一个进一步的位置作为候选位置。
4.如权利要求3所述的方法,其特征在于该存储器资源包含一个N路组关联存储器,而且其中第一部分包含专用于第一个线程的一个第一路,第二部分包含专用于第二线程的一个第二路,第三部分包含一个在第一和第二线程之间共享的第三路,其中标识第一个位置作为候选位置包含在该存储器的一个选择组内标识一个选择的路线作为一个候选路线以接收与第一个线程有关的信息项。
5.如权利要求4所述的方法,其特征在于把进一步的位置标识为候选位置包含把在该存储器选择组内的一个另一个路线标识为候选路线以接收与第一个线程有关的信息项。
6.如权利要求4所述的方法,其特征在于把在该选择组内的选定路线标识为候选路线包含标识在该选择组内最近最少使用的一条路线。
7.如权利要求5所述的方法,其特征在于把在该选择组内的另一个路线标识为一条候选路线包含标识在该选择组内第二最近最少使用的一条路线。
8.如权利要求6所述的方法,包含为该选择组检查一个最近最少使用(LRU)历史记录以标识最近最少使用的路线。
9.如权利要求8所述的方法,包含在用于选择组的LRU历史记录内检查一组入口,在该组入口内的每个入口都指示在该选择组内的一条相应路线,其中该组入口以由一条相应路线最近最少使用率确定的一个次序进行排列,而且该候选路线的选择包含执行该组入口中的入口的一次连续检查,以定位包含第一或者第二路线的一条最近最少使用路线。
10.如权利要求4所述的方法,其特征在于存储器包含一个轨迹高速缓冲存储器,而且其中与第一线程有关的信息项包含该第一线程的一条微指令。
11.一个资源,包含一个专用于由在一个多线程处理器内执行的一个第一线程使用的第一部分;一个专用于由在该多线程处理器内执行的一个第二线程使用的第二部分;以及由第一和第二线程共享的一个第三部分。
12.如权利要求11所述的资源,其特征在于该资源包含一个存储器,该存储器包含选择逻辑以标识第一位置选择逻辑,其标识在该存储器资源内的一个第一位置作为一个候选位置来接收与第一个线程有关的一个信息项,以确定该候选位置是否在该存储器资源的第一或者第三部分范围之内,则在该候选位置处存储与第一个线程相关的信息,但是如果候选位置在该存储器资源的第二部分范围之内的话,则标识一个进一步的位置作为候选位置。
13.如权利要求12所述的资源,包含一个N路组关联存储器,而且其中第一部分包含一个专用于第一个线程的第一路线,第二部分包含专用于第二线程的一个第二路线,第三部分包含在第一和第二线程之间共享的第三路线。
14.如权利要求12所述的资源,其特征在于如果选定路线包含第一或者第三路线,则该选择逻辑标识在该存储器选择组内的一个选定路线作为候选路线以接收与第一个线程有关的信息项。
15.如权利要求12所述的资源,其特征在于如果该选定路线包含第二路线,则该选择逻辑标识在该存储器选择组内的一个另一个路线作为候选路线以接收与第一个线程有关的信息项。
16.如权利要求14所述的资源,其特征在于通过标识在该选择组内的选定路线为在该选择组内的一条最近最少使用路线,选择逻辑标识在该选择组内的选定路线作为候选路线。
17.如权利要求15所述的资源,其特征在于通过标识在该选择组内的另一个路线为在该选择组内的一条第二最近最少使用路线,选择逻辑标识在该选择组内的另一个路线为一条候选路线。
18.如权利要求16所述的资源,其特征在于选择逻辑为该选择组检查一个最近最少使用(LRU)历史记录以标识最近最少使用的路线。
19.如权利要求18所述的资源,其特征在于该选择逻辑检查在用于该选择组的LRU历史记录内的一组入口,在该组入口内的每个入口指示在该选择组内的一条相应路线,其中该组入口以由一条相应路线的最近最少使用率确定的次序进行排列,而且该候选路线的选择包含执行该组入口中的入口的一个连续检查来定位一条包含第一或者第二路线的最近最少使用路线。
20.如权利要求18所述的资源,其特征在于该存储器包含一个轨迹高速缓冲存储器,而且其中与第一个线程有关的信息项包含第一个线程的一条微指令。
21.选择逻辑,包含用于标识在一个存储器资源内、与一个多线程处理器有关的一个第一位置作为一个候选位置以接收与一个第一线程有关的一个信息项的第一装置;用于确定该候选位置是否在专用于第二线程的存储器资源的第二部分范围之内的第二装置;其特征在于如果该候选位置在专用于第二线程的存储器资源的第二部分范围之内,则第一装置标识在该存储器资源内的一个进一步位置作为候选位置。
22.如权利要求21所述的选择逻辑,其特征在于该存储器资源包含一个N路组关联存储器,而且其中第一个部分包含一条专用于第一个线程的第一路线,第二部分包含一条专用于第二线程的第二路线,第三部分包含一条在第一和第二线程之间共享的第三路线,而且其中第一装置标识在该存储器的一个选择组内的一条选定路线作为一条候选路线以接收不与第一路线有关的信息。
23.如权利要求22所述的选择逻辑,其特征在于第一装置标识在该存储器选择组内的一条另一个路线作为候选路线来接收与第一个线程有关的信息。
24.一种方法包含定义一个与一个多线程处理器有关的存储器资源,以包含分别专用于第一和第二线程的第一和第二部分、以及在第一和第二线程之间共享的一个第三部分;为与第一线程有关的一个信息项,检查最近最少使用部分的一个历史记录,以标识第一或者第三部分作为可用于第一线程的一个最近最少使用部分;以及在该最近最少使用部分内存储信息项。
25.如权利要求24所述的方法,其特征在于对于与第一个线程有关的信息项,因为第二部分专用于第二个线程,所以该第二部分被排除在标识为最近最少使用部分之外。
26.如权利要求24所述的方法,其特征在于该存储器资源包含一个N路组关联高速缓冲存储器,而且其中第一、第二和第三部分包含相应的第一、第二和第三路线。
27.如权利要求26所述的方法,其特征在于检查最近最少使用部分的历史记录包含为该组关联高速缓冲存储器的一个选定组检查一个最近最少使用历史记录。
28.如权利要求24所述的方法,其特征在于该高速缓冲存储器包含一个轨迹高速缓冲存储器,而且其中该与第一线程有关的信息项包含第一线程的一条微指令。
29.一种存储了一个指令序列的计算机可读介质,当该指令序列在一个处理器内执行时,使处理器执行下列步骤把一个资源的一个第一部分仅仅专用于一个第一线程;把该资源的一个第二部分仅仅专用于一个第二线程;以及在第一和第二线程之间动态地共享该资源的一个第三部分。
30.如权利要求29所述的计算机可读介质,其特征在于依据相应第一和第二线程的资源需求,执行该资源第三部分的动态共享。
全文摘要
一种划分与一个多线程处理器有关的存储器资源的方法,包含定义该存储器资源以包含分别专用于第一和第二线程的第一和第二部分。然后该存储器资源的一个第三部分被指定为在第一和第二线程之间共享。当接收到一个信息项时,(例如,与第一个线程有关而且要被保存在该存储器资源中的一条微指令),检查最近最少使用(LRU)部分的一个历史记录以在第一或者第三部分而不是第二部分中标识一个位置作为一个最近最少使用部分。因为第二部分专用于第二线程,所以第二部分被排除在这个检查之外。
文档编号G06F9/318GK1429361SQ01809728
公开日2003年7月9日 申请日期2001年1月16日 优先权日2000年3月24日
发明者C·W·李, G·欣顿, R·克里克 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1