在一个多线程处理器内停用时钟信号的方法和装置的制作方法

文档序号:6638270阅读:203来源:国知局
专利名称:在一个多线程处理器内停用时钟信号的方法和装置的制作方法
技术领域
本发明通常涉及多线程处理器领域,更具体地涉及一种用于在一个多线程(MT)处理器内停用一个时钟信号的方法和装置。
发明
背景技术
多线程(MT)处理器设计近来已经被认为是一个越来越吸引人的、用于增加处理器性能的选择。在一个处理器内的多线程,特别提供了用于更有效地使用各种处理器资源、和尤其用于更有效地使用在一个处理器内的执行逻辑的可能性。具体来说,通过传送多个线程到一个处理器的执行逻辑,否则将由于在一个特定线程处理过程中的一个停止或者其它延迟而成为空闲的时钟周期可以被利用以服务于一个进一步的线程。在一个特定线程处理过程中的一个停止可以由在一个处理器流水线内的许多事故引起。例如,对于包含在一个线程内的一条指令来说,一个高速缓存未中或者一个分支预测错误(即,一个长的延迟操作)通常会导致相关线程处理过程的停止。长延迟操作在执行逻辑效率上的负面影响由近来在执行逻辑吞吐量中的增加而被加重,其中该增加在存储器访问和检索速率中有超前的提高。
鉴于由许多流行的操作系统,诸如Windows NT和UNIX操作系统、对这种多线程应用的支持,多线程计算机应用也变得越来越普遍。多线程计算机应用尤其在多媒体领域是有效率的。
依据在相关处理器内使用的线程交叉或切换方案,多线程处理器大致可以被分为两个类别(即,精细或者粗糙设计)。精细多线程设计在一个处理器内支持多个活动的线程,而且通常在一个周期接一个周期的基础上交叉两个不同的线程。粗糙多线程设计一般在发生某些长延迟事件、诸如一个高速缓存未中时交叉不同线程的指令。一个粗糙多线程设计在1996年5月、第23期Annual InternationalSvmposium on Computer Architecture的203-212页上、由Eickemayer,R.、Johnson,R.等人所著的“Evaluation ofMultithreaded Uniprocessors for Commercial ApplicationEnvironments”中进行了讨论。在由Massachusetts Norwell的Kluwer Academic出版社于1994年出版的、由R.A.lannuci等人编辑的Multithreaded Computer ArchitecturesA Summary of theState of the Art的167-200页上、由Laudon,I、Gupta,A所著的“Architectural and Implementation Tradeoffs in the Designof Multiple Context Processors”中,进一步讨论了在精细和粗糙设计之间的区别。Laudon进一步提出了一种把一个精细设计中的一个周期接一个周期的切换和一个粗糙设计中的完全流水线互锁(或者分块方案)组合在一起的交叉方案。为此,Laudon提出了一条使一个特定线程(或者环境)不可用持续一个特定周期数目的“后退”指令。可以依据预定事件、诸如一个高速缓存未中的发生,发布这样的一条“后退”指令。这样,Laudon通过简单地使一个线程不可用而避免了执行一个实际的线程切换。
一个用于一个处理器的多线程结构在一个无序的推测性执行处理器体系结构的环境中给出了许多进一步的难题。更具体地说,当考虑多线程时,可能导致在一个指令流的流动中一个意外变化的事件(例如,转移指令、例外或者中断)的处理是复杂的。在一个实现了在多个线程之间共享资源(即有有限的、或者没有功能单元的复制用于由该处理器支持的每一个线程)的处理器中,关于一个特定线程的事件发生的处理是复杂的,这是因为在处理这种事件中必须考虑进一步的线程。
在一个多线程处理器内实现了资源共享的地方,响应于在该多线程处理器内正被服务的线程状态中的变化,试图增加该共享资源的使用率是更令人期望的。
发明概述根据本发明,提供了一种方法,包含相对于多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示。为在该多线程处理器内支持的多个线程中的每一个保持一个活动或者不活动状态的一个指示。检测由相对于多个线程中每一个的非待决事件指示和用于每一个线程的不活动状态所指示的一个时钟停用条件。如果一个时钟信号被启用了,则响应于该时钟停用条件的检测,相对于在该多线程处理器内的至少一个功能单元,停用该时钟信号。
通过附图及其后的详细说明,本发明的这些及其它特征和优点将会是显然的。
附图简要说明本发明通过举例进行说明而且不局限于附图中的图表,在附图中类似的附图标记表示类似的单元,其中

