会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电信 / 时钟信号 / 在一个多线程处理器内停用时钟信号的方法和装置

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

阅读:862发布:2021-02-28

IPRDB可以提供在一个多线程处理器内停用时钟信号的方法和装置专利检索,专利查询,专利分析的服务。并且一种方法,包含:根据在一个多线程处理器内支持的多个线程中的每一个,保持一个待决事件的一个指示。还保持用于多个线程中每一个的一个活动或者不活动状态的一个指示。检测一个时钟停用条件。可以由缺少相对于多个线程中每一个的待决事件和用于多个线程中每一个的不活动状态来指示这个时钟停用条件。如果一个时钟信号被启用了,则响应于该时钟禁止条件的检测,相对于在该多线程处理器内的至少一个功能单元,停用该时钟信号。,下面是在一个多线程处理器内停用时钟信号的方法和装置专利的具体信息内容。

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.一种用于对多线程处理器中时钟信号进行管理的装置,包 含:

第一装置,用于相对于在一个多线程处理器内支持的多个线程中 的每一个,保持一个待决事件的一个指示;

第二装置,用于为在该多线程处理器内支持的多个线程中的每一 个,保持一个活动或者不活动状态的一个指示;以及第三装置,用于检测由相对于多个线程中每一个的非待决事件的 指示和相对于多个线程中每一个的一个不活动状态所指示的一个时 钟停用条件,以及响应于该时钟停用条件的检测,相对于在该多线程 处理器内的至少一个功能单元停用一个时钟信号。

说明书全文

发明领域

本发明通常涉及多线程处理器领域,更具体地涉及一种用于在一 个多线程(MT)处理器内停用一个时钟信号的方法和装置。

发明背景技术

多线程(MT)处理器设计近来已经被认为是一个越来越吸引人的、 用于增加处理器性能的选择。在一个处理器内的多线程,特别提供了 用于更有效地使用各种处理器资源、和尤其用于更有效地使用在一个 处理器内的执行逻辑的可能性。具体来说,通过传送多个线程到一个 处理器的执行逻辑,否则将由于在一个特定线程处理过程中的一个停 止或者其它延迟而成为空闲的时钟周期可以被利用以服务于一个进一 步的线程。在一个特定线程处理过程中的一个停止可以由在一个处理 器流水线内的许多事故引起。例如,对于包含在一个线程内的一条指 令来说,一个高速缓存未中或者一个分支预测错误(即,一个长的延 迟操作)通常会导致相关线程处理过程的停止。长延迟操作在执行逻 辑效率上的负面影响由近来在执行逻辑吞吐量中的增加而被加重,其 中该增加在存储器访问和检索速率中有超前的提高。

鉴于由许多流行的操作系统,诸如Windows NT和UNIX操作系 统、对这种多线程应用的支持,多线程计算机应用也变得越来越普遍。 多线程计算机应用尤其在多媒体领域是有效率的。

依据在相关处理器内使用的线程交叉或切换方案,多线程处理器 大致可以被分为两个类别(即,精细或者粗糙设计)。精细多线程设 计在一个处理器内支持多个活动的线程,而且通常在一个周期接一个 周期的基础上交叉两个不同的线程。粗糙多线程设计一般在发生某些 长延迟事件、诸如一个高速缓存未中时交叉不同线程的指令。一个粗 糙多线程设计在1996年5月、 第23期Annual International Symposium on Computer Architecture的203-212页上、由 Eickemayer,R.、Johnson,R.等人所著的“Evaluation of Multithreaded Uniprocessors for Commercial Application Environments”中进行了讨论。在由Massachusetts Norwell的 Kluwer Academic出版社于1994年出版的、由R.A.lannuci等人 编辑的 Multithreaded Computer Architectures:A Summary of the State of the Art的167-200页上、由Laudon,I、Gupta,A所 著的“Architectural and Implementation Tradeoffs in the Design of 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 Instruction Set Computers,CISC)、精简指令集计算机(Reduced Instruction Set Computers,RISC)、或者超长指令字(Very Long Instruction World,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接收指令取出请求,并且传送原始指令(即,编码的宏指 令)到该微指令翻译引擎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)。指令解码器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和MACHINE CHECK事件228,它们由事件检测器188以如下所述的方式发信号通知 到在一个多线程处理器30内的多个线程,一旦检测到这些事件就导致 所有线程同时到达同一个事件处理器67。第二组事件包含FAULT事件 230、ASSIST事件232、DOUBLE FAULT事件234、SHUTDOWN事件236 和SMC(自我修改代码)事件238,这些事件的每一个在发信号通知该 事件的一个特定线程的微指令收回上被报告。具体地说,事件检测器 188将依据错误信息为其指示一个错误状态的一个微指令的收回而检 测第二组中的一个事件。第二组中的一个事件的检测仅仅由事件检测 器188发信号通知到产生相关事件的线程。

第三组事件包含一个INIT(简短重置)事件240、一个INTR(本 地中断)事件242、一个NMI(非屏蔽中断)事件244、一个DATA BREAKFOINT事件246、一个TRACE MESSAGE事件248和一个A2OM(地 址绕回)事件250。在具有一个接收中断或者接收陷阱流标记的一个微 指令的收回上报告第三组事件。第三组中的事件检测仅仅由事件检测 器188发信号通知到产生相关事件的线程。

第四组事件包含一个SMI(系统管理中断)事件250、一个STOP CLOCK事件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)。

可以由微码定序器66响应于用于活动线程的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表示的判定的另一次迭代。

因此,已经描述了用于在一个多线程处理器内管理一个时钟信号 的方法和装置。虽然已经参考具体的示例实施例加以描述了,但是显 然可以对这些实施例进行各种修改和改变而不背离本发明宽阔的范围 和精神。因此,说明书和附图只作为一个示例说明,而不是起限制作 用。

高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用