CN101133391B - 多线程微处理器中的二分化线程调度器 - Google Patents

多线程微处理器中的二分化线程调度器 Download PDF

Info

Publication number
CN101133391B
CN101133391B CN2006800036399A CN200680003639A CN101133391B CN 101133391 B CN101133391 B CN 101133391B CN 2006800036399 A CN2006800036399 A CN 2006800036399A CN 200680003639 A CN200680003639 A CN 200680003639A CN 101133391 B CN101133391 B CN 101133391B
Authority
CN
China
Prior art keywords
thread
instruction
logic
scheduler
threads
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
CN2006800036399A
Other languages
English (en)
Other versions
CN101133391A (zh
Inventor
达伦·M·琼斯
莱恩·C·肯特
凯文·D·契瑟尔
汤姆士·A·彼德森
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.)
Imagination Technologies Ltd
MIPS Tech LLC
Original Assignee
MIPS Technologies Inc
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 MIPS Technologies Inc filed Critical MIPS Technologies Inc
Publication of CN101133391A publication Critical patent/CN101133391A/zh
Application granted granted Critical
Publication of CN101133391B publication Critical patent/CN101133391B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • 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

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)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)

Abstract

本发明提供一种二分化调度器,用于在可同时执行多个线程的多线程处理器中派送多个线程的指令。此调度器包括可重复使用内核内的不可由使用者定制的第一部份、内核外的可由使用者定制的第二部份、以及耦接第二部分与内核的接口。第二部份实施可由使用者根据特定应用来定制的线程调度策略。第一部份是调度策略不可知的,且根据由第二部份传送的调度策略在每一个时钟周期内发出线程的指令给执行单元。第二部份经由每个线程的优先级来传送调度策略。当内核承诺执行指令时,此内核通知第二部份哪一个线程的指令被承诺执行,以使此第二部份相应地更新优先级。

Description

多线程微处理器中的二分化线程调度器
与本发明互相参照的相关申请案
[0001]本申请案和下列同时申请的待审美国专利申请案有关,将这些申请案整体引入用于所有目的。
 
