CN100382035C - 进入和退出多线程处理器中多线程的方法和装置 - Google Patents

进入和退出多线程处理器中多线程的方法和装置 Download PDF

Info

Publication number
CN100382035C
CN100382035C CNB2006100025729A CN200610002572A CN100382035C CN 100382035 C CN100382035 C CN 100382035C CN B2006100025729 A CNB2006100025729 A CN B2006100025729A CN 200610002572 A CN200610002572 A CN 200610002572A CN 100382035 C CN100382035 C CN 100382035C
Authority
CN
China
Prior art keywords
thread
state
incident
multiline procedure
procedure processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CNB2006100025729A
Other languages
English (en)
Other versions
CN1801099A (zh
Inventor
D·罗杰斯
D·波格斯
A·黙钱特
R·科塔
R·苏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1801099A publication Critical patent/CN1801099A/zh
Application granted granted Critical
Publication of CN100382035C publication Critical patent/CN100382035C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Abstract

一种方法包括维护状态机以提供多位输出,多位输出的每一位都表示多线程处理器所执行的多线程中的有关线程的相应状态。检测第一线程的状态,对其作出响应,多线程处理器中的功能单元根据状态机的多位输出进行配置。

Description

进入和退出多线程处理器中多线程的方法和装置
技术领域
一般来说,本发明涉及多线程处理器领域,更具体地说,涉及进入和退出多线程(MT)处理器中多线程的方法及装置。
背景技术
近来,多线程(MT)处理器设计被认为是增强处理器性能的一个极有吸引力的选择。其中,处理器中的多线程技术提供了更为有效利用各种处理器资源的可能性,尤其是更为有效利用处理器中执行逻辑装置的可能性。具体地说,通过将多线程馈送给处理器的执行逻辑装置,时钟周期可以用来为另一个线程提供服务,所述时钟周期不然因在特定线程处理过程中的停止或其它延时而为空闲。特定线程处理过程中的停止可能由处理器流水线中许多事件所引起。例如,对于包含在线程中的指令的高速缓存未命中或转移误预测(即较长等待时间操作),通常导致对相关线程停止的处理。较长等待时间操作对执行逻辑装置效率的消极影响由于近来执行逻辑装置吞吐量的增加而加剧,其中,执行逻辑装置吞吐量的增加已经超过了存储器存取和检索速率的发展。
鉴于诸如Windows NT和Unix操作系统的许多流行操作系统对这类多线程应用所提供的支持,多线程计算机应用也日益普及。在多媒体领域中,多线程计算机应用尤为有效。
根据相关处理器中所采用的线程交错存取或交换方案,多线程处理器大致上可以分为两类(即精设计或粗设计)。精多线程设计支持处理器中的多活动线程,并且通常逐个周期地交错两个不同的线程。在出现诸如高速缓存未命中的某个长等待时间事件时,粗多线程设计通常交错不同线程的指令。Eickemayer,R.、Johnson,R等人的“商业应用环境的多线程单处理器的评估”一文(The 23rd Annual International Symposium on Computer Architecture pp.203-212,May1996.)中讨论了粗多线程设计。多线程计算机体系结构:技术现状 概要一书中Laudon,J、Gupta,A的“多环境处理器设计中体系结构和实现折中”(edited by R.A.Iannuci et al.,PP.167-200,KluwerAcademic Publisher,Norwell,Massachusetts,1994)进一步说明精设计和粗设计之间的差别。Laudon还建议了一种交错方案,将精设计的逐个周期交换与粗设计的全流水线互锁结合(或封锁方案)。为此,Laudon建议了“补偿”指令,使特定线程(或环境)对于一定数量的周期不可用。在出现诸如高速缓存未命中的预定事件时可发出这种“补偿”指令。这样,通过简单地使其中一个线程不可用,Laudon即避免了必须执行实际的线程交换。
在无序的推测性执行处理器体系结构环境下,处理器的多线程体系结构提出了许多其它挑战。更具体地说,当考虑多线程时,可能导致指令流的流程中意外变化的事件处理(例如转移指令、异常或中断)是复杂的。在实现多线程间资源共享的处理器中(即:存在有限或无复制的功能单元用于该处理器支持的每个线程),有关特定线程的事件发生的处理的复杂之处在于:处理这类事件时必须考虑到其它线程。
在多线程处理器中实现资源共享的情况下,还希望尝试增加利用对该多线程处理器中所服务的线程状态中的变化作出响应的共享资源。
发明内容
根据本发明,提供了一种方法,该方法包括维护状态机以提供多位输出,多位输出的每一位均表示多线程处理器中执行的多线程的相关线程的相应状态。检测多线程处理器中第一线程的状态变化。多线程处理器中的功能单元根据状态机的多位输出而被配置。
根据本发明的一种方法,包括以下步骤:
维护状态机以提供多位输出,所述多位输出的每一位都表示多线程处理器所执行的多线程中的有关线程的相应状态,其中所述多位输出的每一位都表示所述有关线程的所述状态是活动的或是非活动的;
检测所述多线程处理器中第一线程的状态的变化;以及
根据所述状态机的所述多位输出来配置所述多线程处理器中的功能单元。
根据本发明的一种装置,包括:
状态机,用于提供多位输出,所述多位输出的每一位都表示多线程处理器所执行的多线程中的有关线程的相应状态,其中所述多位输出的每一位都表示所述有关线程的所述状态是活动的或是非活动的,并且检测所述多线程处理器中第一线程的状态的变化;以及
配置逻辑装置,用于根据所述状态机的所述多位输出来配置所述多线程处理器中的功能单元。
根据本发明的另一种装置,包括:
第一装置,用于提供多位输出,所述多位输出的每一位都表示多线程处理器所执行的多线程中的有关线程的相应状态,并且检测所述多线程处理器中第一线程的状态的变化,其中所述多位输出的每一位都表示所述有关线程的所述状态是活动的或是非活动的;以及
第二装置,用于根据所述状态机的所述多位输出来配置所述多线程处理器中的功能单元。
通过附图及下面的详细描述,本发明的其它特点将会明显。
附图说明
通过示例来说明本发明,但本发明并不限于所述附图的表示,附图中相同标号表示相同的单元,附图中:
图1是方框图,说明具有多线程支持的处理器流水线的一个实施例。
图2是方框图,说明通用多线程微处理器形式的处理器的示例性实施例。
图3是方框图,说明示例性多线程微处理器的所选组件,具体描述各个功能单元,它们提供经逻辑装置分区以适应多线程的缓存(或存储)功能。
图4是方框图,说明根据一个实施例的无序群集器。
图5是寄存器别名表和寄存器文件的图示,并被用于一个实施例中。
图6A是方框图,详细说明根据一个实施例的重新排序缓冲器,它被逻辑装置分区以为多线程处理器中的多线程提供服务。
图6B是按照一个实施例的未决事件寄存器和事件禁止寄存器的图示。
图7A是流程图,说明根据一个实施例的、处理多线程处理器中的事件的一种方法。
图7B是流程图,说明根据一个实施例的、处理多线程处理器中的“虚拟彻底清除(virtual nuke)”事件的一种方法。
图8是根据一个实施例的在多线程处理器中实现的多个可由事件检测器检测的示例性事件的图示。
图9和10是方框图,分别说明诸如图6A所示的示例性重新排序缓冲器中重新排序表的示例性内容。
图11A是流程图,说明根据一个示例性实施例的、在至少支持第一和第二线程的多线程处理器中执行清除(或彻底清除)操作的一种方法。
图11B是方框图,说明根据一个示例性实施例的、用来根据活动线程状态机的输出来配置功能单元的配置逻辑装置。
图12是时序图,说明根据一个实施例断言彻底清除信号。
图13是流程图,说明根据一个实施例的、在多线程处理器中提供独占访问事件处理程序的一种方法。
图14是状态图,说明根据一个实施例的、在多线程处理器中实现的独占访问状态机的操作。
图15是状态图,说明根据一个实施例的可由多线程处理器中实现的活动线程状态机占用的状态。
图16A是流程图,说明根据一个实施例的、在检测到多线程处理器中活动线程的睡眠事件时退出该活动线程的一种方法。
图16B是根据一个实施例的、在退出线程时储存状态和释放寄存器的图示。
图17是流程图,说明根据一个实施例的、在检测到非活动线程的中断事件时将该线程从非活动状态转换为活动状态的一种方法。
图18是流程图,说明根据一个实施例的、对多线程处理器中至少一个功能单元的时钟信号的允许和禁止进行管理的一种方法。
图19A是方框图,说明根据一个实施例的用于允许和禁止多线程处理器中的时钟信号的时钟控制逻辑装置。
图19B是示意图,说明图19A所示时钟控制逻辑装置的一个实施例。
具体实施方式
现说明用于进入和退出多线程处理器中多线程的方法和装置。为便于说明,在以下描述中给出了大量具体细节,以便透彻理解本发明。然而,本领域的技术人员将清楚,没有这些具体细节也可以实施本发明。
为便于说明,术语“事件”将包括处理器内部或外部的任何事件,所述事件引起处理器中指令流(宏指令或微指令)服务的改变或中断。因此,术语“事件”将包括但不限于可在处理器内部或外部产生的转移指令进程、异常以及中断。
为了便于说明,术语“处理器”应表示能执行指令序列(例如宏指令或微指令)的任何机器,且应包括但不限于通用微处理器、专用微处理器、图形控制器、音频控制器、多媒体控制器、微控制器或网络控制器。此外,术语“处理器”应还表示复杂指令集计算机(CISC)、精简指令集计算机(RISC)或超长指令字(VLIW)处理器。
另外,术语“清除点”应包括通过流程标记符在指令流中(包括微指令或宏指令流)提供的任何指令,或可以处理事件的指令流中某位置的其它指令。
术语“指令”应包括但不限于宏指令或微指令。
对主要以硬件或软件实现的本发明某些示例性实施例进行说明。然而,本领域的技术人员将知道,可以容易地以硬件、软件或硬件和软件的组合来实现许多特性。
实现本发明实施例的软件(例如微指令和宏指令)可以完全或至少部分地驻留在处理器可存取的主存储器中和/或处理器中(例如在高速缓存或微码定序器)。例如,事件处理程序和状态机可用微码定序器发送的微码来实现。
软件还可以经网络接口装置进行传送或接收。
为了便于说明,术语“机器可读媒体”应包括能储存机器执行的指令序列或对其进行编码的任何媒体,其中机器执行的指令序列使机器执行本发明方法的任何一种方法。因此,术语“机器可读媒体”应包括但不限于固态存储器、光盘和磁盘、以及载波信号。
处理器流水线
图1是一个高级方框图,说明处理器流水线10的一个实施例。流水线10包括多个管道级,以提取管道级12开始,在该级检索指令(例如宏指令)并将其馈送到流水线10。例如,可以从结合在处理器中或与处理器紧密关联的高速缓冲存储器中检索宏指令,或者经处理器总线从外部主存储器中检索宏指令。从提取管道级12开始,宏指令被传送到解码管道级14,宏指令在该级被翻译为适合在处理器中执行的微指令(又称作“微码”)。然后,微指令被下传给分配管道级16,在该级根据可用性和需求将处理器资源分配给各个微指令。微指令则在退役管道级20退役或“回写”(例如提交给体系结构状态)之前在执行级18被执行。
微处理器体系结构
图2是方框图,说明通用微处理器形式的处理器30的示例性实施例。下面将处理器30作为多线程(MT)处理器进行说明,因此它能处理多指令线程(或环境)。但是,以下在说明中提供的多个示教并不是特定用于多线程处理器的,它们也可以应用于单线程处理器中。在一个示例性实施例中,处理器30可以包括Intel体系结构(IA)微处理器,它能执行Intel体系结构指令集。这种Intel体系结构微处理器的一个示例是Intel公司(Santa Clara,California)制造的PentiumPro微处理器或Pentium III微处理器。
在一个实施例中,处理器30包括有序前端和无序后端。有序前端包括总线接口单元32,用作处理器30和可以使用处理器30的计算机系统中的其它组件(例如主存储器)之间的导管。为此,总线接口单元32将处理器30与处理器总线(未示出)连接,其中,可以经处理器总线在处理器30接收或者从处理器30传送数据和控制信息。总线接口单元32包括前侧总线(FSB:Front Side Bus)逻辑装置34,控制通过处理器总线进行的通信。总线接口单元32还包括总线队列36,对通过处理器总线进行的通信提供缓冲功能。所示总线接口单元32从存储器执行单元42接收总线请求38并向存储器执行单元42发送窥探或总线返回值,其中存储器执行单元42提供处理器30中的本地存储器能力。存储器执行单元42包括统一数据和指令高速缓存44、数据翻译后援缓冲器(TLB)46以及存储器排序缓冲器48。存储器执行单元42从微指令翻译引擎54接收指令提取请求50并向微指令翻译引擎54传送原始指令52(即编码宏指令),其中微指令翻译引擎54将接收的宏指令翻译为相应的微指令集。
微指令翻译引擎54实际作为跟踪高速缓存“未命中处理程序”,用于在跟踪高速缓存未命中的情况下将微指令传送给跟踪高速缓存62。为此,在跟踪高速缓存未命中的情况下,微指令翻译引擎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)(未示出),复用器在与包含在从下一指令指针100发出的下一指令请求中的第一或第二线程有关的指令指针之间进行选择。在一个实施例中,下一指令指针100逐个周期地(“乒乓”)交错第一和第二线程的下一指令请求,其中假定两个线程的指令已被请求,并且用于两个线程的指令流缓冲器106资源还没有耗尽。根据初始请求地址是处于32字节还是64字节定位线的上半部分,下一指令指针请求可以适合于16、32或64字节。下一指令指针100可以通过转移预测器104、转移地址计算器114或跟踪高速缓存62来重新定向,跟踪高速缓存未命中请求为最高优先级重新定向请求。
当下一指令指针100向统一高速缓存44进行指令请求时,生成两位的“请求标识符”,与该指令请求关联,并用作相关指令请求的“标记符”。当响应指令请求而返回数据时,统一高速缓存44将以下标记符或标识符与数据一起返回:
1.下一指令指针100提供的“请求标识符”;
2.标识返回块的三位“块标识符”;以及
3.标识返回数据所属线程的“线程标识符”。
下一指令请求从下一指令指针100传送到指令TLB 102,后者执行地址查找操作,并将物理地址传送到统一高速缓存44。统一高速缓存44将对应的宏指令传送到指令流缓冲器106。每下一指令请求也直接从下一指令指针100传送到指令流缓冲器106,以便允许指令流缓冲器106来标识从统一高速缓存44接收的宏指令所属的线程。然后,来自第一和第二线程的宏指令从指令流缓冲器106发送到指令预解码器108,后者执行关于接收指令流的(宏指令的)多个长度计算和字节标记操作。具体地说,指令预解码器108生成一系列字节标记矢量,它们也用来区分传送到指令导引逻辑装置110的指令流中的宏指令。
随后,指令导引逻辑装置110利用字节标记矢量来将离散宏指令导引到指令解码器112,用于解码。宏指令还从指令导引逻辑装置110传送到转移地址计算器114,用于转移地址计算。然后,微指令从指令解码器112传送到跟踪传送引擎60。
在解码过程中,将流程标记符与由宏指令翻译成的各微指令相关联。流程标记符表示有关微指令的特征,并且可以例如表示有关微指令为代表宏指令的微码序列中的第一或最后微指令。流程标记符包括“宏指令开始”(BOM)和“宏指令结束”(EOM)流程标记符。根据本发明,解码器112还可以对微指令进行解码,以便使共享资源(多处理器)(SHRMP)流程标记符和同步(SYNC)流程标记符与其相关联。具体地说,共享资源流程标记符将微指令标识为特定线程中的位置,在这个位置,该线程可以被中断(例如被重新启动或暂停),其负面结果比线程中其它位置上的要小。在本发明的一个示例性实施例中,解码器112被构造为用共享资源流程标记符以及较长微码序列中的断续点来标记包含父宏指令的结束或开始的微指令。同步流程标记符将微指令标识为特定线程中的位置,在这个位置,所述线程可以例如对另一个线程中的同步指令作出响应而与其同步。为了便于说明,术语“同步”应表示至少一个线程中的至少第一点的标识,其中处理器状态可以相对于该线程和/或至少另一个线程来进行调整,相对于该线程中或另一个线程中的第二点,对处理器造成的中断要少。
在本发明的一个示例性实施例中,解码器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,然后,再从其中将微指令馈送到无序执行群集器。所示微码定序器66还包括以微码实施的多个事件处理程序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中的每个项目均与体系结构寄存器有关,或者被看作是体系结构寄存器,并且包括指针130,指向储存了属于相关体系结构寄存器的数据的寄存器文件124中的位置。这样,指定较少数量体系结构寄存器的传统微处理器体系结构所产生的问题可以得到解决。
分配及自由列表管理逻辑装置122负责群集器71中的资源分配和状态恢复。逻辑装置122将下列资源分配给每个微指令:
1.序列号,它被提供给各微指令,以便当微指令在群集器71中被处理时,跟踪线程中微指令的逻辑装置顺序。属于各微指令的序列号与微指令的状态信息一起储存在重新排序缓冲器162的表180(下面在图10中示出)中。
2.自由列表管理项目,它被提供给各微指令,以便允许在状态恢复操作时跟踪和恢复微指令的历史记录。
3.重新排序缓冲器(ROB)项目,它按序列号来索引。
4.物理寄存器文件124项目(称作“大理石”),微指令可以在其中储存有用结果。
5.加载缓冲器(未示出)项目。
6.停止缓冲器(未示出)项目。
7.指令队列项目(例如,对存储器指令队列或通用指令地址队列,下面将进行说明)。
在逻辑装置122无法获取所接收的微指令序列的必要资源时,逻辑装置122将请求跟踪传送引擎60停止传送微指令,直到有足够资源可用为止。通过断言图2所示的停止信号82来传送该请求。
对于向微指令分配寄存器文件124中的项目,图5示出垃圾堆阵列(trash heap array)132,用来维护寄存器文件124中没有分配给体系结构寄存器的项目记录(即:它们在寄存器别名表120中没有指针)。逻辑装置122访问垃圾堆阵列132,以便标识寄存器文件124中可分配给所接收的微指令的项目。逻辑装置122还负责回收寄存器文件124中成为可用的项目。
逻辑装置122还维护自由列表管理器(FLM)134,以便能跟踪体系结构寄存器。具体地说,当微指令被分配到的寄存器别名表120时,自由列表管理器134保存寄存器别名表120的变化的历史记录。自由列表管理器134提供“展开”寄存器别名表120的能力,以便在有误预测或事件的情况下指向非推测性状态。自由列表管理器134还使寄存器文件124的项目中的数据存储“老化”,以便保证所有状态信息均是最近的。最后,在退役时,物理寄存器标识符从自由列表管理器134传送到垃圾堆阵列132,以便分配给其它微指令。
指令队列单元136以顺序程序顺序将微指令传送到调度器和记分板单元(SSU)138,并保持和发送执行单元70所需的微指令信息。指令队列单元136可以包括两个不同的结构,即指令队列(IQ)140和指令地址队列(IAQ)142。指令地址队列142是小型结构,被设计成按需要把关键信息(例如微指令源、目的地以及等待时间)馈送到单元138。指令地址队列142还可以包括:存储器指令地址队列(MIAQ)和通用指令地址队列(GIAQ),其中存储器指令地址队列(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控制向寄存器文件124中的对应体系结构状态提交保持在重新排序缓冲器162中的推测性结果。
重新排序缓冲器162还负责处理内部及外部事件,下面将进行详细说明。重新排序缓冲器162检测到事件发生时,则断言“彻底清除”信号170。彻底清除信号170具有从当前正在转换的处理器流水线中冲洗(flushing)所有微指令的作用。重新排序162还为跟踪传送引擎60提供一个地址,从该地址开始对微指令定序,以便为事件提供服务(即:从该地址开始发送以微码实施的事件处理程序67)。
重新排序缓冲器(162)
图6A是方框图,详细说明重新排序缓冲器162的一个示例性实施例,它经逻辑装置分区来为多线程处理器30中的多线程提供服务。具体地说,所示重新排序缓冲器162包括重新排序表180,当处理器30以多线程模式运行时,可经逻辑装置分区来容纳第一和第二线程的项目。以单线程模式运行时,整个表180可以用来为单线程提供服务。在一个实施例中,表180包括单式存储结构,以多线程模式运行时,该单式存储结构由两(2)个退役指针182和183引用,其中,退役指针182和183限于表180中预定的和不同的项目集。同样,以单线程模式运行时,表180由单个退役指针182引用。表180包括与寄存器文件124的各项目对应的项目,并储存序列号及故障信息形式的状态信息、逻辑装置目标地址以及寄存器文件124中各微指令数据项目的有效位。表180中的项目均按照组成各微指令的唯一标识符的序列号进行索引。按照序列号,表180中的项目以顺序且有序的方式进行分配和解除分配。除了其它流程标记符之外,所示表180还储存各微指令的共享资源流程标记符184和同步流程标记符186。
重新排序缓冲器162包括事件检测器188,该事件检测器188被连接以便接收中断矢量形式的中断请求,并存取由退役指针182和183引用的表180中的项目。所示事件检测器188还输出彻底清除信号170和清除信号172。
假定特定线程(例如线程0)的特定微指令未受转移误预测、异常或中断,当退役指针182或183加1,以便寻址到相关项目时,则储存在表180项目中的特定指令的信息将被退役到体系结构状态。在这种情况下,形成退役控制电路168的一部分的指令指针计算器190将宏指令或微指令指针加1,以便(1)指向寄存器文件124的对应项目中指定的转移目标地址,或者(2)如果没有发生转移,则指向下一个宏指令或微指令。
如果出现了转移误预测,信息则通过故障信息字段传送到退役控制电路168和事件检测器188。由通过故障信息所表示的转移误预测来看,处理器30可能已经提取至少一些不正确的指令,这些指令已经渗入处理器流水线。由于表180中的项目是按顺序分配的,所以误预测转移微指令之后的所有项目都是受到误预测转移指令流程影响的微指令。对在故障信息中登记误预测转移的微指令的试退役作出响应,事件检测器188断言清除信号172,该清除信号172清除处理器的整个无序后端的所有状态,从而刷新误预测微指令之后的指令所产生的所有状态的无序后端。清除信号172的断言也阻塞随后提取的微指令的发出,其中所述提取的微指令可位于处理器30的有序前端中。
在退役控制电路168中,当通过退役微指令的故障信息通知误预测转移时,IP计算器190确保对指令指针179和/或181进行更新,以表示正确的指令指针值。根据是否会发生转移,IP计算器190采用来自与表180的相关项目对应的寄存器文件项目中的结果数据,来更新指令指针179和/或181,或者当没有发生转移时,将指令指针179和181加1。
事件检测器188还包括多个寄存器200,用于维护有关对多线程中的每个线程所检测的事件的信息。寄存器200包括事件信息寄存器202、未决事件寄存器204、事件禁止寄存器206、展开寄存器208以及管脚状态寄存器210。寄存器202-210中的每一个都能储存有关对特定线程产生的事件的信息。因此,多线程的事件信息可以由寄存器200进行维护。
图6B是第一线程(例如T0)的示例性未决事件寄存器204和示例性事件禁止寄存器206的示意图。
对多线程处理器30中支持的每个线程均提供未决事件寄存器204和事件禁止寄存器206。对每个线程提供不同的寄存器204和206,或者,对单个物理寄存器进行逻辑装置分区以支持多线程。
示例性未决事件寄存器204包含一位或其它数据项,用于由事件检测器188登记的每个事件类型(例如以下参照图8所述的事件)。这些事件可以组成处理器30内部产生的内部事件或处理器30外部产生的外部事件(例如从处理器总线接收的管脚事件)。在所述实施例中,每个线程的未决事件寄存器204不包含回写事件的位,因为这样的事件不是线程特定的,并因此未在未决事件寄存器中“排队”。为此,事件检测器188可以包括回写检测逻辑装置205,在检测到回写事件时断言回写信号。未决事件寄存器204中各线程的位由事件检测器188进行设置,其中,事件检测器188触发一个锁存器,在未决事件寄存器204中设置适当位。在一个示例性实施例中,未决事件寄存器204中与预定事件有关的设置位提供未决的相关类型事件的表示,下面将进行说明。
各线程的事件禁止寄存器206同样包含一位或其它数据结构,用于由事件检测器188识别的每个事件类型,对该位进行设置或复位(即清除),以便记录关于特定线程为中断事件的事件。事件禁止寄存器206中的相应位由控制寄存器写操作进行设置,该操作使用修改处理器30中非更名状态的特殊微指令。事件禁止寄存器206中的位同样可以采用控制寄存器写操作来进行复位(或清除)。
示例性处理器还可具有某些模式,在这些模式中,可以对事件禁止寄存器206中的位进行设置,以便禁止相应模式中的选择事件。
特定线程的每个未决事件寄存器204和事件禁止寄存器206中维护的特定事件类型的位被输出到“与”门209,当寄存器204和206的内容表示相关事件类型未决或未被禁止时,“与”门209再输出各事件类型的事件检测信号211。例如,在事件类型未被禁止的情况下,当事件在未决事件寄存器204中登记时,立即就该事件进行信号通知,由相关事件类型的事件检测信号211的断言所检测。另一方面,如果事件禁止寄存器206的内容禁止了该事件类型,该事件发生将会被记录在未决事件寄存器204中,但是如果清除了事件禁止寄存器206中的适当位,则只是断言事件检测信号211,而该事件仍在寄存器204中记录为未决。这样,某个事件可以记录在未决事件寄存器204中,但只是在取消对特定线程的事件的禁止的稍后,可能才就相关事件发生的事件检测信号211进行信号通知。
每个线程的每个事件类型的事件检测信号211被馈送到事件处理逻辑装置(事件优先化和选择逻辑装置)和时钟控制逻辑装置,这将在下面进行说明。
一旦完成特定事件的处理,该特定事件的事件处理程序负责清除特定线程的未决事件寄存器204中的适当位。在另一个实施例中,未决事件寄存器可以通过硬件进行清除。
多线程处理器环境中的事件发生和事件处理
多线程处理器30中的事件可以从多种源来进行检测并由信号通知。例如,处理器30的有序前端可以就事件发出信号通知,执行单元70同样可以就事件发出信号通知。事件可以包括中断和异常。中断是处理器30外部产生的事件,并可经通用总线(未示出)由设备向处理器30发起。中断可能会使控制流程指向微码事件处理程序67。异常可以大致分为故障、陷阱及帮助等。异常是通常在处理器30中产生的事件。
事件直接传送给重新排序缓冲器162中的事件检测器188,对其作出响应,事件检测器188执行与产生事件的线程有关的多个操作。在高层,事件检测器188对事件的检测作出响应,挂起线程的微指令的退役,将适当的故障信息写入表180,断言彻底清除信号170,调用事件处理程序67以便处理事件,确定重新开始地址,然后再重新开始提取微指令。事件可以采用中断请求(或中断矢量)的形式直接传送给事件检测器188,或者通过记录在退役的第一或第二线程的指令的重新排序表180中的故障信息进行传送。
彻底清除信号170的断言具有清除多线程处理器30的有序前端和无序后端的状态的作用。具体地说,对彻底清除信号170的断言作出响应,许多功能单元,但不一定是所有单元,均清除状态和微指令。存储器顺序缓冲器48和总线接口单元32的某些部分没有进行清除(例如,退役但没有提交储存、总线窥探等)。彻底清除信号170的断言还停止前端进行的指令提取,并且还停止微指令向微码队列68中的定序。当该操作可以在单线程多处理器中或者在执行单线程的多处理器中顺利执行时,其中多线程是现存的并在多线程处理器30中被处理,当处理与单线程有关的事件发生时,其它线程的存在不能忽略。因此,本发明提出一种方法和装置,用于处理多线程处理器中的事件,当出现单线程的事件时,它了解多线程处理器30中多线程的处理和存在。
图7A是流程图,说明根据本发明的一个示例性实施例的一种方法220,用于处理多线程处理器30中的事件发生。方法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 BREAKPOINT(数据断点)事件246、TRACE MESSAGE(跟踪消息)事件248以及A20M(地址回绕)事件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的示例性内容,为了说明本发明的一个示例性实施例中的事件和清除点(又称作“彻底清除点”)检测,下面将会详细说明重新排序缓冲器162中重新排序表的内容。事件检测器188在块222对上述任何一个事件的检测可能会引起对事件266的响应,其中事件266是从多线程处理器30中的内部源或从处理器30外的外部源传送到事件检测器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还要对第二线程是否已经遇到事件作出判定。这样的事件可包括上述除VIRTUALNUKE事件260之外的任何事件。这个确定也是由事件检测器188对第二线程的事件信号266或故障信息信号269作出响应来作出。与第二线程所遇到的任何事件有关的信息储存在第二线程专用的事件信息寄存器202的部分中,并且该事件发生在未决事件寄存器204中进行登记。
如果第二线程单独遇到事件,则所述方法直接进行到块280,在该块中执行多线程彻底清除操作,以便清除多线程处理器30的状态。另一方面,如果第二线程没有遇到事件,则在判定框282作出判定:第一线程所遇到的第一事件是否要求修改共享状态或共享资源,以便处理第一事件。例如,在第一事件包含如上所述的SYNCHRONIZATION事件262,这表示第一线程要求访问共享状态资源。可以通过使具有相关的共享资源和同步流程标记符184和186的第一线程同步微指令退役,来标识SYNCHRONIZATION事件262。图10是方框图,与图9所示类似,说明重新排序表180的示例性内容。所示分配给第一线程(例如线程0)的表180的部分包括由退役指针182引用的同步微指令。所示同步微指令还具有相关的共享资源流程标记符184和同步流程标记符186。所示同步微指令的退役将作为SYNCHRONIZATION事件262的发生而由事件检测器188来登记。
如果确定第一线程(例如线程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事件260以与其它事件略有不同的方式被处理。为此,图7B是说明根据一个示例性实施例的检测和处理VIRTUAL NUKE事件260的方法291的流程图。方法291假定当前第二线程没有事件为未决(即:记录在第二线程的未决寄存器中)。
方法291在块292以第一线程的第一事件的事件检测器188进行的检测开始。这样的事件可以是前面参照图8所述的任何一个事件。
在块293,事件检测器188停止第一线程的退役。在块294,事件检测器188检测到具有共享资源流程标记符184或同步流程标记符的微指令的退役。在块295,“虚拟彻底清除”处理程序从微码定序器66中被调用。在块296中,“虚拟彻底清除”事件处理程序在前面于块294中退役的微指令之后的微指令处重新开始执行第二线程。方法291则在块297结束。
彻底清除操作
图11A是流程图,说明根据一个示例性实施例的一种方法300,用于执行至少支持第一和第二线程的多线程处理器中的清除(或彻底清除)操作。方法300在块302以事件检测器188对事件的发生和检测作出响应而进行的彻底清除信号170的断言开始。彻底清除信号170被传送给多线程处理器30中的多个功能单元,并且,对彻底清除信号170进行的断言和取消断言定义了一个窗口,在该窗口中,执行准备状态清除和功能单元的配置的活动。图12是时序图,说明与时钟信号304的上升沿产生同步的彻底清除信号170的断言。
在块303,对活动线程状态机进行评估。
在块306中,第一、第二线程的序列号和最后的微指令信号被传送给分配及自由列表管理逻辑装置122和TBIT,其中,最后的微指令信号表示事件产生的微指令是否退役,TBIT是跟踪转移预测单元(TBPU)(又是TDE 60的一部分)中的结构,用于跟踪处理器30的有序前端中的宏指令和微指令指针信息。TBIT利用该信息来锁存有关事件的信息(例如微指令和宏指令的指令指针)。
在块308中,事件检测器188建立第一和第二线程中每一个的事件矢量并将其传送给微码定序器66。其中每个事件矢量包括信息,该信息标识(1)物理重新排序缓冲器位置(即标识彻底清除点时各退役指针182的值),它在彻底清除点(或清除点)被定位时在退役,(2)事件处理程序标识符,它在构成事件处理程序67以处理检测事件的微码被定位的情况下标识微码定序器66中的位置,以及(3)线程标识符,用于标识第一或第二线程,以及(4)线程优先级位,它确定事件处理程序67相对于其它线程调用的事件处理程序的优先级。
在块310中,分配及自由列表管理逻辑装置122采用在块306传送的序列号来将影像寄存器别名表(影像RAT)进行到检测到彻底清除点的点;并且在块312,主寄存器别名表120的状态从影像寄存器别名表中被恢复。
在块314,分配及自由列表管理逻辑装置122从自由列表管理器134恢复寄存器号(或“大理石”),并将所恢复的寄存器号指配给垃圾堆阵列132,其中寄存器号又可以被分配。当所有适当的寄存器号都已从自由列表管理器134中恢复时,分配及自由列表管理逻辑装置122还断言“恢复的”信号(未示出)。彻底清除信号170保持在断言状态中,直到从分配及自由列表管理逻辑装置122接收到该“恢复的”信号。
在块316中,第一和第二线程的所有“前辈(senior)”存储(即已经退役但还未更新存储器的存储)均采用存储提交逻辑装置(未示出)从存储顺序缓冲器中排出。
在块320中,事件检测器188在时钟信号304的上升沿取消断言彻底清除信号170,如图12所示。要指出,彻底清除信号170保持在断言状态至少时钟信号304的三个时钟周期。但是,如果在断言彻底清除信号170之后来自分配及自由列表管理逻辑装置122的“恢复”信号还没有在时钟信号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忽略所有线程的事件矢量。
通过提供在彻底清除信号170的取消断言(发送信号通知彻底清除操作结束)时能由各种功能单元检查的活动线程状态机171保持的活动位,可以提供一个方便集中的指示,根据该指示,在彻底清除操作完成之后,各种功能单元可以配置为支持多线程处理器30中正确数量的活动线程。
图11B是方框图,说明示例性配置逻辑装置329,它与功能单元331相关联,用来将功能单元331配置为支持多线程处理器中的一个或多个活动线程。功能单元331可以是上述任何一个功能单元,或者是本领域技术人员知道的包含在处理器中的任何功能单元。所示功能单元331包含由配置逻辑装置329进行配置的存储和逻辑装置组件。例如,存储组件可以包含寄存器的集合。当多线程是活动的时候(即当处理器以MT模式运行时),所述寄存器中的每一个可被分配给所述线程中特定一个线程的存储微指令或数据。因此,图11B所示存储组件经逻辑装置分区以支持第一和第二线程(例如T0和T1)。当然,存储组件可以被分区以支持任意数量的活动线程。
所示逻辑装置组件包括MT逻辑装置,特别支持处理器中的多线程操作(即MT模式)。
所示配置逻辑装置329保持指针值333,指针值333被输出到功能单元331的存储组件中。在一个示例性实施例中,这些指针值333用来对存储组件进行逻辑装置分区。例如,可以为每个活动线程生成单独的一对读和写指针值。每个线程的指针值的上、下限由配置逻辑装置329根据活动线程的数量来确定。例如,如果别的线程变为非活动的,可以由特定线程的一组指针值表示的寄存器的范围则可以增加,以覆盖以前分配给另一个线程的寄存器。
配置逻辑装置329还包括MT支持允许指示335,MT支持允许指示335被输出给功能单元的逻辑装置组件以允许或禁止功能逻辑装置331的MT支持逻辑装置。
由活动线程状态机174输出的活动位327向配置逻辑装置提供输入,并由配置逻辑装置329用来生成值333的适当点及提供适当的MT支持允许输出。
事件处理程序进行的独占访问
某些事件处理程序(例如用于处理分页和同步事件的事件处理程序)要求独占访问多线程处理器30,以便利用共享资源并修改共享状态。因此,微码定序器66实现独占访问状态机69,为需要独占访问的第一和第二线程的这些事件处理程序提供独占访问。在多线程处理器30中一个以上的线程是活动时只可引用独占访问状态机69。与被提供有独占访问的事件处理程序有关联的流程标记符被插入到线程的流程中,以便标记包括事件处理程序的独占码的结束。一旦对所有线程完成独占访问,微码定序器66就恢复正常发出微指令。
图13是流程图,说明根据一个示例性实施例的一种方法400,用于为多线程处理器30中的事件处理程序67提供独占访问。方法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,从重新排序缓冲器162中使在414发出的停止微指令退役,从而将状态机69从第三状态416转换到第四状态420,其中微码定序器66发出与第二线程的事件有关的第二事件处理程序67。在构成第二事件处理程序67的所有微指令的排序之后,以及在这样的微指令指示的所有操作完成之后,微码定序器66则在422发出另一个停止微指令,以便将状态机69从第四状态转换到第五状态424,其中停止第二事件处理程序67。在426,从重新排序缓冲器162使在422发出的停止微指令退役,从而将状态机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中的所有功能单元均根据活动线程状态机171保持的活动位进行配置。具体地说,检验器、重放和退役单元(CRU)160将基于活动位生成的信号传送给所有受到影响的功能单元,以便向这些功能单元指明有多少线程现存于多线程处理器中以及其中哪些线程是活动的。在断言彻底清除信号170之后,功能单元的配置(例如分区或取消分区)通常在时钟信号304的一个时钟周期内完成。
线程退出和进入
本发明提出一种示例性机制,由此多线程处理器30中的线程可以进入和退出(例如变为活动或非活动),其中这种进入和退出出现在均匀序列(uniform sequence)中,而不管运行线程的数量,以及在多线程处理器30中没有其它线程是活动的或者是在运行的时候,给各种功能单元的时钟信号可以适度地停止。
如以上参照状态图500所述,对当前非活动线程的BREAK事件的检测作出响应而发生线程进入(或激活)。特定非活动线程的BREAK事件定义取决于相关线程处于非活动的原因。对当前活动线程的SLEEP事件作出响应而发生线程退出。SLEEP事件的示例包括执行包含在活动线程中的暂停(HLT)指令、检测SHUTDOWN或ERROR SHUTDOWN(错误关闭)条件或有关该活动线程的“等待SIPI”(启动处理器间中断)条件。
图16A是流程图,说明根据本发明一个示例性实施例的一种方法600,用于在检测到活动线程的SLEEP事件时退出该活动线程。方法600从块602开始,在该块中,保存活动线程的所有被要求状态,并且以前已分配给该活动线程的微指令的寄存器文件124中的所有寄存器项目均被取消分配。仅仅是举例,在寄存器文件124的128个寄存器项目中,以前分配给活动线程的微指令的28个项目被取消分配。活动线程的取消分配的寄存器的内容保存在“暂存区”中,其中可以包括与多线程处理器30中的控制寄存器总线相连接的寄存器阵列或随机存取存储器(RAM)。
寄存器文件124中寄存器项目的取消分配可以由取消分配微码序列来进行,其中取消分配微码序列是由微码定序器66对活动线程的STOPCLK、HALT(HLT)或SHUTDOWH事件的检测作出响应而发出的。取消分配微码序列用来删除(或使无效)自由列表管理器134中寄存器文件项目的记录,并创建(或使有效)垃圾堆阵列132中寄存器文件项目的记录。换句话说,取消分配寄存器文件项目的记录由取消分配微码序列从自由列表管理器134传送到垃圾堆阵列132。
图16B是可能在块602中执行的操作的示例性实施例的图示。例如,所示以前分配给第一线程(例如T0)的寄存器文件124中第一组寄存器的内容被传送到暂存区。保存状态中可能执行的附加操作包括向暂存区储存现有线程的体系结构寄存器的内容,以及在退出第一线程时向暂存区储存分配给该第一线程的微码临时寄存器的内容。在退出线程时空出的寄存器则可用于重新分配给另一个线程(例如T1)。
在重新进入特定线程(例如T0)时,将会知道,分配给该线程的寄存器的内容可以从暂存区中进行恢复,如图16B中的虚线所示。
在块604中,退出线程的线程特定“电子篱笆微指令”被插入到该退出线程的微指令流程中,以便从存储顺序缓冲器48、各种高速缓存以及处理器总线中排出与该线程有关的任何剩余未决存储器存取。直到所有这些块完成,该操作才退役。
由于这些执行单元20相对快地执行微指令,所以添加到执行单元输入的所有新微指令均通过对SLEEP事件的检测作出响应的彻底清除信号的断言来进行清除。如上所述,彻底清除信号170保持足够的一段时间(例如三个时钟周期),以便允许在断言彻底清除信号170之前进入执行单元70的微指令从执行单元70出现。由于这些微指令从执行单元70出现,所以它们被清除并且回写被取消。
在块606,通过微指令把保持在事件检测器188中的展开寄存器208设置为表示现存的线程处于非活动(或睡眠)状态,其中所述微指令由微码定序器66所生成,它回写一个设置展开寄存器的状态的值。
在块608,通过由微码定序器66发出的控制寄存器写入微指令,将现存线程的事件禁止寄存器206设置为禁止现存线程的非中断事件。现存线程的事件禁止寄存器的设置,作为控制寄存器微指令被指示,取决于被服务的睡眠事件的类型。如上所述,根据触发向非活动级转换的SLEEP事件,只有某些事件取得关于非活动线程的中断事件的资格。参照非活动线程的事件禁止寄存器206的状态,确定事件是否取得特定非活动线程的中断事件的资格。
在块612,采用特殊微指令来对现存线程的睡眠事件发出信号通知,其中所述特殊指令把睡眠事件编码放置在所述特殊微指令的回写故障信息字段中。
图17是流程图,说明根据一个示例性实施例的一种方法700,用于在检测到非活动线程的BREAK事件时使非活动线程进入活动状态。方法700在702以检测事件的事件发生开始,其中该事件可能取得关于非活动线程的BREAK事件的资格或者可能不。在判定框703,由相关事件的事件检测逻辑装置185作出确定,以便确定所述事件是否取得非活动线程的BREAK事件的资格。为此,事件检测逻辑装置185检查事件检测器188的寄存器200中的事件禁止寄存器206。如果相关事件类型未被表示为关于非活动线程的禁止BREAK事件,则方法700进行到块704,在该块中,根据需要接通时钟,正常地就所述事件发出信号通知(等待其它线程的可彻底清除点),并且关于任何事件,对处理程序进行调用。事件处理程序检查线程睡眠状态,如果设置,则继续,在块706恢复微码状态。事件处理程序67通过访问展开寄存器208来确认线程的非活动状态。
更具体地说,事件处理程序67通过恢复所有保存的寄存器状态、禁止寄存器状态及指令指针信息,进行到恢复进入线程的微码状态。
在块706中的微码状态恢复之后,方法700进行到块708,在该块中,对进入线程恢复体系结构状态。在块710,进入线程的事件禁止寄存器206由微码定序器66发出的适当微指令来进行复位或清除。在块712,事件处理程序67继续为BREAK事件提供服务。此时,在多线程处理器30中执行构成事件处理程序67的微码,以响应于事件发生而执行一系列操作。在块716,则在处理器30中对进入线程再次恢复指令提取操作。然后,方法700在块718结束。
时钟控制逻辑装置
为了减少多线程处理器30中的功耗和散热,需要在某些条件下停止或挂起处理器30中的至少一些时钟信号。图18是流程图,说明根据一个示例性实施例的一种方法800,用于停止或挂起诸如上述示例性处理器30的多线程处理器中被选时钟信号。为了说明起见,对处理器中时钟信号的挂起或停止进行引用,以包括挂起或停止处理器30中的一个或多个时钟信号的许多技术。例如,可挂起处理器30中的锁相环(PLL),禁止沿时钟中心(clock spine)的核心时钟信号的分配,或者选通或禁止经时钟中心向处理器中各功能单元分配时钟信号。一个实施例设想后一种情况,其中逐个功能单元地挂起或停止向处理器30的功能单元提供内部时钟信号。因此,内部时钟信号可以提供给某些功能单元,而关于其它功能单元进行选通。在美国专利No.5655127中,描述了单线程微处理器环境下的这种布置。
在一个实施例中,图18所示方法800可以由时钟控制逻辑装置35来执行,其中时钟控制逻辑装置35结合在处理器30的总线接口单元32中。在其它实施例中,时钟控制逻辑装置35当然可以放置在处理器30以外的地方。图19A和19B分别是方框图和示意图,进一步详细说明示例性时钟控制逻辑装置35。
首先来看图19A,所示时钟控制逻辑装置35接收三个主要输入,即(1)经活动线程状态机174输出的活动位820(例如T0_ACTIVE和T1_ACTIVE);(2)由事件检测器188输出的事件检测信号211,以及(3)由总线接口单元32输出的窥探控制信号822,其中总线接口单元32检测总线上可窥探的访问,并断言信号882。时钟控制逻辑装置35采用这些输入来生成停止时钟信号826,后者又抑制或禁止处理器30中某些功能单元的时钟。
图19B是示意图,说明示例组合逻辑装置,它采用输入211、820以及822来输出停止时钟信号826。具体地说,事件检测器信号211向“或”门822提供输入,“或”门822又将输入提供给另一个“或”门824。活动位820和窥探控制信号822还将输入提供给“或非”门824,后者对所述输入进行“或”运算,以便输出停止时钟信号826。
现在具体地来看图18,方法800在判定框802以确定多线程处理器30中是否有任何线程(例如第一和第二线程)是活动的为开始。该确定通过向图19B所示“或”门824输出活动位820来反映。虽然示例性实施例说明关于两个线程来作确定,但易于知道,可以关于多线程处理器所支持的任意数量的线程来作确定。
在判定框802的否定确定之后,方法800进入判定框804,在该框中确定:对于多线程处理器所支持的任何线程,是否有任何未被禁止的事件为未决。在示例性实施例中,这还包括确定:对于第一或第二线程,是否有任何事件为未决。该确定通过向图19B所示“或”门822中输入事件检测信号211来表示。
在判定框804的否定判定之后,在判定框806作另一个确定:是否有任何窥探(例如总线窥探、SNC窥探或其它窥探)正在由处理器总线进行处理。在本发明的示例性实施例中,该确定通过向“或”门824输入窥探控制信号822来实现。
在判定框806的否定确定之后,方法800进行到块808,在该块中,停止或挂起给被选功能单元的内部时钟信号。具体地说,没有挂起或停止给总线未决逻辑装置和总线访问逻辑装置的时钟信号,因为这允许总线接口单元32来检测系统总线上发起的BREAK事件或窥探(例如管脚事件),以及对这样的BREAK事件作出响应而重新开始给功能单元的时钟。给功能单元的内部时钟信号的抑制通过断言停止时钟信号826来实现,其中停止时钟信号826具有对给预定功能单元的时钟信号进行选通的功能。
在完成块808之后,方法800返回到判定框802。之后,可以连续循环判定框802、804和806中的确定。
在判定框802、804以及806其中任何一个肯定确定之后,方法800转移到块810,在该块中,如果给某些功能单元的时钟信号已被选通,则再次激活这些内部时钟信号。另一方面,如果时钟信号已经是活动的,则这些时钟信号保持在活动状态。
在对中断事件进行响应而执行块810的情况下,(例如,在判定框804的肯定判定之后),在断言彻底清除信号时,微处理器中的功能单元可以根据活动线程的数量以上述方式活动地进行分区。例如,在具有两个或更多线程的多线程处理器30中,所述线程中的某些线程可能是非活动的,在这种情况,功能单元将不会进行分区来适应非活动线程。
在完成了块810时,方法800再次返回到判定框802,并开始判定框802、804及806表示的判定的另一次重复。
已经说明了进入和退出多线程处理器中的多线程的方法和装置。虽然是参照特定示例性实施例对本发明进行说明,但显然,在不脱离本发明更宽范围和精神的情况下,可以对这些实施例进行各种修改和改变。因此,说明书和附图是说明性的而不是限制性的。

Claims (33)

1.一种方法,包括以下步骤:
维护状态机以表示多线程处理器中执行的多线程的有关线程的相应状态;
检测所述多线程处理器中第一线程的状态变化;以及
当所述第一线程的状态变化是从活动状态到非活动状态时,根据所述多线程处理器中第一线程的状态变化,改变功能单元的分区方案,以便为所述多线程处理器中的第二线程提供服务,但不为第一线程提供服务。
2.如权利要求1所述的方法,其特征在于所述状态表示所述有关线程是活动的或是非活动的。
3.如权利要求1所述的方法,其特征在于包括对所述功能单元进行分区,以便在所述第一线程的所述状态变化包括从非活动状态向活动状态转换时,为所述多线程处理器中的所述第一线程和第二线程提供服务。
4.如权利要求1所述的方法,其特征在于所述检测所述第一线程中的所述状态变化包括检测所述第一线程的事件的发生。
5.如权利要求4所述的方法,其特征在于包括:对所述第一线程的所述事件的发生作出响应而断言第一信号,并在所述第一信号的所述断言期间对所述状态机进行评估。
6.如权利要求5所述的方法,其特征在于:在对所述第一信号取消断言时,根据所述状态机的所述多位输出来配置所述多线程处理器中的所述功能单元。
7.如权利要求1所述的方法,其特征在于所述检测所述第一线程中的所述状态变化包括检测所述第一线程的睡眠事件的发生,其中,所述第一线程的所述睡眠事件的发生使所述第一线程从活动状态转换为睡眠状态。
8.如权利要求7所述的方法,其特征在于包括:对所述睡眠事件的发生的所述检测进行响应,设置禁止寄存器以禁止不是所述第一线程的睡眠状态的中断事件的事件。
9.如权利要求1所述的方法,其特征在于包括对所述第一线程的所述多线程处理器中的状态进行保存和取消分配。
10.如权利要求9所述的方法,其特征在于所述对所述第一线程的所述多线程处理器中的状态进行保存和取消分配包括把所述第一线程的所述状态记录在存储器资源中。
11.如权利要求1所述的方法,其特征在于包括使所述多线程处理器的寄存器文件中的寄存器可以为所述多线程处理器中的第二线程所用。
12.如权利要求1所述的方法,其特征在于所述功能单元包含包括存储器顺序缓冲器、存储缓冲器、翻译后援缓冲器、重新排序缓冲器、寄存器别名表及自由列表管理器在内的组中的任一个。
13.如权利要求1所述的方法,其特征在于包括把电子篱笆指令在最接近所述多线程处理器的前端的位置插入所述第一线程的指令流,所述电子篱笆指令定义所述指令流中的事件边界,其中假定所有存储器访问都已从所述处理器中排出。
14.如权利要求1所述的方法,其特征在于包括恢复所述多线程处理器中的状态。
15.如权利要求1所述的方法,其特征在于所述检测所述第一线程中的所述状态变化包括检测所述第一线程的中断事件的发生,其中所述第一线程的中断事件的发生使所述第一线程从睡眠状态转换为活动状态。
16.如权利要求15所述的方法,其特征在于包括:检测不构成中断事件的所述第一线程的第三事件,并将所述第三事件记录在与所述第一线程有关的未决寄存器中。
17.一种装置,包括:
状态机,用于提供多线程处理器中执行的多线程的有关线程的相应状态的表示,并且检测所述多线程处理器中第一线程的状态变化;以及
配置逻辑装置,当所述第一线程的状态变化包括从活动状态到非活动状态并且第二线程处于活动状态时,改变功能单元的分区方案,以便为所述多线程处理器中的第二线程提供服务,但不为第一线程提供服务。
17.如权利要求17所述的装置,其特征在于所述状态表示所述有关线程是活动的或是非活动的。
18.如权利要求18所述的装置,其特征在于所述配置逻辑装置对所述功能单元进行分区,以便在所述第一线程的所述状态变化包括从非活动状态向活动状态的转换并且第二线程处于活动状态时,为所述多线程处理器中的所述第一线程和所述第二线程提供服务。
19.如权利要求17所述的装置,其特征在于所述状态机通过检测所述第一线程的事件的发生来检测所述第一线程的所述状态变化。
20.如权利要求20所述的装置,其特征在于包括事件检测器,所述事件检测器对所述第一线程的所述事件的发生作出响应而断言清除信号,其中在所述第一信号的所述断言期间对所述状态机进行评估。
21.如权利要求21所述的装置,其特征在于:在所述清除信号的取消断言时,所述配置逻辑装置根据所述状态机的所述多位输出对所述多线程处理器中的所述功能单元进行配置。
22.如权利要求17所述的装置,其特征在于:用于检测所述第一线程中的所述状态变化的所述状态机检测所述第一线程的睡眠事件的发生,其中所述第一线程的睡眠事件的发生使所述第一线程从活动状态转换为睡眠状态。
23.如权利要求23所述的装置,其特征在于包括微码定序器,所述微码定序器对所述睡眠事件的发生的检测进行响应,发出微指令来设置禁止寄存器,以禁止不是所述第一线程的所述睡眠状态的中断事件的事件。
24.如权利要求17所述的装置,其特征在于所述配置逻辑装置对所述第一线程的有关功能单元中的状态进行保存、取消分配及恢复。
25.如权利要求25所述的装置,其特征在于与所述功能单元有关的所述配置逻辑装置把所述第一线程的状态信息记录在存储器资源中,以便对状态进行保存和取消分配,并将所述第一线程的状态信息从所述存储器资源中恢复到功能单元中,以便恢复状态。
26.如权利要求25所述的装置,其特征在于:与所述功能单元有关的所述配置逻辑装置,在所述第一线程存在时,使分配给所述第一线程的所述多线程处理器的寄存器文件中的寄存器可以为所述多线程处理器中的第二线程所用,并且在所述第二线程存在时,使分配给所述第二线程的所述多线程处理器的所述寄存器文件中的寄存器可以为所述多线程处理器中的所述第一线程所用。
27.如权利要求17所述的装置,其特征在于:所述功能单元包含包括存储顺序缓冲器、存储缓冲器、翻译后援缓冲器、重新排序缓冲器、寄存器别名表及自由列表管理器在内的组中的任一个。
28.如权利要求17所述的装置,其特征在于包括微码定序器,所述微码定序器把电子篱笆指令在最接近所述多线程处理器的前端的位置引入所述第一线程的指令流,所述电子篱笆指令定义所述指令流中的事件边界,以确保所有存储器存取从所述处理器中排出。
29.如权利要求17所述的装置,其特征在于所述配置所述功能单元包括恢复所述多线程处理器中的状态。
30.如权利要求21所述的装置,其特征在于:所述事件检测器通过检测所述第一线程的中断事件的发生,来检测所述第一线程的所述状态变化,其中所述第一线程的中断事件的发生使所述第一线程从睡眠状态转换为活动状态。
31.如权利要求21所述的装置,其特征在于所述事件检测器检测不构成中断事件的所述第一线程的第三事件,并将所述第三事件记录在与所述第一线程有关的未决寄存器中。
32.一种装置,包括:
第一装置,用于表示多线程处理器中执行的多线程的有关线程的相应状态,并且检测所述多线程处理器中第一线程的状态变化;以及
第二装置,用于当所述第一线程的状态变化包括从活动状态到非活动状态并且第二线程处于活动状态时,改变功能单元的分区方案,以便为所述多线程处理器中的第二线程提供服务,但不为第一线程提供服务。
33.一种系统,包括:
一个多线程处理器,所述多线程处理器包括:状态机,用于提供多线程处理器中执行的多线程的有关线程的相应状态的表示,并且检测所述多线程处理器中第一线程的状态变化;以及
配置逻辑装置,当所述第一线程的状态变化包括从活动状态到非活动状态并且第二线程处于活动状态时,改变功能单元的分区方案,以便为所述多线程处理器中的第二线程提供服务,但不为第一线程提供服务;
存储所述多线程的存储器;
将所述多线程送至所述多线程处理器的总线;以及
与所述总线相连的网络接口装置。
CNB2006100025729A 1999-12-09 2000-10-12 进入和退出多线程处理器中多线程的方法和装置 Expired - Fee Related CN100382035C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/458570 1999-12-09
US09/458,570 US6889319B1 (en) 1999-12-09 1999-12-09 Method and apparatus for entering and exiting multiple threads within a multithreaded processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CNB008188300A Division CN1245681C (zh) 1999-12-09 2000-10-12 进入和退出多线程处理器中多线程的方法和装置

Publications (2)

Publication Number Publication Date
CN1801099A CN1801099A (zh) 2006-07-12
CN100382035C true CN100382035C (zh) 2008-04-16

Family

ID=23821294

Family Applications (2)

Application Number Title Priority Date Filing Date
CNB2006100025729A Expired - Fee Related CN100382035C (zh) 1999-12-09 2000-10-12 进入和退出多线程处理器中多线程的方法和装置
CNB008188300A Expired - Fee Related CN1245681C (zh) 1999-12-09 2000-10-12 进入和退出多线程处理器中多线程的方法和装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CNB008188300A Expired - Fee Related CN1245681C (zh) 1999-12-09 2000-10-12 进入和退出多线程处理器中多线程的方法和装置

Country Status (9)

Country Link
US (2) US6889319B1 (zh)
EP (1) EP1238341B1 (zh)
JP (1) JP4642305B2 (zh)
CN (2) CN100382035C (zh)
AT (1) ATE334445T1 (zh)
AU (1) AU8021200A (zh)
DE (1) DE60029619T2 (zh)
HK (1) HK1046460B (zh)
WO (1) WO2001041530A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107077373A (zh) * 2014-10-20 2017-08-18 国际商业机器公司 针对多线程处理器的协调式开始解释执行退出的改进的效率

Families Citing this family (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6671795B1 (en) * 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US7055020B2 (en) * 2001-06-13 2006-05-30 Sun Microsystems, Inc. Flushable free register list having selected pointers moving in unison
US6671644B2 (en) * 2001-08-15 2003-12-30 International Business Machines Corporation Using clock gating or signal gating to partition a device for fault isolation and diagnostic data collection
US7487505B2 (en) * 2001-08-27 2009-02-03 Intel Corporation Multithreaded microprocessor with register allocation based on number of active threads
US7225281B2 (en) * 2001-08-27 2007-05-29 Intel Corporation Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms
US7500240B2 (en) * 2002-01-15 2009-03-03 Intel Corporation Apparatus and method for scheduling threads in multi-threading processors
US7610451B2 (en) * 2002-01-25 2009-10-27 Intel Corporation Data transfer mechanism using unidirectional pull bus and push bus
US7337275B2 (en) * 2002-08-13 2008-02-26 Intel Corporation Free list and ring data structure management
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US7360220B2 (en) * 2002-10-31 2008-04-15 Intel Corporation Methods and apparatus for multi-threading using differently coded software segments to perform an algorithm
US20040128488A1 (en) * 2002-12-26 2004-07-01 Thimmannagari Chandra M. R. Strand switching algorithm to avoid strand starvation
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US7127592B2 (en) * 2003-01-08 2006-10-24 Sun Microsystems, Inc. Method and apparatus for dynamically allocating registers in a windowed architecture
US7058938B2 (en) * 2003-03-05 2006-06-06 Intel Corporation Method and system for scheduling software pipelined loops
US7496915B2 (en) 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US7653912B2 (en) * 2003-05-30 2010-01-26 Steven Frank Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations
US20050050310A1 (en) * 2003-07-15 2005-03-03 Bailey Daniel W. Method, system, and apparatus for improving multi-core processor performance
US7069411B1 (en) * 2003-08-04 2006-06-27 Advanced Micro Devices, Inc. Mapper circuit with backup capability
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7321965B2 (en) * 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US9032404B2 (en) * 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7133969B2 (en) * 2003-10-01 2006-11-07 Advanced Micro Devices, Inc. System and method for handling exceptional instructions in a trace cache based processor
US7430737B2 (en) * 2003-12-04 2008-09-30 Sun Microsystems, Inc. Processor and method for supporting compiler directed multithreading management
US7441101B1 (en) * 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7360064B1 (en) 2003-12-10 2008-04-15 Cisco Technology, Inc. Thread interleaving in a multithreaded embedded processor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7478225B1 (en) 2004-06-30 2009-01-13 Sun Microsystems, Inc. Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor
US7185178B1 (en) 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US8095778B1 (en) 2004-06-30 2012-01-10 Open Computing Trust I & II Method and system for sharing functional units of a multithreaded processor
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
US7343474B1 (en) 2004-06-30 2008-03-11 Sun Microsystems, Inc. Minimal address state in a fine grain multithreaded processor
US7523330B2 (en) * 2004-06-30 2009-04-21 Sun Microsystems, Inc. Thread-based clock enabling in a multi-threaded processor
US8225034B1 (en) 2004-06-30 2012-07-17 Oracle America, Inc. Hybrid instruction buffer
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7941642B1 (en) 2004-06-30 2011-05-10 Oracle America, Inc. Method for selecting between divide instructions associated with respective threads in a multi-threaded processor
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US7437538B1 (en) 2004-06-30 2008-10-14 Sun Microsystems, Inc. Apparatus and method for reducing execution latency of floating point operations having special case operands
US7702887B1 (en) 2004-06-30 2010-04-20 Sun Microsystems, Inc. Performance instrumentation in a fine grain multithreaded multicore processor
US7533248B1 (en) 2004-06-30 2009-05-12 Sun Microsystems, Inc. Multithreaded processor including a functional unit shared between multiple requestors and arbitration therefor
US7370243B1 (en) 2004-06-30 2008-05-06 Sun Microsystems, Inc. Precise error handling in a fine grain multithreaded multicore processor
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US7774393B1 (en) 2004-06-30 2010-08-10 Oracle America, Inc. Apparatus and method for integer to floating-point format conversion
US7861063B1 (en) 2004-06-30 2010-12-28 Oracle America, Inc. Delay slot handling in a processor
US7373489B1 (en) 2004-06-30 2008-05-13 Sun Microsystems, Inc. Apparatus and method for floating-point exception prediction and recovery
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7747771B1 (en) 2004-06-30 2010-06-29 Oracle America, Inc. Register access protocol in a multihreaded multi-core processor
US7216216B1 (en) 2004-06-30 2007-05-08 Sun Microsystems, Inc. Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window
US7676655B2 (en) * 2004-06-30 2010-03-09 Sun Microsystems, Inc. Single bit control of threads in a multithreaded multicore processor
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7426630B1 (en) 2004-06-30 2008-09-16 Sun Microsystems, Inc. Arbitration of window swap operations
US7562179B2 (en) 2004-07-30 2009-07-14 Intel Corporation Maintaining processor resources during architectural events
US7200701B2 (en) * 2004-08-26 2007-04-03 Dell Products L.P. System and method for processing system management interrupts in a multiple processor system
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US8037250B1 (en) 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US7543136B1 (en) 2005-07-13 2009-06-02 Nvidia Corporation System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US8201179B2 (en) * 2006-05-04 2012-06-12 Oracle America, Inc. Multi-threaded shared state variable control
US20070271404A1 (en) * 2006-05-16 2007-11-22 Sun Microsystems, Inc. Realtime multithreaded hot-plug control
US7617384B1 (en) 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
US7975272B2 (en) * 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
EP2159686B1 (en) * 2007-06-19 2019-01-09 Fujitsu Limited Information processor and method therefor
WO2008155840A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 命令制御装置及び命令制御方法
EP2423808B1 (en) 2007-06-20 2014-05-14 Fujitsu Limited Arithmetic device
US8019978B1 (en) * 2007-08-13 2011-09-13 Nvidia Corporation Unit status reporting protocol
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
US8024719B2 (en) 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
KR101572879B1 (ko) * 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US8639885B2 (en) * 2009-12-21 2014-01-28 Oracle America, Inc. Reducing implementation costs of communicating cache invalidation information in a multicore processor
US8195883B2 (en) 2010-01-27 2012-06-05 Oracle America, Inc. Resource sharing to reduce implementation costs in a multicore processor
CN101835196B (zh) * 2010-05-14 2014-08-13 中兴通讯股份有限公司 鲁棒性头压缩中一种模式转换的方法和装置
JP5548037B2 (ja) * 2010-06-11 2014-07-16 パナソニック株式会社 命令発行制御装置及び方法
US8688960B2 (en) 2010-10-15 2014-04-01 International Business Machines Corporation Managing migration of a prefetch stream from one processor core to another processor core
US8832417B2 (en) 2011-09-07 2014-09-09 Qualcomm Incorporated Program flow control for multiple divergent SIMD threads using a minimum resume counter
US9672044B2 (en) * 2012-08-01 2017-06-06 Nxp Usa, Inc. Space efficient checkpoint facility and technique for processor with integrally indexed register mapping and free-list arrays
US9256429B2 (en) 2012-08-08 2016-02-09 Qualcomm Incorporated Selectively activating a resume check operation in a multi-threaded processing system
US9229721B2 (en) 2012-09-10 2016-01-05 Qualcomm Incorporated Executing subroutines in a multi-threaded processing system
US9182986B2 (en) 2012-12-29 2015-11-10 Intel Corporation Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region
US9804846B2 (en) 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US9594660B2 (en) 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US10467011B2 (en) 2014-07-21 2019-11-05 Intel Corporation Thread pause processors, methods, systems, and instructions
CN104869034B (zh) * 2015-04-28 2018-04-17 阔地教育科技有限公司 一种基于在线课堂的压力测试方法及装置
CN105528195B (zh) * 2015-12-03 2017-12-15 上海高性能集成电路设计中心 一种支持同时多线程指令乱序发射的飞行记分牌处理方法
US10496412B2 (en) 2016-02-08 2019-12-03 International Business Machines Corporation Parallel dispatching of multi-operation instructions in a multi-slice computer processor
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
EP3583486A4 (en) * 2017-02-20 2021-01-06 Intensivate Inc. SUPER THREAD PROCESSOR
JP6926727B2 (ja) * 2017-06-28 2021-08-25 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN109254834B (zh) * 2017-07-13 2021-05-14 普天信息技术有限公司 一种多线程启动同步方法
US10754759B1 (en) * 2018-02-05 2020-08-25 Xilinx, Inc. Breakpointing circuitry that evaluates breakpoint conditions while running clock to target circuit
CN111586481B (zh) * 2020-05-06 2022-06-14 海信视像科技股份有限公司 一种终端及应用的处理方法
US11656796B2 (en) * 2021-03-31 2023-05-23 Advanced Micro Devices, Inc. Adaptive memory consistency in disaggregated datacenters

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998043193A2 (en) * 1997-03-21 1998-10-01 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US5854922A (en) * 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
WO1999021083A1 (en) * 1997-10-23 1999-04-29 International Business Machines Corporation Thread switch control in a multithreaded processor system

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2303864A (en) * 1940-09-09 1942-12-01 Edward J Reasor Bathtub moisture seal
US2895778A (en) * 1957-05-06 1959-07-21 Lieber Philip Ben Countertop construction
US3605508A (en) * 1969-06-23 1971-09-20 William B Fell Precision threaded adjustment
US3771138A (en) 1971-08-31 1973-11-06 Ibm Apparatus and method for serializing instructions from two independent instruction streams
JPH06105460B2 (ja) 1988-06-07 1994-12-21 富士通株式会社 マルチプロセッサのプロセッサ切換え装置
GB8817911D0 (en) 1988-07-27 1988-09-01 Int Computers Ltd Data processing apparatus
WO1990014629A2 (en) 1989-05-26 1990-11-29 Massachusetts Institute Of Technology Parallel multithreaded data processing system
GB2234613B (en) 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
US5396635A (en) 1990-06-01 1995-03-07 Vadem Corporation Power conservation apparatus having multiple power reduction levels dependent upon the activity of the computer system
DE4129614C2 (de) 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5357617A (en) 1991-11-22 1994-10-18 International Business Machines Corporation Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor
US5404469A (en) 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
US5452401A (en) 1992-03-31 1995-09-19 Seiko Epson Corporation Selective power-down for high performance CPU/system
US5386561A (en) 1992-03-31 1995-01-31 International Business Machines Corporation Method of integrated system load control through dynamic time-slicing in a virtual storage environment
US5392437A (en) 1992-11-06 1995-02-21 Intel Corporation Method and apparatus for independently stopping and restarting functional units
DK0627100T3 (da) 1992-12-23 2000-06-26 Ebauchesfabrik Eta Ag Laveffekt-multitaskkontroller
US5586332A (en) 1993-03-24 1996-12-17 Intel Corporation Power management for low power processors through the use of auto clock-throttling
US5524263A (en) 1994-02-25 1996-06-04 Intel Corporation Method and apparatus for partial and full stall handling in allocation
US5809271A (en) 1994-03-01 1998-09-15 Intel Corporation Method and apparatus for changing flow of control in a processor
US5724565A (en) 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
JPH08320797A (ja) 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
JPH096633A (ja) 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム
US5983339A (en) 1995-08-21 1999-11-09 International Business Machines Corporation Power down system and method for pipelined logic functions
US5900025A (en) * 1995-09-12 1999-05-04 Zsp Corporation Processor having a hierarchical control register file and methods for operating the same
US5701432A (en) 1995-10-13 1997-12-23 Sun Microsystems, Inc. Multi-threaded processing system having a cache that is commonly accessible to each thread
US5809522A (en) 1995-12-18 1998-09-15 Advanced Micro Devices, Inc. Microprocessor system with process identification tag entries to reduce cache flushing after a context switch
GB2311880A (en) 1996-04-03 1997-10-08 Advanced Risc Mach Ltd Partitioned cache memory
CN100373331C (zh) 1996-08-27 2008-03-05 松下电器产业株式会社 独立处理多个指令流、软式控制各指令流的处理功能的多线程处理器
JP3760035B2 (ja) * 1996-08-27 2006-03-29 松下電器産業株式会社 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ
US6088788A (en) 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
EP0856797B1 (en) 1997-01-30 2003-05-21 STMicroelectronics Limited A cache system for concurrent processes
US5835705A (en) 1997-03-11 1998-11-10 International Business Machines Corporation Method and system for performance per-thread monitoring in a multithreaded processor
GB2323188B (en) 1997-03-14 2002-02-06 Nokia Mobile Phones Ltd Enabling and disabling clocking signals to elements
US6233599B1 (en) * 1997-07-10 2001-05-15 International Business Machines Corporation Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers
US5996085A (en) 1997-07-15 1999-11-30 International Business Machines Corporation Concurrent execution of machine context synchronization operations and non-interruptible instructions
JP2978856B2 (ja) * 1997-09-29 1999-11-15 山形日本電気株式会社 水平走査パルス信号制御回路
US6697935B1 (en) * 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6212544B1 (en) 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6105051A (en) 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US6076157A (en) 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6256775B1 (en) 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6052709A (en) 1997-12-23 2000-04-18 Bright Light Technologies, Inc. Apparatus and method for controlling delivery of unsolicited electronic mail
US5999932A (en) 1998-01-13 1999-12-07 Bright Light Technologies, Inc. System and method for filtering unsolicited electronic mail messages using data matching and heuristic processing
US6092175A (en) 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6115709A (en) 1998-09-18 2000-09-05 Tacit Knowledge Systems, Inc. Method and system for constructing a knowledge profile of a user having unrestricted and restricted access portions according to respective levels of confidence of content of the portions
US6220677B1 (en) * 1998-11-18 2001-04-24 Douglas R. Ancel Joinery molding and method of joining
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854922A (en) * 1997-01-16 1998-12-29 Ford Motor Company Micro-sequencer apparatus and method of combination state machine and instruction memory
WO1998043193A2 (en) * 1997-03-21 1998-10-01 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
WO1999021083A1 (en) * 1997-10-23 1999-04-29 International Business Machines Corporation Thread switch control in a multithreaded processor system

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107077373A (zh) * 2014-10-20 2017-08-18 国际商业机器公司 针对多线程处理器的协调式开始解释执行退出的改进的效率
CN107077373B (zh) * 2014-10-20 2020-09-29 国际商业机器公司 在计算机处理器核心上执行多个线程的方法和系统

Also Published As

Publication number Publication date
JP2003516570A (ja) 2003-05-13
US7366879B2 (en) 2008-04-29
US6889319B1 (en) 2005-05-03
ATE334445T1 (de) 2006-08-15
DE60029619T2 (de) 2007-07-26
WO2001041530A2 (en) 2001-06-14
JP4642305B2 (ja) 2011-03-02
HK1046460B (zh) 2007-03-09
CN1801099A (zh) 2006-07-12
EP1238341B1 (en) 2006-07-26
EP1238341A2 (en) 2002-09-11
US20050038980A1 (en) 2005-02-17
AU8021200A (en) 2001-06-18
DE60029619D1 (de) 2006-09-07
CN1433540A (zh) 2003-07-30
CN1245681C (zh) 2006-03-15
WO2001041530A3 (en) 2001-12-20
HK1046460A1 (en) 2003-01-10

Similar Documents

Publication Publication Date Title
CN100382035C (zh) 进入和退出多线程处理器中多线程的方法和装置
CN1183446C (zh) 处理多线程处理器中事件发生的方法和装置
US6357016B1 (en) Method and apparatus for disabling a clock signal within a multithreaded processor
CN1429361B (zh) 用于在一个多线程处理器内在多个线程之间划分资源的方法和装置
US6694425B1 (en) Selective flush of shared and other pipeline stages in a multithread processor
CN100383740C (zh) 挂起线程执行直到发生指定的存储器访问的方法和设备
US5778245A (en) Method and apparatus for dynamic allocation of multiple buffers in a processor
US6988186B2 (en) Shared resource queue for simultaneous multithreading processing wherein entries allocated to different threads are capable of being interspersed among each other and a head pointer for one thread is capable of wrapping around its own tail in order to access a free entry
JP2003523574A (ja) 2次リオーダ・バッファ・マイクロプロセッサ
US5694553A (en) Method and apparatus for determining the dispatch readiness of buffered load operations in a processor
KR19990013426A (ko) 머신 문맥 동기화 동작 실행 방법 및 프로세서
US6473850B1 (en) System and method for handling instructions occurring after an ISYNC instruction
US7149883B1 (en) Method and apparatus selectively to advance a write pointer for a queue based on the indicated validity or invalidity of an instruction stored within the queue
US5983341A (en) Data processing system and method for extending the time for execution of an instruction
US7779233B2 (en) System and method for implementing a software-supported thread assist mechanism for a microprocessor

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080416

Termination date: 20171012