HK1069648A1 - 分配優先級的方法和多線程處理器 - Google Patents
分配優先級的方法和多線程處理器 Download PDFInfo
- Publication number
- HK1069648A1 HK1069648A1 HK05102172.1A HK05102172A HK1069648A1 HK 1069648 A1 HK1069648 A1 HK 1069648A1 HK 05102172 A HK05102172 A HK 05102172A HK 1069648 A1 HK1069648 A1 HK 1069648A1
- Authority
- HK
- Hong Kong
- Prior art keywords
- thread
- instruction
- processor
- instructions
- execution
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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)
Description
技术领域
本发明涉及处理器或类似设备的操作。更具体而言,本发明涉及为多线程处理器中的线程解决指令饥饿。
背景技术
正如本领域所公知的那样,处理器包括各种子模块,每个子模块都适于执行专门任务。在一个公知的处理器中,这些子模块包括以下各项:指令高速缓存器;用于从指令高速缓存器中读取适当指令的取指单元;译码逻辑,其将指令译码为最终格式或中间格式;微操作逻辑,其将中间指令转换成用以执行的最终格式;以及执行单元,其执行最终格式指令(在一些例子中,这些指令来自于译码逻辑,或者在另一些例子中这些指令来自于微操作逻辑)。这里所用的最终格式指令被称为:微操作。
待由处理器执行的程序代码,有时可以被分解成几个较小部分,其称为“线程”。线程是一系列指令,而执行这一系列指令能够完成指定的任务。例如,在视频电话应用中,可以请求处理器执行代码,以处理视频图像数据以及音频数据。可以存在相互独立的代码序列,这些代码序列的执行被设计成处理这些数据类型中的每一种数据。由此,第一线程可包括用于处理视频图像数据的指令,而第二线程可以是用于处理音频数据的指令。换一种方式来讲,线程是自包含程序,所述自包含程序通常与线程标识符相关联,并且当在多线程环境中执行期间,在执行来自于另一线程的指令的同时,能够保持其体系结构状态。
在多数处理器中,线程是由处理器来连续处理的。一般而言,处理线程的认可作法是:已译码的微操作的执行应当优先于新的、未译码指令的提取发生。这是因为已译码的微操作将会被适当地执行,而新的、提取的指令也许会由于例如分支误预测而最终被“杀死”(killed),这种情况是很有可能的。然而,在执行这些微操作之后启动指令提取通常是不受屏蔽的,这造成某一延迟周期等待译码的指令来再充填执行流水线。因此,执行一个线程的指令会带来负面影响。
在本领域中,已建议使用多线程处理器。在这种处理器中,可以在两个或更多线程的执行之间切换。在其它多线程处理器中,可以同时执行线程。在这些处理器的任何一个中,可能没有叙述线程之间是如何处理的。具体而言,为来自一个线程的代码指定同来自另一个线程的代码相同的优先级。这将会对整个系统性能产生负面影响,这在临界代码的执行因执行非临界代码而被挂起或减慢之时尤其如此。特别是,如果已译码的微操作是针对第一线程的,而待提取的指令是针对将要与第一线程同时(或并行)被处理的第二线程的,那么相对于新指令的提取而优先选择执行微操作的这一认可作法就可能会增加多线程处理器中的负面影响。可能存在这样的情形,即第一线程的处理会阻塞或者会不适当地延迟第二线程的指令提取。对于第二线程而言,这可以称为指令端(Iside:I端)饥饿。
考虑到上述原因,就需要检测并解决多线程处理器中的指令饥饿。
发明内容
在本发明的一个发明,提供了一种用于在执行至少第一和第二线程的指令的多线程处理器中分配线程优先级的方法,包括:
判断第一线程的指令提取操作是否将会因为第二线程的指令的处理而被阻塞;
设置阈值计数器,以响应于所述判断操作来执行计数操作;
如果判定第一线程的指令提取操作将会因为第二线程的指令的处理而被阻塞并且所述计数操作结束了,则将优先级分配给所述处理器中的第一线程。
优选地,所述方法进一步包括:
响应于所述判断操作,设定阈值计数器以执行计数操作。
优选地,所述进一步包括:
在所述阈值计数器结束其计数操作之后,执行第一线程的指令提取操作。
优选地,所述进一步包括:
将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
在本发明的另一个方面,提供了一种多线程处理器,包括:
第一和第二线程队列;
阈值计数器;
控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断第一线程的指令提取操作是否将会因为第二线程的指令的处理而被阻塞并且设置所述阈值计数器,以执行计数操作,
其中如果第一线程的指令提取操作将会因为第二线程的指令的处理而被阻塞并且所述计数操作结束了,则所述控制逻辑就将优先级分配给所述处理器中的第一线程。
优选地,所述处理器进一步包括阈值计数器,用于执行计数操作,其中如果判定第一线程的指令提取操作将会因为第二线程的指令的处理而被阻塞,则所述控制逻辑就设定所述阈值计数器。
优选地,所述控制逻辑在所述阈值计数器结束其计数操作之后,将优先级分配给所述第一线程。
优选地,所述处理器进一步包括执行流水线和临时存储区域,其中所述控制逻辑用于将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
附图说明
图1是根据本发明实施例来操作的计算机系统的框图。
图2是根据本发明实施例构建的一部分处理器系统的框图。
图3是根据本发明实施例检测和解决指令饥饿的状态图。
具体实施方式
现在参照图1,示出了根据本发明实施例来操作的计算机系统的框图。在这个例子中,计算机系统1包括:处理器10,它能够执行存储在存储器5中的代码。在此实施例中,存储器5存储几个线程的代码,比如线程0的代码(8)、线程1的代码(9)等。正如本领域所公知的那样,所述两个线程的代码可以是用户应用的一部分,而且适用于操作系统。
现在参照图2,示出了根据本发明实施例来操作的处理器系统(例如,微处理器、数字信号处理器或类似物)的框图。在这个实施例中,所述处理器是多线程处理器,其中理论上将所述处理器10分成两个或更多逻辑处理器。这里所用的术语“线程”指的是指令代码序列。例如,在视频电话应用中,可以请求处理器执行代码,以处理视频图像数据以及音频数据。可以存在相互独立的代码序列,这些代码序列的执行被设计成处理这些数据类型中的每一种。因此,第一线程可包括用于处理视频图像数据的指令,而第二线程可以是用于处理音频数据的指令。在这个例子中,存在一个或多个执行单元(例如,包括执行单元41),所述执行单元可以一次执行一条或多条指令。然而,可以将所述处理器系统10视为两个逻辑处理器:执行来自于第一线程的指令的第一逻辑处理器,和执行来自于第二线程的指令的第二逻辑处理器。
在处理器系统10的这个实施例中,由取指单元11每个线程提取指令和/或数据字节,并且把它们提供给队列13并存储为线程0队列或线程1队列的一部分。本领域的技术人员都将认识到:在处理器系统10中所使用的队列,可用来存储两个以上的线程。把来自于这两个线程的指令提供给多路复用器(MUX)15,并且利用控制逻辑17来控制是否把来自于线程0或者线程1的指令提供给译码单元21。译码单元21可将一条指令转换成两条或多条微指令,并将这些微指令提供给队列23(在RISC(精简指令集代码)处理器中,这些指令可能已经处于已译码格式,而所述译码单元21将它们转换成执行格式)。把队列23的输出提供给MUX 25,所述MUX 25根据控制逻辑27的操作把来自于线程0或线程1的指令提供给重命名/分配单元31。重命名/分配单元31又依次把指令提供给队列33。MUX 35根据调度控制逻辑37的操作在线程0队列与线程1队列之间进行选择,例如所述MUX 35可根据执行单元41中的可用资源来从线程0和线程1中选择指令。在此实施例中,把MUX 35的输出提供给乱序执行单元41,由所述执行单元41执行所述指令。接着,将所述指令置于队列43中。把队列43的输出提供给MUX 45,所述MUX45根据控制逻辑47的操作将来自于线程0和线程1的指令发送给引退单元51。
在图2中,可以增加分支预测电路来在处理器系统10的效率方面提供帮助。例如,可将分支预测电路添加到取指单元11中。正如本领域所公知的那样,与预测有关的分支预测可以基于执行代码序列的过去历史,例如,是否将采取分支指令(例如,若不相等则BNE-分支)。一旦预测到分支,就将下面的条指令加载到“流水线”中(例如,作为执行单元41先导的单元),以便于如果像预测的那样采取所述分支,则执行单元就可立即获得所述适当指令。如果分支预测错误,那么所述流水线中的指令也就是错误的,而且必须将其逐出并将适当的指令加载到所述流水线中。
在多线程处理器的一个例子中,可以并行处理两个线程。基于这里的教导,可将本发明扩展成并行处理三个或更多线程。在这个实施例中,术语“并行”包括:指令的同时和/或连续处理/执行。正如这里所使用的那样,当两个线程同时都需要使用同一资源时,利用线程优先级来确定哪个线程可以开始使用共享资源。线程优先级可以由存储在处理器10(例如,在图1的存储区域4中)中的一个或多个信号来指示。例如,线程0优先级和线程1优先级将指示两个线程(线程0或线程1)中的哪一个具备更高的优先级。在一个例子中,如果两个信号都被关断,那么任何一个线程都不具备高于另一线程的优先级。
如上所述,可能会出现这种情形,即第一线程将比另一个线程更有权访问共享资源。例如,第一线程可能具有许多在处理器中执行的已译码的微操作,而同时第二线程正在等待来自于执行第一线程所得到的指定结果。如果第二线程在等待所述结果的同时已经占用许多共享资源,则这可能会严重影响对第一线程的处理,并且有可能会完全阻塞第一线程的处理。例如,第二线程对这一部分资源的支配,可能会有效地阻止提取第一线程的指令。因此,对第一与第二线程的处理的明显拖延,导致了处理器不良的执行性能。作为这个问题的另一种情形,第一线程可能正在执行到高速缓存器的更高级或者主存储器的存储操作,第二线程试图在高速缓存器的更高级或者主存储器中检索指令。通常为存储器的数据操作指定高于同一存储器的指令提取操作的优先级。因此,如果第一线程有大量存储操作要执行,则将会有效阻塞第二线程提取指令并且阻碍执行进度的前进。
根据本发明的实施例,针对多个线程中的任何一个线程检测指令端饥饿。现在参照图3,示出了用于检测和解决I端饥饿的状态图。在一个实施例中,I端饥饿可能正接近的指示(即对I端饥饿的“担忧”)是以许多条件的满足为基础的。一般而言,I端饥饿是指当一线程由于其它线程已有效阻塞它提取指令而使它不能提取指令的时候。正如这里所用的那样,接近的I端饥饿的指示是这样一种指示,即对于线程而言这种情况可能正在接近。接近的I端饥饿的第一条件就是:与单线程处理器模式相比而言,所述处理器是处于多线程处理模式下的,并且一个以上的线程是活动的。在图3中,块101表明处理器是处于单线程(ST)模式下的。这就意味着,控制信号表明:这种模式已被设置或者处于处理器一次仅处理两个线程的情况下,其中这些线程之一在执行中被暂停。在这种情况下,控制起始于块103(ST模式)。如果由于处理器至少正在尝试从至少第一和第二线程中提取和/或执行指令,因而两个线程都是活动的(块105),那么控制就转移至块107(正常MT(多线程)模式)。如上所指出的那样,线程可能变为指令端饥饿的指示是以几个条件的满足为基础的。当所有这些条件都满足时(块109),控制移至块111。上述的第一条件就是:处理器处于多线程模式下。其它条件可以包括:
2.考虑中的线程(例如线程0或线程1)在执行流水线中并不具有任何指令(例如,在MUX 35处不存在任何指令正在等待调度控制逻辑37来引发用于该线程的微操作被传递到所述执行单元41(图2))。
3.由于考虑中的线程已经填充了所需的资源,因此不阻塞向执行流水线发布新的指令。在这个实施例中,执行流水线包括:来自于MUX 35通过执行单元41的指令的处理。例如,所述执行单元41可包括:用于考虑中的线程的并填充有存储指令的存储缓冲器。在这种情况下,线程的处理虽然未必已受到缺乏指令提取的负面影响,但受执行存储指令的延迟的影响。此外,采取措施来增加指令提取通常不会可观地改善线程性能,这是因为缺乏资源可用性常会负面影响这些指令的执行。
4.除考虑中的线程以外的任何线程,均未被给予对处理器部件的完全或独占的访问。在这种情况下,在考虑中的部分线程上的任何指令饥饿,常在意料之中。
5.考虑中的线程处于正试图提取指令的状态下。例如,在包含由英特尔公司(Santa Clara,California)所生产的那些处理器的许多处理器当中,包括有“停止时钟(Stop Clock)”管脚。这个管脚上的信号有效,使处理器清除其资源。在这种情况下,可以为考虑中的线程的可执行指令清除所有资源。因此,在这种情况下,常不把指令提取的缺乏视为饥饿。从多线程模式切换到单线程模式是不应当把指令饥饿视为问题时的另一个例子。
6.较高阶性能节约协议是不活动的。例如,如果存在能有效将优先级从一个线程切换为另一个线程的另一种协议,那么连同本发明的指令饥饿处理一起运行这种协议,就可能对处理器性能有负面影响。
7.指令饥饿使能位被设定(即,能由控制逻辑加以设定以关断I端饥饿检测/解决的位)。
8.考虑中的线程当前并未等待着已经离开芯片(go off-chip)的指令提取(例如,离开处理器,比如主存储器)。
在这个实施例中,如果所有被监视的条件都满足,那么就存在线程的接近的I端饥饿的指示。尽管在上面给出了八个条件,但是本发明可以扩展到附加条件或较少数条件。例如,接近的I端饥饿的指示,可仅仅以上述条件1、2和5为真作为基础。另外,图3中流程图的实现,可以通过适当配置的控制逻辑来完成(例如,包括在图2中的控制逻辑37)。作为选择,控制逻辑可以是处理器10的子模块,该子模块执行指令以实现图3中的流程图。
现在返回到图3,在这个实施例中,如果所有七个条件都满足,那么控制就传递至块111,所述控制块111意指:存在线程的指令饥饿可能发生的指示。由此,启动I端饥饿阈值计数器来执行计数操作。在这个实施例中,阈值计数器53(图1)可以是递减计数器,所述计数器限据系统时钟从装入值递减计数到0。例如,待装入此计数器中的值可以通过控制逻辑或在处理器中操作微代码被设定(或通过任何其它硬件或固件加以实现)。如果任何上述条件均不再有效(块112),那么控制就传递至块113,所述块113表明不再考虑I端饥饿。如果阈值计数器53达到预定值,(例如,超时或计数降至0)(块114),控制传递至块115,表明指令端饥饿的。在这个实施例中,阈值计数器55给考虑中的线程一个机会加载指令,由此否定掉一个或多个上述条件。
根据本发明的实施例,可以解决线程的指令端饥饿,以便为饥饿线程恢复指令提取操作。现在返回到图3,当指令饥饿的线程不具备优先级时,控制停留于块115,(例如,如线程0优先级和线程1优先级信号所示),并且任何锁指令均是活动的(块116)。在这个实施例中,锁指令是需要独占访问存储单元的指令。例如,“原子”操作是这样一种操作,即:在该操作下数据值从存储单元中被获取、修改、继而恢复为相同的存储单元。在这种原子操作中,必须要锁定指定的存储单元,以便于对所述存储单元没有中间访问,直到所述操作结束为止。当给指令饥饿的线程分配了优先级并且没有任何加锁机制是活动之时(块117),控制就传递至块118以主动地解决I端饥饿。在本发明的实施例中,I端饥饿的解决包括一个或多个操作的执行,从而为饥饿的线程提供指令执行。这可以通过执行一个或多个以下操作来实现:
1.将来自于不饥饿的线程的指令从执行流水线移动至临时存储区域(例如,重放队列33a),以供后来执行。作为选择,活动的指令可以被“杀死”并在稍后被重新发布。
2.防止锁指令被从不饥饿的线程启动;
3.逐出高速缓冲存储器当中所有的写回缓冲区,以便于为指令饥饿的线程释放那个资源。
4.为高速缓存器重新设定保留寄存器(例如,除去对可以为不饥饿的线程设置的资源的独占访问);和
5.让控制逻辑37不从不饥饿的线程那里选择指令。
一旦不再满足作为I端饥饿正在接近的指示的所述条件之一,控制继而就移回至块113,以便重置处理器的状态,以表明对任何线程的指令端饥饿不再有任何紧接着的担忧。
利用本发明的方法及设备,就能以有效的方式来处理线程的指令端饥饿的检测和解决。本发明的实施例能显著地降低确保没有访问到处理器资源的线程获得访问而花费的时间量。
尽管这里对几个实施例作了具体说明和描述,但是应当认识到,在不脱离本发明精神及既定范围的情况下,上述教导涵盖了本发明的修改及变形并且这些修改及变形皆落入所附权利要求的范围内。
Claims (5)
1.一种用于在执行至少第一和第二线程的指令的多线程处理器中分配线程优先级的方法,包括:
判断第一线程的指令提取操作是否将会因为第二线程的指令的处理而被阻塞;
设置阈值计数器,以响应于所述判断操作来执行计数操作;
如果判定第一线程的指令提取操作将会因为第二线程的指令的处理而被阻塞并且所述计数操作结束了,则将优先级分配给所述处理器中的第一线程。
2.如权利要求1所述的方法,进一步包括:
在所述阈值计数器结束其计数操作之后,执行第一线程的指令提取操作。
3.如权利要求2所述的方法,进一步包括:
将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
4.一种多线程处理器,包括:
第一和第二线程队列;
阈值计数器;
控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断第一线程的指令提取操作是否将会因为第二线程的指令的处理而被阻塞并且设置所述阈值计数器,以执行计数操作,
其中如果第一线程的指令提取操作将会因为第二线程的指令的处理而被阻塞并且所述计数操作结束了,则所述控制逻辑就将优先级分配给所述处理器中的第一线程。
5.如权利要求4所述的处理器,进一步包括执行流水线和临时存储区域,其中所述控制逻辑用于将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US09/888,274 US6651158B2 (en) | 2001-06-22 | 2001-06-22 | Determination of approaching instruction starvation of threads based on a plurality of conditions |
| US09/888,274 | 2001-06-22 | ||
| PCT/US2002/012340 WO2003001368A1 (en) | 2001-06-22 | 2002-04-18 | Method and apparatus for resolving instruction starvation in a multithreaded processor |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| HK1069648A1 true HK1069648A1 (zh) | 2005-05-27 |
| HK1069648B HK1069648B (zh) | 2010-06-25 |
Family
ID=
Also Published As
| Publication number | Publication date |
|---|---|
| EP1399810A1 (en) | 2004-03-24 |
| WO2003001368A1 (en) | 2003-01-03 |
| US6651158B2 (en) | 2003-11-18 |
| EP1399810B1 (en) | 2017-05-17 |
| EP2339454A3 (en) | 2011-07-20 |
| EP3236349A1 (en) | 2017-10-25 |
| CN1811699A (zh) | 2006-08-02 |
| CN100557564C (zh) | 2009-11-04 |
| US7010669B2 (en) | 2006-03-07 |
| CN100524205C (zh) | 2009-08-05 |
| EP2339454A2 (en) | 2011-06-29 |
| EP2339454B1 (en) | 2013-10-16 |
| BR0210938A (pt) | 2004-06-08 |
| US20040078794A1 (en) | 2004-04-22 |
| US20020199089A1 (en) | 2002-12-26 |
| CN1529845A (zh) | 2004-09-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN100557564C (zh) | 分配优先级的方法和多线程处理器 | |
| US7877583B2 (en) | Method and apparatus for assigning thread priority in a processor or the like | |
| US6671795B1 (en) | Method and apparatus for pausing execution in a processor or the like | |
| JP4603583B2 (ja) | プロセッサ、装置、及び方法 | |
| US8099586B2 (en) | Branch misprediction recovery mechanism for microprocessors | |
| US7165254B2 (en) | Thread switch upon spin loop detection by threshold count of spin lock reading load instruction | |
| US8041754B1 (en) | Establishing thread priority in a processor or the like | |
| US8561079B2 (en) | Inter-thread load arbitration control detecting information registered in commit stack entry units and controlling instruction input control unit | |
| HK1069648B (zh) | 分配優先級的方法和多線程處理器 | |
| HK1068434B (zh) | 用於在多線程處理器中分配線程優先級的方法和設備 | |
| GB2410104A (en) | Method and apparatus for assigning thread priority in a multi-threaded processor | |
| HK1056635A (zh) | 用於暂停处理器中执行过程的方法和装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PC | Patent ceased (i.e. patent has lapsed due to the failure to pay the renewal fee) |
Effective date: 20200418 |