序号(案号) 申请日期 标题
(MIPS.0200-00-US) 多线程微处理器中的漏水桶线程调度器
(MIPS.0201-00-US) 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器
(MIPS.0201-01-US) 包含具有根据指令停顿可能性预测的线程调度器的多线程微处理器
(MIPS.0202-00-US) 多线程微处理器中的指令/滑动缓冲器
技术领域
[0002]本发明关于一种多线程处理器的技术范畴,特别是执行多线程时的指令发出调度。
技术背景
[0003]微处理器的设计者使用了许多技巧来增加微处理器的性能。大多数微处理器在固定频率的时钟信号下操作。微处理器中的各个电路在每一时钟周期执行各自的功能。根据汉尼斯与帕特森(请参阅计算机结构:一种定量描述,第三版),微处理器的性能根据执行一个程序或多个程序所需的时间来衡量。在此观点下,微处理器的性能取决于其时钟频率、执行一个程序所需的平均时钟周期数目(或是每一个时钟周期所执行的平均指令数目)、以及一个程序或多个程序中所执行的指令数目。半导体科学家以及工程师,主要是通过减少晶体管大小,其导致更快的切换时间,不断地使微处理器能够在更快的时钟频率下运行。能够执行的指令数目很大程度上由程序中欲执行的任务所限制,但是也会被微处理器的指令集结构所影响。可通过结构或组织机制的改变以大幅度提高性能,即改善每一时钟周期所能执行的指令数,特别是利用平行处理机制。
[0004]一种能改善每一时钟周期所能执行的指令数以及时钟频率的平行处理机制为流水线化微处理器,其使多个指令在微处理器各流水线阶段中重迭地执行。在理想的情况下,流水线中的指令在每一时钟周期均向下一阶段移动,其对指令执行一个不同的功能。因此,虽然每一个指令需要多个时钟周期才能完成,但是因为各个指令的多个周期互相重迭,所以每一指令所需的平均时钟会减少。此种流水线化微处理器的性能可以视程序中指令容许的程度来改善其性能,即,在一个指令不需要依靠其前端指令就能执行的程度下,可以与其前端指令平行地执行,此称之为指令级平行化。另一种指令级平行化也可以是微处理器同时在一个时钟周期中发出多个执行指令,通常称之为超标量微处理器。
[0005]前述所讨论的仅是单一指令级的平行处理机制,然而,根据指令级平行化所能达成的性能改善是有限的。许多研究如何改善指令级平行机制限制的做法最近又重新兴起,如采用指令块、指令流、或指令流级的平行化,通常称为线程级平行机制。线程只是程序指令的系列或流。多线程微处理器可根据一些多线程指令提取及执行的调度原则,如交错、阻塞或是同时多重线程的方式,同时执行多个线程。多线程微处理器通常可以容许多个线程同时分享微处理器中的一些功能单元(如:指令提取及译码单元、高速缓存、分支预测单元、以及加载/储存、整数处理、浮点处理、单一指令多数据(SIMD)单元等)。然而,多线程微处理器还包含多组的资源或上下文(context),以储存每一线程的特殊状态,如:多个程序计数器和通用目的寄存器组,以提供在不同线程快速切换以提取及发出指令的能力。
[0006]多线程微处理器所解决性能限制问题的一个例子是,因为高速缓存失误而必须存取微处理器外的内存时通常需要一段相对长的时间。对当代微处理器为基础的计算机系统而言,内存的存取时间通常是高速缓存命中存取时间的一至二个数量级倍数是十分常见的。依赖于高速缓存中的丢失数据的指令在流水线中停顿,等待来自内存的数据。结果是,当流水线停顿以等待数据自内存取出时,单线程微处理器的一些或全部流水线阶段空闲,不执行任何有意义的工作达数个时钟周期之久。而多线程微处理器则可以在此等待内存提取的时间,发出其它线程的指令以解决此问题,因此,可以使流水线各阶段继续从事其它有意义的工作,这类似于操作系统在页面错误时的任务切换,但更精细。其它的多线程微处理器所解决性能限制问题的例子可以是因为分支错误预测以及相随的流水线清空、或是因为数据相关、或是因为如除法指令、浮点指令等长时间等待指令,而造成的流水线停顿以及其相随的空闲周期。同样的,多线程微处理器则可以在此等待时间,发出其它线程的指令至原本应该空闲的流水线阶段以解决此问题,因此,可以使多线程处理器大幅减少执行包含多个线程的一个程序或多个程序所需的时间。另一个问题是,特别是在嵌入式系统中,当中断服务时所浪费的时间。当输入输出组件发出中断信号至微处理器时,此微处理器通常会切换至中断服务程序,此时必须储存程序当前状态,服务该中断需求,以及在中断需求服务后重新回到程序当前状态。多线程微处理器具有提供自己线程的自行上下文事件服务程序代码的能力。其结果是,多线程微处理器能够在最短时间内,甚至是一个时钟周期,就可以响应输入输出组件的事件信号,然后切换回原本的事件,因此可以避免传统方式所造成的长时间事件服务浪费。
[0007]由上面叙述可以观察到,处理器同时执行多个线程,可以减少执行包含多个线程的一个程序或多个程序的时间。然而,必须要了解的是,多线程处理器相对于单线程处理器所能获得的好处,是与此处理器的线程调度策略高度相关的,即:处理器如何调度不同的线程发出他们的指令来执行。更进一步,适合的线程调度策略是与处理器所欲执行的应用高度相关的。例如,多线程处理器可以使用在许多不同的应用中,包括实时嵌入式系统,如网络切换器与路由器、RAID控制器、打印机、扫瞄器、手持设备、数码相机、汽车、机顶盒、家电等;科学运算;交易运算;服务器运算以及通用目的运算。这些应用中的每一应用需要不同的调度策略,以使多线程处理器的性能最佳化。其结果是,十分需要一种定制化的能力,可以让具有不同应用的使用者视其需要来调整其特定的调度策略。定制化的线程调度器在尝试设计多线程微处理器内核时特别需要,该内核可以是被定制以符合不同应用需求的微处理器和/或系统的一部份。这将使得此多线程内核可以对不同设计重复使用,这是很需要的,因为如此一来就可以节省掉为了不同应用而必须重新设计整个处理器的许多时间。
[0008]然而,将微处理器的整个线程调度电路都加以定制化会造成许多问题,因为此线程调度电路通常是与微处理器内部的流水线化操作息息相关的,如此一来会造成不好的副作用。例如,对于顾客而言,很难了解到微处理器内部的流水线化作业是如何运作的,因此造成顾客定制化调度器的困难。更进一步而言,处理器内部的流水线化作业的时间关键信号路径也必须让客户知道,如果客户的定制化逻辑速度太慢的话,这或许会影响到整个微处理器的时钟速度。最后,客户定制化调度器的过程中或许会不小心地发生错误,而严重地影响到整个微处理器内核的运作速度及功能。因此,对于多线程处理器架构而言,如何能使得在可以定制其线程调度策略时,不会有以上所述的缺点,就变得十分重要。
发明内容
[0009]本发明提供一种二分化的调度器架构。此调度器的第一部份位于处理器内核之外,用来实施根据使用者应用所需要的线程调度策略;因此,这部分可安全地被使用者修改而不会危及到处理器内核的正常运作和可重复使用性。此调度器的第二部份位于处理器内核内,根据由非内核部分实施的线程调度策略来执行逐周期的指令派送;因此,该第二部分不可被使用者修改。第一部分与内核之间的接口用于向第二部份传送每一线程的调度优先级,且使内核能够传送指令执行信息至第一部份,使得第一部份可以更新优先级以实现其线程调度策略。
[0010]一方面,本发明提供一种二分化调度器,用于在配置为可同时执行多个线程的多线程处理器中派送指令。该调度器包括第一调度器逻辑,其发出多个线程的指令到处理器的至少一个执行单元。该调度器还包括第二调度器逻辑,用于实施多个线程的调度策略。该调度器还包括接口,用于将第二调度器逻辑耦接至第一调度器逻辑和至少一个执行单元。该接口包括第一信号,供第一调度器逻辑用来从第二调度器逻辑接收多个线程中每一个的优先级。第一调度器逻辑根据所述优先级发出指令到至少一个执行单元。该接口还包括第二信号,供第二调度器逻辑用来接收多个线程中每一个的指令执行信息。第二调度器逻辑根据该指令执行信息更新所述优先级。
[0011]另一方面,本发明提供一种多线程处理器。该处理器包括线程调度策略逻辑,其实施一种策略,该策略用于调度由处理器同时执行的多个线程的指令派送。该处理器还包括处理器内核,耦接至线程调度策略逻辑。该处理器内核包括至少一个执行流水线,用于执行指令。该处理器内核还包括指令派送器,耦接来根据从线程调度策略逻辑所接收的策略,将多个线程的指令派送到执行流水线。该处理器还包括接口,用于耦接线程调度策略逻辑和处理器内核。该接口包括优先级指示器,用于线程调度策略逻辑向指令派送器传送多个线程中每一个的派送优先级,以实施所述策略。该接口还包括执行指示器,用于至少一个执行流水线向线程调度策略逻辑传送针对多个线程中每一个的指示信息,以指示是否至少一个执行流水线已承诺执行该线程的指令。
[0012]另一方面,本发明提供一种线程调度策略管理器,用于在可同时执行多个线程的多线程处理器中执行线程调度策略。该策略管理器包括输入,用于在每一处理器时钟周期接收关于多个线程的每一个的指令是否被执行的指示。该策略管理器还包括输出,用于在每一处理器时钟周期传送多个线程的每一个的指令派送优先级。该策略管理器还包括耦接至输入的逻辑,用于根据所述输入产生所述输出,以实施线程调度策略。
[0013]另一方面,本发明提供一种多线程处理器内核,被配置为可同时执行多个线程。多个线程中的每一个包括一个指令流。该处理器内核包括接口,用于将处理器内核耦接到处理器内核外部的线程调度策略逻辑。该接口包括第一信号,供线程调度策略逻辑用来向处理器内核传送多个线程的每一个的优先级。该接口还包括第二信号,供线程调度策略逻辑用来从处理器内核接收多个线程中每一个的关于这些线程的指令执行的信息,以供线程调度策略逻辑用来更新优先级。该处理器内核还包括调度器,其接收第一信号,并根据第一信号所提供的优先级,从多个线程中的至少一个线程选取至少一个指令,以发出用来执行。
[0014]另一方面,本发明提供一种在多线程处理器中调度多个同时执行的线程的方法。该方法包括:在第一时钟周期内,线程调度策略逻辑向指令派送逻辑传送多个线程中每一个的线程调度优先级。该方法还包括:在第二时钟周期内,响应于线程调度策略逻辑向指令派送逻辑传送的优先级,指令派送逻辑从多个线程派送至少一个指令以供执行。
[0015]另一方面,本发明提供一种本发明提供一种与计算设备一起使用的计算机程序产品。该计算机程序产品包括计算机可用介质,其具有包含于所述介质中的计算机可读程序代码,用于实现二分化调度器,该二分化调度器在可同时执行多个线程的多线程处理器中派送指令。该计算机可读程序代码包括第一程序代码,用于提供第一调度器逻辑,该第一调度器逻辑发出多个线程的指令至处理器的至少一个执行单元。该计算机可读程序代码还包括第二程序代码,用于提供第二调度器逻辑,该第二调度器逻辑用于实施多个线程的调度策略。该计算机可读程序代码还包括第三程序代码,用于提供接口,该接口将第二调度器逻辑耦接至第一调度器逻辑和至少一个执行单元。该接口包括第一信号,供第一调度器逻辑用来从第二调度器逻辑接收多个线程的每一个的优先级。第一调度器逻辑根据所述优先级发出指令到至少一个执行单元。该接口还包括第二信号,供第二调度器逻辑用来接收多个线程的每一个的指令执行信息。第二调度器逻辑根据指令执行信息更新所述优先级。
[0016]另一方面,本发明提供一种与计算设备一起使用的计算机程序产品。该计算机程序产品包括计算机可用介质,具有包含于所述介质中的计算机可读程序代码,用于实现多线程处理器。该计算机可读程序代码包括第一程序代码,用于提供线程调度策略逻辑,该线程调度策略逻辑实施一种策略,该策略用于调度由处理器同时执行的多个线程的指令派送。该计算机可读程序代码还包括第二程序代码,用于提供处理器内核,该处理器内核耦接至线程调度策略逻辑。该处理器内核包括至少一个执行流水线,用于执行指令。该处理器内核还包括指令派送器,其根据从线程调度策略逻辑所接收的策略,将多个线程的指令派送到执行流水线。该计算机可读程序代码还包括第三程序代码,用于提供接口,该接口耦接线程调度策略逻辑与处理器内核。该接口包括优先级指示器,用于线程调度策略逻辑向指令派送器传送多个线程的每一个的派送优先级,以实施所述策略。该接口还包括执行指示器,用于至少一个执行流水线向线程调度策略逻辑传送针对多个线程中每一个的关于是否至少一个执行流水线已承诺执行该线程的指令的指示。
[0017]另一方面,本发明提供一种与计算设备一起使用的计算机程序产品。该计算机程序产品包括计算机可读介质,其具有包含于所述介质中的计算机可读程序代码,用于实现线程调度策略管理器,该线程调度策略管理器在可同时执行多个线程的多线程处理器中实施线程调度策略。该计算机可读程序代码包括第一程序代码,用于提供输入,该输入用于在每一处理器时钟周期接收关于多个线程的每一个的指令是否被执行的指示。该计算机可读程序代码还包括第二程序代码,用于提供输出,该输出用于在每一处理器时钟周期传送多个线程的每一个的指令派送优先级。该计算机可读程序代码还包括第三程序代码,用于提供耦接至所述输入的逻辑,该逻辑用于根据所述输入产生所述输出,以实施线程调度策略。
[0018]另一方面,本发明提供一种与计算设备一起使用的计算机程序产品。该计算机程序产品包括计算机可用介质,其具有包含于所述介质中的计算机可读程序代码,用于实现多线程处理器内核,该多线程处理器内核被配置为同时执行多个线程,多个线程中的每一个包括一个指令流。该计算机可读程序代码包括第一程序代码,用于提供接口,该接口用于将处理器内核耦接到处理器内核外部的线程调度策略逻辑。该接口包括第一信号,供线程调度策略逻辑用来向处理器内核传送多个线程的每一个的优先级。该接口还包括第二信号,供线程调度策略逻辑用来从处理器内核接收多个线程中每一个的关于这些线程的指令执行的信息,以供线程调度策略逻辑用来更新优先级。该计算机可读程序代码还包括第二程序代码,用于提供调度器,其接收第一信号,并根据第一信号所提供的优先级,从多个线程中的至少一个线程选取至少一个指令,以发出供执行。
[0019]另一方面,本发明提供一种包含在传输介质内的计算机数据信号,其包括计算机可读程序代码,用于提供二分化调度器,该二分化调度器在可同时执行多个线程的多线程处理器中派送指令。该程序代码包括第一程序代码,用于提供第一调度器逻辑,该第一调度器逻辑被配置为发出多个线程的指令至处理器的至少一个执行单元。该程序代码还包括第二程序代码,用于提供第二调度器逻辑,该第二调度器逻辑用于实施多个线程的调度策略。该程序代码还包括第三程序代码,用于提供接口,该接口将第二调度器逻辑耦接至第一调度器逻辑和至少一个执行单元。该接口包括第一信号,供第一调度器逻辑用来从第二调度器逻辑接收多个线程的每一个的优先级。第一调度器逻辑根据优先级发出指令到至少一个执行单元。该接口还包括第二信号,供第二调度器逻辑用来接收多个线程的每一个的指令执行信息。第二调度器逻辑根据所述指令执行信息更新优先级。
[0020]这里描述的本发明的二分化调度器的优点是,其可使处理器内核设计为可由不同的使用者重复使用,并且在所设计的工作频率下正确地运作,同时允许使用者实施根据其应用特殊需要的线程调度策略。该二分化调度器的另一个优点是,其使使用者自行决定硬件和软件在执行线程调度策略上所占比重。即,某些使用者希望大部分,或是全部的线程调度策略都由硬件来实现,然而,另一些使用者则可能希望由硬件实现最少数量的线程调度策略,而由软件来执行大部分的线程调度策略。
附图说明
[0021]图1为根据本发明的流水线化多线程微处理器的方块图。
[0022]图2为根据图1的本发明微处理器的一部份的方块图,特别是,显示根据本发明一个实施例的指令/滑动(skid)缓冲器。
[0023]图3为根据图2的本发明指令/滑动缓冲器的一个方块图,显示如图2例示的指令/滑动缓冲器,及其相关的控制逻辑。
[0024]图4为根据本发明实施例中如图3中指令/滑动缓冲器例示操作的四个流程图。
[0025]图5为根据本发明实施例图1中的微处理器将停顿的线程上下文清空的操作,以改善执行使用带宽的流程图。
[0026]图6为根据本发明实施例图1中的微处理器内的调度器的方块图,此调度器分为两部分。
[0027]图7为根据本发明实施例图6中的派送调度器以及图2中的指令选择逻辑的更具体细节的方块图。
[0028]图8为根据本发明图7实施例中的派送调度器的操作流程图。
[0029]图9为根据本发明实施例图6中的策略管理器以及一TCSchedule寄存器的方块图。
[0030]图10为根据本发明实施例图9的策略管理器的操作流程图。
[0031]图11为根据本发明替代实施例图6中的派送调度器以及图2中的指令选取逻辑的更具体细节的方块图。
[0032]图12为根据本发明实施例图11的派送调度器的操作流程图。
[0033]图13为根据本发明替代实施例示出图1中微处理器的共享可动态分配滑动缓冲器的方块图。
[0034]图14为根据本发明实施例图13的滑动缓冲器的操作流程图。
[0035]图15为根据本发明替代实施例图1中微处理器的单个共享指令/滑动缓冲器可以被所有的线程上下文进行共享的方块图。
具体实施方式
[0036]请参阅图1,为本发明的流水线化多线程微处理器100的一个方块图。如图所示,微处理器100被配置为可以同时处理多个线程。线程,还被称为执行线程或指令流,包含一系列或一串可以执行的程序指令。这些线程或许是来自执行于微处理器100中的不同程序,或许是来自执行于微处理器100中的相同程序的不同部分,或是两者结合。
[0037]每一个线程有一个相关的线程上下文(TC)。线程上下文包含储存元件的集合,如寄存器或锁存器,和/或包括微处理器100的储存元件中比特,其描述线程的执行状态。即,线程上下文描述线程的各自执行状态,每一个线程的状态均是独一无二的,而不是其它在微处理器100中同时执行的线程的分享状态。通过在线程上下文中储存每一线程的状态,微处理器100可以很快地在线程之间切换以提取和执行指令。在一个实施例中,每个线程上下文包含程序计数器(PC)、通用目的寄存器(GPRs)组、以及线程控制寄存器,其均位于微处理器100的寄存器堆112中。
[0038]微处理器100根据调度策略来执行线程,此调度策略控制不同线程的指令的提取及发出。调度策略控制许多线程的指令的提取及发出的许多实施例将在以下描述。指令“发出”和“派送”这两个名词,将在以下描述中交互使用。多线程微处理器100允许多个线程分享微处理器100的功能单元(如:指令提取及译码单元、高速缓存、分支预测单元、以及加载/储存、整数处理、浮点处理、SIMD单元、以及其它功能单元等)。
[0039]微处理器100包含指令高速缓存102,以缓冲从包含微处理器100的系统的系统内存提取的程序指令,特别是各个线程的指令。微处理器100还包含指令提取器104或指令提取流水线104,耦接至指令高速缓存102和/或系统内存,同时提取多个线程的指令至指令/滑动缓冲器106,该指令/滑动缓冲器与指令提取器104耦接。在一个实施例中,指令提取流水线104包含四个指令提取流水线阶段。指令/滑动缓冲器106提供指令给指令调度器108或线程调度器108。在一个实施例中,每一线程有自己的指令/滑动缓冲器106。每一时钟周期,调度器108从多个线程之一选择一个指令,并发出该指令供微处理器100流水线的执行阶段来执行。寄存器堆112与调度器108耦接,以提供指令操作数至执行单元114来执行此指令。微处理器100还包含数据高速缓存118,与执行单元114耦接。执行单元114可以包括,但是不限于,整数执行单元、浮点执行单元、SIMD执行单元、加载/储存单元以及分支执行单元。在一个实施例中,整数执行单元流水线包含四个阶段:寄存器堆(RF)存取阶段以供存取寄存器堆112,地址产生(AG)阶段、执行(EX)阶段以及记忆(MS)阶段。在执行(EX)阶段时,简单的数学逻辑(ALU)(如:加法、减法、移位等)运算被执行。此外,高速缓存118是两周期高速缓存,其在第一时钟周期时在执行(EX)阶段被存取,在第二时钟周期时在记忆(MS)阶段被存取。每一线程上下文有自己的寄存器堆112,且每一寄存器堆112有自己的程序计数器、通用目的寄存器组以及线程控制寄存器。指令提取单元104根据每一线程上下文的程序计数器值提取线程的指令。请注意某些执行单元114可以是流水线化,一些则是专用的。微处理器100还包含回写阶段116,以写回指令结果至寄存器堆112。在一个实施例中,微处理器100流水线还包括例外处理阶段,耦接在执行单元114与回写阶段116之间。
[0040]执行单元114产生与每一个线程上下文相关的TC_instr_committed信号124,以指示特定线程的指令被承诺执行。如果一个指令保证不会被微处理器100流水线清空,而是最终会被执行的话,则这个指令已被承诺执行,这会产生一个结果且会更新微处理器100的结构状态。在一个实施例中,每一个时钟周期内可以有多个指令被承诺执行,而TC_instr_committed信号124指示此时钟周期内此线程上下文中有多少个指令被承诺执行。将TC_instr_committed信号124提供给调度器108。响应于TC_instr_committed信号124,调度器108更新此线程的虚拟水位指示器,以供调度器108的线程调度策略使用,来达成所需的服务质量,如同之后图9和图10所描述的一般。
[0041]还将TC_instr_committed信号124提供给各自的指令/滑动缓冲器106。响应于TC_instr_committed信号124,指令/滑动缓冲器106更新指针,以有效地从缓冲器106中移除指令。在传统的微处理器中,指令从传统的指令缓冲器106中移除以及发出执行。然而,本发明的指令/滑动缓冲器106的好处是,在指令发出执行后会继续地储存指令。这些指令并不会从指令/滑动缓冲器106中移除,而是直到执行单元114经由各自的TC_instr_committed信号124指出指令已经被承诺执行,如同之后图3和图4所描述的一般。
[0042]调度器108提供执行单元114一个可执行的TC信号132。可执行的TC信号132指示那一个线程上下文是可执行的,即,调度器108目前可以那些线程上下文发出指令。在一个实施例中,如果一个线程上下文是活动的且并没有被其它条件所阻止(如中止、等待、暂停或是礼让等),则这个线程上下文是可执行的,如同之后图7所描述的一般。特别的是,执行单元114利用可执行TC信号132来决定一个停顿线程上下文是否是唯一的可执行线程上下文,以决定是否将停顿线程上下文的指令清空,如同之后图5所详细描述的一般。
[0043]调度器108提供执行单元114一个停顿事件信号126。停顿事件信号126指示一个指令因为由该特定停顿事件信号126所指示的原因而停顿或是可能停顿在执行单元114中。除此之外,停顿事件信号126包括标识符,以指示停顿指令的线程上下文。执行单元114还提供调度器108一个无停顿事件信号128。响应于停顿事件信号126,调度器108停止发出此停顿线程上下文的指令,直到一个相关的无停顿事件信号128被发出,如同之后图5所详细描述的一般。
[0044]可以导致执行单元114响应于一个指令而停顿的事件的例子包括,但不局限于,以下的情况:第一,此指令依靠目前尚不可得的数据,如在数据高速缓存118内丢失的加载指令的数据。例如,一加法指令可以指定一个操作数,因为先前的加载指令在数据高速缓存118内丢失该操作数目前尚不可得,并且此操作数尚未从系统内存中取出。第二,此指令依靠从一个长执行时间指令所取出的数据,如除法或其它长数学运算指令,或是例如,一个指令从协处理器的寄存器中转移一个值。第三,此指令会造成有限硬件资源的冲突。例如,在一个实施例中,微处理器100包括单个除法器。如果一个除法指令已经在此除法器中执行的话,则第二个除法指令必须停顿以等待第一个除法指令完成。举另一例,在一个实施例中,微处理器100指令集包括一组指令,以执行指令高速缓存102的低级管理操作。如果一个指令高速缓存管理操作指令已经被执行的话,则第二个指令高速缓存管理操作指令必须停顿以等待第一个指令高速缓存管理操作指令的完成。再举另一例,在一个实施例中,微处理器100包括加载队列,该加载队列包含相对小数目的槽(slot),供储存正在运作的数据高速缓存118重新填充。如果加载指令在数据高速缓存118丢失的话,则分配一个加载队列条目,且处理器总线交易被初始化以从系统内存中取出此丢失的数据。当此数据返回至总线时,将会被储存至加载队列,之后被写入至此数据高速缓存118中。当此总线交易完成后,且所有的数据均已写入至此数据高速缓存118后,此加载队列条目才会被释放。然而,当此加载队列是满的时候,一个加载丢失会造成流水线的停顿。第四,此指令或许会在EHB指令之后。在一个实施例中,微处理器100指令集包括一个执行危险障碍(EHB)指令,被软件用来停止指令执行,直到全部执行危险皆被清除为止。通常,跟随在EHB指令后的指令必须在流水线中停顿直到EHB指令执行完毕。第五,此指令或许会在加载或储存指令之后,在相同线程上下文中对线程间通信(ITC)空间寻址。在一个实施例中,微处理器100支持加载或储存至一个线程间通讯(ITC)空间包括同步储存,其可阻止任意长时间,导致跟随在线程间通讯(ITC)加载或储存之后的相同线程上下文中的指令停顿。
[0045]相反,无停顿事件信号128的例子包括,但是不局限于,以下:数据高速缓存118中丢失的加载数据返回;有限硬件资源释放,如除法器电路、指令高速缓存102、或加载队列空间;执行危险障碍(EHB)指令、长执行指令、或加载/储存指令至线程间通讯(ITC)空间完成。
[0046]执行单元114还产生TC清空信号122,其与每一线程上下文相关,以指示在流水线中执行区域(如流水线中调度器108下方的区域)中特定线程的指令被清空或取消。在一个实施例中,清空或取消一个指令包括清除在此流水线中与此指令相关的一个有效位,其防止此流水线响应于此指令的结果而更新微处理器100的结构状态。执行单元114也许会产生TC清空信号122的原因是,如前所描述过的,一个线程的指令停顿于执行单元114内。清空或取消此指令以排除此指令在此流水线中停顿的原因,这是因为此指令产生的结果将被忽略而且从而不需要是正确的。本发明的好处是,清空此停顿指令后,其它线程的指令可以继续执行并利用此执行流水线的执行带宽,如此或许可以增加微处理器100的整体性能,将会于以下详加描述。在一个实施例中,只有停顿线程的指令会被清空,如此具有减少在此流水线中因为此清空所造成的气泡数目的好处,在某些情况下,此停顿的指令或许只会产一个气泡,这取决于存在于执行单元114流水线中不同线程的指令组成。在一个实施例中,TC清空信号122指示所有未被承诺执行的线程上下文指令皆被清空。在另一个实施例中,执行单元114或许只会清空少于此执行单元114中未被承诺执行的线程上下文指令的数目,即只清空停顿线程上下文的停顿指令和任何更新的指令,但不会清空早于停顿指令的未被承诺执行的线程上下文指令。在此实施例中,TC清空信号122也指示已被执行单元114清空的指令的数目。
[0047]TC清空信号122由执行单元114提供给各自的指令/滑动缓冲器106。指令/滑动缓冲器106利用TC清空信号122以回到指令/滑动缓冲器106的指令状态,如同之后图3和图4所描述的一般。因为指令/滑动缓冲器106继续储存指令直到它们被承诺不被清空为止,任何被清空的指令都可以随后从指令/滑动缓冲器106重新发出,不必从指令高速缓存102中重新提取。这样的优点是减少从执行流水线清空停顿的指令以执行其它线程的指令的相关代价。减少重新提取指令的可能性已经变得非常重要,因为提取指令所费的时间越来越多。这是因为,与其它事相比,相较于老一代的微处理器设计,对于指令高速缓存需要更多时钟周期以进行存取是一件十分平常的事,主要是因为微处理器时钟周期逐渐降低。因此,与老一代的设计相比,指令重新提取相关的代价大概是多出一个周期、两个周期或更多周期。
[0048]请参阅图2,为根据图1本发明微处理器100的一部份的方块图,特别是,显示根据本发明一个实施例的指令/滑动缓冲器106。图2中显示出多个线程上下文各自的多个指令/滑动缓冲器106,图1中所示的指令提取器104提取指令到多个指令/滑动缓冲器106中。根据本发明一个实施例的指令/滑动缓冲器106的结构与操作,在之后的图3及图4中会详加描述。每一个指令/滑动缓冲器106提供一个指令206给指令选择逻辑202。每一个时钟周期,指令选择逻辑202选择指令206之一作为被选择指令204,提供给执行单元114去执行。指令选择逻辑202响应于由图1中的调度器108所提供的DS_TC优先权信号208来选择被选择指令204给每一个线程上下文。DS_TC优先权信号208的操作,在之后的图7及图8中会详加描述。
[0049]虽然在实施例所描述的微处理器100是一个标量处理器,即,在每一时钟周期内仅会发出一个指令,应该可以理解指令选择逻辑202也可以配置为运作于在每一时钟周期内会发出多个指令的超量处理器。更进一步而言,指令选择逻辑202也可以配置为运作于在每一时钟周期内可以选择从多个不同的线程上下文发出指令,通常称为同时多线程。
[0050]请参阅图3,为根据图2本发明指令/滑动缓冲器106的一个方块图,显示如图2的一个例示的指令/滑动缓冲器106,及其相关的控制逻辑302。图2中的每一个指令/滑动缓冲器106与图3中的指令/滑动缓冲器106相似。即,虽然图3仅显示一个指令/滑动缓冲器106及其相关的控制逻辑302,在一个实施例中,每一个线程上下文中均存在一个指令/滑动缓冲器106及其相关的控制逻辑302。每一个指令/滑动缓冲器106包含多个条目332,每一个储存一个指令,且包含相关的有效位334,用以指示相关的指令是否有效。图3所显示的指令/滑动缓冲器106有六个条目,表示为0到5。在图3的实施例中,指令/滑动缓冲器106配置为条目循环队列。
[0051]图1中的指令提取器104每一次写入一个指令至指令/滑动缓冲器106时,会产生一个写入信号314至指令/滑动缓冲器106。写入信号314也会提供给控制逻辑302。控制逻辑302产生一个充满信号312给指令提取器104,以指示指令/滑动缓冲器106是满的,所以指令提取器104无法再写入更多的指令至指令/滑动缓冲器106,直到指令/滑动缓冲器106不再是满的为止。
[0052]图1中的调度器108每一次从指令/滑动缓冲器106读取一个指令时,会产生一个读取信号316至指令/滑动缓冲器106。读取信号316也会提供给控制逻辑302。控制逻辑302产生一个空信号318给指令调度器108,以指示指令/滑动缓冲器106是空的,所以调度器108无法从指令/滑动缓冲器106再读取更多的指令,直到指令/滑动缓冲器106不再是空的为止。
[0053]控制逻辑302包括有效产生逻辑342,其会更新指令/滑动缓冲器106的有效位334。有效产生逻辑342对各自的线程上下文,接收图1中的TC_instr_committed信号124。每一次执行单元114产生TC_instr_committed信号124之后,有效产生逻辑342会将指令/滑动缓冲器106中最旧的有效指令加以无效。有效产生逻辑342也会从指令提取器104接收写入信号314。每一次指令提取器104产生写入信号314后,有效产生逻辑342会将该指令写入指令/滑动缓冲器106之处的条目标记为有效。
[0054]控制逻辑302还包括充满计数之计数器306,以储存指令/滑动缓冲器106中目前的有效指令数目。充满计数之计数器306会根据指令提取器104产生写入信号314来递增,同时会根据TC_instr_committed信号124来递减。控制逻辑302也包括比较器304,来将充满_计数306与可以储存在指令/滑动缓冲器106中的指令最大数目(即指令/滑动缓冲器106中的条目332总数目)进行比较,以在充满_计数306与可以储存在指令/滑动缓冲器106中的指令最大数目相等时,使充满信号312产生一个真值。
[0055]控制逻辑302也包括空_计数之计数器346,以储存指令/滑动缓冲器106目前尚可以发出的有效指令数目。空_计数346在某些情况下可以小于充满_计数306,这是因为某些存在于指令/滑动缓冲器106中的有效指令已经被发出至执行流水线(但尚未被承诺执行),因此目前没有符合被发出的条件。空_计数之计数器346会根据指令提取器104产生写入信号314来递增,同时会根据调度器108的读取信号316来递减。控制逻辑302也包括比较器344,来比较空计数346与零,以在空_计数346等于零时使空信号318产生真值。此外,空_计数之计数器346响应于图1中的TC清空信号122的真值,可以被写入充满_计数之计数器306的值。
[0056]控制逻辑302也包括写入指针322、承诺指针324,以及读取指针326,每一个皆是起始于指令/滑动缓冲器106的条目零的计数器。每一个计数器当递增超过其最大值时会卷回至零,该最大值通常是指令/滑动缓冲器106中的条目数目减去一。写入指针322指示指令提取器104写入指令到指令/滑动缓冲器106的下一个条目位置,同时会在指令被写入后由写入信号314递增。承诺指针324指示指令/滑动缓冲器106中的下一个被承诺的指令,同时由TC_instr_committed信号124递增。读取指针326指示由调度器108从指令/滑动缓冲器106读取指令的下一个条目位置,同时会在指令被读取后由读取信号316递增。此外,响应于TC清空信号122的一个真值,读取指针326被写入承诺指针324的值。如图3所示,滑动窗口包含从指令/滑动缓冲器106的承诺指针324开始至,但是不包含,读取指针326的条目。此滑动窗口包含已经发出执行但是尚未被承诺的有效指令。
[0057]请参阅图4,为根据本发明实施例如图3中指令/滑动缓冲器106例示操作的四个流程图。每一个流程图显示指令/滑动缓冲器106响应于不同事件而执行的动作。第一流程图的流程从方块402开始。
[0058]在方块402,图1中的指令提取器104对各自的指令/滑动缓冲器106发出图3中的写入信号314,并将一个指令写入指令/滑动缓冲器106。此流程继续至方块404。
[0059]在方块404,有效产生逻辑342响应于写入信号314,将由写入指针322所指示的条目标记为有效。此流程继续至方块406。
[0060]在方块406,图3中的写入指针322响应于写入信号314而递增。此流程继续至方块408。
[0061]在方块408,图3中的充满_计数之计数器306响应于写入信号314而递增。此流程继续至方块412。
[0062]在方块412,图3中的空_计数之计数器346响应于写入信号314而递增。第一流程图在方块412结束。
[0063]第二流程图的流程从方块422开始。
[0064]在方块422,图1中的执行单元114为与该指令/滑动缓冲器106相关的线程上下文发出图1中的TC_instr_committed信号124。此流程继续至方块424。
[0065]在方块424,有效产生逻辑342响应于TC_instr_committed信号124,将由图3中的承诺指针324所指示的条目标记为无效的,因此有效地将此指令从缓冲器中移除。此流程继续至方块426。
[0066]在方块426,承诺指针324响应于TC_instr_committed信号124而递增。此流程继续至方块428。
[0067]在方块428,图3中的充满计数之计数器306响应于TC_instr_committed信号124而递减。第二流程图在方块428结束。
[0068]在一个实施例中,控制逻辑302并不会接收TC_instr_committed信号124,而是从执行单元114接收另一个仅是指出一个指令应该从指令/滑动缓冲器106中移除的信号,虽然此指令并不保证将来不会被需要重新派送。在一个实施例中,此信号指出一个指令到达一个事先决定的重新派送流水线阶段。如果控制逻辑302侦测到此指令已到达事先决定的阶段,则此控制逻辑302会将此指令从指令/滑动缓冲器106中移除。在另一个实施例中,此信号指示每一时钟周期中一个指令时候正在执行,即,并没有停顿,还是向下一个流水线阶段前进。如果控制逻辑302侦测到此指令已经执行了事先决定的时钟周期数,则控制逻辑302会将此指令从指令/滑动缓冲器106中移除。在这些实施例中,若是指令已到达执行流水线114中事先决定的特定阶段,则这些指令会被需要重新派送的机率就会很小,足以将其从指令/滑动缓冲器106中移除,而把位置让给其它将要写入指令/滑动缓冲器106的指令,即使它们并没有保证将来不会被需要重新发送。在此实施例中,如果执行单元114后续指出此指令在没有执行完毕前就被清空,则整个线程上下文的指令/滑动缓冲器106以及整个指令提取流水线104就需被清空,以保证整个线程指令按正确的顺序发出。
[0069]第三流程图的流程从方块442开始。
[0070]在方块442,图1中的调度器108对各自的指令/滑动缓冲106发出读取信号316,且从指令/滑动缓冲106读取将要发给执行流水线的指令。此流程继续至方块444。
[0071]在方块444,读取指针326响应于读取信号316而递增。此流程继续至方块446。
[0072]在方块446,空_计数之计数器346响应于读取信号316而递减。第三流程图在方块446结束。
[0073]第四流程图的流程从方块462开始。
[0074]在方块462,为与指令/滑动缓冲器106相关的线程上下文发出TC清空信号122。此流程继续至方块464。
[0075]在方块464,响应于TC清空信号122,读取指针326被写入承诺指针324的值。此流程继续至方块466。
[0076]在方块466,响应于TC清空信号122,空_计数之计数器346被写入充满_计数之计数器306的值。第四流程图在方块466结束。
[0077]如前述所讨论的,在一个实施例中,TC清空信号122指示执行单元114将此线程上下文所有未承诺的指令皆已清空。图4中的第四流程图描述了此种实施例中的指令/滑动缓冲器106的操作。然而,在其它的实施例中,执行单元114可以只清空目前位于执行单元114中的一部分未承诺的指令而已,具体而言,只清空该停顿线程上下文的停顿指令以及更新的指令,但不清空较该停顿指令更旧的此线程上下文的未承诺指令。在此实施例中,TC清空信号122还指示被执行单元114清空的指令数。在此实施例中,在方块464,将所清空的指令数目从读取指针326减去,而不是用承诺指针324的值更新读取指针326。此外,在方块466,所清空的指令数目加到空计数346中,而不是用充满计数之计数器306的值更新空计数之计数器346中。
[0078]请参阅图5,为根据本发明实施例图1中的微处理器100将一个停顿的线程上下文清空的操作,以改善执行带宽使用的流程图。此流程图的流程从方块502开始。
[0079]在方块502,图1中的执行单元114响应于一个如停顿指令的指令,侦测到一个停顿事件,如前面所描述过的与图1中的停顿事件信号126相关的那些停顿事件。执行单元114还确定此停顿指令与哪个线程上下文相关,即,该停顿线程上下文。在一个实施例中,每一指令随着其沿流水线向下前进,会搭配一个唯一的线程上下文标识符,以供执行单元114使用来辨识此停顿线程上下文。在一个实施例中,执行单元114并不会响应于此停顿事件126而停顿,而是根据方块512在侦测到此停顿事件126的同一个时钟周期清空此指令,因此减缓停顿此执行单元114的需要。在另一个实施例中,如果因为时间考虑的需求,执行单元114也可以响应于此停顿事件而实际上停顿一个时钟周期,直到此停顿指令可以根据以下的方块512被清空为止。此流程继续至方块504。
[0080]在方块504,执行单元114根据检验图1中的可执行TC信号132,决定此停顿线程上下文是否是唯一可执行的线程上下文。如果是的话,此流程继续至方块526;否则,此流程继续至方块506。
[0081]在方块506,执行单元114经由停顿事件信号126指出停顿事件,并也提供此停顿线程上下文的标识符。此流程继续至方块508。
[0082]在方块508,调度器108标记此停顿线程上下文是停顿的,停止对此线程上下文继续发出指令,同时储存关于此停顿事件原因的状态。在如图7的实施例中,可发出指令逻辑708将停顿指示器704设为真值以标记此线程上下文是停顿的,此会导致可发出指令逻辑708在可发出信号746上产生一个假值。此流程继续至方块512。
[0083]在方块512,执行单元114取消,即清空执行单元114内所有停顿线程上下文的指令,且在与此停顿线程上下文即清空的线程上下文相关的图1中的TC清空信号122上产生一个真值。可以理解的是,执行单元114仅会清空停顿指令及其后的指令,但是并不会清空在此停顿指令之前的指令;否则,停顿条件或许永远不会终止。在一个实施例中,执行单元114清空所有线程上下文的指令,而不只是停顿线程上下文。然而,对于仅是清空停顿线程上下文的实施例而言,具有减少流水线内潜在气泡的优点,这是因为其它线程上下文的指令仍可以留在执行单元114中执行,因此潜在地导致微处理器100会较清空全部线程上下文的实施例更具有效率。此流程继续至方块514。
[0084]在方块514,图1中的指令/滑动缓冲器106响应于此TC清空信号122,而卷回此清空指令,如同图3和图4所描述的实施例,或是图13和图14,或图15所描述的实施例。此流程继续至方块516。
[0085]在方块516,调度器108根据线程调度策略,继续发出没有被标记为停顿的线程上下文的指令。在如图7的实施例中,停顿指示器704指示一个指令是停顿的还是不停顿的。此外,执行单元114在清空方块512后,会继续执行位于执行单元114内的其它线程上下文的指令和随后派送的指令。此流程继续至判定方块518。
[0086]在判定方块518,调度器108判定此停顿事件是否终结。调度器108判定此停顿事件是否响应于执行单元114经由图1中的未停顿事件信号128发出一个未停顿事件,且进一步根据在方块508中保存的停顿事件原因状态而被终结。如果此停顿线程上下文的停顿事件被终结的话,此流程继续至方块522;否则,此流程继续至方块516。
[0087]在方块522,调度器108将此停顿线程上下文标记为未停顿,而开始重新发出这些不再停顿的线程上下文与其它未停顿线程上下文的指令。在图7的实施例中,可发出指令逻辑708将停顿指示器704设为假值,以标记此线程上下文是不停顿的。此流程于方块522终止。
[0088]在方块524,因为此停顿线程上下文是唯一可执行的线程上下文,执行单元114停顿指令执行以确保正确的程序执行顺序。此流程继续至判定方块526。
[0089]在判定方块526,调度器108判定此停顿事件是否被终止。如果是的话,此流程继续至方块534;否则,此流程继续至判定方块528。
[0091]在判定方块528,执行单元114根据检验图1中的可执行TC信号132,判定此停顿线程上下文是否是唯一可执行线程上下文。如果是的话,此流程回到方块526;否则,此流程继续至判定方块506。
[0092]在方块532,执行单元114开始继续执行这些不再停顿的指令与其它的指令。这种方法的好处是,当停顿事件结束后,此停顿指令及其后续的指令可以立即执行,而不必像根据方块512清空的话就必须再被重新发出。因此,如果此停顿线程上下文是唯一可执行的线程上下文的话就不必被清空,这样,微处理器100可以获得增加性能的潜在好处。此流程结束于方块532。
[0093]可以由图五5的叙述了解,侦测执行单元114中的停顿事件126,以及从执行单元114中清空指令以允许其它线程的指令被派送到执行单元114中并执行,可以使执行单元114避免因为执行流水线中的气泡而浪费时钟周期,而获得更有效率的好处。根据实际情况而清空真的会停顿的指令,微处理器100可以获得达到更高性能的潜在好处。
[0094]请参阅图6,为根据本发明一个实施例图1中微处理器100内的调度器108的一个方块图,此调度器108分为两部分。二分化调度器108包含派送调度器(DS)602部份和策略管理器(PM)604部份。派送调度器(DS)602部份包含于微处理器100的处理器内核606内;然而,策略管理器(PM)604部份包含于处理器内核606外。处理器内核606是微处理器100中不能被使用者定制化的部分;然而,策略管理器(PM)604部份可以被使用者定制化。在一个实施例中,处理器内核606是可合成内核,在此也可以称为软内核。使用自动化设计工具,通常被称为合成工具,可以很快速容易地将可合成内核的设计简化为可制造形式。
[0095]处理器内核606提供与策略管理器(PM)604相连的接口628,包含多个信号。在一个实施例中,派送调度器(DS)602的输入与输出会被寄存器记录,好处是非内核策略管理器(PM)604逻辑与处理器内核606相连的接口628具有减缓二分化调度器所带来的定时问题影响。此外,接口628十分容易让顾客理解,这也会降低了策略管理器(PM)604的调度策略设计的困难度。
[0096]在底下的表1,显示出根据本发明一个实施例中策略管理器接口628包含的许多不同信号。表1显示出信号名称、相对于策略管理器604的信号方向以及这些信号的简单描述。表1描述了一个实施例,其中微处理器100包括九个线程上下文,以储存最多达九个线程的相关状态。此外,此实施例中允许微处理器100配置为最多两个虚拟处理组件(VPE)。在一个实施例中,微处理器100可以大致上与MIPS的微处理器架构兼容,如MIPS32或MIPS64指令集架构(ISA),同时包括控制协处理器0,在表1中称为CPO,其包括线程控制寄存器,大致上与由MIPS特殊资源架构(PRA)和MIPS多线程应用指定延伸集(MT ASE)中所指定的控制协处理器(CP0)兼容。在表1中所描述的许多信号用来存取CP0寄存器。
Figure S06803639920070802D000231
Figure S06803639920070802D000241
Figure S06803639920070802D000251
Figure S06803639920070802D000271
表1
[0097]某些在表1所显示的策略管理器接口628的信号在此将会详细描述。策略管理器604经由PM_TC_priority信号652对派送调度器602指定各自线程上下文的优先级。在一个实施例中,PM_TC_priority信号652包含两个位,且派送调度器602允许策略管理器604对一个线程上下文指定四种不同的优先级之一。策略管理器604通过在各自PM_TC_block信号654上产生真值,命令派送调度器602停止发出一个线程上下文的指令。因此,策略管理器604可以经由PM_TC_priority信号652和PM_TC_block信号654来影响派送调度器602对不同的线程上下文如何发出指令,将会在以下的叙述作进一步的描述,特别是在以下的图7到图11中说明。
[0098]微处理器内核606提供PM_gclk信号658给策略管理器604,可以使能策略管理器604根据PM_gclk信号658,如以下图9所叙述的一般,定期调整PM_TC_priority信号652。派送调度器602经由各自PM_TC_state输入信号642传送每个线程上下文的状态。如表1中所示,线程上下文可以处于以下的八个状态之一。不活动:因为此线程上下文当前不与一个执行线程相关,所以派送调度器602不会发出该线程上下文的指令。活动:因为此线程上下文目前与一个执行线程相关,所以派送调度器602可以在没有其它阻止条件存在的情况下发出该线程上下文的指令来执行。礼让:因为此线程目前正在执行一个礼让(YIELD)指令,会导致此线程上下文在特定事件下被阻止,所以派送调度器602不能发出该线程上下文的指令来执行。终止:因为此线程上下文被他自己或其它线程上下文所终止,所以派送调度器602不会发出该线程上下文的指令来执行。暂停:因为此线程执行了DMT或DVPE指令,或是因为微处理器100或虚拟处理组件(VPE)目前正在服务于一个例外,所以派送调度器602不会发出该线程上下文的指令来执行。DMT指令暂停此虚拟处理组件(VPE)的多线程运作,而DVPE指令暂停整个微处理器100的多线程运作。等待ITC:因为此线程上下文正在等待根据此线程所执行的加载/储存指令、指示从/向线程间通讯(ITC)空间的一个位置加载/储存数据而被阻止,派送调度器602不会发出该线程上下文的指令来执行。因为WAIT而等待:因为此线程上下文正在执行等待(WAIT)指令,其会导致此线程上下文被阻止直到中断发生,所以派送调度器602不会发出该线程上下文的指令来执行。使用为SRS:因为此线程上下文寄存器组被用于影子寄存器组(SRS)操作,所以此线程上下文不能与一个执行线程相关,所以派送调度器602不会发出该线程上下文的指令。
[0099]派送调度器602经由各自PM_TC_inst_issued输入信号646通知策略管理器604,其以及对于一个线程上下文发出一个指令。执行单元114经由各自PM_TC_instr_committed输入信号644通知策略管理器604,它们以及承诺了一个线程上下文的一个指令。在一个实施例中,PM_TC_instr_committed输入信号644指示该指令已完成执行。在另一个实施例中,PM_TC_instr_committed输入信号644指示该指令保证不会被清空;即最终会执行,但或许尚未完成执行。此特征点就是,PM_TC_instr_committed输入信号644提供给策略管理器604这样的信息,该信息关于执行完毕的指令而不仅是已派送的指令(如PM_TC_inst_issued输入信号646),两者是有所不同的,这是因为某些指令会被不确定地发出但是永不会被完成。这或许是对策略管理器604的一个重要区别,这是因为某个应用中的某些线程或许需要一个特别的服务质量,就如同以下图9所叙述的一般。在一个实施例中,PM_TC_instr_committed输入信号644是TC_instr_committed信号124的寄存器版本。因此,处理器内核606经由PM_TC_inst_issued输入信号646、PM_TC_instr_committed输入信号644和PM_TC_state输入信号642提供不同线程上下文有关指令发出、执行的反馈,将会在以下的叙述作进一步的描述,特别是在以下的图7到图11中说明。
[0100]在一个实施例中,派送调度器602还提供给策略管理器604一个放松功能,其目的为允许微处理器100在应用线程上下文不需要整个微处理器带宽时,可以减少电能的使用,而不需要真的进入睡眠状态。此放松功能的操作就如同有一个额外的线程需要被调度一般。然而,当此放松线程上下文被选择发出时,派送调度器602并不是真的发出一个指令。策略管理器604维持一个RELAX_LEVEL计数器(每VPE),其与TC_LEVEL918计数器(将会在之后的图9中描述)的操作类似,除了它是使用RELEX_RATE来递增且在一个放松指令槽(slot)完成后来递减之外。在一个实施例中,微处理器100包括VPESchedule寄存器(每VPE),其与允许软件去指定RELEX_RATE的TCSchedule寄存器902的操作很类似。此放松功能经由表1中的PM_vpe_relax_enable信号来使能或禁止,同时此放松线程上下文优先级经由PM_vpe_relax_priority信号来指定。
[0101]在一个实施例中,派送调度器602还提供给策略管理器604例外功能,其目的为允许一个例外线程上下文有与其它正常线程上下文不同的自己独立的优先级。策略管理器604维持一个EXC_LEVEL计数器(每VPE),其与TC_LEVEL918计数器(将会在后面的图9中描述)的操作类似,除了它是使用EXC_RATE来递增且在一个例外指令槽完成后来递减之外。当此例外模式被使能且一个例外被VPE所接受,则此VPE的所有线程上下文都会被设定为该例外优先级。在一个实施例中,软件经由VPESchedule寄存器来指定EXC_RATE的设定。此例外功能经由表1中的PM_vpe_exc_enable信号来使能或禁止,同时此例外线程上下文的优先级经由PM_vpe_exc_priority信号来指定。
[0102]请参阅图7,为根据本发明一个实施例图6中的派送调度器602以及图2中的指令选择逻辑202的一个方块图。指令选择逻辑202包含由比较器714所控制的复用器724树。每一复用器724从两个不同的线程上下文接收图2中的指令206。每一复用器724还接收与图2中指令206相关的DS_TC_priority信号208。与每一个复用器724相关的比较器714也接收两个不同的线程上下文的一对DS_TC_priority信号208,以控制其相关的复用器724来选取具有最高DS_TC_priority208值的指令206及其相关的DS_TC_priority信号208。被选取的指令206及其相关的DS_TC_priority信号208会沿着该树向下传递直到最后一个复用器724,以选取图2中具有最高DS_TC_priority208值的选取指令204,提供给执行流水线。
[0103]图7显示了派送调度器602的逻辑,包括停顿指示器704,可发出指令逻辑708和轮循逻辑(round robin)712。在一个实施例中,在派送调度器602内对于每一个线程上下文复制停顿指示器704和可发出指令逻辑708,以对于每一个线程上下文产生DS_TC_priority信号208。相反的是,轮循逻辑712仅对于每一个可能的PM_TC_priority信号652被说明一次,并给每一PM_TC_priority信号652产生一个轮循指示器。举例而言,图7显示了一个实施例,其中,派送调度器602可以指定PM_TC_priority信号652的四种可能状态之一;因此,轮循逻辑712在派送调度器602中被说明四次,且产生四个分别的轮循指示器。
[0104]在一个实施例中,此轮循指示器包含微处理器100中每一线程上下文对应的一位。与各自的线程上下文相关的轮循指示位被提供为如图7中的轮循位748。当轮循位748为真值时,则在此与其它同时具有相同PM_TC_priority优先级的线程上下文的轮循机制中,该线程上下文被选择为将要发出的线程上下文。
[0105]可发出指令逻辑708从图1中的执行单元114接收未停顿事件信号128和停顿事件信号126,从图6中的策略管理器604接收PM_TC_block信号654,从图3中的指令/滑动缓冲器106接收空信号318,以及TC状态信号742。在一个实施例中,TC状态信号742有着与图6中的PM_TC状态信号642相似的信息。可发出指令逻辑708响应于一个停顿事件信号126识别出的一个线程上下文,会设置停顿指示器704,将此线程上下文标记为停顿。可发出指令逻辑708也会储存响应于停顿事件信号126的状态,记录导致停顿的原因。相反的,如果末停顿事件128与导致停顿的原因相关的话,则可发出指令逻辑708响应于未停顿事件信号128,而将此停顿指示器704清除。可发出指令逻辑708响应于其输入信号而产生可发出信号746。如果由线程上下文的指令/滑动缓冲器106中读指针326所指示的指令206是可发出的话,则可发出信号746为真值。在一个实施例中,如果TC状态信号742指示此线程上下文处于活动状态且并没有被其它条件(如:终止、等待、暂停或礼让)所阻止,此停顿指示器704是假,此PM_TC_block信号654和空信号318是假的话,则指令是可发出的。
[0106]可发出位746、PM_TC_priority652位和轮循位748组合起来以产生DS_TC_priority208。在图7的实施例中,可发出位746是最高位,轮循位748是最低位,而PM_TC_priority652位是两个中间位。可以观察到的是,因为可发出位746是此PM_TC_priority652的最高位,所以不可发出的指令将会较所有可发出的指令具有较低的优先级。相反地,轮循位748仅在超过一个线程上下文中具有可发出的指令且有着相同最高PM_TC_priority652优先级的情况下才会被使用来选择一个线程。
[0107]请参阅图8,为根据本发明图7实施例中的派送调度器602的操作流程图。此流程图的流程从方块802开始。
[0108]在方块802,派送调度器602对每一PM_TC_priority652的每一轮循指示器进行初始化。此流程继续至方块804。
[0109]在方块804,派送调度器602会判定,对每一线程上下文,此线程上下文是否有着可发出的指令206。即,可发出指令逻辑708会对每一线程上下文在可发出信号746上产生一值。在一个实施例中,可发出指令逻辑708仅会在TC状态信号742指示此线程上下文处于活动状态且并没有被其它条件(如:终止、等待、暂停或礼让)所阻止,此停顿指示器704是假,此PM_TC_block信号654和空信号318是假的情况下,对可发出信号746产生真值信号。此流程继续至判定方块806。
[0110]在判定方块806,派送调度器602通过检验每一线程上下文的可发出信号746,来判定是否在任何线程上下文中有可执行的指令206。如果没有的话,流程回到方块804直到至少一个线程上下文中有可执行的指令206;否则,此流程继续至方块808。
[0111]在方块808,派送调度器602会根据此线程上下文的可发出位746、PM_TC_priority652位和PM_TC_priority652中的轮循位748,来对每一线程上下文的指令206产生DS_TC_priority208。此流程继续至方块812。
[0112]在方块812,派送调度器602发出有着最高DS_TC_priority208优先级的指令206。换句话说,派送调度器602从有最高PM_TC_priority652优先级且有可发出指令的线程上下文发出指令。如果有多个线程上下文符合此条件的话,派送调度器602会从根据这些线程上下文的PM_TC_priority652中的轮循位748指示的线程上下文发出指令。此流程继续至方块814。
[0113]在方块814,轮循逻辑712根据哪一个线程上下文已被选择发出指令,来更新PM_TC_priority652中的轮循指示器。此流程继续回到方块804。
[0114]请参阅图9,为根据本发明一个实施例图6中的策略管理器604以及TCSchedule寄存器902的一个方块图。
[0115]微处理器100对于每一线程上下文包含一个TCSchedule寄存器902。TCSchedule寄存器902是软件可程序的,且为此软件提供一手段用以提供线程调度线索给策略管理器604。在一个实施例中,TCSchedule寄存器902被包含于如图6和表1中所描述的协处理器0(CPO)寄存器中,且特别是包含于策略管理器604中。TCSchedule寄存器902包括六个字段:TC_LEVEL_PARAM1908、TC_LEVEL_PARAM2906、TC_LEVEL_PARAM3904、TC_RATE912、OV914和PRIO916。在图9的实施例中,TC_LEVEL_PARAM1908、TC_LEVEL_PARAM2906、TC_LEVEL_PARAM3904和TC_RATE912的字段包含四个位,PRIO916字段包含两个位,而OV914字段是单一位。
[0116]图9中所示的策略管理器604包括控制逻辑924;比较器922,与控制逻辑924耦接并提供输出给控制逻辑924;TC_LEVEL寄存器918,与比较器922耦接并提供其输出作为比较器922的输入;以及三输入复用器926,与TC_LEVEL寄存器918耦接并提供其输出作为TC_LEVEL寄存器918的输入。复用器926接收TC_LEVEL寄存器918的输出作为第一输入以保留正确值。复用器926接收递减器932的输出作为第二输入,而此递减器932的输入是TC_LEVEL寄存器918的输出。复用器926接收递增器934的输出作为第三输入,而此递增器932的输入来自加法器936,此加法器936将TC_LEVEL寄存器918的输出加上乘法器938的输出,该乘法器938把TC_RATE912乘2。TC_RATE912指示此线程上下文的预计执行速度;即,每一单位时间内所欲完成的指令数目。在图9的实施例中,TC_RATE912指示此线程上下文在每16个时钟周期内应完成的指令数目。虽然在图9中仅显示一个逻辑,但是在策略管理器604中对每一个线程上下文复制此逻辑,以对于每一个线程上下文产生PM_PC_block654和PM_PC_priority652信号,以及接收PM_TC_state642、PM_TC_inst_committed644、PM_TC_inst_issued646和PM_gclk658信号。
[0117]策略管理器604使用改良的漏水桶算法以达成调度器108的高级线程调度策略。TC_LEVEL寄存器918模拟水桶中的水位。TC_LEVEL918实质上是度量线程上下文待执行的工作数量。在一个实施例中,TC_LEVEL寄存器918包含12位寄存器,初始化为零。控制逻辑924产生控制信号928,以控制复用器926选择哪一个输入。每32个时钟周期,复用器926选取递增器936的输出,以储存在TC_LEVEL寄存器918中,其会使TC_LEVEL寄存器918增加(TC_RATE*2+1)。在一个实施例中,根据TC_RATE912进行的TC_LEVEL寄存器918更新之间的时钟周期数也是可编程的。在其它的时钟周期,如果PM_TC_inst_committed信号644指示在此线程上下文中的一个指令被承诺执行,则复用器926选取递减器932的输出以将TC_LEVEL918递减。因此,软件可以通过调整此线程的TCSchedule寄存器902的TC_RATE912值,来影响此线程上下文水桶的虚拟水位。在图9的实施例中,TC_RATE912的值指示微处理器100在每16个时钟周期内针对该线程上下文执行的指令数目。
[0118]当此漏水桶内的水位增加时,水压也会增加,会导致水以较高的速率漏出。类似的,TC_LEVEL_PARAM字段904/906/908会被编成为单调地增加值,以定义虚拟水压范围。比较器922会比较TC_LEVEL918和TC_LEVEL_PARAMs904/906/908并提供其结果至控制逻辑924,以根据TC_LEVEL918所显示的虚拟水压范围来产生PM_PC_priority652信号。如图9中所示的漏水桶内,如果TC_LEVEL918的最高4位高于TC_LEVEL_PARAM3904的话,控制逻辑924产生一个值是3(最高优先级)的PM_PC_priority652信号;如果TC_LEVEL918的最高4位介于TC_LEVEL_PARAM3904和TC_LEVEL_PARAM2906的值之间的话,控制逻辑924产生一个值是2的PM_PC_priority652信号;如果TC_LEVEL918的最高4位介于TC_LEVEL_PARAM2906和TC_LEVEL_PARAM1908的值之间的话,控制逻辑924产生一个值是1的PM_PC_priority652信号;如果TC_LEVEL918的最高4位低于TC_LEVEL_PARAM1908的话,控制逻辑924产生一个值是0(最低优先级)的PM_PC_priority652信号。类似的,PM_PC_priority652值增加时也会增加派送调度器602对于此线程上下文发出指令的压力,而PM_PC_priority652值减小也会减少派送调度器602对于此线程上下文发出指令的压力。
[0119]如之前所描述的,在某些使用微处理器的应用中,不同的线程上下文或许需要不同的指令执行速率,这可以使用TC_RATE字段912来设定。此外,不同的线程上下文需要不同的分辨率,即,在不同时间段测量指令执行速度。也就是说,某些线程虽然并不需要高的执行速度,但是并不会在最短时间段内缺乏指令执行。即,此线程需要特殊的服务质量。可以由图9中以及上述说明观察到,TC_LEVEL_PARAMs904/906/908可以用来提供每一线程需要的分辨率。通过分配TC_LEVEL_PARAMs904/906/908彼此互相靠近,可以达到一个高分辨率;相对而言,通过分配TC_LEVEL_PARAMs
904/906/908彼此互相分离较远,可以达到一个低分辨率。因此,通过对每一线程上下文调整TC_LEVEL_PARAMs904/906/908以达到此指令执行速率的所需分辨率,软件可以经由策略管理器604达到所需的服务质量。
[0120]如果OV位914被设置,则控制逻辑924会忽略TC_LEVEL_PARAMs904/906/908、TC_LEVEL918和TC_RATE912的值,而是在PM_PC_priority652信号上产生等于PRIO字段916的值。这可使软件略过此漏水桶策略,且在需要时直接控制一个或多个线程上下文的优先级。
[0121]在一个实施例中,如果TC_LEVEL918饱和至最大值且持续预定时钟周期数,则微处理器100会发出中断信号以使能软件在更高级调整线程调度,特别是改变一个或多个TCSchedule寄存器902内的值。在一个实施例中,此中断可以由软件屏蔽。
[0122]在一个实施例中,微处理器100指令集包括礼让YIELD指令,线程上下文执行该指令来命令调度器108停止对此线程上下文发出指令,直到一个特别事件发生为止。在一个实施例中,当一个线程被礼让,策略管理器604会暂时禁止对此线程的TC_LEVEL918的更新,所以此线程的PM_PC_priority会被保留直到此线程被解除礼让为止。在另一个实施例中,策略管理器604会继续对此线程的TC_LEVEL918更新,应该会导致此线程的PM_PC_priority增加,所以当此线程被解除礼让时,其会暂时有一个高优先权以帮助此线程实质上启动。在一个实施例中,策略管理器604对一个礼让线程的行为是可由软件编程的。
[0123]必须了解的是,虽然在此实施例中,描述了特定数目的位被用来指定PM_TC_priority652、TC_LEVEL_PARAMs904/906/908、TC_RATE912、TC_LEVEL918等字段,但是调度器108并不局限在使用这些值的实施例中;而是,调度器108可以配置为使用其它不同数目的位、优先级、级、速率等,根据微处理器100特定作业的需求来调整。更进一步而言,虽然上述策略管理器604描述为使用一种改良式漏水桶线程调度策略,但是同样地可以了解的是策略管理器604也可以配置为使用其它的线程调度策略,而仍旧可以享受到二分化调度器108的优点。例如,在一个实施例中,策略管理器604使用简单的轮循线程调度策略,其中所有线程上下文的PM_TC_priority652输出都是相同的值。在另一个实施例中,策略管理器604使用时间分割的线程调度策略,其中PM_TC_priority652根据一个线程上下文的TCSchedule寄存器902中指定的多个连续时钟周期,在该多个连续时钟周期内对该线程上下文输出最高优先级的值,然后,再根据另一个线程上下文的TCSchedule寄存器902中指定的(可能不同的)多个连续时钟周期,在该多个连续时钟周期内对该另一线程上下文输出最高优先级的值,并以时间分割的方式如此对每一线程上下文运作一段时间。
[0124]在一个实施例中,微处理器100指令集包含FORK指令,用来分配一个可用线程上下文以及调度此新分配线程上下文内的一个新线程的执行。在一个实施例中,当一个线程上下文通过RORK指令得到一个新线程上下文时,母线程的TC_RATE912会均等地分配在它自己和该子线程上下文之间,即,此新的TC_RATE912会是旧的TC_RATE912除以2。这会具有防止一个线程上下文要求超过它原始分配到的处理带宽的优点。
[0125]如前所描述过的,分为两部分的调度器108可以使得位于处理器内核606内的派送调度器602相对简单,如此可以使得派送调度器602具有较小的面积以及耗能,同时可以将与应用复杂度相关的线程调度策略安置于处理器内核606外的策略管理器604中。这种安排的优点是,因为某些运用并不需要复杂的策略管理器604,如此就不会像在调度器108不是分为两部分的情况下那样,对所有的应用都额外增加面积及耗能需求。
[0126]请参阅图10,为根据本发明实施例图9的策略管理器604的操作流程图。虽然在图10的流程图中,仅显示单一线程上下文的操作,但图10的操作适用于策略管理器604内对于每一线程上下文的运作。此流程从方块1002开始。
[0127]在方块1002,策略管理器604将TC_level918初始化为零。此流程继续至方块1004。
[0128]在方块1004,策略管理器604等待PM_gclk658的一个时钟信号。此流程继续至方块1006。
[0129]在判定方块1006,策略管理器604判定从上次流程来到此判定方块1006后是否已经过32个PM_gclk658时钟信号。如果没有的话,流程前进到另一个判定方块1012;否则,此流程继续至方块1008。
[0130]在方块1008,将TC_level918的值增加TC_RATE值的两倍加一。此流程继续至判定方块1012。
[0131]在判定方块1012,策略管理器604判定PM_TC_instr_committed644是否为真。如果不是的话,流程前进到另一个判定方块1016;否则,此流程继续至方块1014。
[0132]在方块1014,将TC_level918的值递减一。此流程继续至判定方块1016。
[0133]在判定方块1016,策略管理器604判定OV位914是否被设置。如果没有的话,流程前进到另一个判定方块1022;否则,此流程继续至方块1018。
[0134]在方块1018,策略管理器604会对PM_TC_priority652产生一相当于PRIO916字段的值。此流程回到方块1004。
[0135]在判定方块1022,策略管理器604判定TC_level918是否大于TC_LEVEL_PARAM3904的值。如果没有的话,流程前进到另一个判定方块1026;否则,此流程继续至方块1024。
[0136]在方块1024,策略管理器604对PM_TC_priority652产生值3(相当于最高优先级)。此流程回到方块1004。
[0137]在判定方块1026,策略管理器604判定TC_level918是否大于TC_LEVEL_PARAM2906的值。如果没有的话,流程前进到另一个判定方块1032;否则,此流程继续至方块1028。
[0138]在方块1028,策略管理器604对PM_TC_priority652产生值2。此流程回到方块1004。
[0139]在判定方块1032,策略管理器604判定TC_level918是否大于TC_LEVEL_PARAM1908的值。如果没有的话,流程前进到方块1036;否则,此流程继续至方块1034。
[0140]在方块1034,策略管理器604对PM_TC_priority652产生值1。此流程回到方块1004。
[0141]在方块1036,策略管理器604对PM_TC_priority652产生值0(相当于最低优先级)。此流程回到方块1004。
[0142]请参阅图11,为根据本发明一替代实施例图6中的派送调度器(DS)602以及图2中的指令选取逻辑202的一个方块图。图11中的实施例与图7的实施例类似,然而,图11的实施例中的派送调度器(DS)602还包括指令预译码器1108和停顿可能性优先级产生器1104。指令预译码器1108对指令1114进行预译码,以产生关于此指令1114的寄存器使用信息1106。在一个实施例中,此寄存器使用信息1106指定寄存器堆112中的哪些寄存器被使用作为此指令的源寄存器,以及此源寄存器在执行流水线114中的哪一个阶段需要被使用。此外,寄存器使用信息1106也会指定寄存器堆112中的哪个寄存器被使用作为此指令的目的寄存器,以及在执行流水线114中的哪一个阶段需要将此指令的结果存入此目的寄存器中。
[0143]停顿可能性优先级产生器1104根据寄存器使用信息1106以及从微处理器100流水线所收到的处理器状态信息1112产生停顿可能性优先级1102。处理器状态信息1112可以包括,但不限定于:一个负载是否在数据高速缓存118中丢失;此丢失负载是否已被提取出来;目前正在执行流水线中执行的其它指令的寄存器使用信息(可包括由指令预译码器1108产生的寄存器使用信息1106),特别是关于目的寄存器;执行流水线中EHB指令的存在与否;算术逻辑单元(ALU)是否正在忙于执行另一ALU指令;执行流水线中介于正在被预译码的指令和其他指令之间的目前流水线阶段数目;等等。在图11的实施例中,此停顿可能性优先级1102包括两个位,其包含在介于可发出位746以及PM_TC_priority位652之间,以形成图2中的6位DS_TC_priority208,供图2中的指令选取逻辑202来选取欲选择的指令204。在一替代实施例中,停顿可能性优先级1102的两个位与PM_TC_priority652的两个位交错。在一个实施例中,这些位从最高到最低按照以下的方式交错:停顿可能性优先级1102的最高位、PM_TC_priority652的最高位、停顿可能性优先级1102的最低位、PM_TC_priority652的最低位。此交错的实施例可以保持执行流水线114中的整体吞吐量。
[0144]停顿可能性优先级1102根据其寄存器的使用来指示此指令可以被执行而不致于停顿的可能性程度。在一个实施例中,停顿可能性优先级1102包括两个位,以产生四个优先级,并且利用以下描述的方式由停顿可能性优先级产生器1104产生停顿可能性优先级1102。一个指令会被设定为最高停顿可能性优先级1102,如果其保证不会停顿的话。例如,此指令不具有寄存器依赖性;或是此指令与具有依赖性的另一指令之间有着足够的流水线阶段距离;或是此指令所需的数据已经准备好,如丢失负载数据已经返回或是前一指令的结果已经执行完毕,因此不再与此指令关联。一个指令通常会被设定为最低停顿可能性优先级1102,如果其保证会停顿的话。如,此指令跟随正在执行的EHB指令;或是此指令是从不可高速缓存区域而来的负载;此指令是从线程间通讯(ITC)空间中一位置的加载/或到该位置的存储;或是此指令由于依赖性,如寄存器依赖性,无法与它之前的另一指令背靠背地执行。可高速缓存负载指令通常会被设定为倒数第二低优先级。一个指令通常会被设定为次高优先级,如果其并不保证不会停顿,但是有极高的可能性不会停顿的话,如在一个实施例中,此指令依赖于乘法、除法或浮点指令的结果。
[0145]在一个实施例中,指令1114为此线程上下文在图2中指令/滑动缓冲器106的读取指针326处的指令206,即,此线程上下文中的指令206是下一个可被发出的指令。在另一个实施例中,考虑到改进定时,指令预译码器1108为指令1114产生寄存器使用信息1106,当储存此指令到图1的指令/滑动缓冲器106中时,将寄存器使用信息1106与此指令1114一同存入指令/滑动缓冲器106。当指令1114/206被从指令/滑动缓冲器106读取时,会在此时将寄存器使用信息1106提供给停顿可能性优先级产生器1104。即,在此实施例中,指令/滑动缓冲器106耦接于指令预译码器1108与停顿可能性优先级产生器1104之间。
[0146]请参阅图12,为根据本发明实施例图11的派送调度器602的操作流程图。图12的流程图类似于图8的流程图,相似的方块标记为相似的参考数字。然而,在图12的流程图中,方块808由方块1208所取代。此外,在图12的流程图中,另有一个额外的方块1205。此流程从方块804至方块1205。
[0147]在方块1205,对每一个线程上下文而言,停顿可能性优先级产生器1104根据图11中的处理器状态信息1112以及指令1114的寄存器使用信息1106对指令1114产生停顿可能性优先级1102。此流程继续至方块806。
[0148]在判定方块806,派送调度器602通过检验每一线程上下文的可发出信号746,来判定是否有任何线程上下文,其中有可执行的指令206。如果没有的话,流程回到方块804直到至少一个线程上下文中有可执行的指令206;否则,此流程继续至方块1208。
[0149]在方块1208,对每一线程上下文,派送调度器602根据此线程上下文的可发出位746、将要针对此线程上下文派送的下一指令206的停顿可能性优先级1102、此线程上下文的PM_TC_priority652和此线程上下文的PM_TC_priority652的轮循位,来产生此线程上下文的指令206的DS_TC_priority208。此流程继续至方块812。
[0150]请参阅图13,为根据本发明的一个替代实施例图1中微处理器100的共享动态可分配滑动缓冲器的一个方块图。微处理器100包含图1中的指令提取器104及调度器108。微处理器100也包含图2中的指令选取逻辑202,其响应于DS_TC_priority信号208而产生被选取指令204输出。微处理器100也包含多个线程上下文分别对应的多个指令缓冲器1306,其中保存图1中的指令提取器104所取出的指定。微处理器100也包含多个滑动缓冲器1312。在一个实施例中,指令缓冲器1306和滑动缓冲器1312各包含一个与图3中的指令/滑动缓冲器106相似的先进先出缓冲器(FIFO)。本发明的优点是,因为滑动缓冲器1312是由各个线程上下文分享和动态分配的,所以滑动缓冲器1312的数目可以小于线程上下文的数目。图13中显示三个滑动缓冲器1312,分别标示为滑动缓冲器A、滑动缓冲器B、和滑动缓冲器C。此外,每一个滑动缓冲器1312有一个相关的分配寄存器1314和锁住寄存器1316。分配寄存器1314指示相关的滑动缓冲器1312是否被一个线程上下文所分配使用,如果是的话,哪一个线程上下文被分配到此滑动缓冲器1312。类似的是,锁住寄存器1316指示相关的滑动缓冲器1312是否被锁住由一个线程上下文使用,如果是的话,哪一个线程上下文使用该锁住的滑动缓冲器1312。如何为线程上下文分配及锁住滑动缓冲器1312将在以下图14的叙述中详细解释。
[0151]微处理器100也包含多个与每一个滑动缓冲器1312相关的复用器1322。每一个复用器1322的输出耦接至与其相关的滑动缓冲器1312的输入。每一个复用器1322将各个指令缓冲器1306的输出作为其输入。微处理器100还包含多个与每一个指令缓冲器1306相关的复用器1324。每一个复用器1324向指令选择逻辑202输出图2中的其各自线程上下文的指令。每一个复用器1324的一个输入端接收其各自的指令缓冲器1306的输出。每一个复用器1324将各个滑动缓冲器1312的输出作为其余的输入。
[0152]不像图2中的指令/滑动缓冲器106,图13中的滑动缓冲器1312不同于指令缓冲器1306,且由多个线程上下文分享和视需要动态地分配。这潜在地提供了更有效率地指令缓冲方案,特别是,在相同空间及功率下提供更高的性能,或是相同的性能下需要较少的空间及功率。微处理器100还包括缓冲器控制逻辑1332以控制指令缓冲器1306、滑动缓冲器1312、复用器1322和1324、分配寄存器1314以及锁住寄存器1316的运作。指令缓冲器1306和滑动缓冲器1312的运作将在以下图14的叙述中详细解释。
[0153]请参阅图14,为根据本发明实施例图13的滑动缓冲器1312的操作流程图。每一个流程图显示图13中的指令缓冲器1306和滑动缓冲器1312响应于不同的一个事件或一组事件的运作。第一个流程图从方块1404开始。
[0154]在方块1404,图6中的派送调度器602从指令缓冲器1306发出一个指令。必需注意的是,指令提取器104持续地将指令写入与一个线程上下文相关的指令缓冲器1306,特别是,将在方块1404发出的指令写入相关的指令缓冲器1306。此流程继续至判定方块1406。
[0155]在判定方块1406,缓冲器控制逻辑1332通过读取图13中的分配寄存器1314,来判定一个滑动缓冲器1312是否已分配给此线程上下文。如果是的话,流程继续至方块1412;否则,此流程继续至方块1408以判定是否有滑动缓冲器1312可分配给此线程上下文。
[0156]在判定方块1408,缓冲器控制逻辑1332通过读取图13中的锁住寄存器1316,来判定每一滑动缓冲器1312是否皆已被锁住。如果不是的话,流程继续至方块1414;否则,此流程结束,因为没有滑动缓冲器1312可分配给此线程上下文,这隐含着如果此线程上下文在其后被执行流水线清空的话,此被清空的指令必须重新提取。
[0157]在方块1412,在方块1404中派送的指令此时被写入先前分配给此线程上下文的滑动缓冲器1312中,且将此指令从指令缓冲器1306中移除。流程结束于方块1412。
[0158]在方块1414,缓冲器控制逻辑1332分配一个滑动缓冲器1312给此线程上下文。在一个实施例中,缓冲器控制逻辑1332通过将此线程上下文标识符写入与所分配的滑动缓冲器1312相关的分配寄存器1314中,来分配此滑动缓冲器1312给此线程上下文。在一个实施例中,缓冲器控制逻辑1332分配最空的滑动缓冲器1312。在另一个实施例中,缓冲器控制逻辑1332会根据最近最少使用的原则来分配此滑动缓冲器1312。而在另一个实施例中,缓冲器控制逻辑1332根据最近最少未锁住的原则来分配此滑动缓冲器1312。而在又一个实施例中,缓冲器控制逻辑1332根据其线程上下文目前有最低优先级的原则来分配此滑动缓冲器1312。流程从方块1414前进至方块1412以将指令写入所分配的滑动缓冲器1312。
[0159]第二个流程图从方块1442开始。
[0160]在方块1442,图1中的执行单元114为此线程上下文发出一个指令停顿事件信号。此流程继续至方块1444。
[0161]在方块1444,图1中的执行单元114为此线程上下文发出一个TC_flush信号122。此流程继续至判定方块1446。
[0162]在判定方块1446,缓冲器控制逻辑1332通过读取图13中的分配寄存器1314,判定滑动缓冲器1312是否已分配给此线程上下文。如果不是的话,流程继续至方块1452;否则,此流程继续至方块1448。
[0163]在方块1448,缓冲器控制逻辑1332将为此线程上下文分配的滑动缓冲器1312锁住。在一个实施例中,缓冲器控制逻辑1332通过将此线程上下文标识符写入与此滑动缓冲器1312相关的锁住寄存器1316中,来锁住此线程上下文的滑动缓冲器1312。此流程结束于方块1448。
[0164]在方块1452,缓冲器控制逻辑1332将由执行单元114所清空的此线程上下文的指令缓冲器1306清空。此流程结束于方块1452。
[0165]第三个流程图从方块1482开始。
[0166]在方块1482,执行单元114为此线程上下文发出一个相关的末停顿事件信号128。此流程继续至方块1484。
[0167]在判定方块1484,缓冲器控制逻辑1332通过读取图13中的锁住寄存器1316,来判定此线程上下文的滑动缓冲器1312是否已被锁住。如果是的话,流程继续至方块1488;否则,此流程继续至方块1486。
[0168]在方块1486,调度器108从与此线程上下文相关的指令缓冲器1306发出该线程上下文的指令。必需注意的是,这些指令必须重新被提取进入指令缓冲器1306,因为没有此线程上下文的滑动缓冲器1312被锁住。此流程结束于方块1486。
[0169]在方块1488,调度器108从在第二流程图的方块1448中为此线程上下文锁住的滑动缓冲器1312发出此线程上下文的指令,直到此滑动缓冲器1312变空或此滑动缓冲器1312被清空为止,举例而言,该变空或清空响应于例外或中断或分支错误预测更正。必需注意的是,这些指令具有不需要重新被提取的优点。此流程继续至方块1492。
[0170]在方块1492,缓冲器控制逻辑1332将在第二流程图的方块1448中为此线程上下文锁住的滑动缓冲器1312解除锁定。此流程结束于方块1492。
[0171]请参阅图15,为根据本发明的一个替代实施例图1中微处理器100的单一指令/滑动缓冲器可以被所有的线程上下文共享的一个方块图。图15中的微处理器100包含图1中的指令提取器104及调度器108。微处理器100也包含单一指令/滑动缓冲器1506,指令提取器104将所有线程上下文的指令提取到该的指令/滑动缓冲器1506中。微处理器100也包含缓冲器控制逻辑1502,其从调度器108接收图2中的DS_TC_priority信号208。缓冲器控制逻辑1502控制指令/滑动缓冲器1506产生图2中的被选取指令204,以提供给执行单元114。
[0172]图15中的单一指令/滑动缓冲器1506是随机存取内存(RAM),用于存储来自所有线程上下文的指令。其结果是,缓冲器控制逻辑1502以类似于先前对于图3所描述的方式,保持针对所有线程上下文的单一写入指针(WP)以及充满计数器。特别是,写入指针(WP)指定随机存取内存1506的下一个写入位置的地址,无论该指令的线程上下文为何。类似地,此充满计数器在每一次一个指令写入随机存取内存1506时递增,而在每一个一个指令被承诺执行时递减,无论该指令的线程上下文为何。
[0173]相反地,缓冲器控制逻辑1502以类似于先前对于图3所描述的方式,对每个线程上下文保持一个分别的读取指针(RP)、承诺指针(CP)以及空计数器。特别是,读取指针(RP)指定针对各自的线程上下文而言随机存取内存1506的下一个读取位置的地址;承诺指针(CP)会指定针对各自的线程上下文而言随机存取内存中的下一个被承诺执行的指令地址;且空计数器在每一次针对各自的线程上下文而言一个指令写入随机存取内存1506时递增,而在每一次针对各自的线程上下文而言调度器108从随机存取内存1506读取一个指令时递减。
[0174]在一个实施例中,缓冲器控制逻辑1502对每一线程上下文保持一个链表,其按照指令被提取到随机存取内存1506中的次序,指定随机存取内存1506中此线程上下文的有效指令的位置。此链表会在每一次一个指令写入随机存取内存1506中时加以更新,且用来更新每一线程上下文的读取指针(RP)与承诺指针(CP)。
[0175]缓冲器控制逻辑1502在调度器108需要指令时,从此调度器108接收到DS_TC_priority信号208,作为响应,缓冲器控制逻辑1502选取一个线程上下文来派送指令,以及产生随机存取内存1506中合适的地址,以导致随机存取内存1506为由DS_TC_priority信号208指示的具有最高优先级的线程上下文输出指令204。
[0176]虽然本发明及其目的、特征、与优点皆已详细揭露,但本发明的范畴还包括其它尚未提及的实施例,例如,本发明的实施例揭露调度器108分为两部分,且参数化的漏水桶调度策略包含在微处理器内核606外的调度器108部分中,即,在微处理器中100的使用者可调整部份之外,然而,应该明了的是,参数化的漏水桶调度策略并不限于二分化的调度器,也可以适用于不是二分化的调度器,或是适用于以任何不同方式分割的调度器。此外,虽然二分化的调度器描述为策略管理器604使用漏水桶调度策略,但此二分化调度器108并不限于使用漏水桶调度策略,而是,该二分化调度器的策略管理器所使用的线程调度策略可以使用任何的线程调度算法。更进一步而言,虽然在一个实施例中,策略管理器604根据一个指令是否被承诺执行来更新线程上下文的优先级,但是在其它的实施例中,策略管理器604也可以根据从微处理器内核606所接收的其它信息来更新线程上下文的优先级,如根据一个指令是否被发出(诸如由PM_TC_inst_issued信号646来指示)的指示、一个指令是否被完成或从微处理器100中退出的指示、或是其它指令执行相关的指示。此外,虽然一种特别的计算被描述来使用TC_RATE912更新TC_LEVEL寄存器918,此TC_LEVEL寄存器918也可以用TC_RATE912按照其他方式来更新。
[0177]最后,以上所述利用各种实施例详细说明本发明,而非限制本发明的范围,而且熟知此类技艺人士皆能明了,适当的改变及调整,仍将不失本发明的要义所在,还不脱离本发明的精神和范围。
[0178]本发明除以硬件实施外(如,中央处理单元(CPU)中的或搭配使用的硬件、微处理器、微控制器、数字信号处理器、处理器内核、片上系统(SOC)、或其它可变成组件),还可以软件(如,各种形式的,如源程序、目标程序和机器语言形式的计算机可读代码、程序代码、指令与/或数据)实现,该软件设置在例如算机可用(如可读)介质中。这些软件可实现在此描述的装置与方法的功能、制造、模块化、仿真、描述且/或测试。例如,以上的功能可通过使用一般编程语言(如C、C++、JAVA等)、GDSII数据库、包括Vorilog HDL、VHDL等的硬件描述语言(HDL)、或是其它可用程序、数据库、与/或电路图(即原理图)输入工具达成。前述的软件可位于任何计算机可用(如可读)介质中,这些介质可包括半导体内存、磁盘、光盘(如CD-ROM、DVD-ROM等)等,且可以作为计算机数据信号包含在计算机可用(可读)传输介质(如载波或其它数字、光学、或模拟等介质)中。如此,软件可通过包括互联网和内联网的网络传输。
[0179]应该理解,这里描述的本发明的装置和方法可以包括在半导体知识产权内核中,如微处理器内核(如,以HDL实现),并可以在集成电路生产中转化为硬件。当然,本发明的装置和方法可以软件与硬件组合的方式实施。因此,本发明不应该限制于上述任何实施例中,而是应依照权利要求及等价原则来定义。

