CN100399263C - 用于在一个多线程处理器内进行线程切换的方法和装置 - Google Patents
用于在一个多线程处理器内进行线程切换的方法和装置 Download PDFInfo
- Publication number
- CN100399263C CN100399263C CNB2005100070359A CN200510007035A CN100399263C CN 100399263 C CN100399263 C CN 100399263C CN B2005100070359 A CNB2005100070359 A CN B2005100070359A CN 200510007035 A CN200510007035 A CN 200510007035A CN 100399263 C CN100399263 C CN 100399263C
- Authority
- CN
- China
- Prior art keywords
- thread
- command information
- instruction
- detection
- information source
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 132
- 238000001514 detection method Methods 0.000 claims abstract description 33
- 230000005540 biological transmission Effects 0.000 claims description 30
- 230000004044 response Effects 0.000 claims description 13
- 238000012423 maintenance Methods 0.000 claims description 3
- 239000000872 buffer Substances 0.000 abstract description 71
- 230000007246 mechanism Effects 0.000 abstract description 7
- 238000012545 processing Methods 0.000 abstract description 5
- 238000013519 translation Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 18
- 238000005192 partition Methods 0.000 description 14
- 238000003860 storage Methods 0.000 description 14
- 230000000875 corresponding effect Effects 0.000 description 13
- 230000006870 function Effects 0.000 description 10
- 230000014509 gene expression Effects 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 230000015572 biosynthetic process Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 7
- 238000003780 insertion Methods 0.000 description 6
- 230000037431 insertion Effects 0.000 description 6
- 230000002349 favourable effect Effects 0.000 description 4
- 230000008707 rearrangement Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 108020005038 Terminator Codon Proteins 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007087 memory ability Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000004087 circulation Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
- Multi Processors (AREA)
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,May 1996.而在以下文献中进一步讨论了精细和粗糙设计之间的区别: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。
微指令翻译机
图3的框图为微指令翻译机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)(未显示),它在与第一或者第二线程有关的指令指针之间进行选择,用于包含在在此发布的该下一指令请求内。在一个实施例中,假定已经请求了用于两个线程的指令,而且用于两个线程的指令流缓存器106的资源没有用完,则下一指令指针100将在一个周期接一个周期(“往复转换工作”)的基础上交错用于第一和第二线程的下一指令请求。取决于初始请求地址是否位于一个32字节或者64字节校准行的上半部,下一指令指针请求可以是16、32或64字节。下一指令指针100可以由分支预测器104、分支地址计算器114、或记录高速缓存62利用作为最高优先权的重定向请求的一个记录高速缓存故障请求进行重定向。
当下一指令指针100向统一高速缓存44做出一个指令请求时,它产生一个与该指令请求有关的2位的“请求标识符”,并且该标识符用作该相关指令请求的一个“标记”。当对一个指令请求做出响应返回数据时,该统一高速缓存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。
多线程实现
在如图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输出数据到一个MUX 132,由它根据由线程切换控制逻辑136确定的一个线程选择信号134在分区122和124的输出之间进行选择。因此,在本发明的该示范实施例中,由线程切换控制逻辑136实现线程交错或切换方案。此外,线程切换控制逻辑136还经由线路138和140监控每一个分区122或124的输出,以便能够确定何时将一个组块数据从分区122或124中的任何一个发送,并识别该组块是从这些分区中的哪一个发送的。然后,将由MUX 132选择用于输出的该组块数据在处理器流水线内部向下传播到指令预解码器108,并最终传送到指令解码器122用于解码。
图6的框图描述了线程切换控制逻辑136的逻辑元件。特别地,如图所示,该线程切换控制逻辑136包含在空闲上切换的逻辑150、在分支上切换的逻辑152、长等待时间停止逻辑154、内部清除逻辑156、无数据流逻辑158、强制线程改变逻辑160、外部清除逻辑162、以及插入流逻辑164。虽然如图6所示每一个逻辑150-164中是独立的,但是在各种逻辑之间可能有重要元件共享,如以下将要描述得那样。逻辑150-164中的每一个都实现一种特定的功能,可以使到该MUX 132的选择信号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,其中插入流指示仅仅例如一个关于指令TLB 102的页故障。该方法420在步骤422用选择当前线程(例如线程0)开始。这个选择可以由从线程切换控制逻辑136输出到MUX 132的线程选择信号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 (18)
1.一种用于在一个多线程处理器内进行线程切换操作的方法,包括:
在一个多线程处理器内检测第一线程的一个预定量指令信息从一个指令信息源的发送;
检测将被从所述指令信息源发送的所述第一线程的指令信息内的分支指令;以及
对第一线程的预定量的指令信息发送的检测做出响应,并对所述分支指令的检测做出响应,从所述指令信息源开始发送第二线程的指令信息。
2.如权利要求1所述的方法,其中对第一线程的预定量指令信息的发送的检测包括保持对从所述指令信息源发送的、第一线程的指令信息的非连续数量的计数,以及确定何时所述指令信息的非连续数量计数大于第一预定阈值。
3.如权利要求2所述的方法,其中所述检测包括在一个预定阈值和一个计数器的内容之间执行一个比较操作,其中所述计数器保持从指令信息源发送的第一线程的非连续数量指令信息的计数。
4.如权利要求1所述的方法,其中指令信息源被进行分区为第一分区,以便提供第一线程的指令信息,和第二分区,以提供第二线程的指令信息,以及其中开始发送第二线程的指令信息包括操作线程选择逻辑,以便选择从第二分区发送的指令信息。
5.如权利要求1所述的方法,包括在检测所述分支指令之前检测第一线程的另一个预定量指令信息的发送,对另一个预定量的检测包括对来自所述指令信息源的、第一线程的指令信息的非连续数量的发送进行计数,以及确定何时所述指令信息的非连续数量计数大于第四预定阈值。
6.如权利要求1所述的方法,其中所述指令信息源包括一个指令流缓冲器。
7.如权利要求1所述的方法,其中所述指令信息包括宏指令信息,和所述指令信息是从所述指令信息源发送到一个指令解码器。
8.如权利要求7所述的方法,其中所述指令解码器解码从指令信息源发送的指令信息,而不执行在第一线程的指令信息和第二线程的指令信息之间的任何识别。
9.一种用于在一个多线程处理器内进行线程切换操作的设备,包括:
检测逻辑,检测从在多线程处理器中的一个指令信息源发送的第一线程的一个预定量的指令信息的排序,并且检测将被从所述指令信息源发送的所述第一线程的指令信息内的分支指令;以及
选择逻辑,与所述检测逻辑相连,对所述指令信息源发送的第一线程的预定量的指令信息的排序的检测做出响应,开始对从所述指令信息源发送的第二线程的指令信息排序,并且通过所述检测逻辑检测所述分支指令。
10.如权利要求9所述的设备,其中所述检测逻辑包括一个计数器,保持从指令信息源发送的第一线程的非连续数量指令信息的计数。
11.如权利要求10所述的设备,其中所述检测逻辑包括一个比较器,所述比较器检测第一线程的非连续数量指令信息的计数何时超过第一预定阈值。
12.如权利要求9所述的设备,其中所述指令信息源被分区为第一分区,以提供第一线程的指令信息,和第二分区,以提供第二线程的指令信息,以及其中选择逻辑通过从排序的第二分区选择指令信息开始对第二线程的指令信息排序。
13.如权利要求9所述的设备,其中检测逻辑检测在检测所述分支指令之前第一线程的另一个预定量指令信息是否已经从所述指令信息源排序,并且其中检测逻辑包括一个计数器,对来自所述指令信息源的第一线程的指令信息的非连续数量的排序进行计数。
14.如权利要求9所述的设备,其中所述指令信息源包括一个指令流缓冲器。
15.如权利要求9所述的设备,其中所述指令信息包括宏指令信息,和所述指令信息是从所述指令信息源排序到一个指令解码器。
16.如权利要求15所述的设备,其中所述指令解码器解码从指令信息源发送的指令信息,而不执行在第一线程的指令信息和第二线程的指令信息之间的任何识别。
17.一种在一个多线程处理器内执行一个线程切换操作的设备,所述设备包括:
检测装置,检测从在多线程处理器中的一个指令信息源的第一线程的一个预定量的指令信息的发送,并且检测将被从所述指令信息源发送的所述第一线程的指令信息内的分支指令;以及
选择装置,与所述检测装置相连,对来自所述指令信息源的第一线程的预定量的指令信息的发送的检测做出响应,开始从所述指令信息源发送第二线程的指令信息,并且通过所述检测装置检测所述分支指令。
18.一种多线程处理器,包括:
处理器流水线,包括指令信息源;
检测器,检测从所述指令信息源发送的第一线程的一个预定量的指令信息的排序,并且检测将被从所述指令信息源发送的所述第一线程的指令信息内的分支指令;以及
选择器,与所述检测器相连,对所述指令信息源发送的第一线程的预定量的指令信息的排序的检测做出响应,并且对通过所述检测器检测所述分支指令做出响应,开始对从所述指令信息源发送的第二线程的指令信息排序。
Applications Claiming Priority (2)
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/302633 | 1999-04-29 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00809404.7A Division CN1196060C (zh) | 1999-04-29 | 2000-04-20 | 用于在一个多线程处理器内进行线程切换的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1645317A CN1645317A (zh) | 2005-07-27 |
CN100399263C true CN100399263C (zh) | 2008-07-02 |
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 After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00809404.7A Expired - Fee Related CN1196060C (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)
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 |
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 |
US7529907B2 (en) | 1998-12-16 | 2009-05-05 | Mips Technologies, Inc. | Method and apparatus for improved computer load and store operations |
US7020879B1 (en) | 1998-12-16 | 2006-03-28 | Mips Technologies, Inc. | Interrupt and exception handling for multi-streaming digital processors |
US7035997B1 (en) * | 1998-12-16 | 2006-04-25 | Mips Technologies, Inc. | Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors |
US6389449B1 (en) * | 1998-12-16 | 2002-05-14 | Clearwater Networks, Inc. | Interstream control and communications for multi-streaming digital 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 |
US7082552B2 (en) * | 2000-02-08 | 2006-07-25 | Mips Tech Inc | Functional validation of a packet management unit |
US7032226B1 (en) * | 2000-06-30 | 2006-04-18 | Mips Technologies, Inc. | Methods and apparatus for managing a buffer of events in the background |
US7042887B2 (en) | 2000-02-08 | 2006-05-09 | Mips Technologies, Inc. | Method and apparatus for non-speculative pre-fetch operation in data packet processing |
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 |
US7065096B2 (en) | 2000-06-23 | 2006-06-20 | Mips Technologies, Inc. | Method for allocating memory space for limited packet head and/or tail growth |
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 |
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 |
US7058064B2 (en) * | 2000-02-08 | 2006-06-06 | Mips Technologies, Inc. | Queueing system for processors in packet routing operations |
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 |
US7139901B2 (en) * | 2000-02-08 | 2006-11-21 | Mips Technologies, Inc. | Extended instruction set for packet processing applications |
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 |
US20010052053A1 (en) * | 2000-02-08 | 2001-12-13 | Mario Nemirovsky | Stream processing unit for a multi-streaming processor |
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 |
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 |
WO2002006959A1 (en) * | 2000-07-14 | 2002-01-24 | 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 |
US9207958B1 (en) | 2002-08-12 | 2015-12-08 | Arm Finance Overseas Limited | Virtual machine coprocessor for accelerating software execution |
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 |
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 |
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 |
US7363625B2 (en) * | 2003-04-24 | 2008-04-22 | International Business Machines Corporation | Method for changing a thread priority in a simultaneous multithread 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 |
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 |
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 |
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 |
WO2005048047A2 (en) * | 2003-11-07 | 2005-05-26 | Sharp Laboratories Of America, Inc. | Systems and methods for network coordination with limited explicit message exchange |
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 |
US7366829B1 (en) | 2004-06-30 | 2008-04-29 | Sun Microsystems, Inc. | TLB tag parity checking without CAM read |
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 |
US7365007B2 (en) * | 2004-06-30 | 2008-04-29 | Intel Corporation | Interconnects with direct metalization and conductive polymer |
US7290116B1 (en) | 2004-06-30 | 2007-10-30 | Sun Microsystems, Inc. | Level 2 cache index hashing to avoid hot spots |
US20060009265A1 (en) * | 2004-06-30 | 2006-01-12 | Clapper Edward O | Communication blackout feature |
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 |
US7509484B1 (en) | 2004-06-30 | 2009-03-24 | Sun Microsystems, Inc. | Handling cache misses by selectively flushing the pipeline |
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 |
US7681014B2 (en) * | 2005-02-04 | 2010-03-16 | Mips Technologies, Inc. | Multithreading instruction scheduler employing thread group priorities |
US7506140B2 (en) * | 2005-02-04 | 2009-03-17 | Mips Technologies, Inc. | Return data selector employing barrel-incrementer-based round-robin apparatus |
US7657891B2 (en) | 2005-02-04 | 2010-02-02 | Mips Technologies, Inc. | Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency |
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 |
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 |
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 |
US7752627B2 (en) * | 2005-02-04 | 2010-07-06 | Mips Technologies, Inc. | Leaky-bucket thread scheduler in a 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 |
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 |
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 |
WO2006120367A1 (en) * | 2005-05-11 | 2006-11-16 | Arm Limited | A data processing apparatus and method employing multiple register sets |
US20070067502A1 (en) * | 2005-09-22 | 2007-03-22 | Silicon Integrated Systems Corp. | Method for preventing long latency event |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
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 |
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 |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US7949854B1 (en) | 2005-09-28 | 2011-05-24 | Oracle America, Inc. | Trace unit with a trace builder |
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 |
US8024522B1 (en) | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US7877630B1 (en) | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US8032710B1 (en) | 2005-09-28 | 2011-10-04 | Oracle America, Inc. | System and method for ensuring coherency in trace execution |
US7676634B1 (en) | 2005-09-28 | 2010-03-09 | Sun Microsystems, Inc. | Selective trace cache invalidation for self-modifying code via memory aging |
US8499293B1 (en) | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US8051247B1 (en) | 2005-09-28 | 2011-11-01 | Oracle America, Inc. | Trace based deallocation of entries in a versioning cache circuit |
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 |
US7966479B1 (en) | 2005-09-28 | 2011-06-21 | Oracle America, Inc. | Concurrent vs. low power branch prediction |
US20070101102A1 (en) * | 2005-10-27 | 2007-05-03 | Dierks Herman D Jr | Selectively pausing a software thread |
EP1963963A2 (en) * | 2005-12-06 | 2008-09-03 | Boston Circuits, Inc. | Methods and apparatus for multi-core processing with dedicated thread management |
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 |
US8495649B2 (en) * | 2006-07-19 | 2013-07-23 | International Business Machines Corporation | Scheduling threads having complementary functional unit usage on SMT processors |
US20080022283A1 (en) * | 2006-07-19 | 2008-01-24 | International Business Machines Corporation | Quality of service scheduling for simultaneous multi-threaded processors |
US7941643B2 (en) * | 2006-08-14 | 2011-05-10 | Marvell World Trade Ltd. | Multi-thread processor with multiple program counters |
US8046775B2 (en) | 2006-08-14 | 2011-10-25 | Marvell World Trade Ltd. | Event-based bandwidth allocation mode switching method and apparatus |
US20090012564A1 (en) * | 2007-03-07 | 2009-01-08 | Spineworks Medical, Inc. | Transdiscal interbody fusion device and method |
US7773621B2 (en) * | 2006-09-16 | 2010-08-10 | Mips Technologies, Inc. | Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch |
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 |
US8010745B1 (en) * | 2006-09-27 | 2011-08-30 | Oracle America, Inc. | Rolling back a speculative update of a non-modifiable cache line |
US8370609B1 (en) | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US8516462B2 (en) * | 2006-10-09 | 2013-08-20 | International Business Machines Corporation | Method and apparatus for managing a stack |
US8380966B2 (en) | 2006-11-15 | 2013-02-19 | Qualcomm Incorporated | Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging |
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 |
US8341604B2 (en) | 2006-11-15 | 2012-12-25 | Qualcomm Incorporated | Embedded trace macrocell for enhanced digital signal processor debugging operations |
US8533530B2 (en) | 2006-11-15 | 2013-09-10 | Qualcomm Incorporated | Method and system for trusted/untrusted digital signal processor debugging operations |
US20080148022A1 (en) * | 2006-12-13 | 2008-06-19 | Arm Limited | Marking registers as available for register renaming |
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 |
EP2159689A4 (en) * | 2007-06-20 | 2011-01-05 | Fujitsu Ltd | INSTRUCTION EXECUTION CONTROLLER AND INSTRUCTION EXECUTION CONTROL METHOD |
EP2159685B1 (en) * | 2007-06-20 | 2013-08-21 | Fujitsu Limited | Processor |
WO2008155807A1 (ja) * | 2007-06-20 | 2008-12-24 | Fujitsu Limited | 情報処理装置と負荷調停制御方法 |
EP2159691B1 (en) * | 2007-06-20 | 2013-08-28 | Fujitsu Limited | Simultaneous multithreaded instruction completion controller |
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 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0346003A2 (en) * | 1988-06-07 | 1989-12-13 | Fujitsu Limited | Multiprocessor control system |
US5553291A (en) * | 1992-09-16 | 1996-09-03 | Hitachi, Ltd. | Virtual machine control method and virtual machine system |
EP0747816A2 (en) * | 1995-06-07 | 1996-12-11 | International Business Machines Corporation | Method and system for high performance multithread operation in a data processing system |
US5742782A (en) * | 1994-04-15 | 1998-04-21 | Hitachi, Ltd. | Processing apparatus for executing a plurality of VLIW threads in parallel |
US5761522A (en) * | 1995-05-24 | 1998-06-02 | Fuji Xerox Co., Ltd. | Program control system programmable to selectively execute a plurality of programs |
Family Cites Families (46)
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 |
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 |
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, Grenchen | 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 |
EP0617361B1 (en) * | 1993-03-26 | 2001-11-28 | Cabletron Systems, Inc. | Scheduling method and apparatus for a communication network |
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 |
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 |
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 |
KR100500002B1 (ko) * | 1996-08-27 | 2005-09-08 | 마츠시타 덴끼 산교 가부시키가이샤 | 복수의명령흐름을독립적으로처리하고,명령흐름단위로처리성능을유연하게제어하는멀티스레드프로세서 |
US6088788A (en) | 1996-12-27 | 2000-07-11 | International Business Machines Corporation | Background completion of instruction and associated fetch request in a multithread processor |
DE69826539D1 (de) | 1997-01-30 | 2004-11-04 | Sgs Thomson Microelectronics | Cachespeichersystem |
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 |
-
1999
- 1999-04-29 US US09/302,633 patent/US6535905B1/en not_active Expired - Lifetime
-
2000
- 2000-04-20 CN CNB2005100070359A patent/CN100399263C/zh not_active Expired - Fee Related
- 2000-04-20 DE DE60032481T patent/DE60032481T2/de not_active Expired - Lifetime
- 2000-04-20 BR BRPI0010602-0A patent/BR0010602B1/pt not_active IP Right Cessation
- 2000-04-20 IL IL14615900A patent/IL146159A0/xx active IP Right Grant
- 2000-04-20 AU AU44802/00A patent/AU4480200A/en not_active Abandoned
- 2000-04-20 EP EP00926240A patent/EP1185924B1/en not_active Expired - Lifetime
- 2000-04-20 CN CN00809404.7A patent/CN1196060C/zh not_active Expired - Fee Related
- 2000-04-20 WO PCT/US2000/010800 patent/WO2000067113A2/en active IP Right Grant
- 2000-05-03 TW TW089108132A patent/TW476915B/zh not_active IP Right Cessation
-
2001
- 2001-10-25 IL IL146159A patent/IL146159A/en not_active IP Right Cessation
-
2002
- 2002-05-31 HK HK02104141A patent/HK1042363A1/xx not_active IP Right Cessation
- 2002-09-20 US US10/251,599 patent/US6854118B2/en not_active Expired - Lifetime
- 2002-09-20 US US10/248,000 patent/US6865740B2/en not_active Expired - Lifetime
- 2002-09-20 US US10/251,542 patent/US6981261B2/en not_active Expired - Fee Related
- 2002-09-20 US US10/251,204 patent/US6795845B2/en not_active Expired - Lifetime
- 2002-09-20 US US10/251,527 patent/US6785890B2/en not_active Expired - Lifetime
- 2002-09-20 US US10/251,508 patent/US6971104B2/en not_active Expired - Fee Related
- 2002-09-20 US US10/251,583 patent/US6850961B2/en not_active Expired - Lifetime
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0346003A2 (en) * | 1988-06-07 | 1989-12-13 | Fujitsu Limited | Multiprocessor control system |
US5553291A (en) * | 1992-09-16 | 1996-09-03 | Hitachi, Ltd. | Virtual machine control method and virtual machine system |
US5742782A (en) * | 1994-04-15 | 1998-04-21 | Hitachi, Ltd. | Processing apparatus for executing a plurality of VLIW threads in parallel |
US5761522A (en) * | 1995-05-24 | 1998-06-02 | Fuji Xerox Co., Ltd. | Program control system programmable to selectively execute a plurality of programs |
EP0747816A2 (en) * | 1995-06-07 | 1996-12-11 | International Business Machines Corporation | Method and system for high performance multithread operation in a data processing system |
Also Published As
Publication number | Publication date |
---|---|
DE60032481D1 (de) | 2007-02-01 |
US6981261B2 (en) | 2005-12-27 |
EP1185924A2 (en) | 2002-03-13 |
US6850961B2 (en) | 2005-02-01 |
US20030018686A1 (en) | 2003-01-23 |
US6971104B2 (en) | 2005-11-29 |
US6865740B2 (en) | 2005-03-08 |
US20030018687A1 (en) | 2003-01-23 |
US6795845B2 (en) | 2004-09-21 |
BR0010602A (pt) | 2005-01-11 |
US6854118B2 (en) | 2005-02-08 |
US20030023834A1 (en) | 2003-01-30 |
US20030023658A1 (en) | 2003-01-30 |
CN1196060C (zh) | 2005-04-06 |
WO2000067113A2 (en) | 2000-11-09 |
WO2000067113A3 (en) | 2001-09-07 |
CN1364261A (zh) | 2002-08-14 |
EP1185924B1 (en) | 2006-12-20 |
IL146159A0 (en) | 2002-07-25 |
BR0010602B1 (pt) | 2012-12-11 |
US20030023659A1 (en) | 2003-01-30 |
US20030023835A1 (en) | 2003-01-30 |
DE60032481T2 (de) | 2007-09-27 |
AU4480200A (en) | 2000-11-17 |
US20030018685A1 (en) | 2003-01-23 |
IL146159A (en) | 2006-12-10 |
TW476915B (en) | 2002-02-21 |
US6785890B2 (en) | 2004-08-31 |
US6535905B1 (en) | 2003-03-18 |
CN1645317A (zh) | 2005-07-27 |
HK1042363A1 (en) | 2002-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100399263C (zh) | 用于在一个多线程处理器内进行线程切换的方法和装置 | |
US7856633B1 (en) | LRU cache replacement for a partitioned set associative cache | |
EP1749262B1 (en) | Multiple branch predictions | |
US7039794B2 (en) | Method and apparatus for processing an event occurrence for a least one thread within a multithreaded processor | |
US6889319B1 (en) | Method and apparatus for entering and exiting multiple threads within a multithreaded processor | |
KR100225244B1 (ko) | 프로세서내에서 자원 할당을 추적하는 방법 및 장치,수퍼스칼라프로세서및데이타프로세싱시스템 | |
US20010032307A1 (en) | Micro-instruction queue for a microprocessor instruction pipeline | |
WO2001048599A1 (en) | Method and apparatus for managing resources in a multithreaded processor | |
KR100483463B1 (ko) | 사전-스케쥴링 명령어 캐시를 구성하기 위한 방법 및 장치 | |
WO2002006959A1 (en) | Instruction fetch and dispatch in multithreaded system | |
CN1124546C (zh) | 一种超标量处理器及在该超标量处理器中完成指令的方法 | |
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 | |
US6857062B2 (en) | Broadcast state renaming in 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 |
Granted publication date: 20080702 Termination date: 20170420 |
|
CF01 | Termination of patent right due to non-payment of annual fee |