图1是一个框图,说明了一个具有多线程支持的处理器中的一条流水线的一个实施例。
图2是一个框图,其以一个通用多线程微处理器的形式说明了一个处理器的一个示范性实施例。
图3是一个框图,说明了一个示范多线程微处理器中的所选组件,并且具体描述了各种提供一个缓存(或者存储)性能的功能单元,其中该缓存被逻辑分区以容纳多个线程。
图4是依据一个实施例、说明了一个无序群集的一个框图。
图5是一个寄存器别名表和一个寄存器堆的图解表示,并且在一个实施例内使用。
图6A是一个依据一个实施例、说明了有关一个重新排序缓存的详情的框图,其中该缓存被逻辑分区以服务在一个多线程处理器内的多个线程。
图6B是依据一个实施例的一个待决事件寄存器和一个事件禁止寄存器的一个图解表示。
图7A是一个流程图,其依据一个实施例说明了一种在一个多线程处理器内处理一个事件的方法。
图7B是一个流程图,其依据一个实施例说明了一种在一个多线程处理器内处理一个“虚拟清空”事件的方法。
图8是可以由依据一个实施例、在一个多线程处理器内实现的一个事件检测器检测到的多个示例事件的一个图解表示。
图9和10中的框图分别显示了在一个诸如如图6A所示的示例重新排序缓存中的一个重新排序表的示例内容。
图11A是一个流程图,其依据一个示例实施例说明了一种在一个支持至少第一和第二线程的多线程处理器内执行一个清除(或者清空)操作的方法。
图11B是一个框图,其依据一个示例实施例说明了配置逻辑,其中该逻辑根据一个活动线程状态机的输出进行操作以配置一个功能单元。
图12是一个时序图,其依据一个实施例说明了一个清空信号的断定。
图13是一个流程图,其依据一个实施例说明了一种在一个多线程处理器内提供对一个事件处理器的排它访问的方法。
图14是一个状态图,其依据一个实施例描述了在一个多线程处理器内实现的一个排它访问状态机的操作。
图15是一个状态图,其依据一个实施例说明了可以由在一个多线程处理器内实现的一个活动线程状态机占据的状态。
图16A是一个流程图,依据一个实施例说明了一种在一个多线程处理器内检测到用于一个活动线程的一个睡眠事件时,退出该活动线程的方法。
图16B是一个依据一个实施例、当退出一个线程时存储寄存器的状态和解定位的图解表示。
图17是一个流程图,依据一个实施例说明了一种在检测到用于一个不活动线程的一个中断事件时、把该线程从一个不活动状态转换到一个活动状态的方法。
图18被一个流程图,其依据一个实施例说明了一种管理向在一个多线程处理器内的至少一个功能单元启用和停用一个时钟信号的方法。
图19A是一个框图,依据一个实施例说明了用于在一个多线程处理器内启用和停用一个时钟信号的时钟控制逻辑。
图19B是一个示意图,显示了如图19A所示的时钟控制逻辑的一个实施例。
详细说明这里描述了一种用于在一个多线程处理器内管理一个时钟信号的方法和装置。在下面的描述中,为了说明起见,阐述了许多具体的细节以便提供对本发明的一个彻底了解。然而,对本领域技术人员来说,显然可以实践本发明而不用这些细节。
为了本说明书起见,使用的术语“事件”应当包含在一个处理器内部或外部的任何事件,其导致对在一个处理器内的一个指令流(宏或者微指令)服务的改变或者中断。据此,采用的术语“事件”应当包含,但不局限于,可以在该处理器内部或外部产生的转移指令处理、例外和中断。
为了本说明书起见,术语“处理器”应当用来涉及能够执行一个指令(例如,宏或者微指令)序列的任何机器,而且应当用来包含,但不局限于,通用微处理器、专用微处理器、图形控制器、音频控制器、多媒体控制器、微型控制器或者网络控制器。此外,采用的术语“处理器”应当尤其涉及复杂指令集计算机(Complex InstructionSet Computers,CISC)、精简指令集计算机(Reduced InstructionSet Computers,RISC)、或者超长指令字(Very Long InstructionWorld,VLIW)处理器。
此外,采用的术语“清除点”应当包含通过一个流标记或者其它指令在一个指令流(包含一个微指令或者宏指令流)中提供的、在该指令流中一个可以处理一个事件的位置处的任何指令。
采用的术语“指令”应当包含,但不局限于,一条宏指令或者一条微指令。
本发明的某些示例实施例被描述为主要以硬件或者软件实现。尽管如此,但是那些本领域技术人员还可以理解许多特征可以容易地以硬件、软件或者硬件和软件的一个组合来实现。用于实现本发明实施例的软件(例如,任何微指令以及宏指令)可以完全或者至少部分地驻留在一个可由一个处理器访问及/或在该处理器本身内的主存储器(例如,在一个高速缓存或者一个微码定序器内)中。例如,事件处理器和状态机可以以从一个微码定序器发送的微码形式实现。
软件可以进一步经由网络接口设备传送或者接收。
为了这个说明书起见,采用的术语“机器可读介质”应当包含任何能够存储或者编码一个指令序列用于由该机器执行并且导致该机器执行本发明中的任何一种方法的介质。
采用的术语“机器可读介质”因此应当包含,但不局限于,固态存储器、光和磁盘、以及载波信号。
处理器流水线图1是说明了处理器流水线10的一个实施例的一个高级框图。流水线10包含多个流水线阶段,其从一个检索指令(例如,宏指令)并且把该指令送入流水线10的取指令流水线阶段12开始。例如,一条宏指令可以从与该处理器集成或者与该处理器紧密相关的一个高速缓冲存储器中检索得到,或者可以经由一条处理器总线从一个外部主存储器检索得到。宏指令从取指令阶段12传送到一个解码流水线阶段14,其中宏指令被翻译为适于在该处理器内执行的微指令(也称为“微码”)。然后该微指令向下传送到一个分配流水线阶段16,在那儿依据可用性和需要把处理器资源分配给各种微指令。然后该微指令在被收回之前在一个执行阶段18中被执行,或者在一个收回流水线阶段20中被“写回”(例如,提交到一个体系结构状态)。
微处理器体系结构图2是一个框图,其以一个通用多线程微处理器的形式,说明了一个处理器30的一个示例实施例。如下所述,处理器30是一个多线程(MT)处理器,而且因此能够处理多个指令线程(或者环境)。然而,在该说明书中下面提供的许多示教不专门针对一个多线程处理器,并且可能在一个单线程处理器中找到应用。在一个示例实施例中,处理器30可以包含一个能够执行Intel结构指令集的Intel结构(IA)微处理器。这样一个Intel结构微处理器的示例是由Califorinia,Santa Clara的Intel公司制造的Pentium Pro微处理器或者Pentium III微处理器。
在一个实施例中,处理器30包含一个有序前端和一个无序后端。该有序前端包含一个总线接口单元32,其起到在处理器30和一个其中可以使用该处理器30的计算机系统中的其它组件(例如,主存储器)之间的流水线作用。为此,总线接口单元32把处理器30连接到一条处理器总线(没有显示),经由该处理器总线可以在处理器30处接收数据和控制信息并且从处理器30传送数据和控制信息。总线接口单元32包含控制通过该处理器总线进行通信的前侧总线(FSB)逻辑34。总线接口单元32进一步包含一个总线队列36,其对于通过该处理器总线的通信提供一个缓冲功能。总线接口单元32被显示为从一个在处理器30内提供一个局部存储器性能的存储器执行单元42中接收总线请求38,以及发送探听或者总线返回到该存储器执行单元42。该存储器执行单元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,该TLB 102执行一个地址查找操作,并且传送一个物理地址到统一的高速缓存44。统一的高速缓存44传送一个相应的宏指令到指令流缓存106。每一个下一指令请求也都从下一指令指针100直接传送到该指令流缓存106,以便允许该指令流缓存106标识从该统一高速缓存44接收到的一个宏指令属于哪个线程。来自于第一和第二线程的宏指令然后从该指令流缓存106发布到指令预解码器108,指令预解码器108对于一个接收的指令流(宏指令)执行多个长度计算和字节标记操作。具体地说,该指令预解码器108产生一系列字节标记向量,其尤其服务于把在该指令流内、要传送到指令控制逻辑110的宏指令划分开。
指令控制逻辑110然后为了解码,利用该字节标记向量来引导离散的宏指令到指令解码器112中。为了转移地址计算起见,宏指令也从该指令控制逻辑110传送到转移地址计算器114。微指令然后从该指令解码器112传送到轨迹传送引擎60。
在解码期间,流标记与一个宏指令被翻译成的每一个微指令相关联。一个流标记指示相关微指令的一个特征,而且可以,例如,指示相关的微指令是在表示一个宏指令的一个微码序列中的第一个或者最后一个微指令。流标记包含一个“宏指令开始”(BOM)和一个“宏指令末端”(EOM)流标记。根据本发明,解码器112可以进一步解码该微指令,以具有与此相关的共享资源(多处理器)(SHRMP)流标记和同步(SYNC)流标记。具体来说,一个共享资源流标记把一个微指令标识作为在一个特定线程内的位置,在该位置处,和在该线程中的别处相比,该线程可以被中断(例如,重新启动或者暂停)而具有较少的负面后果。在本发明的一个示例实施例中,解码器12被构造为用一个共享资源流标记来标记组成一个原始宏指令的结尾或者开始的微指令、以及在较长微码序列中的间断点。一个同步流标记把一个微指令标识作为在一个特定线程内的一个位置,在该位置处,响应于例如在另一个线程内的一个同步指令,该线程可以与另一个线程同步。为了本说明书起见,采用的术语“同步”应当涉及在至少一个线程中标识至少一个第一点,在该点处,可以根据那个线程及/或至少一个进一步线程,相对于在那个线程或者在另一个线程中的一个第二点,减小或者降低对该处理器的破坏来修改处理器状态。
在本发明的一个示例实施例中,解码器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,这些事件处理器67响应于一个诸如例外或者中断的事件的发生而在处理器30内实现多个操作。如将在下面进一步仔细描述的那样,事件处理器67由包含在处理器30后端中的一个寄存器重命名器74内的一个事件检测器188激活。
处理器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内的微指令已经完成执行并且准备收回时,它们然后从一个重新排序缓存中删除并且以一种有序方式(即,依据一个原有程序次序)被检索。重放队列80传送要被重放的微指令到执行单元70。
显示的执行单元70包含一个浮点数执行引擎84、一个整数执行引擎86、和一个0级数据高速缓存88。在一个处理器30执行Intel结构指令集的示例实施例中,该浮点数执行引擎84可以进一步执行MMX指令和流SIMD(单指令,多数据)扩展(SSE)。
多线程实现在图2中所示的处理器30的示例实施例中,可以有有限的资源复制来支持一个多线程性能,并且因此必须在线程当中实现某种程度的资源共享。将要理解使用的资源共享方案取决于该处理器能够同时处理的线程数目。因为在一个处理器内的功能单元一般提供某些缓存(或者存储)功能和传送功能,所以资源共享的发布可以被看作包含(1)存储和(2)处理/传送带宽共享组件。例如,在一个支持同时处理两个线程的处理器中,在各个功能单元内的缓存资源可以被静态或者逻辑地在两个线程之间进行划分。类似地,由一个路径提供的、用于在两个功能单元之间传送信息的带宽必须在两个线程之间进行划分和分配。因为可以在一个处理器流水线内的多个位置处产生这些资源共享发布,根据该特定位置的指令和特征,在这些不同位置处可以使用不同的资源共享方案。将要理解鉴于变化的功能和操作特性,不同的资源共享方案可能适于不同的位置。
图3是一个框图,说明了用于在图2中说明的处理器30的一个实施例的选定组件,并且描述了提供一个缓存性能的不同功能单元,该缓存性被逻辑划分以容纳两个线程(即线程0和线程1)。通过分配在一个缓存资源内的一个第一预定组入口到一个第一线程以及分配在该缓存资源内的一个第二预定组入口到一个第二线程,可以实现一个功能单元的缓存(或者存储)和处理功能用于两个线程的逻辑划分。然而,在替换实施例中,缓存还能够被动态共享。具体来说,这可以通过提供两对读和写指针来实现,其中第一对读和写指针与一个第一线程相关联,而第二对读和写指针与一个第二线程相关联。第一组读和写指针可以局限于在一个缓存资源内的一个第一预定数目入口,而第二组读和写指针可以局限于在同一个缓存资源内的一个第二预定数目入口内。在说明的实施例中,显示的指令流缓存106、轨迹高速缓存62、和一个指令队列103的每一个都提供了一个在第一和第二线程之间进行逻辑划分的存储容量。
无序群集(71)图4是一个框图,说明了无序群集71的一个实施例的更多细节。群集71在处理器30内提供了保留位置、寄存器重命名、重放和收回功能。群集71从轨迹传送引擎60接收微指令、分配资源到这些微指令、为每一个微指令重命名源和目的寄存器、调度微指令用于发送到合适的执行单元70、处理由于数据推测而被重放的微指令、以及然后最后收回微指令(即,确认该微指令到一个永久体系结构状态)。
在群集71处接收的微指令同时被传送到一个寄存器别名表格120和分配及释放列表管理逻辑122。寄存器别名表格120负责把逻辑寄存器名翻译到由调度器72和执行单元70使用的物理寄存器地址。更具体地说,参见图5,该寄存器别名表格120重命名保持在一个物理寄存器堆124内的整数、浮点数和段寄存器。显示的寄存器堆124包含126个被别名到八个(8)体系结构寄存器的物理寄存器。在说明的实施例中,该显示的寄存器别名表格120包含一个前端表格126和一个后端表格128用于由相应的处理器30前端和后端使用。在该寄存器别名表格120内的每一个入口都与一个体系结构寄存器相关联,或者被看作一个体系结构寄存器,而且包含一个指向在该寄存器堆124内的一个位置的指针130,在该位置处存储属于相关体系结构寄存器的数据。以这种方式,可以解决由一个传统微处理器体系结构提供的、指定一个相对小数量的体系结构寄存器的问题。
分配和释放列表管理逻辑122负责在群集71内的资源分配和状态恢复。逻辑122分配下列资源到每一个微指令1.一个顺序号,其给予每一个微指令以当在该群集71内处理该微指令时,在一个线程内跟踪它的逻辑次序。属于每一个微指令的顺序号和用于该微指令的状态信息被一起存储在该重新排序缓存162内的一个表格180(显示在下面图10中)内。
2.一个释放列表管理入口,其给予每一个微指令,以在一个状态恢复操作的情况下允许微指令的历史记录被跟踪和恢复。
3.一个重新排序缓存(ROB)入口,由该顺序号索引。
4.一个物理寄存器堆124入口(被称为“弹子”),在其内该微指令可以存储有用的结果。
5.一个载入缓存(没有显示)入口。
6.一个停止缓存(没有显示)入口。
7.一个指令队列入口(例如,到一个存储器指令队列或者一个通用指令地址队列的入口,将在下面进行描述)。
如果逻辑122不能获得用于一个接收的微指令序列的必要资源的话,该逻辑122将要求轨迹传送引擎60停止微指令的传送直到有足够的资源变得可用为止。通过声明在图2中说明的停止信号82来传递这个请求。
考虑把在该寄存器堆124内的一个入口分配到一个微指令,图5显示了一个垃圾堆数组132,其在该寄存器堆124内保持没有被分配给体系结构寄存器的入口记录(即,它们没有在该寄存器别名表格120内被指向)。逻辑122访问该垃圾堆数组132以标识在该寄存器堆124内、可以用来分配到一个接收的微指令的入口。逻辑122也负责重新要求在该寄存器堆124内变得可用的入口。
逻辑122进一步保持一个释放列表管理器(FLM)134以允许跟踪该体系结构寄存器。具体来说,当微指令被分配到此时,该释放列表管理器134保持一个对该寄存器别名表格120的改变的历史记录。该释放列表管理器134提供这样的性能,以在给定一个错误预测或者一个事件时,“展开”该寄存器别名表格120以指向一个非推测状态。该释放列表管理器134也“更新”在该寄存器堆124入口中的数据储存以确保所有的状态信息是当前的。最后,在收回处,物理寄存器标识符从该释放列表管理器134传送到该垃圾堆数组132用于分配给一个进一步的微指令。
一个指令队列单元136以顺序程序次序传送微指令到一个调度器和记分板单元(SSU)138,并且保持和发送由该执行单元70需要的微指令信息。指令队列单元136可以包含两个明确的结构,即一个指令队列(IQ)140和一个指令地址队列(IAQ)142。指令地址队列142是设计成当需要时传送关键信息(例如,微指令源、目的和延迟)到单元138的小型结构。指令地址队列142此外可以包含一个排队信息用于存储操作的存储器指令地址队列(MIAQ)和一个排队信息用于非存储操作的通用指令地址排队(GIAQ)。指令队列140存储较不关键的信息,诸如用于微指令的操作码和即时数据。当相关的微指令被读取和写入到调度器和记分板单元138中时,从该指令队列单元136中解分配该微指令。
调度器和记分板单元138通过确定每一个微指令源可以就绪的时间,以及何时合适的执行单元可用于发送,负责调度执行的微指令。如图4所示的单元138包含一个寄存器堆记分板144、一个存储器调度器146、一个矩阵调度器148、一个慢微指令调度器150和一个浮点数调度器152。
单元138通过检查保持在寄存器堆记分板144内的信息来确定何时该源寄存器是就绪的。为此,在一个实施例中,该寄存器堆记分板144具有256位,其跟踪对应于在该寄存器堆124内的每一个寄存器的数据资源可用性。例如,当分配数据到相关入口或者有一个到该单元138的写操作时,可以清除用于在该寄存器堆124内的一个特定入口的记分板位。
存储器调度器146缓存存储器类的微指令、检查资源可用性、然后调度存储器类的微指令。矩阵调度器148包含两个紧密绑定的算术逻辑单元(ALU)调度器,其允许调度相关的背靠背微指令。浮点数调度器152缓存和调度浮点数微指令,而慢微指令调度器150调度不被上述调度器处理的微指令。
显示的一个检验器、重放和收回单元(CRU)160包含一个重新排序缓存162、一个检验器164、一个分段队列166和一个收回控制电路168。单元160具有三个主要功能,即一个检验功能、一个重放功能和一个收回功能。具体地说,检验器和重放功能包含重新执行已经被不正确执行的微指令。该收回功能包含确认体系结构有序状态到处理器30。更具体地说,检验器164进行操作以确保每一个微指令已经正确地执行了正确的数据。如果该微指令没有用正确数据进行执行(例如,由于一个错误预测的转移),则相关的微指令被重放以用正确数据执行。
重新排序缓存162通过以程序次序收回微指令来负责确认体系结构状态到该处理器30。由一个收回控制电路168产生的一个收回指针182指示在该重新排序缓存162内正被收回的一个入口。当该收回指针182移动通过在一个入口内的一个微指令时,则释放在该释放列表管理器134内的相应入口,而且现在可以回收相关的寄存器堆入口并且把它们传送到垃圾堆数组132。显示的收回控制电路168也实现了一个活动线程状态机171,它的目的和功能将在下面进行说明。收回控制电路168控制把在该重新排序缓存162中保持的推测性结果确认到在该寄存器堆124内的相应体系结构状态。
重新排序缓存162也负责处理内部和外部事件,如将在下面进一步详细描述的那样。当由该重新排序缓存162检测到一个事件发生时,就声明一个“清空”信号170。清空信号170具有从该处理器流水线中清空所有当前在传送中的微指令的效果。重新排序缓存162也向该轨迹传送引擎60提供一个地址,从该地址开始排序微指令以服务该事件(即,从那个地址发送以微码体现的一个事件处理器67)。
重新排序缓存(162)图6A是说明了有关重新排序缓存162的一个示例实施例的更多细节的一个框图,该缓存被逻辑划分以服务在该多线程处理器30内的多个线程。具体地说,显示的重新排序缓存162包含一个重新排序表格180,当该处理器30以一个多线程模式进行操作时,该表格可以被逻辑划分以容纳用于第一和第二线程的入口。当以一个单线程模式操作时,整个表格180可以被使用来服务该单个线程。在一个实施例中,表格180包含一个统一的存储器结构,当该存储器结构以多线程模式操作时,由两个(2)局限于在该表格180内的预定和明确入口组的收回指针182和183引用。类似地,当以一个单线程模式操作时,表格180由单个收回指针182引用。表格180包含对应于寄存器堆124中的每一个入口的一个入口,并且存储一个顺序号和以错误信息形式的状态信息、一个逻辑目的地址、以及一个用于在寄存器堆124内的每一个微指令数据入口的有效位。在表格180内的入口每一个都由构成用于每一个微指令的一个唯一标识符的顺序号进行索引。根据该顺序号,在该表格180内的入口以一种顺序和有序方式进行分配和解分配。除了其它流标记之外,显示的表格此外还存储一个用于每一个微指令的共享资源流标记184和一个同步流标记186。
重新排序缓存162包含一个事件检测器188,其被连接以接收以中断向量形式的中断请求以及访问在表格180内、由收回指针182和183引用的入口。显示的事件检测器188此外还输出清空信号170和清除信号172。
假定用于一个特定线程(例如,线程0)的一个特定微指令经历非转移错误预测、例外或者中断的话,则当该收回指针182或者183被递增以寻址相关入口时,保存在表格180内的入口中、用于该特定指令的信息将被收回到体系结构状态。在这种情况下,一个形成为收回控制电路168一部分的指令指针计算器190递增该宏或者微指令指针以指向(1)在寄存器堆124内的相应入口内指定的一个转移目标地址或者指向(2)如果不使用一个转移的话,下一个宏或者微指令。
如果已经发生了一个转移错误预测,则信息通过错误信息域传送到收回控制电路168和事件检测器188。鉴于通过错误信息指示的转移错误预测,处理器30也许已经取出了至少某些不正确的指令,而且这些指令已经遍及该处理器流水线。因为在表格180内的入口以连续次序分配,所以在该错误预测转移微指令之后的入口是由该错误预测转移指令流沾染了的微指令。响应于在错误信息内为其记录了一个错误预测转移的一个微指令的试图收回,事件检测器188声明清除信号172,其清除处理器整个无序后端的所有状态,并且因此刷新由在一个错误预测微指令之后的指令产生的无序后端所有状态。清除信号172的声明同时也阻塞随后取出的、可能位于处理器30的有序前端内的微指令的发布。
在该收回控制电路168内,依据通过一个收回微指令的错误信息通知的一个错误预测转移,IP计算器190确保指令指针179及/或181被更新以表示正确的指令指针值。基于该转移是否将被使用,IP计算器190用来自对应于表格180相关入口的寄存器堆入口的结果数据来更新指令指针179及/或181,或者当不使用转移时递增指令指针179和181。
事件检测器188还包含多个寄存器200用于保持关于为多个线程中的每一个检测的事件的信息。寄存器200包含一个事件信息寄存器202、一个待决事件寄存器204、一个事件禁止寄存器206、和展开寄存器208以及一个管脚状态寄存器210。每一个寄存器202-210都能够存储关于为一个特定线程产生的一个事件的信息。因此,用于多个线程的事件信息可以由寄存器200保持。
图6B是用于一个第一线程(例如,T0)的一个示例待决事件寄存器204和一个示例事件禁止寄存器206的一个示意图。
待决事件和事件禁止寄存器204和206为在多线程处理器30内支持的每一个线程提供。可以为每一个线程提供明确的寄存器204和206,或者单个物理寄存器可以被逻辑划分以支持多个线程。
示例待决事件寄存器204包含一位,或者其它数据项,用于每一种由该事件检测器188登记的事件类型(例如,如下参考图8所述的事件)。这些事件可以构成在该处理器30内部产生的内部事件,或者在该处理器30外部产生的外部事件(例如,从处理器总线接收的管脚事件)。在说明的实施例中,用于每一个线程的待决事件寄存器204不包含用于写回事件的一位,因为这样的事件不是线程特有的而且因此不在该待决事件寄存器中“排队”。为此,事件检测器188可以包含写回检测逻辑205,其在检测到一个写回事件上声明一个写回信号。通过事件检测器188来设置在用于每一个线程的待决事件寄存器204内的位,其中该检测器188触发一个设置在该待决事件寄存器204内的适当位的锁存器。在一个示例实施例中,如将在下面描述的那样,在该待决事件寄存器204内与一个预定事件相关联的一组位提供了一个相关类型的事件正被待决的指示。
类似地,用于每一个线程的事件禁止寄存器206包含一位,或者其它数据结构,用于由该事件检测器188辨别的每一种事件类型,这个位被设置或者重置(即,清除)以相对于该特定线程把一个事件记录为一个中断事件。在一个事件禁止寄存器206内的相应位由一个控制寄存器写操作设置,该控制寄存器写操作使用一个特定微指令来修改在处理器30内的非重命名状态。在一个事件禁止寄存器206内的一位可以类似地使用一个控制寄存器写操作重置(或者清除)。
一个示例处理器还可以具有某些模式,在这些模式中可以设置在该事件禁止寄存器206中的位来禁止在相应的模式内选择事件。
用于保持在用于一个特定线程的每一个待决事件和事件禁止寄存器204和206内的一种特定事件类型的位被输出到一个与(AND)门209,当寄存器204和206的内容指示相关的事件类型被待决而不是被禁止时,该与(AND)门209反过来输出一个用于每一种事件类型的事件已检测信号211。例如,在一种事件类型不被禁止的地方,依据在待决事件寄存器204内一个事件的登记,通过声明用于相关事件类型的事件已检测信号211,该事件马上被发信号通知被检测了。在另一方面,如果事件类型被事件禁止寄存器206的内容禁止,则事件发生将被记录在待决事件寄存器204内,但是仅仅如果在该事件禁止寄存器206内的适当位被清除了同时该事件仍然在该寄存器204内被记录为待决的话,才声明该事件已检测信号211。因此,一个事件可以被记录在待决事件寄存器204内,但是用于相关事件发生的事件已检测信号211仅仅可以在以后的某一时间、当用于特定线程的事件禁止被删除了时,被发信号通知。
用于每一种用于每一个线程的事件类型的事件已检测信号211被送到事件处理逻辑(事件优先化和选择逻辑)和时钟控制逻辑,如将在下面进一步描述那样。
一旦事件处理已经完成时,用于一个特定事件的一个事件处理器负责清除在用于一个特定线程的待决事件寄存器204内的适当位。在一个替换实施例中,该待决事件寄存器可以由硬件清除。
在一个多线程处理器环境内的事件发生和事件处理在多线程处理器30内的事件可以从若干个源检测到以及发信号通知。例如,处理器30的有序前端可以发信号通知一个事件,而且执行单元70可以同样地发信号通知一个事件。事件可以包含中断和例外。中断是在处理器30外部产生、并且可以经由一个公共总线(未显示)从一个设备发起到处理器30的事件。中断可以导致控制流被导向到一个微码事件处理器67。除了别的以外,例外可以泛泛地分类为错误、陷阱和帮助。例外是一般在处理器30内产生的事件。
事件被直接传递到在重新排序缓存162内的事件检测器188,响应于此,事件检测器188执行多个有关为其产生事件或者相对于其产生事件的线程的操作。在一个高层处来看,响应于一个事件的检测,事件检测器188暂停用于该线程的微指令收回、写适当的错误信息到表格180里、声明清空信号170、激活一个事件处理器67来处理该事件、确定一个重新启动地址、然后重新启动微指令的取出。事件可以以一个中断请求(或者中断扇区)的形式被直接传递到事件检测器188,或者通过记录在重新排序表格180内、用于正被收回的第一或者第二线程的一个指令的错误信息被传递到事件检测器188。
清空信号(nuke signal)170的声明具有清除多线程处理器30有序前端和无序后端的状态的效果。具体地说,响应于清空信号170的声明,许多功能单元,然而并非必须是全部,被清除了状态和微指令。存储器有序缓存48和总线接口单元32的某些部分没有被清除(例如,收回但不确认存储、总线探听、等)。清空信号170的声明进一步停止前端的指令取出以及停止把微指令排序到微码队列68中。虽然这个操作能够不受损害地在一个单线程多处理器、或者一个执行单个线程的多处理器内执行,在多个线程共存而且在一个多线程处理器30内处理的地方,当解决有关一个线程的事件发生时,不能忽略其它线程的存在。因此,本发明提出一种用于在一个多线程处理器内处理一个事件的方法和装置,当发生用于单个线程的一个事件时,该方法和装置考虑到在该多线程处理器内多个线程的处理和存在。
图7A是一个流程图,其依据本发明的示例实施例说明了一种在一个多线程处理器30内处理一个事件发生的方法220。方法220开始于块222,在那儿由事件检测器188检测用于第一线程的一个第一事件。图8是多个可以由在块222处的事件检测器188检测的示例事件224的一个图解表示。在图8中表示的事件已经依据对事件224响应的特征,泛泛地进行了分组。第一组事件包含RESET事件226和MACHINECHECK事件228,它们由事件检测器188以如下所述的方式发信号通知到在一个多线程处理器30内的多个线程,一旦检测到这些事件就导致所有线程同时到达同一个事件处理器67。第二组事件包含FAULT事件230、ASSIST事件232、DOUBLE FAULT事件234、SHUTDOWN事件236和SMC(自我修改代码)事件238,这些事件的每一个在发信号通知该事件的一个特定线程的微指令收回上被报告。具体地说,事件检测器188将依据错误信息为其指示一个错误状态的一个微指令的收回而检测第二组中的一个事件。第二组中的一个事件的检测仅仅由事件检测器188发信号通知到产生相关事件的线程。
第三组事件包含一个INIT(简短重置)事件240、一个INTR(本地中断)事件242、一个NMI(非屏蔽中断)事件244、一个DATABREAKPOINT事件246、一个TRACE MESSAGE事件248和一个A20M(地址绕回)事件250。在具有一个接收中断或者接收陷阱流标记的一个微指令的收回上报告第三组事件。第三组中的事件检测仅仅由事件检测器188发信号通知到产生相关事件的线程。
第四组事件包含一个SMI(系统管理中断)事件250、一个STOPCLOCK事件252、和一个PREQ(探测请求)事件254。第四组中的事件被发信号通知到在该多线程处理器30内现存的所有线程,而且当多个线程的任何一个收回一个具有一个适当中断流标记的微指令时报告该事件。响应于第四组中的任意事件,没有在多个线程之间实现同步。
依据一个示例实施例,第五组事件,是一个多线程处理器结构特有的并且在所描述的实施例内实现以解决为一个多线程处理器环境所特有的问题。第五组事件包含一个VIRTUAL NUKE事件260、一个SYNCHRONIZATION事件262和一个SLEEP事件264。
VIRTUAL NUKE事件260是一个当(1)在该多线程处理器30内的第一线程具有一个待决事件(例如,任何上面所述的事件被待决)、(2)第二线程没有待决事件(不同于事件260)、和(3)具有一个共享资源流标记184或者一个同步流标记186的微指令被重新排序缓存162收回时,相对于一个第二线程被登记的事件。VIRTUAL NUKE事件260具有激活一个虚拟清空事件处理器的效果,该虚拟清空事件处理器在具有流标记184或者186的收回微指令之后微指令处重新启动第二线程的执行。
当一个特定线程(例如,一个第一线程)被要求在多线程处理器30内修改一个共享状态或者资源时,由微码发信号通知该SYNCHRONIZATION事件262。为此,该微码定序器66插入一个同步微指令到用于第一个线程的流中,而且为了避免一个死锁情况,用一个共享资源流标记184和一个同步流标记186一起标记该“同步微指令”。仅仅依据用于第一线程的同步微指令的收回,以及依据用于第二线程、具有一个同步流标记186与此相关的一个微指令的收回,检测(或者登记)SYNCHRONIZATION事件262。SYNCHRONIZATION事件262具有激活一个同步事件处理器的效果,该同步事件处理器在保存在一个微码暂存寄存器中的一个指令指针处重新启动第一个线程的执行。在下面提供了有关一个SYNCHRONIZATION事件262的处理的更多细节。第二个线程执行虚拟的NUKE 260。
SLEEP事件264是一个导致一个相关线程从一个活动状态转换到一个不活动(或者睡眠)状态的事件。不活动线程则可以由一个适当的BREAK事件再次从不活动转换到活动状态。转换该线程回到活动状态的BREAK事件的特性取决于转换该线程到不活动状态的SLEEP事件264。线程进入一个活动状态和退出一个活动状态在下面详细描述。
图9是一个显示了在重新排序缓存162内的重新排序表格180的示例内容的框图,其应当在下面进行描述为了说明在本发明的一个示例实施例内的事件和清除点(还称为“清空点”)检测。响应于从在该多线程处理器30内的一个内源或者从在处理器30外的一个外源传送到事件检测器188的一个事件266,在块222处可以发生事件检测器188对上述任一事件的检测。这样一个事件266通信的一个示例可以是一个中断向量。做为选择,通过用于正被收回并且因此由收回指针182标识的一个特定线程(例如,线程1)的一个微指令的错误信息268,一个事件发生可以传送到事件检测器188。应当注意对于外部事件,每一个线程有一个(1)信号(例如,分别如信号266和267)。对于内部事件,重新排序缓存162入口包含通过它的位置指示该错误属于哪个线程的线程(例如,T0对比T1)。依据一个事件的检测,事件检测器188在事件信息寄存器202内存储涉及该特定事件的事件信息(例如事件类型、事件源,等),并且此外在待决事件寄存器204中登记用于相关线程的一个待决事件。如上所述,在待决事件寄存器204内登记用于相关线程的一个待决事件包含在寄存器204内设置与该特定事件相关联的一个位。此外要注意到如果事件没有被在事件禁止寄存器206内设置的、用于相关线程的一个位禁止,而且在一个微指令包含一个适当的流标记的情况中,通过声明一个适当的事件已检测信号211,可以有效地检测到该事件。
现在返回到图7A中显示的流程图,在块222处检测用于第一个线程的第一个事件之后,事件检测器188在块270处停止收回第一个线程并且声明一个“预清空”信号169。声明预清空信号169以避免一种死锁情况,在该死锁情况中第一线程把第二线程排除在外控制指令流水线。具体地说,第二线程被拒绝访问指令流水线,而相对于第二线程、开始一个多线程清空操作所要求的状态不能发生。预清空信号169因此被传送到处理器的前端,具体地说传送到存储器执行单元42,以填充构成其中检测到该事件的第一线程的微指令处理器流水线。处理器流水线的填充可以,仅仅举例来说,通过禁止由存储器执行单元42或者前端的其它组件执行的指令预取和自我修改代码(SMC)操作,来执行。概括地说,通过停止第一线程中的微指令收回,及/或通过停止或者实质上减小传送有关第一线程的微指令到处理器流水线中,第二线程在该处理器中被给予了优先权而且一种死锁情况的可能性被降低了。
在判定框272处,做出关于第二线程在多线程处理器30内是否是活动的判定,并且据此由该重新排序缓存162收回第二线程。如果第二线程不是活动的,则方法220直接进行到块274,在那儿执行称为一个“清空操作”的一个第一类型清除操作。可以参考由收回控制电路168保持的活动线程状态机171来执行关于一个特定线程是否活动的判定。清空操作从声明清空信号170开始,如上所述,清空信号170的声明具有清除多线程处理器30有序前端和无序后端的状态的效果。由于仅仅第一个线程是活动的,所以不需要考虑该清空操作在任何其它可能在该多线程处理器30内给出和现存的线程上的影响。
在另一方面,如果在判定框272处确定第二线程在多线程处理器30内是活动的,则方法220继续执行一系列构成检测用于第二线程的一个清除点(或者清空点)的操作,在该清除点处,可以执行一个对该第二线程具有减少的负影响的清空操作。在一个清除点检测之后执行的清空操作是和在块274处执行的操作相同的操作,并且因此清除了多线程处理器30的状态(即,用于第一和第二线程的状态)。状态清除包含微指令“排出”操作,其在该说明书的别处进行描述。在本应用中公开的一个示例实施例中,在检测一个清除点之后执行的清空操作在多线程处理器30内、不在为第一线程保持的状态和为第二线程保持的状态之间进行区分。在一个替换实施例中,在一个清除点检测之后执行的清空操作可能仅仅清除单个线程(即,检测到事件的线程)的状态,在一个多线程处理器30内发生一个有效程度的资源共享以及这样的共享资源被动态地划分和未划分以服务多个线程的地方,为单个线程清除状态尤其是复杂的。然而,这个替换实施例可能需要越来越复杂的硬件。
在判定框272处的肯定判定之后,在判定框278处做出关于第二线程是否已经遇到一个事件的一个进一步判定。这样一个事件可以包含除VIRTUAL NUKE事件260之外任何上述的事件。这个判定再次由事件检测器188响应于事件信号266或者用于第二线程的一个错误信息信号269做出。关于由第二线程遇到的任何事件的消息被保存在专用于第二线程的部分事件信息寄存器202中,而且在待决事件寄存器204内登记该事件发生。
如果第二线程已经独立地遇到一个事件,则该方法直接进行到块280,在那儿执行一个多线程的清空操作以清除多线程处理器30的状态。做为选择,如果第二线程没有遇到一个事件,则在判定框282处做出第一个线程遇到的第一个事件是否要求一个共享状态、或者共享资源被修改以处理第一个事件的判定。举例来说,在第一个事件包含如上所述的一个SYNCHRONIZATION事件262的地方,这个指示第一个线程必需访问一个共享状态资源。可以通过收回一个用于第一线程、具有共享资源和同步流标记184和186与此相关的同步微指令来标识SYNCHRONIZATION事件262。图10是一个类似于在图9中所示的框图,其显示了用于重新排序表格180的示例内容。显示的、分配给第一线程(例如,线程0)的部分表格180包含一个由收回指针182引用的同步微指令。显示的同步微指令此外还具有与此相关的一个共享资源流标记184和一个同步流标记186。说明的同步微指令的收回将由事件检测器188登记为一个SYNCHRONIZATION事件262的发生。
如果用于第一线程(例如,线程0)的第一事件被确定不修改一个共享的状态或者资源,该方法220继续到判定框284,在那儿做出关于第二线程(例如,线程1)是否正收回一个具有一个与此相关的共享资源流标记184的微指令的判定。参见图9,显示的、用于线程1的收回指针182引用一个具有一个共享资源流标记184和一个同步流标记186的微指令。在这个情况中,出现于判定框284处的状态将已经被满足了,而且方法220因此继续到块280,在那儿执行多线程的清空操作。做为选择,如果用于第二线程(例如,线程1)的收回指针182没有引用一个具有一个共享资源流标记184或者一个同步流标记186的微指令,方法继续到块286,在那儿通过前进收回指针182来继续第二线程的收回。方法220从块286返回到判定框278,在那儿再次做出第二线程是否已经遇到一个事件的一个判定。
如果在判定框282处,确定用于第一线程(例如,线程0)的第一事件处理需要修改一个共享的状态或者资源,该方法220继续到判定框288,在那儿做出第二线程(例如,线程1)是否正收回一个具有一个与此相关的同步流标记186的微指令的判定。如果是这样的话,则在块280处执行多线程清空操作。如果不是的话,继续在块286收回用于第二线程的微指令直到遇到用于第二线程的一个事件或者用于第二线程的收回指针182索引到一个具有与此相关的一个同步流标记186的微指令为止。
在块280处清空操作开始之后,在块290处,在微码形式实现并且从该微码定序器66中定序的一个适当事件处理器67继续处理相关的事件。
Virtual Nuke事件如上所述,VIRTUAL NUKE事件260以一种稍微不同于其它事件的方式进行处理。为此,图7B是一个流程图,说明一种依据一个示例实施例,检测和处理一个VIRTUAL NUKE事件260的方法291。方法291假定当前没有用于第二线程的事件被待决(即,记录在一个用于第二线程的寄存器中)。
方法291开始于块292,在那儿由事件检测器188检测用于第一线程的一个第一事件。这样一个事件能够是上述参考图8讨论的任何一个事件。
在块293处,事件检测器188停止收回第一个线程。在块294处,事件检测器188检测收回一个具有一个共享资源流标记184或者一个同步流标记的微指令。在块295处,从微码定序器66中激活一个“虚拟清空(virtual nuke)”处理器。在块296处,该“虚拟清空”事件处理器在上面块294处收回的微指令之后的一个微指令处重新启动第二线程的执行。方法291然后在块297结束。
Nuke操作图11A是一个流程图,说明了一种依据一个示例实施例,在一个支持至少第一和第二线程的多线程处理器内执行一个清除(或者清空)操作的方法300。方法300在块302处、用由事件检测器188响应于一个事件的发生和检测声明清空信号170开始。清空信号170被传送到在多线程处理器30内的多个功能单元,而且它的声明和解声明定义了这样一个窗口,在该窗口内执行为功能单元的状态和配置清除而准备的动作。图12是一个时序图,显示了与一个时钟信号304的上升沿同步发生的清空信号170的声明。
在块303处,估算活动线程状态机。
在块306处,指示在其上发生事件的微指令是否被收回、用于第一和第二线程的顺序号和最近的微指令信号,被传送到分配和释放列表管理逻辑122和TBIT,其中TBIT是在轨迹转移预测单元(TBPU)(其反过来是TDE 60的一部分)中的一个结构,用于跟踪在处理器30有序前端内的宏指令和微指令指针信息。TBIT使用这个信息来锁存涉及该事件的信息(例如,微指令和宏指令指令指针)。
在块308处,事件检测器188构造和传送用于第一和第二线程的每一个的一个事件向量到微码定序器66。每一个事件向量在其中包含信息标识(1)当定位清空点(或者清除点)时正被收回的物理重新排序缓冲区单元(即,当标识清空点时每一个收回指针182的值)、(2)标识在微码定序器66内的一个位置的一个事件处理器标识符,其中定位构成一个事件处理器67来处理检测到的事件的微码、(3)标识第一或者第二线程的一个线程标识符、以及(4)一个确定该事件处理器67相对于为其它线程激活的事件处理器的优先级的线程优先级位。
在块310处,分配和释放列表管理逻辑122使用在块306处传送的顺序号把一个阴影寄存器别名表格(阴影RAT)前进到一个检测到清空点的点处,而且在块312处,从阴影寄存器别名表格中恢复主要寄存器别名表格120的状态。
在块314处,分配和释放列表管理逻辑122从释放列表管理器134中恢复寄存器号码(或者“弹子”),并且分配该恢复的寄存器号码到垃圾堆数组132,从该垃圾堆数组132中可以再次分配该寄存器号码。当所有的适当寄存器号码已经从释放列表管理器134中恢复时,分配和释放列表管理逻辑122此外还声明一个“已恢复”信号(没有显示)。清空信号170保持在一个声明状态直到从分配和释放列表管理逻辑122中接收到这个“已恢复”信号为止。
在块316处,用于第一和第二线程的所有“老的”存储器(即,已经收回但是还没有更新的存储器)使用存储确认逻辑(没有显示)从该存储器有序缓存中排出。
在块320处,如图12所示,事件检测器188然后在时钟信号304的一个上升沿上解声明该清空信号170。注意到清空信号170被保持在一个声明状态中至少三个时钟信号304时钟周期。然而,如果来自分配和释放列表管理逻辑122的“已恢复”信号没有在接着清空信号170声明之后的头两个时钟信号304时钟周期内被声明,事件检测器188将扩展清空信号170的声明超过说明的三个时钟周期。在一个实施例中,清空信号170可以被保持足够长(例如,三个时钟周期)以允许完成上述讨论的块303、306和308的完成。清空信号170可以被要求保持额外的周期以允许完成块310、312、314和316。为此,存储器有序缓存声明一个“存储器缓存排出”信号以扩展清空信号声明的扩展。
在块322处,在多线程处理器30内的微码定序器66及其它功能单元检查由活动线程状态机171保持的“活动位”以确定在该事件发生之后,第一和第二线程中每一个是否都在一个活动状态还是在一个不活动状态中。更具体地说,活动线程状态机171保持用于在多线程处理器30内现存的每一个线程的一个相应位指示,其指示相关的线程是在一个活动状态还是在不活动(睡眠)状态中。由事件检测器188检测以及事件检测器188响应于此声明清空信号170的事件,可以包含一个SLEEP事件264或者一个BREAK事件,这些事件在活动和不活动状态之间转换第一或者第二线程。如在图12中的324处,在声明清空信号170期间估算活动线程状态机171,而且依据清空信号170的解声明,该“活动位”的状态因此被认为是有效的。
在判定框326处,检查活动线程状态机171的活动位的每一个功能单元做出第一和第二线程是否活动的一个判定。如果基于活动位的状态,确定两个线程都是活动的,则方法300继续到块328,在那儿每一个功能单元都被配置为支援和服务第一和第二活动线程。举例来说,通过激活一个第二指针、或者第二组指针来对在不同功能单元内提供的存储和缓存性能进行逻辑上的划分,这些第二指针局限于在一个存储阵列内一个特定组(或者范围)的入口。此外,如果两个线程都是活动的,则可以激活某些MT特有的支持。举例来说,与微码定序器相关联的线程选择逻辑可以基于活动线程状态机171的输出,以一种“乒乓”方式定序来自第一线程(例如,T0)、来自第二线程(例如,T1)或者来自第一和第二线程(例如,T0和T1)的线程。此外,可以基于活动线程状态机的位输出执行本地时钟选通。在一个文件地址寄存器实施例中,在一个处理器内任意数量的状态机,可以基于活动线程状态机的输出修改它们的行为,或者改变状态。在块330处,微码定序器66然后继续定序用于第一和第二线程的微指令。
做为选择,如果在判定框326处确定第一和第二线程的仅仅一个是活动的,或者两个线程都是不活动的,则在块332处,每一个功能单元都被配置为支持和服务仅仅一个活动线程而且可以无效某些MT特有的支持。在没有线程是活动的地方,作为一个缺省设置,功能单元被配置为支持单个活动线程。在其中一个功能单元先前被配置(例如,逻辑划分)为支持多个线程的情况中,可以停用被使用来支持进一步线程的指针,而且由剩余指针引用的、在一个数据阵列内的入口组可以被扩展以包含先前由停用的指针引用的入口。以这种方式,可以理解可以使先前分配给其他线程的数据入口然后用于由单个活动的线程使用。通过当进一步线程是不活动时让更多的资源可用于该单一活动的线程,相对于当其他线程还在多线程处理器30内支持时该单个剩余线程的性能,可提高该剩余线程的性能。
在块334处,微码定序器66忽略用于一个不活动线程、或者多个不活动线程的事件矢量,而且仅仅对一个可能的活动线程定序微指令。在没有线程是活动的地方,微码定序器66忽略用于所有线程的事件矢量。
通过提供由该活动线程状态机171保持的活动位,提供了一个适当和集中的指示,依据于此各个功能单元可以被配置为在一个清空操作完成之后在多线程处理器30内支持一个正确数量的活动线程,其中活动线程状态机171能够由各个功能单元依据清空信号170解声明(发信号通知一个清空操作的结束)进行检查。
图11B是一个显示了示例配置逻辑329的框图,其与一个功能单元331相关联,并且操作来配置功能单元331以在多线程处理器内支持一个或多个活动线程。功能单元331可以是上面所述功能单元、或者任何将由一个所属技术领域专业人员认为要被包含在一个处理器内的任何功能单元中的任何一个。显示的功能单元331具有由配置逻辑329配置的存储与逻辑组件。举例来说,存储组件可以包含多个寄存器。当多个线程是活动时(即,当一个处理器正以一个MT模式操作时),这些寄存器中的每一个都可以被分配以存储用于这些线程特定一个的微指令或者数据。因此,如图11B所示的存储组件逻辑被划分为支持第一和第二线程(例如,T0和T1)。当然,该存储组件能够被划分以支持任意数量的活动线程。
显示的逻辑组件包含MT逻辑,该逻辑特别地用于在该处理器内支持多线程操作(即,一个MT)。
显示的配置逻辑329保持指针值333,其被输出到功能单元331的存储组件。在一个示例实施例中,这些指针值333被使用来逻辑划分该存储组件。例如,能够为每一个活动线程产生一个单独的读和写指针值对。取决于活动线程的数目,由配置逻辑329确定用于每一个线程的指针值的上下界限。例如,如果其他线程变得不活动的话,由一组用于一个特定线程的指针值指示的寄存器范围可以被增加以覆盖先前分配给另一个线程的寄存器。
配置逻辑329还包含MT支持启用指示335,其被输出到功能单元的逻辑组件以启用或者停用功能逻辑331的MT支持逻辑。
由活动线程状态机174输出的活动位327,提供输入到配置逻辑,并且由配置逻辑329使用来产生值333的适当点以及提供适当的MT支持启用输出。
一个事件处理器的排它访问某些事件处理器(例如,用于处理分页和同步事件的那些)需要排它访问该多线程处理器30来使用共享资源以及修改共享状态。因此,微码定序器66实现了一个排它访问状态机69,其在用于第一和第二线程的事件处理器需要这样的排它访问的地方,反过来排它访问这些事件处理器。仅仅当多于一个线程在多线程处理器30内活动时才可以引用该排它访问状态机69。与具有排它访问的一个事件处理器相关联的一个流标记被插入到用于该线程的流中,来标记包含该事件处理器的排它代码的结尾。一旦为所有线程完成了排它访问,微码定序器66继续微指令的正常发布。
图13是一个流程图,其说明了一种依据示例实施例,在一个多线程处理器30内提供对一个事件处理器67的排它访问的方法400。方法400在块402处、由微码定序器66从事件检测器188接收用于相应的第一和第二线程的第一和第二事件向量开始。如上所述,每一个第一和第二事件向量将标识一个相应的事件处理器67。
在判定框403处,做出关于是否有多于一个(1)线程在活动的判定。这个判定由微码定序器参考活动线程状态机171做出。如果不是的话,方法400继续到块434。如果是这样的话,方法400继续到判定框404。
在判定框404处,微码定序器66做出关于第一或者第二事件处理器67是否需要排它访问一个共享资源、或者修改一个共享状态的判定。如果是这样的话,在块406处微码定序器66实现状态机69,其按序提供对第一和第二事件处理器67每一个的排它访问。图14是依据示例实施例,描述了该排它访问状态机69的操作的一个状态图。显示的状态机69包含五个状态。在第一状态408中,用于第一和第二线程的微码都由微码定序器66发布。响应于需要一个排它访问事件处理器的一个事件发生一个清空操作410时,状态机69转换到第二状态412,其中发布与用于第一线程的一个事件相关联的第一个事件处理器67(即,微指令)。在所有构成第一个事件处理器67的微指令定序之后,以及在由这样的微指令指示的所有操作完成之后,微码定序器66然后在414发布一个停止微指令(例如具有一个相关的停止流标记的微指令),以把该状态机69从第二状态412转换到一个第三状态416,在该状态中停止发布第一线程的微指令。在418处,在414发布的停止微指令从重新排序缓存162收回,以由此把状态机69从第三状态416转换到第四状态420,其中微码定序器66发布与用于第二线程的一个事件相关联的第二事件处理器67。在所有构成第二事件处理器67的微指令定序之后,以及在由这样的微指令指示的所有操作完成之后,微码定序器66然后在422发布一个进一步的停止微指令,以把该状态机69从第四状态转换到一个第五状态424,在该状态中停止发布第二事件处理器67的微指令。在426处,在422发布的停止微指令从重新排序缓存162收回,由此把状态机69从第五状态424转换回到第一状态408。
在块432处,假定两个线程都是活动的,则再继续用于第一和第二线程的微指令的正常定序和发布。
做为选择,如果判定框404确定第一或者第二事件处理器都不需要排它访问处理器30的共享资源或者状态,则方法继续到块434,其中微码定序器66以一种非排它、交叉的方式定序构成第一和第二事件处理器67的微码。
活动线程状态机(171)图15是一个状态图500,其依据一个示例实施例说明了可以由活动线程状态机171占据的状态,还依据一个示例实施例说明了可以导致活动线程状态机171在各个状态之间进行转换的转换事件。
显示的活动线程状态机171驻留在四个状态中的一个中,这四个状态即单个线程0(ST0)状态502、单个线程1(ST1)状态504、多个线程(MT)状态506、以及零线程(ZT)状态508。活动线程状态机171为每一线程保持单个活动位,当该位被设置时,标识相关的线程正是活动的;以及当被重置时,指示相关的线程正是不活动或者在睡眠中。
在四个状态502-508之间的转换由事件对触发,一个事件对的每一个事件都与第一或者第二线程有关。在状态图500中,指出了多个有助于在状态之间进行转换的事件类型。具体地说,SLEEP事件是一个导致线程变得不活动的事件。BREAK事件是一个当为一个特定线程发生时,导致该线程从一个不活动状态转换到一个活动状态的事件。一个特定事件是否有资格作为一个BREAK事件可以取决于导致该线程变得不活动的SLEEP事件。具体地说,一旦不活动是一个特定SLEEP事件的结果,则仅仅某些事件将导致一个线程变得活动。一个NUKE事件是任何当为特定线程发生时,导致执行一个如上所述的清空操作的事件。上面参考图8讨论的所有事件都可能包含清空事件。最后,还在状态图500内说明了相对于一个特定线程发生的一个“没有事件”,它作为一个可以与相对于一个进一步的线程发生的事件组合存在以导致一个状态转换的条件。
在一个实施例中,如果为一个特定线程发信号通知一个SLEEP事件,且用于那个线程的BREAK事件是待决的,则马上服务于该BREAK事件(例如,线程不会进入睡眠并且被稍后唤醒来服务该BREAK事件)。相反情况也可以是真的,因为可以为一个特定线程发信号通知一个BREAK事件,而且一个SLEEP事件是待决的,然后就服务于该BREAK事件。
依据由事件检测器188对清空信号170的声明,估算活动线程状态机171,如在图12中的324处指示的那样。在解声明该清空信号170之后,基于由活动线程状态机保持的活动位配置在多线程处理器30内的所有功能单元。具体地说,检验器、重放和收回单元(CRU)160传送基于该活动位产生的一个信号到所有受影响的功能单元,以向功能单元指示在该多线程处理器内有多少线程是现存的,以及这些线程中的哪一个是活动的。在声明清空信号170之后,一般在一个时钟信号304的时钟周期内完成功能单元的配置(例如划分或者取消划分)。
线程退出和入口本发明提出了一种示例机制,借此在一个多线程处理器30内的线程可以进入和退出(例如,变得活动或者不活动),其中这样的进入和退出以一种统一的次序发生而不管正在运行的线程数目,而且当在多线程处理器30内没有更多的线程是活动的或者正在运行时,可以很好地停止到各个功能单元的时钟信号。
如上参考状态图500所述,响应于用于一个当前不活动线程的BREAK事件的检测,发生线程进入(或者激活)。取决于一个特定线程变得不活动的理由,定义用于该相关不活动线程的BREAK事件。响应于用于一个当前活动线程的SLEEP事件,发生线程退出。SLEEP事件的示例包含执行包含在一个活动线程内的一个停止(HLT)指令、一个SHUTDOWN或者一个ERROR_SHUTDOWN条件的检测、或者相对于该活动线程的一个“等待SIPI”(起动处理器间中断)条件。
图16A是一个流程图,依据本发明的示例实施例说明了一种在检测到用于一个活动线程的一个SLEEP事件时,退出该活动线程的方法600。方法600在块602开始,在那儿保存用于该活动线程所有需要的状态,并且解除分配先前已经分配给用于该活动线程的微指令、在寄存器堆124内的所有寄存器入口。举例来说,对于在寄存器堆124内的仅仅128个寄存器入口,解分配先前分配给该活动线程的微指令的28个入口。被解分配的、用于该活动线程的寄存器内容被保存在一个“便笺本”中,其可以包含与在多线程处理器30内的一条控制寄存器总线相连的一个寄存器阵列或者随机存取存储器(RAM)。
可以由微码定序器665响应于用于活动线程的STOPCLK、HALT(HLT)或者SHUTDOWN事件的检测、发布的一个解除分配微码序列,来执行在寄存器堆124内的寄存器入口的解分配。解分配微码序列进行操作以在释放列表管理器134内删除(或者无效)用于该寄存器堆入口的记录,并且在垃圾堆数组132内创建(或者确认)用于该寄存器堆入口的记录。换句话说,通过该解分配微码序列,用于该解分配寄存器堆入口的记录从释放列出管理器134传送到垃圾堆数组132。
图16B是可以在块602执行的操作的一个示例实施例的图解表示。例如,在寄存器堆124内第一组寄存器内容的传送,这就是说先前分配给第一线程(例如,T0)的内容被显示为传输到该便笺本。在保存状态中可以执行的额外操作包含存储用于一个退出线程的体系结构寄存器内容到便笺本;以及在退出这个第一线程时,存储分配给第一线程的微码暂存寄存器的内容到便笺本。在一个线程退出上空出的寄存器然后可以用于再分配到另一个线程(例如,T1)。
当重新进入一个特定线程时,应当理解分配给这个线程的寄存器内容可以从该便笺本中恢复,如在图16B中的虚线指示的那样。
在块604处,一个用于该退出线程的线程特有“围栏微指令”被插入到用于该退出线程的微指令流中,来从该存储器有序缓存48、各个高速缓存和处理器总线中排出任何剩余的、与该线程相关联的待决存储器访问。这个操作不会收回直到所有这些块完成为止。
当这些执行单元20相对快速地执行微指令时,利用响应于SLEEP事件检测声明的清空信号,清除所有添加到执行单元输入端的所有新的微指令。如上所述,清空信号170被保持足够长的一段时间(例如,三个时钟周期)以便允许在声明该清空信号170之前进入该执行单元70的微指令从中排出。当这些微指令从执行单元70中排出时,它们被清除并且取消写回。
在块606处,通过由微码定序器66产生的一个微指令写回一个设置该展开寄存器状态的值,设置保持在事件检测器188内的展开寄存器208,以指示该退出线程是在一个不活动(或者一个睡眠)状态中。
在块608处,通过让控制寄存器写入由微码定序器66发布的微指令,设置用于该退出线程的事件禁止寄存器206来禁止用于该退出线程的非中断事件。由控制寄存器微指令指示的、用于该退出线程的事件禁止寄存器的设置,取决于正被服务的睡眠事件类型。如上讨论所述,取决于触发到该不活动状态转换的SLEEP事件,相对于该不活动线程,仅仅某些事件有资格作为中断事件。具体参考用于该不活动线程的事件禁止寄存器206,做出关于一个事件是否有资格作为用于一个特定不活动线程的中断事件的判定。
在块612处,使用一个特定微指令发信号通知用于该退出线程的睡眠事件,该微指令在该特定微指令的写回错误信息字段中放置一个睡眠事件编码。
图17是一个流程图,依据一个示例实施例说明了一种在检测到用于一个不活动线程的一个BREAK事件时,把该线程从一个不活动状态转换到一个活动状态的方法700。方法700在702处,为一个事件检测一个事件发生开始,其中相对于一个不活动线程,该事件可能有资格作为一个BREAK事件或者不能作为一个BREAK事件。在判定框703处,由一个事件检测逻辑185为相关事件做出确定该事件是否有资格作为一个用于该不活动线程的一个BREAK事件的判定。为此,事件检测逻辑185检查在事件检测器188中的寄存器200内的事件禁止寄存器206。如果相对于该不活动线程,相关的事件类型没有被指出是一个禁止的BREAK事件,则方法700继续到块704,其中根据需要打开时钟,正常地发信号通知该事件(在另一个线程上等待一个可清空点),并且如同用于任何事件一样激活处理器。事件处理器检查该线程睡眠状态,如果设置了睡眠状态,则继续在706处恢复微码状态。事件处理器67通过访问展开寄存器208来确认线程的不活动状态。
更具体地说,通过恢复所有保存的寄存器状态、禁止寄存器状态、和指令指针信息,事件处理器67着手恢复用于该进入线程的微码状态。
在块706处恢复微码状态之后,方法继续块708,其中恢复用于该进入线程的体系结构状态。在块710处,通过从微码定序器66发布的一个适当的微指令,重置或者清除用于该进入线程的事件禁止寄存器206。在块712处,事件处理器67继续服务BREAK事件。在这一点上,在多线程处理器30内执行构成该事件处理器67的微码,以响应于该事件发生执行一系列操作。在块716处,在处理器30内为该进入线程重新继续执行指令取出操作。方法700然后在块718处终止。
时钟控制逻辑为了减少在该多线程处理器30内的功耗和热耗散,在一定条件下停止、或者暂停至少某些在处理器30内的时钟信号是合符需要的。图18是一个流程图,其依据一个示例实施例说明了一种在一个诸如上面所述的示例处理器30的多线程处理器内,停止、或者暂停选择的时钟信号的方法800。为了本说明书起见,使用的对在处理器内的时钟信号的暂停或者停止应当拥有许多在处理器内暂停或者停止一个时钟信号、或者多个信号的技术。例如,能够暂停在处理器30内的一个锁相回路(PLL)、能够禁止沿着一个时钟中心的一个核心时钟信号分布、或者能够选通或者相反阻止经由该时钟中心分布一个时钟信号到在该处理器内的单独功能单元。一个实施例设想后面的情况,其中在一个功能单元接着一个功能单元的基础上,暂停、或者停止供应一个内部时钟信号到在处理器30内的功能单元。因此,当相对于其他功能单元被选通时,该内部时钟信号可以是提供给某些功能单元。这样一个方案在美国专利5,655,127中的单线程微处理器环境内描述了。
在一个实施例中,在图18中说明的方法800可以由集成在处理器30的总线接口单元32内的时钟控制逻辑35执行。在替换实施例中,时钟控制逻辑35当然可以位于远离处理器30的别处。图19A和19B是分别说明有关示例时钟控制逻辑35的更多细节的框图和示意图。
首先参见图19A,显示的时钟控制逻辑35接收三个主要输入,即(1)经由活动线程状态机174输出的活动位820(例如,T0_ACTIVE和T1_ACTIVE);(2)由事件检测器188输出的事件检测信号211;以及(3)由总线接口单元32输出的一个探听控制信号822,其在总线上检测一个可探听的访问并且声明信号882。时钟控制逻辑35使用这些输入产生一个停止时钟信号826,该信号826反过来抑制或者禁止在处理器30内某些功能单元的时钟脉冲。
图19B是一个说明示例组合逻辑的示意图,其利用输入211、820和822输出停止时钟信号826。具体地说,事件检测器信号211提供输入到一个或(OR)门822,其反过来提供输入到一个进一步的或(OR)门824。活动位820和探听控制信号822还提供输入到NOR门824,该NOR门或运算这些输入以输出停止时钟信号826。
具体地参见图18,方法800在判定框802开始,在判定框802处判定是否有任何线程(例如,一个第一和一个第二线程)在多线程处理器30内是活动的。这个判定由在图19B中活动位820到或(OR)门824的输出反映。虽然示例实施例说明相对于两个线程可以满足该判定,可以容易地理解相对于在一个多线程处理器内支持的任意数量线程做出这个判定。
在判定框802处的一个否定判定之后,方法800继续判定框804,其中做出关于没有被禁止的任何事件是否为在该多线程处理器内支持的任何线程待决的判定。再次,在示例实施例中,这包含确定任何事件是否为第一或者第二线程待决。这个判定由图19B中显示的,事件检测信号211到或(OR)门822的输入来表示。
在判定框804处的一个否定判定之后,在判定框806处做出任何探听(例如,总线探听、SNC探听或者其他探听)是否正由处理器总线处理的一个进一步的判定。在本发明的示例实施例中,这个判定由输入该探听控制信号822到或(OR)门824实现。
在判定框806处的一个否定判定之后,方法800继续到块808,其中到选定功能单元的内部时钟信号被停止或者抑制了。具体地说,到总线待决逻辑和总线访问逻辑的时钟信号没有被暂停或者停止,因为这允许该总线接口单元32检测在系统总线上起源的BREAK事件或者探听(例如,管脚事件)并且响应于这样的BREAK事件再启动该时钟脉冲到功能单元。通过声明停止时钟信号826可以实现内部时钟信号到功能单元的抑制,其具有选通时钟信号到预定功能单元的效果。
在块808完成之后,方法800返回到判定框802。在判定框802、804和806处的判定之后,可以通过一个连续的基础进行循环。
在判定框802、804和806中任何一个的肯定判定之后,方法800转移到块810,其中,如果已经选通了到某些功能单元的时钟信号的话,则这些内部时钟信号再次被激活。做为选择,如果时钟信号已经是活动的,则把这些时钟信号保持在一个活动状态。
在响应于一个中断事件,执行块810的地方(例如,在判定框804的一个肯定判定之后),在微处理器内的功能单元可以以上面所述的方式,基于活动线程的数目,在清空信号的声明处被主动地划分。
例如,在一个具有两个或更多线程的多线程处理器30中,一些线程可以是不活动的,而在这样情况下将不会划分该功能单元以容纳不活动的线程。
当完成块810时,方法800再次返回到判定框802,并且开始由判定框802、804和806表示的判定的另一次迭代。
因此,已经描述了用于在一个多线程处理器内管理一个时钟信号的方法和装置。虽然已经参考具体的示例实施例加以描述了,但是显然可以对这些实施例进行各种修改和改变而不背离本发明宽阔的范围和精神。因此,说明书和附图只作为一个示例说明,而不是起限制作用。
权利要求
1.一种方法,包含相对于在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示;为在该多线程处理器内支持的多个线程中的每一个,保持一个活动或者不活动状态的一个指示;检测由相对于多个线程中每一个的非待决事件指示、和用于这多个线程中每一个的不活动状态的指示所指示的一个时钟停用条件;以及如果一个时钟信号被启用了,则响应于该时钟停用条件的检测,相对于在该多线程处理器内的至少一个功能单元,停用该时钟信号。
2.如权利要求1所述的方法,包含检测由相对于在多线程处理器内支持的多个线程中的至少一个线程的一个待决事件指示、或者用于在多线程处理器内支持的多个线程中的至少一个线程的一个活动状态的指示来指示的一个时钟启用条件,以及,如果一个时钟信号被停用了,则响应于该时钟启用条件的检测,相对于在该多线程处理器内的至少一个功能单元,启用该时钟信号。
3.如权利要求1所述的方法,包含仅仅在没有一个总线访问操作的情况下,提供一个总线访问操作的一个指示,并且检测时钟停用条件。
4.如权利要求3所述的方法,其特征在于总线访问操作包含一个探听操作,而且其中当该总线访问操作在一个预定的探听期间是活动的时,提供该总线访问操作的指示。
5.如权利要求2所述的方法,包含为由多线程处理器支持的多个线程中的至少一个第一线程保持一个事件禁止指示,其中该事件禁止指示标识相对于第一线程的至少一个事件,该事件不构成触发第一线程在不活动和活动状态之间的一次转换的一个事件。
6.如权利要求5所述的方法,其特征在于时钟停用条件和时钟启用条件的检测受到相对于第一线程的事件禁止指示的支配,而且如果由用于第一个线程的事件禁止指示指示一个待决事件被禁止了,则检测到时钟停用条件或者没有检测到一个时钟启用条件。
7.如权利要求1所述的方法,其特征在于维护相对于多个线程中每一个的线程动作指示包含保持一个活动的线程状态机,其为支持的多个线程中的每一个输出一个信号以指示一个相应的线程是在活动状态还是在不活动状态中。
8.如权利要求1所述的方法,其特征在于相对于至少一个功能单元停用时钟信号包含选通该时钟信号。
9.如权利要求1所述的方法,其特征在于相对于至少一个功能单元停用该时钟信号包含在一个处理器时钟中心上禁止一个处理器时钟信号的传送。
10.如权利要求1所述的方法,其特征在于相对于至少一个功能单元停用该时钟信号包含停用一个产生一个处理器时钟信号的锁相回路。
11.如权利要求1所述的方法,其特征在于停用时钟信号包含保持提供一个时钟信号到该多线程处理器的总线插脚,以便当该时钟信号被停用时启用一个总线访问操作或者事件的检测。
12.一种装置,包含一个待决事件指示器,其相对于在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示;一个活动线程指示器,其为在多线程处理器内支持的多个线程中的每一个,保持一个活动或者不活动状态的一个指示;以及时钟控制逻辑,检测由相对于多个线程中每一个的非待决事件的指示和相对于多个线程中每一个的一个不活动状态指示的一个时钟停用条件,并且响应于该时钟停用条件的检测,相对于在该多线程处理器内的至少一个功能单元停用一个时钟信号。
13.如权利要求12所述的装置,其特征在于该时钟控制逻辑检测由相对于在多线程处理器内支持的多个线程中的至少一个线程的一个待决事件指示所指示的一个时钟启用条件,并且如果该时钟信号被停用了,则响应于该时钟启用条件的检测,相对于在该多线程处理器内的至少一个功能单元启用该时钟信号。
14.如权利要求12所述的装置,其特征在于该时钟控制逻辑检测由用于在多线程处理器内支持的多个线程中至少一个线程的一个活动状态指示所指示的一个时钟启用条件,并且如果该时钟信号被停用了,则响应于该时钟启用条件的检测,相对于在该多线程处理器内的至少一个功能单元启用该时钟信号。
15.如权利要求12所述的装置,包含提供了一个总线访问操作的一个指示的总线探听逻辑,而且其特征在于该时钟控制逻辑仅仅在没有来自于该总线探听逻辑的一个总线访问操作的一个指示的情况下,检测该时钟停用条件。
16.如权利要求15所述的装置,其特征在于该总线访问操作包含一个探听操作,而且,当该总线访问操作活动持续一个预定探听周期时,该总线探听逻辑提供该总线访问操作的指示。
17.如权利要求13所述的装置,包含一个事件禁止指示器,为由该多线程处理器支持的多个线程中的至少一个第一线程保持一个事件禁止指示,该事件禁止指示标识有关该第一个线程的至少一个事件,该事件不构成触发第一个线程在不活动和活动状态之间的一次转换的一个事件。
18.如权利要求17所述的装置,其特征在于时钟控制逻辑检测该时钟停用条件和时钟启用条件受到有关第一个线程的事件禁止指示的支配,如果由用于第一个线程的事件禁止指示指示一个待决事件被禁止了,则该时钟控制逻辑检测到了该时钟停用条件,或者没有检测到一个时钟启用条件。
19.如权利要求12所述的装置,包含一个活动线程状态机,其为支持的多个线程中的每一个输出一个信号,来指示一个相应的线程是在活动状态还是在不活动状态中。
20.如权利要求12所述的装置,其特征在于相对于至少一个功能单元,该时钟控制逻辑通过选通该时钟信号来停用该时钟信号。
21.如权利要求12所述的装置,其特征在于相对于至少一个功能单元,该时钟控制逻辑通过在一个处理器时钟中心上禁止一个处理器时钟信号的传送来停用该时钟信号。
22.如权利要求12所述的装置,其特征在于相对于至少一个功能单元,该时钟控制逻辑通过停用一个产生一个处理器时钟信号的锁相回路来停用该时钟信号。
23.如权利要求12所述的装置,其特征在于该时钟控制逻辑相对于至少一个功能单元停用该时钟信号,但是保持提供一个时钟信号到多线程处理器的总线插脚,以便当该时钟信号被停用时,启用一个总线访问操作或者事件的检测。
24.一种装置,包含第一装置,用于相对于在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示;第二装置,用于为在该多线程处理器内支持的多个线程中的每一个,保持一个活动或者不活动状态的一个指示;以及第三装置,用于检测由相对于多个线程中每一个的非待决事件的指示和相对于多个线程中每一个的一个不活动状态所指示的一个时钟停用条件,以及响应于该时钟停用条件的检测,相对于在该多线程处理器内的至少一个功能单元停用一个时钟信号。
25.一个包含了一个指令序列的机器可读介质,当该指令序列由一个机器执行时,使该机器执行以下步骤相对于在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示;为在该多线程处理器内支持的多个线程中的每一个,保持一个活动或者不活动状态的一个指示;检测由相对于多个线程中每一个的非待决事件指示和用于多个线程中每一个的不活动状态所指示的一个时钟停用条件;以及如果一个时钟信号被启用了,则响应于该时钟停用条件的检测,相对于在该多线程处理器内的至少一个功能单元,停用该时钟信号。
全文摘要
一种方法,包含根据在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示。还保持用于多个线程中每一个的一个活动或者不活动状态的一个指示。检测一个时钟停用条件。可以由缺少相对于多个线程中每一个的待决事件和用于多个线程中每一个的不活动状态来指示这个时钟停用条件。如果一个时钟信号被启用了,则响应于该时钟禁止条件的检测,相对于在该多线程处理器内的至少一个功能单元,停用该时钟信号。
文档编号G06F9/38GK1433544SQ00818879
公开日2003年7月30日 申请日期2000年10月11日 优先权日1999年12月9日
发明者D·罗杰斯, B·托尔, A·伍德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1