Claims (79)

1.一种二分化调度器,用于在配置为可同时执行多个线程的多线程处理器中派送指令,所述调度器包括:
第一调度器逻辑,配置为发出所述多个线程的指令到所述处理器的至少一个执行单元;
第二调度器逻辑,用于实施所述多个线程的调度策略,其中所述第二调度器逻辑包含多个可被使用者修改的寄存器;以及
接口,将所述第二调度器逻辑耦接至所述第一调度器逻辑和所述至少一个执行单元,所述接口包括:
第一信号线,供所述第一调度器逻辑用来从所述第二调度器逻辑接收所述多个线程的每一个的优先级,其中所述第一调度器逻辑根据所述优先级发出所述指令到所述至少一个执行单元;以及
第二信号线,供所述第二调度器逻辑用来接收所述多个线程的每一个的指令执行信息,其中所述第二调度器逻辑根据所述指令执行信息更新所述优先级。
2.如权利要求1所述的调度器,其中所述第一调度器逻辑在每一时钟周期根据所述优先级选择所述多个线程中的哪一个来发出所述指令到所述至少一个执行单元。
3.如权利要求2所述的调度器,其中所述第一调度器逻辑在每一时钟周期根据所述优先级选择所述多个线程中的一个来发出所述指令到所述至少一个执行单元。
4.如权利要求2所述的调度器,其中所述第一调度器逻辑在每一时钟周期根据所述优先级选择所述多个线程中的一个以上线程来发出所述指令到所述至少一个执行单元。
5.如权利要求1所述的调度器,其中所述接口还包括:
第三信号线,供所述第二调度器逻辑用来从所述第一调度器逻辑接收所述多个线程的每一个的状态信息,其中所述第二调度器逻辑根据所述状态信息更新所述优先级。
6.如权利要求5所述的调度器,其中所述状态信息包含关于所述第一调度器逻辑是否被阻止发出所述多个线程的每一个的指令的指示。
7.如权利要求1所述的调度器,其中所述多个线程的每一个的优先级包含多个预定优先级中的一个。
8.如权利要求1所述的调度器,其中所述指令执行信息包含由所述至少一个执行单元提供的、关于所述多个线程中哪一个的指令被承诺执行的指示。
9.如权利要求1所述的调度器,其中所述指令执行信息包含由所述至少一个执行单元提供的、关于所述多个线程中哪一个的指令被执行完毕的指示。
10.如权利要求1所述的调度器,其中所述第一调度器逻辑是不可被使用者修改的。
11.如权利要求1所述的调度器,其中所述第二调度器逻辑是可被使用者修改的。
12.如权利要求1所述的调度器,其中所述多个线程的每一个包括一个指令流。
13.如权利要求12所述的调度器,其中所述处理器还包括:
一组储存元件,与所述多个线程的每一个相关,用于储存所述指令流的执行状态。
14.如权利要求13所述的调度器,其中所述一组储存元件中的每一个包括:
程序计数器。
15.如权利要求14所述的调度器,其中所述一组储存元件中的每一个还包括:
通用寄存器组。
16.如权利要求1所述的调度器,其中所述处理器包括处理器内核,其中所述处理器内核包括所述第一调度器逻辑并且不包括所述第二调度器逻辑。
17.如权利要求16所述的调度器,其中所述处理器内核是可合成的。
18.如权利要求16所述的调度器,其中所述处理器内核是可为多个使用者重复使用的。
19.如权利要求16所述的调度器,其中所述第一调度器逻辑被配置为选取所述多个线程中的至少一个线程来发出指令,所述处理器已经为该至少一个线程提取出可发出的指令,并且该至少一个线程具有由所述优先级指定的最高优先级。
20.如权利要求19所述的调度器,其中如果所述处理器已经为一个以上的线程提取出可发出指令,并且每一该线程具有最高优先级,则所述第一调度器逻辑被配置为按照轮循方式选择所述多个线程中的所述一个以上的线程中的一个线程。
21.如权利要求19所述的调度器,还包括:
用于检查所述多个线程的所述已提取的可发出指令的寄存器依赖性的逻辑,其中如果所述多个线程中的多于一个线程具有所述最高优先级,则所述第一调度器逻辑被配置为根据所述寄存器依赖性选取所述多个线程中的所述多于一个线程中的一个线程。
22.如权利要求21所述的调度器,其中如果所述处理器已经为一个以上的线程提取出可发出指令,并且每一该线程具有最高优先级和相同的所述寄存器依赖性,则所述第一调度器逻辑被配置为按照轮循方式选取所述多个线程中的所述多于一个线程中的一个线程。
23.如权利要求1所述的调度器,其中所述接口还包括:
第三信号线,供所述第二调度器逻辑用来针对所述多个线程的每一个向所述第一调度器逻辑通知是否阻止发出该线程的指令。
24.如权利要求1所述的调度器,其中所述接口还包括:
时钟信号线,其从所述第一调度器逻辑至所述第二调度器逻辑。
25.一种多线程处理器,包括:
线程调度策略逻辑,配置为实施一种策略,该策略用于调度由所述处理器同时执行的多个线程的指令派送,其中所述线程调度策略逻辑包含多个可被使用者修改的寄存器;
处理器内核,耦接至所述线程调度策略逻辑,包括:
至少一个执行流水线,用于执行指令;以及
指令派送器,耦接来根据从所述线程调度策略逻辑所接收的所述策略,将所述多个线程的指令派送到所述执行流水线;
接口,用于耦接所述线程调度策略逻辑和所述处理器内核,包括:
优先级信号线,用于所述线程调度策略逻辑向所述指令派送器传送所述多个线程的每一个的派送优先级,以实施所述策略;以及
执行信号线,用于所述至少一个执行流水线向所述线程调度策略逻辑传送针对所述多个线程中每一个的指示信息,以指示是否所述至少一个执行流水线已执行该线程的指令。
26.如权利要求25所述的处理器,其中所述线程调度策略逻辑物理上位于所述处理器内核外部。
27.如权利要求25所述的处理器,其中所述线程调度策略逻辑是可由使用者修改的,而所述处理器内核是不可由使用者修改的。
28.如权利要求25所述的处理器,其中所述指令派送器被配置为选取所述多个线程中的至少一个线程来发出指令,所述处理器为该至少一个线程已经提取了可发出的指令,且该至少一个线程具有由所述优先级指定的最高优先级。
29.如权利要求28所述的处理器,如果所述处理器已经为一个以上的线程提取出可发出指令,并且每一该线程具有最高优先级,则所述指令派送器被配置为按照轮循方式选择所述多个线程中的所述一个以上的线程中的一个线程。
30.如权利要求28所述的处理器,还包括:
用于检查所述多个线程的所述已提取的可发出指令的寄存器依赖性的逻辑,其中如果所述多个线程中的多于一个线程具有所述最高优先级,则所述指令派送器被配置为根据所述寄存器依赖性选取所述多个线程中的所述多于一个线程中的一个线程。
31.如权利要求30所述的处理器,其中如果所述处理器已经为一个以上的线程提取出可发出指令,并且每一该线程具有最高优先级和相同的所述寄存器依赖性,则所述指令派送器被配置为按照轮循方式选取所述多个线程中的所述多于一个线程中的一个线程。
32.一种线程调度策略管理器,用于在可同时执行多个线程的多线程处理器中执行线程调度策略,所述策略管理器包括:
输入端,用于在每一处理器时钟周期,接收关于所述多个线程的每一个的指令是否被执行的指示;
输出端,用于在每一处理器时钟周期,传送所述多个线程的每一个的指令派送优先级;
耦接至所述输入端的逻辑,用于根据所述输入端的输入产生所述输出端的输出,以实施所述线程调度策略,其中所述线程调度策略管理器包含多个可被使用者修改的寄存器。
33.如权利要求32所述的策略管理器,其中关于指令是否被执行的所述指示指出所述指令是否被派送以用于执行。
34.如权利要求32所述的策略管理器,其中关于指令是否被执行的所述指示指出所述指令是否被承诺执行。
35.如权利要求32所述的策略管理器,其中关于指令是否被执行的所述指示指出所述指令是否被执行完毕。
36.如权利要求32所述的策略管理器,其中所述多个线程中每一个的优先级包括多个预定优先级中的一个。
37.如权利要求32所述的策略管理器,还包括:
第二输出端,用于在每一处理器时钟周期传送关于针对所述多个线程中的每一个是否阻止发出指令的指示。
38.如权利要求32所述的策略管理器,还包括:
第二输入端,用于在每一处理器时钟周期接收所述多个线程中每一个的状态,所述状态指示所述线程是否目前被阻止从其发出指令;
其中所述逻辑进一步被配置为根据所述输入端和第二输入端的输入产生所述输出端的输出,以实施所述线程调度策略。
39.如权利要求32所述的策略管理器,其中所述多个线程中每一个的优先级包括多个预定优先级中的一个。
40.一种多线程处理器内核,被配置为可同时执行多个线程,所述多个线程中的每一个包括一个指令流,所述处理器内核包括:
接口,用于将所述处理器内核耦接到所述处理器内核外部的线程调度策略逻辑,所述接口包括:
第一信号线,供所述线程调度策略逻辑用来向所述处理器内核传送所述多个线程的每一个的优先级,其中所述线程调度策略逻辑包含多个可被使用者修改的寄存器;以及
第二信号线,供所述线程调度策略逻辑用来从所述处理器内核接收所述多个线程中每一个的关于指示这些线程的指令已经执行的信息,以供所述线程调度策略逻辑用来更新所述优先级;
调度器,其接收所述第一信号线,并根据所述第一信号线所提供的所述优先级,从所述多个线程中的至少一个线程选取至少一个指令,以发出用来执行。
41.如权利要求40所述的处理器内核,其中所述调度器被配置为在处理器内核的每一时钟周期选取所述至少一个指令。
42.如权利要求40所述的处理器内核,其中所述信息包含关于所述处理器内核已承诺执行所述多个线程中的一个特定线程的指令的指示。
43.如权利要求42所述的处理器内核,其中如果所述指令保证不会被从所述处理器清空的话,则所述处理器内核已承诺执行所述指令。
44.如权利要求42所述的处理器内核,其中如果所述指令保证会被所述处理器执行完毕的话,则所述处理器内核已承诺执行所述指令。
45.如权利要求40所述的处理器内核,其中所述信息指示所述处理器内核已执行完毕所述多个线程中的一个特定线程的指令。
46.如权利要求40所述的处理器内核,其中所述接口还包括:
第三信号线,供所述线程调度策略逻辑用来从所述处理器内核接收状态信息,该状态信息指定所述多个线程中每一个的状态,以供所述线程调度策略逻辑用来更新所述优先级。
47.如权利要求46所述的处理器内核,其中所述状态信息包含关于所述多个线程中的每一个是否被阻止而使所述调度器不能从该线程发出指令供执行的指示。
48.如权利要求40所述的处理器内核,其中所述接口还包括:
第三信号线,供所述线程调度策略逻辑用来针对所述多个线程中的每一个向所述调度器通知是否阻止发出该线程的指令。
49.如权利要求40所述的处理器内核,其中所述调度器被配置为从所述多个线程中的所述至少一个线程选取所述至少一个指令,以尽量保持所述处理器内核的执行流水线充满指令,从而使所述执行流水线效率高。
50.如权利要求40所述的处理器内核,其中所述调度器被配置为选取所述多个线程中的所述至少一个线程,所述处理器已经为该至少一个线程提取了可发出的指令,并且该至少一个线程具有由所述优先级指定的最高优先级。
51.如权利要求50所述的处理器内核,其中如果所述多个线程中的多于一个线程具有一已提取的可发出指令和所述最高优先级,则所述调度器被配置为按照轮循方式选择所述多个线程中的所述多于一个线程中的一个线程。
52.如权利要求50所述的处理器内核,还包括:
用于检查所述多个线程的所述已提取的可发出指令的寄存器依赖性的逻辑,其中如果所述多个线程中的多于一个线程具有所述最高优先级,则所述调度器被配置为根据所述寄存器依赖性选取所述多个线程中的所述多于一个线程中的一个线程。
53.如权利要求52所述的处理器内核,其中如果所述多个线程中的多于一个线程具有一已提取的可发出指令、所述最高优先级和相同的所述寄存器依赖性,则所述调度器被配置为按照轮循方式选取所述多个线程中的所述多于一个线程中的一个线程。
54.如权利要求40所述的处理器内核,其中所述多个线程中每一个的优先级包括多个预定优先级中的一个。
55.如权利要求40所述的处理器内核,其中所述处理器内核包括可重复使用的不可为使用者修改的内核。
56.如权利要求40所述的处理器内核,其中所述处理器内核是可合成的。
57.如权利要求40所述的处理器内核,其中所述接口还包括:
时钟信号线,其从所述调度器至所述线程调度策略逻辑。
58.一种在多线程处理器中调度多个同时执行的线程的方法,所述方法包括:
在第一时钟周期内,执行逻辑向线程调度策略逻辑传送所述执行逻辑是否已执行多个线程每一个的一指令的指示信号,其中所述线程调度策略逻辑包含多个可被使用者修改的寄存器;
在第二时钟周期内,所述线程调度策略逻辑向指令派送逻辑传送所述多个线程中每一个的线程调度优先级,响应所述执行逻辑向所述线程调度策略逻辑传送的所述指示信号;以及
在第三时钟周期内,响应于所述传送的优先级,所述指令派送逻辑从所述多个线程派送至少一个指令以供执行;
其中所述处理器包括处理器内核,所述处理器内核包括所述指令派送逻辑而不包括所述线程调度策略逻辑。
59.如权利要求58所述的方法,其中所述指示指出所述执行逻辑是否已承诺执行所述指令。
60.如权利要求58所述的方法,其中所述指示指出所述指令是否已被派送至所述执行逻辑以供执行。
61.如权利要求58所述的方法,其中所述指示指出所述指令是否已被执行完毕。
62.如权利要求58所述的方法,还包括:
在第四时钟周期内,响应于所述执行逻辑向所述线程调度策略逻辑第二次传送所述指示,所述线程调度策略逻辑向所述指令派送逻辑传送所述多个线程中每一个的第二线程调度优先级。
63.如权利要求58所述的方法,还包括:
在所述第一时钟周期之前,所述指令派送逻辑向所述线程调度策略逻辑传送所述多个线程中每一个的状态;
在所述第一时钟周期内,响应于所述指令派送逻辑向所述线程调度策略逻辑传送所述多个线程中每一个的状态,所述线程调度策略逻辑向所述指令派送逻辑传送所述多个线程中每一个的线程调度优先级。
64.如权利要求58所述的方法,还包括:
所述线程调度策略逻辑向所述指令派送逻辑传送针对所述多个线程中每一个的关于是否阻止派送该线程的指令的指示;
对于所述多个线程中由所述线程调度策略逻辑指示阻止派送指令的每一个线程,停止由所述指令派送逻辑从该线程派送指令。
65.如权利要求58所述的方法,其中所述线程调度策略逻辑是可由使用者修改的,其中所述指令派送逻辑是可由多个使用者重复使用的。
66.如权利要求58所述的方法,其中所述线程调度策略逻辑在所述处理器的内核之外,且其中所述指令派送逻辑在所述内核之内。
67.处理器内核与线程调度策略逻辑之间的接口,使所述策略逻辑能够实施一种策略,该策略用于调度所述处理器内核的指令派送器以同时派送多个线程,所述接口包括:
优先级信号线,供所述线程调度策略逻辑用来向所述处理器内核的所述指令派送器传送所述多个线程的每一个的派送优先级,其中所述线程调度策略逻辑包含多个可被使用者修改的寄存器;以及
反馈信号线,供所述处理器内核的执行流水线用来向所述线程调度策略逻辑传送针对所述多个线程中每一个的关于是否所述执行流水线已执行该线程的指令的指示。
68.如权利要求67所述的接口,其中所述反馈信号线传送的指示指出所述指令派送器是否已派送所述线程的指令,而不是指出所述执行流水线是否已执行所述线程的指令。
69.如权利要求67所述的接口,还包括:
时钟信号线,供所述处理器内核用来向所述线程调度策略逻辑传送时钟信号。
70.如权利要求67所述的接口,还包括:
状态信号线,供所述处理器内核用来向所述线程调度策略逻辑传送所述多个线程中每一个的状态。
71.如权利要求70所述的接口,其中所述状态信号线指出所述线程目前是否被阻止派送指令。
72.如权利要求67所述的接口,还包括:
阻止信号线,供所述线程调度策略逻辑用来向所述处理器内核传送要求停止派送所述多个线程中每一个的指令的命令。
73.如权利要求67所述的接口,其中所述处理器内核包括多个虚拟处理组件,所述接口还包括:
状态信号线,供所述处理器内核用来向所述线程调度策略逻辑传送所述多个虚拟处理组件中每一个的状态。
74.如权利要求67所述的接口,还包括:
FORK信号线,供所述处理器内核用来向所述线程调度策略逻辑通知所述处理器内核创建了一个新线程。
75.如权利要求74所述的接口,其中所述反馈信号线指出所述多个线程中的哪一个创建了所述新线程。
76.如权利要求67所述的接口,还包括:
控制信号线,供所述处理器内核用来读和写所述线程调度策略逻辑的控制/状态寄存器。
77.如权利要求76所述的接口,其中所述控制/状态寄存器包括由MIPS特殊资源架构(PRA)和MIPS多线程应用指定延伸集(MT ASE)所定义的协处理器0寄存器。
78.如权利要求67所述的接口,其中所述优先级信号线传送例外处理线程的派送优先级。
79.如权利要求67所述的接口,其中所述优先级信号线传送放松线程的派送优先级,其中所述放松线程是虚拟线程,以使所述线程调度策略逻辑能够通知所述处理器内核,通过不使用所述执行流水线的整个执行带宽来节省功耗。
CN2006800036399A 2005-02-04 2006-01-18 多线程微处理器中的二分化线程调度器 Expired - Fee Related CN101133391B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/051,997 2005-02-04
US11/051,997 US7613904B2 (en) 2005-02-04 2005-02-04 Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
PCT/US2006/001557 WO2006083541A2 (en) 2005-02-04 2006-01-18 Bifurcated thread scheduler in a multithreading microprocessor

