CN1196060C - 用于在一个多线程处理器内进行线程切换的方法和装置 - Google Patents

用于在一个多线程处理器内进行线程切换的方法和装置 Download PDF

Info

Publication number
CN1196060C
CN1196060C CN00809404.7A CN00809404A CN1196060C CN 1196060 C CN1196060 C CN 1196060C CN 00809404 A CN00809404 A CN 00809404A CN 1196060 C CN1196060 C CN 1196060C
Authority
CN
China
Prior art keywords
command information
thread
information source
source
instruction
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
CN00809404.7A
Other languages
English (en)
Other versions
CN1364261A (zh
Inventor
S·卡拉法蒂斯
A·B·凯克
R·D·菲施
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 CN1364261A publication Critical patent/CN1364261A/zh
Application granted granted Critical
Publication of CN1196060C publication Critical patent/CN1196060C/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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

Abstract

一种用于在一个多线程处理器内执行一个线程切换操作的方法,该方法包括:检测多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息;确定用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源的发送;以及如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。

Description

用于在一个多线程处理器内进行线程切换的方法和装置
技术领域
本发明通常涉及多线程处理器领域,尤其是涉及一种用于在一个多线程处理器内执行上下文(或线程)切换的方法及其装置。
背景技术
多线程处理器设计近来已经被认为是一种用于提高处理器性能的日益有吸引力的选择。此外,在一个处理器内的多线程处理为更有效地利用各种处理器资源提供了可能性,尤其是为更加有效地利用在一个处理器内的执行逻辑提供了可能性。特别地,通过将多个线程传送到一个处理器的执行逻辑,原先由于在一个特定线程处理过程中的停止或其它延迟而造成空闲的时钟周期可以被用来服务另外一个线程。在一个特定线程处理过程中的一个停止可以由一个处理器流水线内的许多事件引起。例如,用于一条包含在一个线程内的指令的一个高速缓存故障或一个分支错误预测(即一个长等待时间的操作),通常会导致有关线程处理过程的停止。长等待时间的操作在执行逻辑效率上的消极影响由于近来执行逻辑吞吐量的增加而有所加剧,其中该执行逻辑吞吐量在存储器访问和检索率方面有超前的增长。
鉴于由许多普及的操作系统、诸如Windows NT和UNIX操作系统提供给这种多线程应用的支持,多线程的计算机应用也变得日益普及。多线程计算机应用在多媒体环境中尤其有效。
依据在有关处理器内使用的线程交错或切换方案,多线程处理器可以被广泛地分为两类(即精细或粗糙设计)。精细的多线程设计在一个处理器内支持多个有效线程,并且通常在一个周期接一个周期的基础上交错两个不同的线程。粗糙的多线程设计通常在发生某些长等待时间的事件、诸如一个高速缓存故障时交错不同线程的指令。在以下文献中讨论了一种粗糙的多线程设计:R.;Johnson,R.;et al.;“Evaluation of Multithreaded Uniprocessors for CommercialApplication Environments″, The 23rd Annual International Symposium on Computer Architecture(第23届计算机体系结构国际年会论文集),pp.203-212,May1996.而在以下文献中进一步讨论了精细和粗糙设计之间的区别:Laudon,j;Gupta,A,“Architecturaland Implementation Tradeoffs in the Design of Multiple-Context Processors”, Multithreaded Computer Architectures(多线程结构): A Summary of the State of the Art(技术状态概述),edited by R.A.Iannuci dt al.,(由Lannuci等编辑),pp.167-200,Kluwer Academic Publishers,Norwell,Massachusetts,1994.Laudon进一步提出了一个交错方案,它将一个精细设计一个周期接一个周期的切换和一个粗糙设计的完全流水线联锁(或锁定方案)结合起来。为此,Laudon提出了一条“补偿”指令,使一个特定线程(或上下文)在一个特定数目的周期内无法使用。这样一条“补偿”指令可以依据预定事件、诸如一个高速缓存故障的发生来发布。这样,Laudon通过简单地使这些线程中的一个无法使用而避免了必须执行一个实际的线程切换。
发明内容
依据本发明,提供了一种用于在一个多线程处理器内执行一个线程切换操作的方法,该方法包括:
检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息;
确定用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源的发送;以及
如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
本发明还提供了用于在一个多线程处理器内执行一个线程切换操作的设备,该设备包括:
检测逻辑单元,用于检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息,以及检测用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源发送;以及
选择逻辑单元,连接到该检测逻辑单元,如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
本发明还提供了一种多线程处理器,包括:
一个处理器流水线,包括指令信息源;
一个检测器,用于检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息,以及检测用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源发送;以及
一个选择器,连接到该检测器,如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
通过附图和随后的详细说明,本发明的其它特征将是显而易见的。
附图说明
本发明通过附图进行了举例说明,但是不局限于此,且附图中相似的标记表示相似的单元,其中:
图1的框图说明了在其内部可以实现本发明的一个处理器的一个示范流水线;
图2的框图以一个通用多线程微处理器的形式说明了在其内部可以实现本发明的一个处理器的一个示范实施例;
图3的框图为一个包含在如图2所示的通用微处理器内部的微指令翻译机的示例的体系结构提供了更多细节;
图4的框图说明了一个示范性多线程微处理器的选定部件,而且特别地描述了由于为容纳多个线程而被逻辑分区的各种提供缓存能力的功能单元;
图5的框图说明了关于依据本发明一个实施例的一个示范性指令流缓存器的结构和体系结构的更多细节;
图6的框图说明了依据本发明一个示范实施例的线程切换控制逻辑的逻辑元件;
图7的流程图说明了依据本发明一个示范实施例、用于当在一个多线程处理器内的多个线程空闲时确定一个开始线程的方法;
图8的流程图说明了依据本发明示范实施例、用于当从一个指令源发送当前线程的分支指令时在一个多线程处理器内部执行线程切换操作的方法;
图9的流程图说明了依据本发明一个示范实施例、用于当发生一个长等待时间的停止时在一个多线程处理器内执行线程切换操作的方法;
图10的流程图说明了依据本发明一个示范实施例、用于当发生一个内部流水线清除时在一个多线程处理器内执行线程切换操作的方法;
图11的流程图说明了依据本发明示范实施例、用于当出现关于一个特定线程的“无数据流”状态时在一个多线程处理器内执行线程切换操作的方法;
图12的流程图说明了依据本发明一个示范实施例、用于当从一个指令流缓存器向一个指令预解码器发送用于一个特定线程的一个预定量指令信息时在一个多线程处理器内执行线程切换操作的方法;
图13是一个说明了依据本发明示范实施例、用于当发生一个外部流水线清除时在一个多线程处理器内执行线程切换操作的方法的流程图;
图14是一个说明了依据本发明示范实施例、用于当在一个用于当前线程的指令流内检测到一个插入的流程时在一个多线程处理器内部执行线程切换操作的方法的流程图;
图15A和15B是显示了依据本发明、如图6中框图形式所示的线程切换控制逻辑的相应示范实施例的结构简图;
图16是依据本发明的示例、用于将一个流程标记(或插入流)插入到一个指令流里的逻辑简图。
具体实施方式
描述了一种用于在一个多线程处理器内进行线程切换的方法和装置。在下面的描述中,为说明起见,阐述了大量具体细节以便提供对本发明的彻底理解。然而,对本领域技术人员来说,显然本发明没有这些具体细节也可以实现。
就该说明书来说,术语“发送”应该包括数据从一个存储单元或功能单元的实际发送或传播,以及准备该数据的实际发送或传播的那些步骤。例如,术语“发送”应该包含要从一个存储单元或缓存器传播的数据以一个特定次序或准备状态的放置。
处理器流水线
图1是说明了在其内部可以实现本发明的处理器流水线10的一个示范实施例的高级框图。就该说明书来说,术语“处理器”应该指的是任何能够执行一个指令序列(例如,宏指令或微指令)的机器,并且应该包含但不局限于:通用微处理器、专用微处理器、图形控制器、音频控制器、多媒体控制器和微控制器。此外,术语“处理器”还应该指的是复杂指令集计算机(CISC)、精简指令集计算机(RISC)、或超长指令字(VLIW)处理器。该流水线10包含多个进程阶段,从一个读取进程阶段12开始,在那儿读出指令(例如宏指令)并将其送入该流水线10中。例如,一条宏指令可以从一个与该处理器集成或与之密切相关的高速缓存存储器中读出,或是经由一条处理器总线从一个外部主存储器中读出。这些宏指令从该读取进程阶段12被传播到一个解码进程阶段14,在那儿宏指令被译成适于在该处理器内执行的微指令(也称为“微码”)。然后这些微指令被向下传送到一个分配进程阶段16,在那儿依据可用性和需要将处理器资源分配给不同的微指令。然后这些微指令在一个退出进程阶段20中退出之前在一个执行阶段18执行。
微处理器体系结构
图2的框图以一个通用微处理器30的形式说明了在其内部可以实现本发明的一个处理器的示范实施例。该微处理器30作为一个多线程(MT)处理器而描述如下,而且因此能同时处理多个指令线程(或上下文)。然而,以下在说明书中提供的多个示教没有特指一个多线程处理器,而且在一个单线程处理器中也可以发现该应用。在一个示例中,该微处理器30可以包含一个能够执行Intel体系结构指令集的Intel(英特尔)体系结构(IA)微处理器。
微处理器30包含一个有序前端和一个无序后端。该有序前端包含一个总线接口单元32,起到微处理器30和一个在其内部可以使用该微处理器30的计算机系统的其它元件(例如主存储器)之间的管道作用。为此,该总线接口单元32将该微处理器30连接到一条处理器总线(未显示),经由该总线可以在微处理器30接收、并从微处理器30传播数据和控制信息。该总线接口单元32包含前侧总线(FSB)逻辑34,由它控制经由该处理器总线的通信。此外该总线接口单元32还包含一个总线队列36,它为经由该处理器总线的通信提供缓存功能。该总线接口单元32从一个存储器执行单元42接收总线请求38,并向其发送探听或总线返回,其中该存储器执行单元42提供了在微处理器30内的一个本地存储器性能。该存储器执行单元42包含一个统一的数据和指令高速缓存44、一个数据翻译后备缓存器(TLB)46、和存储器排序逻辑48。该存储器执行单元42从一个微指令翻译机54接收指令读取请求50,并向其传送未处理的指令52(即编码的宏指令),其中该微指令翻译机54将接收的宏指令翻译成为一组相应的微指令。在下面提供了关于该微指令翻译机54的更多细节。
解码的指令(即微指令)从该微指令翻译机54发送到一个记录传送机60。该记录传送机60包含一个记录高速缓存62、一个记录分支预测器(BTB)64、一个微码定序器66和一个微码(uop)队列68。该记录传送机60起一个微指令高速缓存的作用,而且是用于一个下游的执行单元70的微指令的主要来源。通过在该处理器流水线内提供一个微指令高速缓存功能,该记录传送机60、特别是该记录高速缓存62允许由微指令翻译机54所做的翻译工作被平衡以便提供一个相对高的微指令带宽。在一个示范实施例中,该记录高速缓存62可以包含一个256组的8路组相关存储器。在本示例中,术语“记录”可以指在记录高速缓存62的条目内存储的微指令序列,其中每个条目包含指向包含该记录在内的先前和正在处理的微指令的指针。这样,该记录高速缓存62便于高性能的排序,体现在:在完成当前访问之前为获得随后一条微指令而要访问的下一个条目的地址是已知的。记录可以被看作是彼此由记录头区别、而且一旦遇到一个间接分支或达到许多给出的阈值条件中的一个就结束的指令“块”,这些阈值条件诸如在单个记录中可以容纳的条件分支的数目或是可以包含一个记录的全体微指令的最大数目。
该记录高速缓存分支预测器64提供了关于在该记录高速缓存62内的记录的本地分支预测。该记录高速缓存62和微码定序器66向微码队列68提供微指令,然后从那儿将这些微指令送到一个无序的执行群集。因此,该微处理器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内的微指令已经完成了执行、并准备好退出时,将它们从该重新排序缓存器78中删除。重调队列80将要重调的微指令传播到执行单元70。
如图所示,执行单元70包含一个浮点执行机84、一个整数执行机86、以及一个0级数据高速缓存88。在一个其中微处理器30执行Intel体系结构指令集的示范实施例中,浮点执行机84还可以执行MMX指令。
微指令翻译机
图3的框图为微指令翻译机54的一个示范实施例的体系结构提供了更多细节。微指令翻译机54实际上操作作为一个记录高速缓存“故障处理器”,体现在:如果发生一个记录高速缓存故障它就操作用于向记录高速缓存62传送微指令。为此,如果发生一个记录高速缓存故障,则该微指令翻译机54起到提供读取进程阶段12和解码进程阶段14的作用。微指令翻译工具54包含一个下一指令指针(NIP)100、一个指令翻译后备缓存器(TLB)102、一个分支预测器104、一个指令流缓存器106、一个指令预解码器108、指令控制逻辑110、一个指令解码器112、以及一个分支地址计算器114。下一指令指针100、TLB102、分支预测器104和指令流缓存器106一起构成了一个分支预测单元(BPU)99。指令解码器112和分支地址计算器114一起构成了一个指令翻译(IX)单元113。
下一指令指针100向统一高速缓存44发布下一指令请求。在其中微处理器30包含一个能够处理两个线程的多线程微处理器的这个示例中,下一指令指针100可以包含一个多路复用器(MUX)(未显示),它在与第一或者第二线程有关的指令指针之间进行选择,用于包含在在此发布的该下一指令请求内。在一个实施例中,假定已经请求了用于两个线程的指令,而且用于两个线程的指令流缓存器106的资源没有用完,则下一指令指针100将在一个周期接一个周期(“往复转换工作”)的基础上交错用于第一和第二线程的下一指令请求。取决于初始请求地址是否位于一个32字节或者64字节校准行的上半部,下一指令指针请求可以是16、32或64字节。下一指令指针100可以由分支预测器104、分支地址计算器114、或记录高速缓存62利用作为最高优先权的重定向请求的一个记录高速缓存故障请求进行重定向。
当下一指令指针100向统一高速缓存44做出一个指令请求时,它产生一个与该指令请求有关的2位的“请求标识符”,并且该标识符用作该相关指令请求的一个“标记”。当对一个指令请求做出响应返回数据时,该统一高速缓存44和该数据一起返回下列标记或标识符:
1.由下一指令指针100提供的“请求标识符”;
2.一个用以识别返回组块的三位的“组块标识符”;以及
3.一个用以识别返回的数据所属的那个线程的“线程标识符”。
下一指令请求从该下一指令指针100传播到指令TLB102,在那儿执行一个地址查找操作,并向该统一高速缓存44传送一个物理地址。统一高速缓存44向指令流缓存器106传送一条相应的宏指令。每个下一指令请求也直接从该下一指令指针100传播到指令流缓存器106,以便允许该指令流缓存器106识别从该统一高速缓存44接收的一条宏指令所属的那个线程。然后将来自于第一和第二线程的宏指令从该指令流缓存器106发布到指令预解码器108,由它执行关于接收的(宏指令的)指令流的多个长度计算和字节标记操作。特别地,指令预解码器108还产生一系列的字节标记矢量,用于区别在传播到该指令控制逻辑110的指令流内的宏指令。然后指令控制逻辑110利用这些字节标记矢量以操纵离散的宏指令进入指令解码器112中进行解码。此外还从指令控制逻辑110传播宏指令到分支地址计算器114用于分支地址计算。然后微指令从该指令解码器112传送到记录传送机60。
多线程实现
在如图2所示的微处理器30的示范例实施例中,会注意到存在资源的有限重复。为了在一个其中存在功能单元有限重复的处理器内提供多线程性能,就必须在线程之间实现某些程度的资源共享。应当意识到:使用的资源共享方案取决于该处理器能同时处理的线程数目。因为在一个处理器内的功能单元通常提供了某些缓存(或存储)功能和传播功能,所以资源共享的问题可以被看作是包含(1)存储和(2)处理/传播带宽共享元件。例如,在一个支持同时处理两个线程的处理器中,在不同功能单元内的缓存资源可以在两个线程之间在逻辑上进行分区和分配。类似地,由一个用于在两个功能单元之间传播信息的路径提供的带宽必须在这两个线程之间被分开和分配。由于这些资源共享问题可以在一个处理器流水线内的多个存储单元产生,因此可以根据该特定存储单元的命令和特性,在这些不同的存储单元使用不同的资源共享方案。应当明白,考虑到各不相同的功能和操作特性,不同的资源共享方案可以适于不同的存储单元。
图4的框图说明了如图3所示的微处理器30的选定元件,而且描述了由于为容纳两个线程(即线程0和线程1)而被逻辑分区从而提供缓存能力的各种功能单元。一个功能单元的缓存(或存储)功能的用于两个线程的逻辑分区,可以通过分配在一个缓存资源内的第一组预定条目给第一个线程、并分配该缓存资源内的第二组预定条目给第二个线程来实现。特别地,这可以通过提供两对读和写指针来实现,其中第一对读和写指针与第一个线程有关,而第二对读和写指针与第二个线程有关。第一组读和写指针可以局限于一个缓存资源内部的第一个预定数目条目,而第二组读和写指针可以局限于在同一缓存资源内的第二个预定数目条目。在该示范实施例中,指令流缓存器106、记录高速缓存62、和一个指令队列103中的每一个都提供了存储能力,该能力在第一个和第二个线程之间进行逻辑分区。
以下将更为详细地讨论在一个处理器内功能单元之间的一条路径的带宽分配问题。
指令流缓存器
参见图3,指令流缓存器106传送一个指令流进入单指令解码器112(即没有解码器重复)中。为了有效利用这个单解码资源,期望确保在指令流缓存器106和指令解码器112之间的路径带宽,因此该指令解码器112的“解码带宽”被以一种有效方式分开并分配。因此本发明提出了一种方法,就从指令流缓存器106传送的两个指令流而论,通过该方法实现了线程切换。这种线程切换方法确定用于这两个线程中每一个的指令以何种速率被送到指令解码器112。本发明寻求实现一种线程切换算法,它试图实现下列线程切换目标:
●只有当另外一个线程有数据可以向下传送(例如从指令流缓存器106)时,才执行一个切换线程;
●当当前一个线程正在被错误地执行时(例如,当当前一个线程接收一个后端清除时),切换线程;
●切换线程以便在执行该线程切换之前保证在下游流水线内的前进进程(例如,通过确保当前线程的至少一个完全指令,将在执行从当前线程到目标线程的线程切换之前,从指令流缓存器106发出);
●防止一个线程使其它线程空闲(例如,通过只有一旦用于当前线程的预定数量指令信息已经沿该处理器流水线向下传播、而没有任何其它线程切换机制已经被启用时,才执行一个线程切换操作);以及
●分摊线程切换损失(例如,通过在寻找一个可能触发线程切换操作的采取的分支之前发出一个预定最低数量的指令信息)。
下面将参考一个示范实施例对本发明进行描述,该实施例用来在指令流缓存器106内部缓存的线程数据之间进行选择、用于沿单一路径向下向指令解码器112传播该数据。然而,容易理解,为了线程切换或交错,本发明的这些示教可以在一个处理器流水线内部的任何位置使用。图5的框图显示了关于该指令流缓存器106的结构和体系结构的更多细节。特别地,如图所示,该指令流缓存器106包含一个具有4个条目120(条目0-条目3)的存储阵列,它被逻辑上分区成为用于存储第一个线程(线程0)指令的第一分区122、以及用于存储第二个线程(线程1)指令的第二分区124。在一个示范实施例中,每一条目120都能容纳8组块的信息,因此该指令流缓存器106为每个线程提供了16组块的数据高速缓存。
此外该指令流缓存器106还包含一个分配模块125,用于控制将数据写入到逻辑分区122和124、以及从该逻辑分区122和124读取数据。
每一分区122和124都有各自的、包含在该分配模块125内部的分配逻辑126。每个分配逻辑126都包含一个写入指针128和一个读取指针130,它们每一个都指向在相关分区122或124内部的一个条目120。每个分配逻辑126从统一高速缓存44接收一个指令流,并依据线程规范将该指令流的组块(即8字节)写入到第一分区122或第二分区124里。特别地,通过检查与每个组块数据有关的“线程标识符”,每个分配逻辑126能够确定将从该统一高速缓存44接收的数据写入到哪个分区。
每一个分配逻辑126从各自的分区122或124输出数据到一个MUX132,由它根据由线程切换控制逻辑136确定的一个线程选择信号134在分区122和124的输出之间进行选择。因此,在本发明的该示范实施例中,由线程切换控制逻辑136实现线程交错或切换方案。此外,线程切换控制逻辑136还经由线路138和140监控每一个分区122或124的输出,以便能够确定何时将一个组块数据从分区122或124中的任何一个发送,并识别该组块是从这些分区中的哪一个发送的。然后,将由MUX132选择用于输出的该组块数据在处理器流水线内部向下传播到指令预解码器108,并最终传送到指令解码器122用于解码。
图6的框图描述了线程切换控制逻辑136的逻辑元件。特别地,如图所示,该线程切换控制逻辑136包含在空闲上切换的逻辑150、在分支上切换的逻辑152、长等待时间停止逻辑154、内部清除逻辑156、无数据流逻辑158、强制线程改变逻辑160、外部清除逻辑162、以及插入流逻辑164。虽然如图6所示每一个逻辑150-164中是独立的,但是在各种逻辑之间可能有重要元件共享,如以下将要描述得那样。逻辑150-164中的每一个都实现一种特定的功能,可以使到该MUX132的选择信号134被确定或不确定,借此以上述方式引起一个线程切换。在每一个逻辑150-164内部包含的功能将参考在图7-14中提供的流程图进行描述。参考图15-16对一个特定示范实施例的细节进行描述。
在空闲上切换的逻辑(150)
在空闲上切换的逻辑150确定在所有线程都空闲的情况下多个线程中的哪一个被选择作为一个开始线程。图7的流程图说明了一种依据本发明示例、用于当在一个多线程处理器内的两个线程空闲时确定一个开始线程的方法200。应当明白该方法200还可以在不只支持两个线程的多线程处理器中得到应用。该方法200可以在在空闲上切换的逻辑150的内部实现。方法200在步骤202用一个空闲线程状态开始,其中两个线程(即线程0和31)都是空闲的。在步骤204,根据,仅仅用于示例,在一个流水线清除事件之后的微码中的一个指示(例如,一个流水线“nuke”),由该选择信号134的确定或不确立选择第一个线程(例如线程0)。在判定框206,就在收到对线程0的一条指令的请求之前是否收到对线程1的一条指令的请求做出判定。参见图5,能够看出:线程切换控制逻辑136连接用以经由一个线程信号137从下一指令指针100接收一个指示,其中该指示关于从统一高速缓存44读出的下一指令。这样,线程切换控制逻辑136,特别是在空闲上切换的逻辑150能够识别下一指令请求指向的那个线程。再次参考图7,如果对线程1一条指令的请求在对线程0一条指令的请求之前接收了,则在步骤208执行一个线程切换。相反,则在步骤210保持当前线程选择。然后方法200在步骤212结束。
在分支上切换的逻辑(152)
在诸如图2所示、使用了一个分支预测机制的一个微处理器30中,错误预测分支的可能性当然是存在的。为此,本发明提出了一种线程切换方案,一旦在一个特定线程的指令流内部遇到了一条要采取的、由分支预测单元预测的分支指令,就执行一个线程切换。考虑到相关分支指令被错误预测的可能性和继续分支指令的指令流的推测特性,这减少了分配给那个特定线程的处理器资源。这样,以不为它的重要程度而可能包含一条分支指令的另外一个线程为代价,防止了用于一个可能处理错误的预测分支的线程的推理性指令流太深地渗入到该处理器流水线中。
图8的流程图说明了一种依据本发明示范实施例的方法220,用于在一个多线程处理器内部,在当前线程(例如线程0)的一条分支指令从指令流缓存器106到指令预解码器108排序(或发送)时,执行一个线程切换操作。该方法220在步骤222开始,在那儿由分配模块125排序一条分支指令以便从该阵列的一个逻辑分区122或124(例如,从分配给线程0的逻辑分区122)发出。线程切换控制逻辑136,尤其是在分支上切换的逻辑152,从如图5中所示的分配模块125接收一个分支识别信号224(BPsbsawbranch)。
该分支识别信号224由分配模块125确定,以将已经由分支预测单元99预测的一条分支指令识别为正在处理。特别地,分支预测器104将利用多个公知的预测和方法或算法中的任何一个(例如,根据一条用于相关分支指令的记录的分支历史记录)、就一条特定分支指令是否将被处理或者不被处理做出预测。然后分支预测器104将设置与该相关指令有关的一个位、并用该指令在处理器流水线内部和“请求标识符”一起向下传播,从而使它能够与由分配模块125进行的相关分配有关。应当注意到:该分支识别信号224仅仅确定被预测进行处理的分支指令,而不是那些被预测不进行处理的分支指令。然而,在本发明的一个替换实施例中,分支识别信号224可以在遇到任何已经对其做出任何预测的分支指令时,进行确定。
图15说明了分支识别信号224向一个与门225提供输入。
在判定框226,就用于当前线程(线程0)的一个预定最低数量的指令信息(例如,一个预定最少数量的组块)是否已经从指令流缓存器106发送(或传送)做出判定。这结束后,并参见图15A,切换控制逻辑136包含一个以一个发送组块增量器228的形式的计数器,它保持对在一个线程切换之前从指令流缓存器106的一个当前逻辑分区122或124发送的组块的计数。该发送组块增量器228由一个接收三个输入的与门230的输出递增。一个BPready信号232由分配模块125确定以指示一个组块准备好从有关的逻辑分区122或124发送。一个与ENTRY条目(来自线程切换控制逻辑136)有关的线程信号234,标识准备发送的组块所属的那个线程(以及相应的逻辑分区122或124)。一个NOT(IStall)信号236指示在指令控制逻辑110没有遇到停止状态。在确定这些信号232-236时,对与门230的输出进行确定,并递增该发送组块增量器228,以便记录用于从指令流缓存器106发送的一个组块的排序。
在本发明的一个实施例中,线程切换控制逻辑136还包含一个“在分支上切换之前的组块”寄存器238,它可经由一条控制寄存器总线240进行编程以存储一个表示组块一个预定数量的值,它是在响应于一条分支指令进行一个线程切换操作之前,要求已经从指令流缓存器106中排序的组块数量。在本发明的一个替换实施例中,表示该组块的预定数量的值可以是硬布线的。此外,切换控制逻辑136还包含一个比较器242,用于就增量器228和寄存器238的输出执行一个比较操作,并且如果由增量器228指示的值大于在寄存器238内存储的值的话,确定一个信号给与门244。对比较器242输出信号的确定相应于在图8的判定框226进行的肯定判定。
与门230还提供输入给与门225,而且与门230的输出确定和分支标识信号224的确定一起使与门225的输出(即一个分支发送信号227)被确定作为给与门244的输入。分支发送信号227的确定表示在步骤222检测的情况的发生。
在判定框226进行肯定判定之后,该方法200继续到判定框248,在那儿就用于一个替换线程(例如线程1)的一个预定最低数量的指令信息(例如一个预定最少数目的组块)是否待决和可用于从指令流缓存器106的逻辑分区124发送做出判定。这个判定的有利之处在于:它防止当没有足够的指令信息已经缓存在指令流缓存器106内部用于目标线程时,一个线程切换的发生,以便保证到这样一个目标线程的一个线程切换。特别地,一个线程切换可能比要求再次提供用于当前线程的指令信息耗费更多的时钟周期。例如,一个线程切换操作可能要求六个周期,而可能存在一个高的几率,即用于当前线程的指令信息可以在三个时钟周期内接收到。
再次参看图15,线程切换控制逻辑136的一个示范实施例可以包含一个“切换之前未决的组块”寄存器,它可以允许经由控制寄存器总线240进行编程以存储一个表示用于一个目标线程(例如线程1)的、应该在允许切换到那个目标线程的一个线程切换之前被缓存在一个阵列分区内部(例如分区124)的组块的预定最少数目值。在本发明的一个替换实施例中,表示组块的这个预定数目的值同样可以是硬布线的。线程切换控制逻辑136还包含一个“统计未决组块”增量器252,它保持对指令流缓存器106内存储的、用于一个目标线程(即不是当前线程)的组块数目的统计。增量器252由一个“IPD发送未决组块”信号254递增,其中该信号在从统一高速缓存44接收的一个组块指令信息被分配给缓存器106内的一个条目时由分配模块125进行确定。分配模块125利用以上讨论的、并与每个响应于下一指令请求读出的组块有关的“线程标识符”,来识别一个特定组块是否用于该目标线程,而不是用于当前线程。比较器256比较寄存器250和增量器252内存储的相应值,并且如果由增量器202保持的值大于寄存器250内存储的值,则确定一个输出信号给与门244。对比较器256的输出信号的确定相应于在图8中的判定框248进行的肯定判定。
在判定框248进行一个肯定判定之后,该方法220继续到判定框260,在那儿就用于当前线程的一个预定量指令信息是否已经沿着微处理器30的流水线进行了排序做出判定。这个判定的有利之处在于:它保证了在一个线程切换操作之前当前线程的前进进程。在使用了Intel体系结构(IA)指令集的本发明的一个示范实施例中,就用于当前线程的三(3)个组块的指令信息是否已经排序做出判定,因为这保证了用于当前线程的至少一条完整指令。
在本发明的替换实施例中,由于对一条分支指令排序的检测,本身构成了至少一条完整指令,从而确保了与在判定框260的判定一致,因此在判定框260做出的判定可以省去。
参见图15A,线程切换控制逻辑136的一个示范实施例可以包含一个比较器262,由它确定由该“发送组块”增量器228保持的计数值是否大于或等于一个预定的最小值、例如3。在本发明的替换实施例中,这个预定的最小值可以是可编程的或是硬布线的。如果由增量器228保持的值等于或大于该预定的最小值,则比较器262确定一个输出信号给与门244。对比较器262的输出信号的确定相应于在如图8所示的判定框260进行的肯定判定。
在判定框260进行一个肯定的判定之后,由判定框226、248和260表示的条件已经满足了,然后在步骤264执行一个线程切换操作。另一方面,如果由判定框226、248或260给出的这些条件中的任何一个没有得到满足的话,则在步骤266保持当前线程选择。然后该方法220在步骤268结束。
应当明白:由步骤222表示的条件、以及判定框226、248和260,表示了给如图15A所示的与门244的四个输入,而且当这条件全部满足时,与门244的输出将被确定并提供一个输入给一个或门245。或门245的输出构成了从线程切换控制逻辑136输出的线程选择信号134。对或门245的输出的确定相应于在步骤264执行线程切换操作。
虽然本发明的上述实施例被描述成是用一个增量器228、一个“在分支切换之前的组块”寄存器238和比较器242实现的,但是容易理解:本发明可以用一个减量器代替增量器228来实现,而且每当发生一个线程切换时在该减量器中预先载入寄存器238中包含的值。在这个实施例中,该减量器在每次从指令流缓存器106的当前逻辑分区122或124发送一个组块时进行递减。然后该减量器确定一个输出信号(对应于在先前描述的实施例中的比较器242的输出信号)以指示在判定框226的一个肯定判定。在这个实施例中,该减量器还可以由与门230的输出递减。
长等待时间停止逻辑(154)
由于可分配给一个多线程处理器的处理器流水线内部的一个特定线程的一个指令流的资源有限,以及由于分支错误预测和高速缓存故障,在这样一个处理器流水线内部的停止是很平常的。特别地,参见如图2所示的微处理器30,可能会发生由分配器76确定没有足够的资源(例如物理寄存器、在线程0和线程1之间被逻辑上分区在预定位置或重新排序缓存器78内部的条目)可用于从队列68接收的一个特定线程的指令(即微指令)。在这种情况下,分配器76专门为一个线程确定一个停止信号82,该信号经由记录传送机60传送到微指令翻译机54。在确定用于一个特定线程的这样一个停止信号82时,可能期望执行一个线程切换操作。长等待时间停止逻辑154包含用于在一个处理器流水线停止的情况下实现一个线程切换操作的电路。
图9的流程图说明了一种依据本发明一个示例方法280,用于例如由于资源不能利用、分支错误预测、或高速缓存故障引起的一个处理器流水线内部的一个停止而出现长等待时间停止时,在一个多线程处理器内部执行一个线程切换操作。该方法280在步骤282开始,在那儿检测一个停止条件。如上所述,可以通过决定对如图2所示的线程特有的停止信号82的确定来检测这个停止条件。做为选择,可以通过决定对其它例如由分配器76、记录高速缓存62(两个都称为“末端”停止)、指令解码器112或指令控制逻辑110确定的停止信号的确定来检测该停止条件。在判定框284,就继在步骤282检测到停止以来一个预定最少数目的时钟周期是否已经过去做出判定。参见图15,线程切换控制逻辑136的一个示例可以包含一个“长等待时间统计”寄存器286,它经由控制寄存器总线240进行编程,以存储一个表示自检测停止以来,在允许到一个目标线程的线程切换之前,已经过去的时钟周期的这个预定最少数目。在本发明的一个替换实施例中,表示时钟周期的这个预定最少数目的值可以是硬布线的。切换控制逻辑136还包含一个“长等待时间”增量器288,由它保持对自在步骤282检测停止以来已经过去的时钟周期数目的统计。该增量器288由一个“ IXstall”或指令翻译停止信号290递增,其中该指令翻译停止信号290在处理器流水线停止的每个时钟周期进行确定。此外,增量器288由一个“TCFBstall”信号292的不确定进行复位,其中该“TCFBstall”信号292在停止被克服时进行不确定。由一个记录高速缓存填充缓存器(TCFB)(未显示)确定该“TCFBstall”信号292,其中该缓存器(TCFB)从记录传送机60向上传送一个分配停止信号58到微指令翻译机54。比较器294比较寄存器286和增量器288内存储的相应值,并且如果由增量器288保持的值大于寄存器286内存储的值,则确定一个输出信号给一个与门296。对比较器294的输出信号的确定相应于在如图9所示的判定框284进行的一个肯定判定。
如果在判定框284判定时钟周期的该预定数目没有过去,则在步骤285保持当前线程选择,然后该方法280返回到判定框284。
在判定框284进行一个肯定判定之后,该方法280继续到判定框284,在那儿就用于当前线程的一个预定最低数量指令信息是否已经沿着微处理器30中的流水线进行了排序做出判定。如上面结合图8所示的判定框260描述的那样,由“发送组块”增量器228和比较器262的组合做出这个判定。比较器262提供一个输入给与门296,一旦用于当前线程的一个预定数目的组块已经沿着微处理器流水线排序了,就确定比较器262的输出。
与门296的输出信号297被传送到分支地址计算器114,然后由它确定一个用于从其已经进行切换的那个线程(即当前线程)的再启动指令指针,而且不确定一个用于当前线程的分支地址清除(BAclear)信号。当发生一个线程切换时,在更一般的级别,要求一个指令指针以识别一个存储单元,其中从该存储单元再启动已经从其发生切换的那个线程。这个指令指针可以是:(1)被预测为TAKEN(要采取的)的一条分支指令的目标,在这种情况下该指令指针由在分支上切换的逻辑152提供;(2)由微码提供;或(3)由分支地址计算器114提供(是以上刚讨论的情况)。
在判定框298进行了一个肯定判定之后,还在判定框300就一个指令翻译后端清除信号302是否已经被确定做出判定。如果是这样的话,则在步骤303执行一个线程切换。做为选择,在判定框298或者300进行了否定判定之后,在步骤304保持当前线程选择。然后该方法280在步骤306结束。
内部清除逻辑(156)
与从微指令翻译机54的外部(例如从退出逻辑以一个“nuke”清除操作的形式)激活一个外部清除相反,从微指令翻译机54本身内部激活一个内部流水线清除操作。由于存在作为与当前一个线程有关的一个条件的结果激活了该清除操作的高可能性,而且一个替换线程可能更好地准备了在流水线内部的处理(例如已经填充了缓存器),所以这种清除操作被期望为一个线程切换操作。
图10的流程图说明了一种依据本发明一个示范实施例、用于当发生一个内部流水线清除时在一个多线程处理器内执行线程切换操作的方法310。该方法310在步骤312开始,在那儿检测一个清除信号的确定。参见如图15A所示的切换控制逻辑136的示范实施例,这可以通过检测指令翻译分支地址计算器清除“IXbaclear”信号302的确定来执行。特别地,这个信号302被提供输入给一个与门314,该与门314还进一步从比较器256接收输入。如上所述,当在指令流缓存器106内部由“统计未决组块”增量器252记录的未决的组块数目大于“切换之前未决的组块”寄存器250内存储的值时,对比较器256的输出进行确定。因此,比较器256的输出被确定以表示对由方法310的判定框316表示的条件的肯定判定,在这之后在步骤318执行一个线程切换操作。特别地,当与门314的两个输入都被确定时,接着与门314的输出被确定以向或门245提供一个确定的输入。另一方面,如果在判定框316做出了一个否定判定,则在步骤320保持当前线程选择。然后该方法310在步骤322终止。
无数据流逻辑(158)
在发生了用于当前线程的一个第一级高速缓存故障的情况下,一个长等待时间的操作通常会导致可能要求相对多的时钟周期来完成。如果满足了由如图9所示的流程图指定的用于一个长等待时间操作的条件,则长等待时间逻辑154在这种情况下可以触发一个线程切换操作。然而,如果用于一个长等待时间操作的所有条件没有得到满足,则长等待时间逻辑154将不会触发一个线程切换操作。在这种情况下,就需要一个替换逻辑。
图11的流程图说明了依据本发明一个示例、用于当在一个多线程处理器内出现关于一个特定线程的“无数据流”条件时,在该多线程处理器内执行线程切换操作的方法330。方法330在步骤332开始,在那儿检测到缺少用于当前线程的、从统一高速缓存44到指令流缓存器106的一个指令流。参见图15A,在一个示范实施例中,这可以通过一个数据流信号334的确定(不确定)进行检测,其中该数据流信号334由统一高速缓存44在一个指令流被提供给指令流缓存器106期间的每个时钟周期进行确定。“无数据流”条件也可以作为到指令预先解码器108的数据流的一个锁定被检测到,因为这暗示在从统一高速缓存44到指令流缓存器106的数据流上的一个锁定。“无数据流”条件也可以作为到指令预先解码器108的数据流的一个锁定被检测,是由于这暗示在从统一高速缓存44到指令流缓存器106的数据流上的一个锁定。
在判定框336,就没有数据流从统一高速缓存44到指令流缓存器106的一个预定最小数目的时钟周期是否已经过去做出判定。为此,线程切换控制逻辑136如图15A所示,包含一个“无数据流”计数器338,它为数据流信号334不确定的每个连续时钟周期加1,以指示缺少一个用于当前线程、流向指令流缓存器106的指令流。计数器338可以通过信号335的确定进行复位,一旦恢复了从指令流缓存器106到指令预先解码器108的一个数据流,就对信号335进行确定。可以响应于在信号232和236(即,BPready和NOT ISstall信号)上执行的一个与操作对该信号335进行确定。逻辑136进一步包含一个“无数据流周期”寄存器340,它可经由控制寄存器总线240进行编程以存储一个表示在能够检测到一个无数据流条件之前的时钟周期的一个预定最小数目值。在本发明的一个替换实施例中,表示这个时钟周期的预定数目的值可以是硬布线的。计数器338和寄存器340向一个比较器342提供输入,当由计数器338保持的值大于在寄存器340内存储的值时由该比较器342确定一个输出到与门344。对比较器342的输出信号的确定相应于在如图11所示的判定框336进行的一个肯定判定。
如果在判定框336进行了一个否定判定,则方法330继续进行到步骤345,在那儿保持当前线程选择。
继在判定框336进行了一个肯定判定之后,该方法330继续在判定框346和348执行判定,它们相当于如图8所示的方法220在判定框248和260做出的判定。因此,实现在判定框346和348的判定的比较器256和262的输出被输入到与门344。与门344的输出再次输入到或门245。这提供了一个如果对应于判定框336、346和348出现了肯定判定、则在方法330中的步骤350执行线程切换操作的逻辑实现。做为选择,如果在判定框336、346或348中的任何一个出现了一个否定判定,则在步骤352保持当前线程选择。然后方法330在步骤354结束。
强迫线程改变逻辑(160)
在某些情况下,可能会遇到一个尤其是线性的指令流(包含一个第一或者第二线程),而且因此没有包含许多分支指令。假定以上或下面讨论的其它条件都不存在,可以设想如果没有事件出现以触发一个线程切换,则这样一个线性线程可能耗费一个不成比例的处理器资源。为了防止这样一个线性线程过分使用处理器资源,本发明提出了继从一个资源、例如指令流缓存器106排序或发送一个预定量的、用于单个线程的指令信息之后触发一个线程切换操作的逻辑。
图12的流程图说明了一种依据本发明一个示例、用于当用于一个特定线程(例如线程0)的、一个预定量的指令信息从指令流缓存器106到指令预解码器108排序(或发送)时,在一个多线程处理器内部执行一个线程切换操作的方法360。方法360在步骤362开始,在那儿用于一个特定线程(例如线程0)的指令信息被选择用于从指令流缓存器106排序和发送。这个选择可以由从线程切换控制逻辑136输出到MUX 132的线程选择信号134表示。
在判定框364,就用于当前线程(例如线程0)的一个预定最大数量的指令信息是否已经从指令流缓存器106排序做出判定。如图15A所示的示例线程切换控制逻辑136包含一个“资源拱曲”寄存器366,它可经由控制寄存器总线240进行编程以存储一个表示在触发一个线程切换操作之前、用于一个特定线程的、从指令流缓存器106进行排序的组块的一个预定最大数目的值。在本发明的一个替换实施例中,表示组块的这个预定最大数目的值可以是硬布线的。该“资源拱曲”寄存器366和保持对从缓存器106发出的用于特定线程的组块的计数的“发送组块”增量器228,提供输入到一个比较器368里,当增量器228的输出值大于在该“资源拱曲”寄存器366内的存储值时由该比较器368确定一个输出给与门344。因此,对比较器368的输出信号的确定相应于在如图12所示的判定框364进行的一个肯定判定。
如图所示,与门344的输出向或门245提供输入,还提供一个“插入FTC”输出434。
如果在判定框364进行一个否定判定,则方法360继续进行到步骤370,在那儿保持当前线程选择,随后方法330循环返回到判定框364。
继在判定框364进行了一个肯定判定之后,该方法360继续在判定框372和374执行判定,它们相当于如图8所示的方法220在判定框248和260做出判定。因此,如图所示,实现在判定框372和374做出判定的比较器256和262的输出被输入到与门344。
继在判定框336、346和348做出肯定判定之后,一个流标记(或“插入流”)(例如‘1100)被插入到从指令流缓存器106发送的该指令流中。特别地,由于线程切换操作也许已经在一条不完全的指令上发生了,所以分支地址计算器114将被要求重新开始读取当前线程,所以该插入流是必需的。在这种情况下,分支预测单元113将该插入流插入到指令流中以指示强迫线程改变。插入流具有一个被确定的ForceUOPValid。该插入流只是在一个组块已经预定从指令流缓存器106发送给指令预先解码器108以后才被插入。一旦发送了有关的组块,该插入流就被多路复用到一个ForceUOPVector字段(event_info字段)里。为此,参考图16,它说明了用于在指令流缓存器106内部的一个示范阵列分区122内缓存的组块的event_info字段。如图所示,“插入FTC”输出434操作一个MUX 450以在(1)存储在分区122内部的一个条目120内的一个组块的event_info字段121的当前内容以及(2)插入流452之间进行选择。在继确定了比较器368的输出之后输出244被确定的情况下,插入流452将被插入到从分区122发送的一个组块的event_info字段121中。
然后响应于对与门344的输出的确定,在步骤376通过对选择信号134的确定执行一个线程切换操作。做为选择,如果在判定框364、372或374中的任何一个出现了一个否定判定,则在步骤378保持当前线程选择。然后该方法360在步骤380结束。
由强迫线程改变逻辑160启动的一个线程切换操作不同于在本说明书中讨论的其它线程切换操作,体现在以下方面:在其上发生线程切换的数据组块没有某些特殊或区别特征,其中这些特殊和区别特征可能会提供一个线程切换操作的某些前兆。特别地,由线程切换控制逻辑136内部的其它逻辑150-164执行的线程切换操作伴随有一个使线程切换操作有利的条件,而且因此实施的硬件不要求警告。没有配备指令控制逻辑110以处理一个突然的和意料不到的线程切换操作。因此,插入流标记提供了一个机制以向指令控制逻辑110通知上游发生的线程切换操作。
此外,利用一个强迫线程改变,如同利用在当前说明书中讨论的其它线程切换操作一样,需要一个“重新启动”指令指针。由于由强迫线程改变逻辑160强迫了在该指令流中的一个中断,因此期望让微码提供有重新启动指针,这与下一指令指针100相反。
外部清除逻辑(162)
如以上参考内部清除逻辑156描述得那样,从微指令翻译机54的外部激活一个外部清除。
图13的流程图说明了依据本发明示范实施例、用于当发生一个外部流水线清除时在一个多线程处理器内执行一个线程切换操作的方法400。该方法400在步骤402开始,在那儿检测对一个外部清除信号的确定。参见如图15A所示的线程切换控制逻辑136的示范实施例,这可以通过检测一个记录高速缓存/微指令翻译机清除信号“TCmiteclear”404的确定来执行,该信号提供一个直接输入到或门245。因此,如图5所示,信号404的确定将导致对从线程切换控制逻辑136传送到MUX 132的线程选择信号134的确定。这在该方法400的步骤406中反映出来,该方法此后在步骤408结束。
插入流逻辑(164)
在微指令翻译机54内,如图3所示,当指令翻译后备缓冲器(ITLB)102登记一个页故障时,一个流标记(也被称为一个“插入流”)被插入到指令流中以标记这个事件。这样一个页故障导致一个页故障控制器(未显示)的一个相对长的走页操作,它可能仅仅例如耗费最多150个时钟周期。在一个多线程处理器中,当前线程的一个指令流发生一个页故障时,执行一个线程切换操作以便允许一个替换线程利用由走页操作带来的等待时间,这可能是有利的。如上所述,插入流逻辑164提供了一个在出现页故障时实现和执行一个线程切换功能的逻辑示范实施例。
除了页故障之外,可能导致一个插入流的其它事件在本领域内是公知的,或是专门用于一个微处理器体系结构。
图14的流程图说明了依据本发明一个示范实施例、用于在检测到用于当前线程的一个指令流内部的一个插入流时在一个多线程处理器内执行一个线程切换操作的方法420,其中插入流指示仅仅例如一个关于指令TLB102的页故障。该方法420在步骤422用选择当前线程(例如线程0)开始。这个选择可以由从线程切换控制逻辑136输出到MUX132的线程选择信号134表示。在判定框424,就在用于当前线程的指令流内的一个指令翻译事件“Iteventid”字段426是否指定了一个插入流(例如不具有′0000或′0111的值)做出判定。特别地,在指令翻译事件字段426内出现上述值可能指示缺少一个插入流。参见图15A,如图所示,字段426被输入到一对比较器(或其它逻辑)428和430,由它们确定该字段426是否包含值′0000或者′0111。如果是这样的话,则比较器428或430确定一个输出给或非NOR门432,它的输出被输入到或门245。
在判定框436,就用于一个目标线程(例如线程1)的一个预定最少数量的指令信息是否可以从指令流缓存器106发送做出选择性地判定。可以利用或非门NOR42的输出和比较器262的输出来做出这个判定。
继在判定框424和436做出了肯定判定之后,然后可以在步骤438执行一个线程切换操作。特别地,对NOR门42的输出的确定可以相当于在步骤438执行的线程切换操作,它通过或门245传播以导致对选择信号134进行确定。做为选择,如果在判定框424或436中的任何一个做出了一个否定判定,则在步骤440保持当前线程选择。然后该方法420在步骤442终止。
结论
在以上参考图15讨论的线程切换控制逻辑136的示例中,多个逻辑150-164被描述为利用增量器、寄存器和比较器的组合来实现。在本发明的一个替换实施例中,这些逻辑中的某些或全部都可以使用仅仅从一个预定的、可编程的值递减并在达到零值时确定一个信号的一个减量器来实现。这样一个实施例的例子如图15B所示。
总之,以上描述的线程切换逻辑136的有利之处在于:它提供了多个灵活的机制,响应于发生在其上可能有益于执行这种线程切换操作的事件,实现和执行线程切换操作。此外,通过包含可编程的参数,本发明允许用于各种情况和考虑线程切换机制的修改和很好调整。例如,当执行一个类型的应用程序、诸如多媒体应用程序时,可能期望使线程切换机制的参数被设置为与执行一个不同类型的应用程序、诸如一个字处理应用程序时不同的值。
线程切换逻辑136适于时间分割一条路径(在一个源资源和一个目的地资源之间)的带宽和/或在一个多线程处理器内的处理资源。虽然线程切换逻辑136如上所述,被用来从一个指令流缓存器向一个指令预解码器发送用于两个线程的指令信息,但是容易理解,本发明的这些示教能够被用在一个处理器流水线内部从任何源向任何目的地发送用于多个线程的指令信息。
因此,已经描述了用于在一个多线程处理器内进行线程切换的方法和装置。尽管已经参考特定示例对本发明进行了描述,但是显然可以在没有背离本发明的宽阔的精神和范围的情况下,对这些实施例进行各种修改和改变。因此,该说明书和附图是用来作为例证的而不具有限制意义。

Claims (73)

1.一种用于在一个多线程处理器内执行一个线程切换操作的方法,该方法包括:
检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息;
确定用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源的发送;以及
如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
2.如权利要求1所述的方法,其特征在于:对用于第一个线程的第一个预定量的指令信息的发送的检测包含保持对从该指令信息源发送的、用于第一个线程的指令信息的计数,以及确定何时该指令信息的计数大于第一个预定阈值。
3.如权利要求2所述的方法,其特征在于:对从该指令信息源发送的、用于第一个线程的指令信息的计数包含一旦从该指令信息源发送了一个指令信息,就将一个计数器加1。
4.如权利要求2所述的方法,其特征在于:对从该指令信息源发送的、用于第一个线程的指令信息计数包含一旦从该指令信息源发送了一个指令信息,就将一个计数器减1。
5.如权利要求2所述的方法,包括在一个可编程存储单元中存储第一个预定阈值。
6.如权利要求5所述的方法,其中该可编程存储单元是一个寄存器。
7.如权利要求5所述的方法,其特征在于:该检测包括在一个可编程存储单元的内容和一个递增计数器的内容之间执行一个比较操作,其中该递增计数器保持从指令信息源发送的用于第一个线程的指令信息的计数。
8.如权利要求5所述的方法,其特征在于:该检测包含从该可编程存储单元中将该第一个预定阈值载入到一个递减计数器中作为一个初始值,并检测何时该递减计数器记录一个零值。
9.如权利要求1所述的方法,其特征在于:指令信息源被进行分区为第一分区以便提供用于第一个线程的指令信息和第二分区以提供用于第二个线程的指令信息,以及通过操作线程选择逻辑单元选择从第二分区进行指令信息的发送,以便开始发送用于第二个线程的指令信息。
10.如权利要求1所述的方法,其中指令信息源包括一个存储单元,该存储单元被进行分区,以在第一分区中储存用于第一个线程的指令信息,和在第二分区中储存用于第二个线程的指令信息,以及通过操作线程选择逻辑单元选择从第二分区而不是从第一分区进行指令信息的发送,以便开始发送用于第二个线程的指令信息。
12.如权利要求1所述的方法,其特征在于:该指令信息源包含一个存储单元;而且其中对用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源发送的确定包含保持对接收到该存储单元中的用于第二个线程的指令信息的计数,以及确定接收到该存储单元中的指令信息的计数何时大于第二个预定阈值。
13.如权利要求12所述的方法包括在一个可编程存储单元中储存该第二个预定阈值。
14.如权利要求13所述的方法,其中该可编程存储单元是一个寄存器。
15.如权利要求13所述的方法,其中所述对接收到该存储单元中的指令信息的计数何时大于第二个预定阈值的确定包括在该可编程存储单元的内容和一个计数器的内容之间执行一个比较操作,该计数器保持从指令信息源发送的用于第二个线程的指令信息的计数。
16.如权利要求1所述的方法,包含确定用于第一个线程的第三个预定量的指令信息是否已经从该指令信息源发送了,以及只有当用于第一个线程的第三个预定量的指令信息已经从该指令信息源发送了时,才开始从该指令信息源发送用于第二个线程的指令信息。
17.如权利要求16所述的方法,其特征在于:指令信息的第三个预定量等于或大于第一个指令集的一条完整指令的指令信息的最低数量。
18.如权利要求16所述的方法,其特征在于:对用于第一个线程的第三个预定量的指令信息是否已经从该指令信息源发送的确定包含对从该指令信息源发送用于第一个线程的指令信息进行计数;以及确定对从该指令信息源发送的指令信息的计数是否大于第三个预定阈值。
19.如权利要求1所述的方法,包含在开始从该指令信息源发送用于第二个线程的指令信息之前,将一个流标记插入到一个包含从该指令信息源发送的用于第一个线程的指令信息的指令流里。
20.如权利要求19所述的方法,其中该流标记对该处理器中的指令控制逻辑指示一个线程切换操作已出现。
21.如权利要求1所述的方法,包含确定用于第一个线程的第四个预定量的指令信息是否已经从该指令信息源发送了;以及如果用于第一个线程的第四个预定量的指令信息已经从该指令信息源发送,就检测要从该指令信息源发送用于第一个线程的指令信息中的一条分支指令;如果检测到一条分支指令,开始从该指令信息源发送用于第二个线程的指令信息。
22.如权利要求21所述的方法,其特征在于:对用于第一个线程的第四个预定量的指令信息发送的检测包含对从该指令信息源发送用于第一个线程的指令信息进行计数;以及确定对用于第一个线程的指令信息的计数何时大于第四个预定阈值。
23.如权利要求22所述的方法,其中对发送的用于第一个线程的指令信息的计数包括一旦从该指令信息源发送了一个用于第一个线程的指令信息,就将一个计数器加1。
24.如权利要求22所述的方法,其中对发送的用于第一个线程的指令信息的计数包括一旦从该指令信息源发送了一个用于第一个线程的指令信息,就将一个计数器减1。
25.如权利要求22所述的方法包括在一个可编程存储设置中储存第四个预定阈值。
26.如权利要求1所述的方法,包括在该多线程处理器的一个处理器流水线内部检测用于第一个线程的一个停止条件;在对该停止条件的检测之后检测第一个预定时间间隔在什么时候已经过去;以及,响应于对第一个预定时间间隔已经过去的检测,开始从该指令信息源发送用于第二个线程的指令信息。
27.如权利要求26所述的方法,其中在处理器流水线中对第一个线程的停止条件出现在该指令信息源的处理器流水线下游中的一个存储单元上。
28.如权利要求27所述的方法,其中该处理器流水线包括一个用于确定一个停止信号的源分配程序,并且检测停止条件包括检测该停止信号的确定。
29.如权利要求1所述的方法,包含对用于第一个线程的指令信息没有从一个处理器流水线内上游源流动到该指令信息源的检测,在检测到没有用于第一个线程的指令信息从一个处理器流水线内上游源流动到该指令信息源之后,检测第二个预定时间间隔在什么时侯已经过去;以及,响应于对第二个预定时间间隔已经过去的检测,开始从该指令信息源发送用于第二个线程的指令信息。
30.如权利要求1所述的方法,包含用于在指令信息源接收的第一个线程的指令信息内部检测一个流标记;以及响应于对该流标记的检测,开始从该指令信息源发送用于第二个线程的指令信息。
31.如权利要求30所述的方法,其特征在于:该流标记指示在该指令信息源的一个处理器流水线上游中的一个存储单元出现了一个页丢失。
32.如权利要求1所述的方法,其中该指令信息源包括一个指令流缓冲器。
33.如权利要求1所述的方法,其中从该指令信息源发送的指令信息被发送到一个指令解码器,从该指令信息源发送的指令信息包括宏指令信息。
34.如权利要求33所述的方法,其中该指令解码器不执行线程切换操作。
35.如权利要求34所述的方法,其中该指令解码器不实施一个线程切换方案。
36.用于在一个多线程处理器内执行一个线程切换操作的设备,该设备包括:
检测逻辑单元,用于检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息,以及检测用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源发送;以及
选择逻辑单元,连接到该检测逻辑单元,如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
37.如权利要求36所述的设备,其中检测逻辑单元包括一个计数器,该计数器保持用于第一个线程的从该指令信息源发送的指令信息的计数。
38.如权利要求37所述的设备,其中该计数器包括一个加1计数器,一旦从指令信息源发送用于第一个线程的指令信息,该加1计数器就加1。
39.如权利要求38所述的设备,其中该检测逻辑单元包括一个比较器,该比较器检测用于第一个线程的指令信息的计数何时超过第一预定阈值。
40.如权利要求39所述的设备,其中该检测逻辑单元包括一个可编程存储单元以储存第一预定阈值。
41.如权利要求40所述的设备,其中该比较器连接到计数器和该可编程存储单元,并执行该可编程存储单元的内容和该计数器内容之间的比较操作。
42.如权利要求37所述的设备,其中该计数器包括一个减1计数器,一旦从该指令信息源发送用于第一个线程的指令信息,该减1计数器就减1。
43.如权利要求36所述的设备,其中指令信息源被分区为第一分区以提供用于第一个线程的指令信息和第二分区以提供用于第二个线程的指令信息,以及其中选择逻辑单元通过选择从第二分区发送指令信息开始发送用于第二个线程的指令信息。
44.如权利要求36所述的设备,其中指令信息源包括一个存储单元,和其中检测逻辑单元包括一个计数器以保持接收到该存储单元中的用于第二个线程的指令信息的计数。
45.如权利要求44所述的设备,其中检测逻辑单元包括一个比较器,连接到该计数器,以确定何时由该计数器保持的接收到该存储单元中的用于第二个线程的指令信息的计数超过第二个预定阈值。
46.如权利要求45所述的设备,其中检测逻辑单元包括一个可编程存储单元以储存第二个预定阈值。
47.如权利要求45所述的设备,其中该比较器连接到该可编程存储单元,比较可编程存储单元的内容和该计数器的内容,以确定何时该计数器的内容超过第二个预定阈值。
48.如权利要求36所述的设备,其中检测逻辑单元检测何时用于第一个线程的第三预定数量指令信息已从指令信息源发送,和选择逻辑单元开始从指令信息源发送用于第二个线程的指令信息,只要用于第一个线程的第三个预定数量指令信息已从该指令信息源发送。
49.如权利要求48所述的设备,其中第三个预定量的指令信息等于或大于第一指令集的一条完整指令的指令信息的最低数量。
50.如权利要求48所述的设备,其中检测逻辑单元包括一个计数器以对从指令信息源发送用于第一个线程的指令信息计数。
51.如权利要求50所述的设备,其中检测逻辑单元包括一个比较器以确定何时从指令信息源发送的用于第一个线程的指令信息的计数超过第三个预定阈值。
52.如权利要求36所述的设备包括一个流插入器,在选择逻辑单元开始从指令信息源发送用于第二个线程的指令信息前将一个流标记插入到一个指令流中,该指令流包括从指令信息源发送的用于第一个线程的指令信息。
53.如权利要求52所述的设备,其中该流标记对在处理器中的指令控制逻辑指示已出现线程切换操作。
54.如权利要求36所述的设备,其中检测逻辑单元检测用于第一个线程的第四个预定数量指令信息是否已从指令信息源发送,以及如果检测到用于第一个线程的第四个预定量的指令信息已经从该指令信息源发送,则检测在用于第一个线程的指令信息中的从指令信息源发送的分支指令,如果该检测逻辑单元检测到分支指令,则选择逻辑单元开始从指令信息源发送用于第二个线程的指令信息。
55.如权利要求54所述的设备,其中检测逻辑单元包括对从指令信息源发送用于第一个线程的指令信息进行计数的计数器。
56.如权利要求55所述的设备,其中检测逻辑单元包括一个比较器以检测何时用于第一个线程的信息的计数超过第四个预定阈值。
57.如权利要求56所述的设备,其中检测逻辑单元包括一个可编程存储设备以储存第四个预定阈值。
58.如权利要求36所述的设备,其中检测逻辑单元检测在多线程处理器的处理器流水线中用于第一个线程的停止条件,和检测在检测到停止条件之后第一预定时间间隔在什么时候已经过去,以及其中选择逻辑单元响应于由该检测逻辑单元检测到第一个预定时间间隔已经过去,开始从指令信息源发送用于第二个线程的指令信息。
59.如权利要求58所述的设备,其中在该多线程处理器的处理器流水线中检测到的用于第一个线程的停止条件出现在该指令信息源的处理器流水线下游中的一个存储单元上。
60.如权利要求59所述的设备,其中该处理器流水线包括一个用于确定一个停止信号的源分配程序,并且检测逻辑单元用于检测该停止信号的确定。
61.如权利要求36所述的设备,其中检测逻辑单元检测用于第一个线程的指令信息没有从一个处理器流水线内上游源流动到该指令信息源,在检测到没有用于第一个线程的指令信息从该处理器流水线内上游源流动到该指令信息源之后,检测第二个预定时间间隔在什么时候已经过去,以及其中选择逻辑单元响应于检测第二预定时间间隔已经过去,开始从指令信息源发送用于第二个线程的指令信息。
62.如权利要求36所述的设备,其中检测逻辑单元检测在指令信息源接收的在用于第一个线程的指令信息中的一个流标记,和选择逻辑单元响应于由检测逻辑单元检测该流标记,开始从指令信息源发送用于第二个线程的指令信息。
63.如权利要求62所述的设备,其中流标记指示在指令信息源的处理器流水线上游中的一个存储单元出现一个页丢失。
64.如权利要求36所述的设备,其中指令信息源包括一个指令流缓存器。
65.如权利要求36所述的设备,其中从该指令信息源发送的指令信息被发送到一个指令解码器,从该指令信息源发送的指令信息包括宏指令信息。
66.如权利要求65所述的设备,其中指令解码器不执行线程切换操作。
67.如权利要求66所述的设备,其中指令解码器不实施线程切换方案。
68.一种多线程处理器,包括:
一个处理器流水线,包括指令信息源;
一个检测器,用于检测所述多线程处理器内是否从一个指令信息源发送了用于第一个线程的第一个预定量的指令信息,以及检测用于第二个线程的第二个预定量的指令信息是否可用于从该指令信息源发送;以及
一个选择器,连接到该检测器,如果检测到用于第一个线程的第一个预定量的指令信息的发送,并且如果第二个线程的第二预定量的指令信息可用于发送,则从该指令信息源开始发送用于第二个线程的指令信息。
69.如权利要求68所述的处理器,其中检测器检测何时用于第一个线程的第三个预定量的指令信息已从指令信息源发送,和选择器开始从指令信息源发送用于第二个线程的指令信息,只要用于第一个线程的第三个预定量的指令信息已从指令信息源发送。
70.如权利要求68所述的处理器包括一个流插入器,先于选择器开始从指令信息源发送用于第二个线程的指令信息,将一个流标记插到指令流中,该指令流包括从指令信息源发送的用于第一个线程的指令信息。
71.如权利要求68所述的处理器,其中检测器检测用于第一个线程第四个预定量的指令信息是否已从指令信息源发送,如果检测到用于第一个线程的第四个预定量的指令信息已经从该指令信息源发送,则检测在用于第一个线程的指令信息中的从指令信息源发送的分支指令;如果该检测器检测到分支指令,则选择器开始从指令信息源发送用于第二个线程的指令信息。
72.如权利要求68所述的处理器,其中检测器检测在该多线程处理器的处理器流水线中的用于第一个线程的一个停止条件,和检测在检测到该停止条件之后第一个预定时间间隔在什么时间已经过去,和其中选择器响应于由检测器检测到第一个预定时间间隔已经过去,开始从指令信息源发送用于第二个线程的指令信息。
73.如权利要求68所述的处理器,其中检测器检测用于第一个线程的指令信息没有从该处理器流水线内上游源流动到该指令信息源,在检测到没有用于第一个线程的指令信息从该处理器流水线内上游源流动到该指令信息源之后,检测第二个预定时间间隔在什么时候已经过去,以及其中选择器响应于检测到第二个预定时间间隔已经过去,开始从指令信息源发送用于第二个线程的指令信息。
74.如权利要求68所述的处理器,其中检测器检测在指令信息源接收的在用于第一个线程的指令信息中的一个流标记,和其中选择器响应于由检测器检测该流标记,开始发送用于第二个线程的指令信息。
CN00809404.7A 1999-04-29 2000-04-20 用于在一个多线程处理器内进行线程切换的方法和装置 Expired - Fee Related CN1196060C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/302,633 US6535905B1 (en) 1999-04-29 1999-04-29 Method and apparatus for thread switching within a multithreaded processor
US09/302,633 1999-04-29
US09/302633 1999-04-29

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100070359A Division CN100399263C (zh) 1999-04-29 2000-04-20 用于在一个多线程处理器内进行线程切换的方法和装置

Publications (2)

Publication Number Publication Date
CN1364261A CN1364261A (zh) 2002-08-14
CN1196060C true CN1196060C (zh) 2005-04-06

Family

ID=23168579

Family Applications (2)

Application Number Title Priority Date Filing Date
CNB2005100070359A Expired - Fee Related CN100399263C (zh) 1999-04-29 2000-04-20 用于在一个多线程处理器内进行线程切换的方法和装置
CN00809404.7A Expired - Fee Related CN1196060C (zh) 1999-04-29 2000-04-20 用于在一个多线程处理器内进行线程切换的方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CNB2005100070359A Expired - Fee Related CN100399263C (zh) 1999-04-29 2000-04-20 用于在一个多线程处理器内进行线程切换的方法和装置

Country Status (10)

Country Link
US (8) US6535905B1 (zh)
EP (1) EP1185924B1 (zh)
CN (2) CN100399263C (zh)
AU (1) AU4480200A (zh)
BR (1) BR0010602B1 (zh)
DE (1) DE60032481T2 (zh)
HK (1) HK1042363A1 (zh)
IL (2) IL146159A0 (zh)
TW (1) TW476915B (zh)
WO (1) WO2000067113A2 (zh)

Families Citing this family (224)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2728559B1 (fr) * 1994-12-23 1997-01-31 Saint Gobain Vitrage Substrats en verre revetus d'un empilement de couches minces a proprietes de reflexion dans l'infrarouge et/ou dans le domaine du rayonnement solaire
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US7237093B1 (en) 1998-12-16 2007-06-26 Mips Technologies, Inc. Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams
US6389449B1 (en) 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US7035997B1 (en) * 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6671795B1 (en) * 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7076630B2 (en) * 2000-02-08 2006-07-11 Mips Tech Inc Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management
US7058065B2 (en) * 2000-02-08 2006-06-06 Mips Tech Inc Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7502876B1 (en) 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7032226B1 (en) 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7155516B2 (en) * 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US7065096B2 (en) * 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7042887B2 (en) 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US7058064B2 (en) * 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US7162615B1 (en) 2000-06-12 2007-01-09 Mips Technologies, Inc. Data transfer bus communication using single request to perform command and return data to destination indicated in context to allow thread context switch
AU2001273211A1 (en) * 2000-07-14 2002-01-30 Clearwater Networks, Inc. Instruction fetch and dispatch in multithreaded system
US6701518B1 (en) * 2000-08-03 2004-03-02 Hewlett-Packard Development Company, L.P. System and method for enabling efficient processing of a program that includes assertion instructions
US6981129B1 (en) * 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7757065B1 (en) * 2000-11-09 2010-07-13 Intel Corporation Instruction segment recording scheme
US20020087844A1 (en) * 2000-12-29 2002-07-04 Udo Walterscheidt Apparatus and method for concealing switch latency
US6895520B1 (en) 2001-03-02 2005-05-17 Advanced Micro Devices, Inc. Performance and power optimization via block oriented performance measurement and control
US20020156999A1 (en) * 2001-04-19 2002-10-24 International Business Machines Corporation Mixed-mode hardware multithreading
US6651158B2 (en) * 2001-06-22 2003-11-18 Intel Corporation Determination of approaching instruction starvation of threads based on a plurality of conditions
US20030120896A1 (en) * 2001-06-29 2003-06-26 Jason Gosior System on chip architecture
US7363474B2 (en) * 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
US20030126416A1 (en) * 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor
US7366884B2 (en) * 2002-02-25 2008-04-29 Agere Systems Inc. Context switching system for a multi-thread execution pipeline loop and method of operation thereof
US7747989B1 (en) 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
US7065596B2 (en) * 2002-09-19 2006-06-20 Intel Corporation Method and apparatus to resolve instruction starvation
US7200721B1 (en) * 2002-10-09 2007-04-03 Unisys Corporation Verification of memory operations by multiple processors to a shared memory
US7149900B2 (en) * 2002-12-12 2006-12-12 Intel Corporation Method of defending software from debugger attacks
US20040128476A1 (en) * 2002-12-26 2004-07-01 Robert Nuckolls Scheme to simplify instruction buffer logic supporting multiple strands
US20040128488A1 (en) * 2002-12-26 2004-07-01 Thimmannagari Chandra M. R. Strand switching algorithm to avoid strand starvation
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US20040216103A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Mechanism for detecting and handling a starvation of a thread in a multithreading processor environment
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
US7401207B2 (en) 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7360062B2 (en) * 2003-04-25 2008-04-15 International Business Machines Corporation Method and apparatus for selecting an instruction thread for processing in a multi-thread processor
US20040268099A1 (en) * 2003-06-30 2004-12-30 Smith Peter J Look ahead LRU array update scheme to minimize clobber in sequentially accessed memory
US7441245B2 (en) * 2003-08-14 2008-10-21 Intel Corporation Phasing for a multi-threaded network processor
US7873785B2 (en) * 2003-08-19 2011-01-18 Oracle America, Inc. Multi-core multi-thread processor
US20050047439A1 (en) * 2003-08-26 2005-03-03 Madajczak Tomasz Bogdan System to process packets according to an assigned sequence number
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US20050055594A1 (en) * 2003-09-05 2005-03-10 Doering Andreas C. Method and device for synchronizing a processor and a coprocessor
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
US7555633B1 (en) 2003-11-03 2009-06-30 Advanced Micro Devices, Inc. Instruction cache prefetch based on trace cache eviction
ES2401334T3 (es) * 2003-11-07 2013-04-18 Sharp Kabushiki Kaisha Métodos y sistemas para coordinación de red
DE10353267B3 (de) * 2003-11-14 2005-07-28 Infineon Technologies Ag Multithread-Prozessorarchitektur zum getriggerten Thread-Umschalten ohne Zykluszeitverlust und ohne Umschalt-Programmbefehl
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7631307B2 (en) 2003-12-05 2009-12-08 Intel Corporation User-programmable low-overhead multithreading
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
US20060212874A1 (en) * 2003-12-12 2006-09-21 Johnson Erik J Inserting instructions
US7493621B2 (en) * 2003-12-18 2009-02-17 International Business Machines Corporation Context switch data prefetching in multithreaded computer
US7206922B1 (en) 2003-12-30 2007-04-17 Cisco Systems, Inc. Instruction memory hierarchy for an embedded processor
US7213126B1 (en) 2004-01-12 2007-05-01 Advanced Micro Devices, Inc. Method and processor including logic for storing traces within a trace cache
US20050166177A1 (en) * 2004-01-27 2005-07-28 Ylian Saint-Hilaire Thread module chaining
US20050183065A1 (en) * 2004-02-13 2005-08-18 Wolczko Mario I. Performance counters in a multi-threaded processor
US20090299756A1 (en) * 2004-03-01 2009-12-03 Dolby Laboratories Licensing Corporation Ratio of speech to non-speech audio such as for elderly or hearing-impaired listeners
US7426731B2 (en) * 2004-03-22 2008-09-16 Hewlett-Packard Development Company, L.P. Determining processor usage by a thread
US9189230B2 (en) 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7197630B1 (en) 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7418582B1 (en) 2004-05-13 2008-08-26 Sun Microsystems, Inc. Versatile register file design for a multi-threaded processor utilizing different modes and register windows
US7290116B1 (en) 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US7519796B1 (en) 2004-06-30 2009-04-14 Sun Microsystems, Inc. Efficient utilization of a store buffer using counters
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7543132B1 (en) 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US20060009265A1 (en) * 2004-06-30 2006-01-12 Clapper Edward O Communication blackout feature
US7509484B1 (en) 2004-06-30 2009-03-24 Sun Microsystems, Inc. Handling cache misses by selectively flushing the pipeline
US7366829B1 (en) 2004-06-30 2008-04-29 Sun Microsystems, Inc. TLB tag parity checking without CAM read
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US9626194B2 (en) 2004-09-23 2017-04-18 Intel Corporation Thread livelock unit
US7748001B2 (en) * 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US7533139B2 (en) * 2004-09-27 2009-05-12 Microsoft Corporation Method and system for multithread processing of spreadsheet chain calculations
CN100384181C (zh) * 2004-11-09 2008-04-23 北京中星微电子有限公司 一种ip网络环境下的多路音频缓冲处理的方法
US7254693B2 (en) * 2004-12-02 2007-08-07 International Business Machines Corporation Selectively prohibiting speculative execution of conditional branch type based on instruction bit
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7937709B2 (en) 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
US7430643B2 (en) * 2004-12-30 2008-09-30 Sun Microsystems, Inc. Multiple contexts for efficient use of translation lookaside buffer
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US7681014B2 (en) 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
DE102005009083B4 (de) * 2005-02-28 2007-05-10 Infineon Technologies Ag Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
US20060206902A1 (en) * 2005-03-14 2006-09-14 Sujat Jamil Variable interleaved multithreaded processor method and system
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US8230423B2 (en) * 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
US8041930B2 (en) * 2005-05-11 2011-10-18 Arm Limited Data processing apparatus and method for controlling thread access of register sets when selectively operating in secure and non-secure domains
US20070067502A1 (en) * 2005-09-22 2007-03-22 Silicon Integrated Systems Corp. Method for preventing long latency event
US7606975B1 (en) 2005-09-28 2009-10-20 Sun Microsystems, Inc. Trace cache for efficient self-modifying code processing
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US8019944B1 (en) * 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US20070101102A1 (en) * 2005-10-27 2007-05-03 Dierks Herman D Jr Selectively pausing a software thread
CN101366004A (zh) * 2005-12-06 2009-02-11 波士顿电路公司 用于带有专用线程管理的多核处理的方法和设备
US8275942B2 (en) * 2005-12-22 2012-09-25 Intel Corporation Performance prioritization in multi-threaded processors
JP4519082B2 (ja) * 2006-02-15 2010-08-04 株式会社ソニー・コンピュータエンタテインメント 情報処理方法、動画サムネイル表示方法、復号化装置、および情報処理装置
US7877757B2 (en) 2006-05-05 2011-01-25 Microsoft Corporation Work item event monitor for procession of queued events
US8032821B2 (en) 2006-05-08 2011-10-04 Microsoft Corporation Multi-thread spreadsheet processing with dependency levels
US9146745B2 (en) * 2006-06-29 2015-09-29 Intel Corporation Method and apparatus for partitioned pipelined execution of multiple execution threads
US20080022283A1 (en) * 2006-07-19 2008-01-24 International Business Machines Corporation Quality of service scheduling for simultaneous multi-threaded processors
US8495649B2 (en) * 2006-07-19 2013-07-23 International Business Machines Corporation Scheduling threads having complementary functional unit usage on SMT processors
US8046775B2 (en) 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
US7941643B2 (en) * 2006-08-14 2011-05-10 Marvell World Trade Ltd. Multi-thread processor with multiple program counters
US7760748B2 (en) * 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7990989B2 (en) * 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8010745B1 (en) * 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8516462B2 (en) * 2006-10-09 2013-08-20 International Business Machines Corporation Method and apparatus for managing a stack
US8533530B2 (en) 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US8380966B2 (en) 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8341604B2 (en) 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US20080148022A1 (en) * 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
WO2008109870A1 (en) * 2007-03-07 2008-09-12 Spinealign Medical, Inc. Transdiscal interbody fusion device and method
US8347068B2 (en) * 2007-04-04 2013-01-01 International Business Machines Corporation Multi-mode register rename mechanism that augments logical registers by switching a physical register from the register rename buffer when switching between in-order and out-of-order instruction processing in a simultaneous multi-threaded microprocessor
US8521993B2 (en) * 2007-04-09 2013-08-27 Intel Corporation Providing thread fairness by biasing selection away from a stalling thread using a stall-cycle counter in a hyper-threaded microprocessor
US8261049B1 (en) 2007-04-10 2012-09-04 Marvell International Ltd. Determinative branch prediction indexing
US8484516B2 (en) 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US20080263325A1 (en) * 2007-04-19 2008-10-23 International Business Machines Corporation System and structure for synchronized thread priority selection in a deeply pipelined multithreaded microprocessor
US7711935B2 (en) * 2007-04-30 2010-05-04 Netlogic Microsystems, Inc. Universal branch identifier for invalidation of speculative instructions
US7958323B1 (en) 2007-05-09 2011-06-07 Marvell Israel (M.I.S.L.) Ltd. Multithreading implementation for flops and register files
EP2453350B1 (en) * 2007-06-20 2016-04-27 Fujitsu Limited Processing device
JP5201140B2 (ja) * 2007-06-20 2013-06-05 富士通株式会社 同時マルチスレッドの命令完了制御装置
EP2159692A4 (en) * 2007-06-20 2010-09-15 Fujitsu Ltd Information processor and load cancellation control method
WO2008155845A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 演算処理装置
EP2159689A4 (en) * 2007-06-20 2011-01-05 Fujitsu Ltd INSTRUCTION EXECUTION CONTROLLER AND INSTRUCTION EXECUTION CONTROL METHOD
US7779234B2 (en) * 2007-10-23 2010-08-17 International Business Machines Corporation System and method for implementing a hardware-supported thread assist under load lookahead mechanism for a microprocessor
US8086825B2 (en) * 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US7793080B2 (en) * 2007-12-31 2010-09-07 Globalfoundries Inc. Processing pipeline having parallel dispatch and method thereof
US20090172370A1 (en) * 2007-12-31 2009-07-02 Advanced Micro Devices, Inc. Eager execution in a processing pipeline having multiple integer execution units
US8479173B2 (en) * 2008-07-09 2013-07-02 International Business Machines Corporation Efficient and self-balancing verification of multi-threaded microprocessors
US8161493B2 (en) * 2008-07-15 2012-04-17 International Business Machines Corporation Weighted-region cycle accounting for multi-threaded processor cores
US8386547B2 (en) * 2008-10-31 2013-02-26 Intel Corporation Instruction and logic for performing range detection
US8347309B2 (en) * 2009-07-29 2013-01-01 Oracle America, Inc. Dynamic mitigation of thread hogs on a threaded processor
US10288617B2 (en) * 2009-10-26 2019-05-14 Externautics Spa Ovary tumor markers and methods of use thereof
US20110191775A1 (en) * 2010-01-29 2011-08-04 Microsoft Corporation Array-based thread countdown
US9354926B2 (en) * 2011-03-22 2016-05-31 International Business Machines Corporation Processor management via thread status
JP5861354B2 (ja) * 2011-09-22 2016-02-16 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN102495762B (zh) * 2011-11-16 2014-04-02 华为技术有限公司 一种线程调度方法、线程调度装置及多核处理器系统
US9052909B2 (en) 2011-12-07 2015-06-09 Arm Limited Recovering from exceptions and timing errors
US8738971B2 (en) 2011-12-07 2014-05-27 Arm Limited Limiting certain processing activities as error rate probability rises
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US8640008B2 (en) 2011-12-23 2014-01-28 Arm Limited Error recovery in a data processing apparatus
US9075621B2 (en) 2011-12-23 2015-07-07 Arm Limited Error recovery upon reaching oldest instruction marked with error or upon timed expiration by flushing instructions in pipeline pending queue and restarting execution
US10146545B2 (en) 2012-03-13 2018-12-04 Nvidia Corporation Translation address cache for a microprocessor
US9880846B2 (en) 2012-04-11 2018-01-30 Nvidia Corporation Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries
US9665375B2 (en) 2012-04-26 2017-05-30 Oracle International Corporation Mitigation of thread hogs on a threaded processor and prevention of allocation of resources to one or more instructions following a load miss
US9875105B2 (en) * 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US9824013B2 (en) 2012-05-08 2017-11-21 Qualcomm Incorporated Per thread cacheline allocation mechanism in shared partitioned caches in multi-threaded processors
US10241810B2 (en) 2012-05-18 2019-03-26 Nvidia Corporation Instruction-optimizing processor with branch-count table in hardware
US9514069B1 (en) 2012-05-24 2016-12-06 Schwegman, Lundberg & Woessner, P.A. Enhanced computer processor and memory management architecture
US8832500B2 (en) 2012-08-10 2014-09-09 Advanced Micro Devices, Inc. Multiple clock domain tracing
US9323315B2 (en) * 2012-08-15 2016-04-26 Nvidia Corporation Method and system for automatic clock-gating of a clock grid at a clock source
US8959398B2 (en) 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9645929B2 (en) 2012-09-14 2017-05-09 Nvidia Corporation Speculative permission acquisition for shared memory
US9317297B2 (en) * 2012-09-27 2016-04-19 Intel Corporation Replay execution of instructions in thread chunks in the chunk order recorded during previous execution
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US20140181484A1 (en) * 2012-12-21 2014-06-26 James Callister Mechanism to provide high performance and fairness in a multi-threading computer system
US20140189310A1 (en) 2012-12-27 2014-07-03 Nvidia Corporation Fault detection in instruction translations
US9569214B2 (en) 2012-12-27 2017-02-14 Nvidia Corporation Execution pipeline data forwarding
US9823931B2 (en) 2012-12-28 2017-11-21 Nvidia Corporation Queued instruction re-dispatch after runahead
US9547602B2 (en) 2013-03-14 2017-01-17 Nvidia Corporation Translation lookaside buffer entry systems and methods
US10108424B2 (en) 2013-03-14 2018-10-23 Nvidia Corporation Profiling code portions to generate translations
US9471318B2 (en) 2013-03-15 2016-10-18 International Business Machines Corporation System management and instruction counting
CN104123195B (zh) * 2013-04-23 2018-03-13 华为技术有限公司 一种指令清除方法及装置
US9367472B2 (en) 2013-06-10 2016-06-14 Oracle International Corporation Observation of data in persistent memory
US9582280B2 (en) 2013-07-18 2017-02-28 Nvidia Corporation Branching to alternate code based on runahead determination
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
GB2519103B (en) * 2013-10-09 2020-05-06 Advanced Risc Mach Ltd Decoding a complex program instruction corresponding to multiple micro-operations
TWI602113B (zh) * 2013-11-14 2017-10-11 宏碁股份有限公司 操作介面切換方法及使用該方法之行動通訊裝置
US9535746B2 (en) * 2013-12-19 2017-01-03 International Business Machines Corporation Honoring hardware entitlement of a hardware thread
US10241498B1 (en) * 2014-05-15 2019-03-26 Feetz, Inc. Customized, additive-manufactured outerwear and methods for manufacturing thereof
US9824413B2 (en) * 2014-11-15 2017-11-21 Intel Corporation Sort-free threading model for a multi-threaded graphics pipeline
CN105786448B (zh) * 2014-12-26 2019-02-05 深圳市中兴微电子技术有限公司 一种指令调度方法及装置
JP6477216B2 (ja) * 2015-05-08 2019-03-06 富士通株式会社 演算装置、スレッド切替方法、及びマルチスレッドプログラム
GB2544994A (en) * 2015-12-02 2017-06-07 Swarm64 As Data processing
CN106126336B (zh) 2016-06-17 2019-06-04 上海兆芯集成电路有限公司 处理器以及调度方法
US10325341B2 (en) 2017-04-21 2019-06-18 Intel Corporation Handling pipeline submissions across many compute units
US10269088B2 (en) * 2017-04-21 2019-04-23 Intel Corporation Dynamic thread execution arbitration
US10503550B2 (en) 2017-09-30 2019-12-10 Intel Corporation Dynamic performance biasing in a processor
US11789741B2 (en) * 2018-03-08 2023-10-17 Sap Se Determining an optimum quantity of interleaved instruction streams of defined coroutines
US10831492B2 (en) 2018-07-05 2020-11-10 International Business Machines Corporation Most favored branch issue
US10997058B2 (en) * 2018-07-30 2021-05-04 EMC IP Holding Company LLC Method for performance analysis in a continuous integration pipeline
US20190253357A1 (en) * 2018-10-15 2019-08-15 Intel Corporation Load balancing based on packet processing loads
US11856073B1 (en) * 2019-03-22 2023-12-26 Amazon Technologies, Inc. Message batching for communication protocols
US11886916B2 (en) 2020-06-30 2024-01-30 Microsoft Technology Licensing, Llc System for adaptive multithreaded recalculation operations

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
EP0473714A1 (en) 1989-05-26 1992-03-11 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
US5088788A (en) * 1991-03-22 1992-02-18 Moulton Lee A Vehicle cover apparatus
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
JP2520544B2 (ja) * 1991-09-26 1996-07-31 インターナショナル・ビジネス・マシーンズ・コーポレイション タスクのオ―バ―ラン状態を監視する方法及びタスク実行サイクルのオ―バ―ランを検出する装置
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
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
US5452401A (en) 1992-03-31 1995-09-19 Seiko Epson Corporation Selective power-down for high performance CPU/system
US5325526A (en) * 1992-05-12 1994-06-28 Intel Corporation Task scheduling in a multicomputer system
JPH0695898A (ja) * 1992-09-16 1994-04-08 Hitachi Ltd 仮想計算機の制御方法および仮想計算機システム
US5392437A (en) 1992-11-06 1995-02-21 Intel Corporation Method and apparatus for independently stopping and restarting functional units
DE69422448T2 (de) 1992-12-23 2001-08-23 Eta Sa Fabriques D Ebauches Gr Multi-tasking-steuerungsgerät mit geringem energieverbrauch
US5586332A (en) 1993-03-24 1996-12-17 Intel Corporation Power management for low power processors through the use of auto clock-throttling
DE69429204T2 (de) * 1993-03-26 2002-07-25 Cabletron Systems Inc Ablaufssteuerungsverfahren und -gerät für ein Kommunikationsnetzwerk
US5528513A (en) * 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
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
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US6009454A (en) * 1994-09-30 1999-12-28 Allen-Bradley Company, Llc Multi-tasking operation system for industrial controller
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
GB2306147B (en) 1995-10-13 1999-11-17 Marconi Gec Ltd Drag-producing aerodynamic device
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
CN1147785C (zh) 1996-08-27 2004-04-28 松下电器产业株式会社 执行多个指令流的多程序流程同时处理器
US6088788A (en) 1996-12-27 2000-07-11 International Business Machines Corporation Background completion of instruction and associated fetch request in a multithread processor
EP0856798B1 (en) 1997-01-30 2004-09-29 STMicroelectronics Limited A cache system
CN1113289C (zh) * 1997-03-04 2003-07-02 松下电器产业株式会社 能执行多异步运行任务中的异步事件任务的处理器
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
US6314530B1 (en) * 1997-04-08 2001-11-06 Advanced Micro Devices, Inc. Processor having a trace access instruction to access on-chip trace memory
US5996085A (en) 1997-07-15 1999-11-30 International Business Machines Corporation Concurrent execution of machine context synchronization operations and non-interruptible instructions
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
US6092175A (en) 1998-04-02 2000-07-18 University Of Washington Shared register storage mechanisms for multithreaded computer systems with out-of-order execution
US6330584B1 (en) * 1998-04-03 2001-12-11 Mmc Networks, Inc. Systems and methods for multi-tasking, resource sharing and execution of computer instructions
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
US6289461B1 (en) * 1998-06-09 2001-09-11 Placeware, Inc. Bi-directional process-to-process byte stream protocol
US6625635B1 (en) 1998-11-02 2003-09-23 International Business Machines Corporation Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor

Also Published As

Publication number Publication date
US6854118B2 (en) 2005-02-08
US6850961B2 (en) 2005-02-01
US6535905B1 (en) 2003-03-18
US6785890B2 (en) 2004-08-31
BR0010602B1 (pt) 2012-12-11
WO2000067113A3 (en) 2001-09-07
US20030018686A1 (en) 2003-01-23
CN100399263C (zh) 2008-07-02
US20030023834A1 (en) 2003-01-30
EP1185924A2 (en) 2002-03-13
DE60032481D1 (de) 2007-02-01
US20030023658A1 (en) 2003-01-30
CN1645317A (zh) 2005-07-27
IL146159A (en) 2006-12-10
US20030018685A1 (en) 2003-01-23
WO2000067113A2 (en) 2000-11-09
BR0010602A (pt) 2005-01-11
US20030023835A1 (en) 2003-01-30
US6981261B2 (en) 2005-12-27
CN1364261A (zh) 2002-08-14
US20030018687A1 (en) 2003-01-23
IL146159A0 (en) 2002-07-25
US20030023659A1 (en) 2003-01-30
HK1042363A1 (en) 2002-08-09
EP1185924B1 (en) 2006-12-20
TW476915B (en) 2002-02-21
US6971104B2 (en) 2005-11-29
DE60032481T2 (de) 2007-09-27
US6865740B2 (en) 2005-03-08
US6795845B2 (en) 2004-09-21
AU4480200A (en) 2000-11-17

Similar Documents

Publication Publication Date Title
CN1196060C (zh) 用于在一个多线程处理器内进行线程切换的方法和装置
CN1147794C (zh) 具有静态转移预测支持的去耦取指令-执行引擎
EP1749262B1 (en) Multiple branch predictions
US7707391B2 (en) Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7035997B1 (en) Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US7051329B1 (en) Method and apparatus for managing resources in a multithreaded processor
US7856633B1 (en) LRU cache replacement for a partitioned set associative cache
US20030046521A1 (en) Apparatus and method for switching threads in multi-threading processors`
CN1222985A (zh) 在多级流水线结构中处理条件跳转的方法
GB2492457A (en) Predicting out of order instruction level parallelism of threads in a multi-threaded processor
US6351802B1 (en) Method and apparatus for constructing a pre-scheduled instruction cache
JP5104861B2 (ja) 演算処理装置
US20050138333A1 (en) Thread switching mechanism
US7237093B1 (en) Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams
US20030105946A1 (en) Broadcast state renaming in a microprocessor
CN1558324A (zh) 保持分离队列功能单元之间的状态一致性的方法及装置

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
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: 20050406

Termination date: 20170420