Publications (2)

Publication Number Publication Date
CN101133391A CN101133391A (zh) 2008-02-27
CN101133391B true CN101133391B (zh) 2013-09-18

Family

ID=36570301

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800036399A Expired - Fee Related CN101133391B (zh) 2005-02-04 2006-01-18 多线程微处理器中的二分化线程调度器

Country Status (7)

Country Link
US (1) US7613904B2 (zh)
EP (1) EP1856603B1 (zh)
JP (1) JP2008530655A (zh)
KR (1) KR101273036B1 (zh)
CN (1) CN101133391B (zh)
TW (1) TWI316203B (zh)
WO (1) WO2006083541A2 (zh)

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
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
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
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
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
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a 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
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
US7627770B2 (en) * 2005-04-14 2009-12-01 Mips Technologies, Inc. Apparatus and method for automatic low power mode invocation in a multi-threaded processor
US7600135B2 (en) * 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
JP4667206B2 (ja) * 2005-10-31 2011-04-06 富士通セミコンダクター株式会社 マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor
US8149709B2 (en) * 2006-06-30 2012-04-03 Oracle America, Inc. Serialization queue framework for transmitting packets
US7594077B2 (en) * 2006-09-08 2009-09-22 Intel Corporation System, method and apparatus to accelerate raid operations
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
GB2443507A (en) * 2006-10-24 2008-05-07 Advanced Risc Mach Ltd Debugging parallel programs
US7975272B2 (en) 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
GB2449106B (en) * 2007-05-10 2011-07-27 Advanced Risc Mach Ltd Issue policy control within a multi-threaded in-order superscalar processor
WO2008155840A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 命令制御装置及び命令制御方法
US8650570B2 (en) * 2008-06-02 2014-02-11 Microsoft Corporation Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources
US8933953B2 (en) * 2008-06-30 2015-01-13 Intel Corporation Managing active thread dependencies in graphics processing
US8434087B2 (en) * 2008-08-29 2013-04-30 International Business Machines Corporation Distributed acceleration devices management for streams processing
JP5173713B2 (ja) 2008-09-30 2013-04-03 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
US8788793B2 (en) 2009-05-18 2014-07-22 Panasonic Corporation Instruction issue to plural computing units from plural stream buffers based on priority in instruction order table
CN101763251B (zh) * 2010-01-05 2014-04-16 浙江大学 含有译码缓冲装置的多线程的微处理器
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8893092B1 (en) * 2010-03-12 2014-11-18 F5 Networks, Inc. Using hints to direct the exploration of interleavings in a multithreaded program
CN102073461B (zh) * 2010-12-07 2012-07-04 成都市华为赛门铁克科技有限公司 输入输出请求调度方法、相关装置和存储阵列
US9875105B2 (en) 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
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
US9207944B1 (en) 2013-03-15 2015-12-08 Google Inc. Doubling thread resources in a processor
KR102102166B1 (ko) * 2013-04-22 2020-04-21 삼성전자 주식회사 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
CN103605572A (zh) * 2013-12-05 2014-02-26 用友软件股份有限公司 一种多线程计算装置
KR101895296B1 (ko) * 2014-02-12 2018-09-05 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
KR101895295B1 (ko) * 2014-02-12 2018-09-05 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
JP5770334B2 (ja) * 2014-04-24 2015-08-26 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US10459760B2 (en) * 2016-07-08 2019-10-29 Sap Se Optimizing job execution in parallel processing with improved job scheduling using job currency hints
US10558464B2 (en) * 2017-02-09 2020-02-11 International Business Machines Corporation Infinite processor thread balancing
GB2563587B (en) 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
CN108228242B (zh) * 2018-02-06 2020-02-07 江苏华存电子科技有限公司 一种可配置且具弹性的指令调度器
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
CN111399912B (zh) * 2020-03-26 2022-11-22 超睿科技(长沙)有限公司 一种面向多周期指令的指令调度方法、系统及介质
CN111478838B (zh) * 2020-04-08 2021-12-21 浙江中控研究院有限公司 一种高效高带宽的通信方法及系统
US20230066662A1 (en) * 2021-08-31 2023-03-02 Ceremorphic, Inc. Instruction Cache for Hardware Multi-Thread Microprocessor
US11614915B1 (en) 2021-12-17 2023-03-28 DSP Concepts, Inc. Audio multithreading interface

Family Cites Families (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4126895A (en) * 1975-12-29 1978-11-21 International Standard Electric Corporation Data processing system with monitoring and regulation of processor free time
US4924380A (en) * 1988-06-20 1990-05-08 Modular Computer Systems, Inc. (Florida Corporation) Dual rotating priority arbitration method for a multiprocessor memory bus
US5095460A (en) * 1989-04-25 1992-03-10 Digital Equipment Corporation Rotating priority encoder operating by selectively masking input signals to a fixed priority encoder
US5276887A (en) * 1991-06-06 1994-01-04 Commodore Electronics Limited Bus arbitration system for granting bus access to devices following two-wire bus arbitration protocol and devices following three-wire bus arbitration protocol
US5440752A (en) * 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5734877A (en) * 1992-09-09 1998-03-31 Silicon Graphics, Inc. Processor chip having on-chip circuitry for generating a programmable external clock signal and for controlling data patterns
US5309382A (en) * 1992-10-01 1994-05-03 Silicon Graphics, Inc. Binary shifter
US5357512A (en) * 1992-12-30 1994-10-18 Intel Corporation Conditional carry scheduler for round robin scheduling
US5528513A (en) * 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
US5745778A (en) * 1994-01-26 1998-04-28 Data General Corporation Apparatus and method for improved CPU affinity in a multiprocessor system
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5793993A (en) * 1995-01-26 1998-08-11 General Magic, Inc. Method for transmitting bus commands and data over two wires of a serial bus
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US5938742A (en) * 1995-08-18 1999-08-17 General Magic, Inc. Method for configuring an intelligent low power serial bus
US5860000A (en) * 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
KR100500002B1 (ko) * 1996-08-27 2005-09-08 마츠시타 덴끼 산교 가부시키가이샤 복수의명령흐름을독립적으로처리하고,명령흐름단위로처리성능을유연하게제어하는멀티스레드프로세서
JP3435293B2 (ja) * 1996-09-10 2003-08-11 株式会社東芝 パケットスケジューリング装置及びパケット転送方法
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US5898694A (en) * 1996-12-30 1999-04-27 Cabletron Systems, Inc. Method of round robin bus arbitration
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5832278A (en) * 1997-02-26 1998-11-03 Advanced Micro Devices, Inc. Cascaded round robin request selection method and apparatus
US6094435A (en) * 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW 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
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6549930B1 (en) * 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6163827A (en) * 1997-12-16 2000-12-19 Network Equipment Technologies, Inc. Method and apparatus for round-robin flash channel arbitration
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6032218A (en) * 1998-05-28 2000-02-29 3Com Corporation Configurable weighted round robin arbiter
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US6237081B1 (en) * 1998-12-16 2001-05-22 International Business Machines Corporation Queuing method and apparatus for facilitating the rejection of sequential instructions in a processor
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6516369B1 (en) * 1998-12-29 2003-02-04 International Business Machines Corporation Fair and high speed arbitration system based on rotative and weighted priority monitoring
US6470016B1 (en) * 1999-02-09 2002-10-22 Nortel Networks Limited Servicing output queues dynamically according to bandwidth allocation in a frame environment
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6563818B1 (en) * 1999-05-20 2003-05-13 Advanced Micro Devices, Inc. Weighted round robin cell architecture
US6556571B1 (en) * 1999-05-25 2003-04-29 Nec Usa, Inc. Fast round robin priority port scheduler for high capacity ATM switches
US6754736B1 (en) * 1999-06-23 2004-06-22 Fujitsu Limited Information processing apparatus, data inputting/outputting method, and program storage medium therefor
US6542921B1 (en) * 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6434155B1 (en) * 1999-12-22 2002-08-13 Alcatel Usa Sourcing, L.P. Weighted round robin engine used in scheduling the distribution of ATM cells
US6609190B1 (en) * 2000-01-06 2003-08-19 International Business Machines Corporation Microprocessor with primary and secondary issue queue
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
US7051189B2 (en) * 2000-03-15 2006-05-23 Arc International Method and apparatus for processor code optimization using code compression
US7007153B1 (en) * 2000-03-30 2006-02-28 Agere Systems Inc. Method and apparatus for allocating functional units in a multithreaded VLIW processor
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
EP1164493B1 (en) * 2000-06-16 2005-11-30 STMicroelectronics S.r.l. Variable priority arbitration method, for instance for interconnect buses, and respective system
US6665760B1 (en) * 2000-09-29 2003-12-16 Rockwell Automation Technologies, Inc. Group shifting and level shifting rotational arbiter system
US6647449B1 (en) * 2000-10-05 2003-11-11 Hewlett-Packard Development Company, L.P. System, method and circuit for performing round robin arbitration
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US6981129B1 (en) 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7139898B1 (en) 2000-11-03 2006-11-21 Mips Technologies, Inc. Fetch and dispatch disassociation apparatus for multistreaming processors
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
US6810426B2 (en) * 2001-01-30 2004-10-26 Nomadix, Inc. Methods and systems providing fair queuing and priority scheduling to enhance quality of service in a network
US6918116B2 (en) * 2001-05-15 2005-07-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit
US6622253B2 (en) 2001-08-02 2003-09-16 Scientific-Atlanta, Inc. Controlling processor clock rate based on thread priority
US6868529B1 (en) * 2001-08-31 2005-03-15 Turin Networks Method and apparatus for efficient implementation of round robin control unit
JP3577052B2 (ja) * 2002-03-19 2004-10-13 株式会社東芝 命令発行装置及び命令発行方法
EP1351117A1 (en) 2002-04-03 2003-10-08 Hewlett-Packard Company Data processing system and method
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US20040128448A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
US20040139441A1 (en) * 2003-01-09 2004-07-15 Kabushiki Kaisha Toshiba Processor, arithmetic operation processing method, and priority determination method
KR100498482B1 (ko) 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7213135B2 (en) * 2003-04-24 2007-05-01 International Business Machines Corporation Method using a dispatch flush in a simultaneous multithread processor to resolve exception conditions
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
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
US7120714B2 (en) * 2003-05-27 2006-10-10 Intel Corporation High-speed starvation-free arbiter system, rotating-priority arbiter, and two stage arbitration method
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7441101B1 (en) * 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US6987517B1 (en) * 2004-01-06 2006-01-17 Nvidia Corporation Programmable graphics processor for generalized texturing
US7185178B1 (en) * 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements
US7890735B2 (en) 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US20060168254A1 (en) * 2004-11-01 2006-07-27 Norton Scott J Automatic policy selection
JP4606142B2 (ja) * 2004-12-01 2011-01-05 株式会社ソニー・コンピュータエンタテインメント スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
US20060168393A1 (en) * 2005-01-27 2006-07-27 Christensen Bjorn P Apparatus and method for dependency tracking and register file bypass controls using a scannable register file
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a 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
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
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
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
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
US7961745B2 (en) 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector 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
US7773621B2 (en) 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch

Also Published As

Publication number Publication date
US20060179279A1 (en) 2006-08-10
TWI316203B (en) 2009-10-21
WO2006083541A3 (en) 2007-04-19
WO2006083541A2 (en) 2006-08-10
EP1856603B1 (en) 2018-01-10
CN101133391A (zh) 2008-02-27
EP1856603A2 (en) 2007-11-21
KR101273036B1 (ko) 2013-06-10
KR20070100797A (ko) 2007-10-11
TW200636574A (en) 2006-10-16
US7613904B2 (en) 2009-11-03
JP2008530655A (ja) 2008-08-07

Similar Documents

Publication Publication Date Title
CN101133391B (zh) 多线程微处理器中的二分化线程调度器
CN100549943C (zh) 具有用于增进流水线使用效率的优化线程调度器的多线程微处理器
CN101542412B (zh) 用于多线程处理器中自动低功率模式调用的装置和方法
CN101238425B (zh) 使用低功率虚拟线程的软件指定的电源性能管理装置和方法
CA2299348C (en) Method and apparatus for selecting thread switch events in a multithreaded processor
CN105279016B (zh) 线程暂停处理器、方法、系统及指令
US10078515B2 (en) Tracking operand liveness information in a computer system and performing function based on the liveness information
CN107851020A (zh) 用于指令存储器效率的设备和处理架构
US20060179274A1 (en) Instruction/skid buffers in a multithreading microprocessor
CN101501636A (zh) 用于基于动态可改变延迟来执行处理器指令的方法和设备
CN101542430A (zh) 用于处理器的加载/存储单元及其应用
Abdolrashidi et al. Wireframe: Supporting data-dependent parallelism through dependency graph execution in gpus
KR20010095074A (ko) 다중 스레드 초장 명령어 프로세서, 명령어 처리 방법 및그 제품, 및 명령어 컴파일링 제품 및 컴파일러
IL135459A (en) Thread switch control in a multi threaded processor system
EP2441000B1 (en) Utilizing a bidding model in a microparallel processor architecture to allocate additional registers and execution units for short to intermediate stretches of code identified as opportunities for microparallelization
CN101324840A (zh) 用于增强处理单元中的独立加载的执行的方法和系统
US20140129805A1 (en) Execution pipeline power reduction
WO2012145997A1 (zh) 一种实现值关联间接跳转预测的装置
JPH04503582A (ja) コンピュータの分散型パイプライン制御装置及び方法
WO2002046887A2 (en) Concurrent-multitasking processor
Lankamp Developing a reference implementation for a microgrid of microthreaded microprocessors

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
CP01 Change in the name or title of a patent holder

Address after: American California

Patentee after: Imagination Technologies Ltd.

Address before: American California

Patentee before: Imagination Technology Co.,Ltd.

Address after: American California

Patentee after: Imagination Technology Co.,Ltd.

Address before: American California

Patentee before: Mips Technologies, Inc.

CP01 Change in the name or title of a patent holder
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130918

Termination date: 20200118

CF01 Termination of patent right due to non-payment of annual fee