用于解决多线程处理器中指令饥饿的方法及设备的制作方法

文档序号:6536048阅读:108来源:国知局
专利名称:用于解决多线程处理器中指令饥饿的方法及设备的制作方法
背景技术
本发明涉及处理器或类似设备的操作。更具体而言,本发明涉及为多线程处理器中的线程解决指令饥饿。
正如本领域所公知的那样,处理器包括各种子模块,每个子模块都适于执行专门任务。在一个公知的处理器中,这些子模块包括以下各项指令高速缓存器,用于从指令高速缓存器中读取适当指令的取指单元;译码逻辑,其将指令译码为最终格式或中间格式,微操作逻辑,其将中间指令转换成用以执行的最终格式;以及执行单元,其执行最终格式指令(在一些例子中,这些指令来自于译码逻辑,或者在另一些例子中这些指令来自于微操作逻辑)。这里所用的最终格式指令被称为微操作。
待由处理器执行的程序代码,有时可以被分解成几个较小部分,其称为“线程”。线程是一系列指令,而执行这一系列指令能够完成指定的任务。例如,在视频电话应用中,可以请求处理器执行代码,以处理视频图像数据以及音频数据。可以存在相互独立的代码序列,这些代码序列的执行被设计成处理这些数据类型中的每一种数据。由此,第一线程可包括用于处理视频图像数据的指令,而第二线程可以是用于处理音频数据的指令。换一种方式来讲,线程是自包含程序,所述自包含程序通常与线程标识符相关联,并且当在多线程环境中执行期间,在执行来自于另一线程的指令的同时,能够保持其体系结构状态。
在多数处理器中,线程是由处理器来连续处理的。一般而言,处理线程的认可作法是已译码的微操作的执行应当优先于新的、未译码指令的提取发生。这是因为已译码的微操作将会被适当地执行,而新的、提取的指令也许会由于例如分支误预测而最终被“杀死”(killed),这种情况是很有可能的。然而,在执行这些微操作之后启动指令提取通常是不受屏蔽的,这造成某一延迟周期以等待译码的指令来再充填执行流水线。因此,执行一个线程的指令会带来负面影响。
在本领域中,已建议使用多线程处理器。在这种处理器中,可以在执行两个或更多线程之间切换。在其它多线程处理器中,可以同时执行线程。在这些处理器的任何一个中,可能没有叙述线程之间是如何处理的。具体而言,为来自一个线程的代码指定同来自另一个线程的代码相同的优先级。这将会对整个系统性能产生负面影响,这在临界代码的执行因执行非临界代码而被挂起或减慢之时尤其如此。特别是,如果已译码的微操作是针对第一线程的,而待提取的指令是针对将要与第一线程同时(或并行)被处理的第二线程的,那么优于新指令的提取而优先选择执行微操作这一认可作法就可能会增加多线程处理器中的负面影响。可能存在这样的情形,即第一线程的处理会阻塞或者会不适当地延迟第二线程的指令提取。对于第二线程而言,这可以称为指令端(IsideI端)饥饿。
考虑到上述原因,就需要检测并解决多线程处理器中的指令饥饿。
附图简要说明

图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,所述MUX 45根据控制逻辑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.由于考虑中的线程已经填充了所需的资源,因此不阻塞向执行流水线发布新的指令。在这个实施例中,执行流水线包括来自于MUX35通过执行单元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,所述块表明不再考虑I端饥饿。如果阈值计数器53达到预定值,(例如,超时或计数降至0)(块114),控制传递至表示指令端饥饿的块115。在这个实施例中,阈值计数器55给考虑中的线程一个机会加载指令,由此否定掉一个或多个上述条件。
根据本发明的实施例,可以解决线程的指令端饥饿,以便恢复为饥饿线程指令提取操作。现在返回到图3,当指令饥饿的线程不具备优先级时,控制停留于块115,(例如,如线程0优先级和线程1优先级信号所示),并且任何锁指令均是激活的(块116)。在这个实施例中,锁指令是需要独占访问存储单元的指令。例如,“原子”操作是这样一种操作,即在该操作下数据值从存储单元中被获取、修改、继而恢复为相同的存储单元。在这种原子操作中,必须要锁定指定的存储单元,以便于对所述存储单元没有中间访问,直到所述操作结束为止。当给指令饥饿的线程分配了优先级并且没有任何加锁机制是激活之时(块117),控制就传递至块118以主动地解决I端饥饿。在本发明的实施例中,I端饥饿的解决包括一个或多个操作的执行,从而为饥饿的线程提供指令执行。这可以通过执行一个或多个以下操作来实现1.将来自于不饥饿的线程的指令从执行流水线移动至临时存储区域(例如,重放队列33a),以供后来执行。作为选择,激活的指令可以被“杀死”并在稍后被重新发布。
2.防止锁指令被从不饥饿的线程启动;3.逐出高速缓冲存储器当中所有的写回缓冲区,以便于为指令饥饿的线程释放那个资源。
4.为高速缓存器重新设定保留寄存器(例如,除去对可以为不饥饿的线程设置的资源的独占访问);和5.让控制逻辑37不从不饥饿的线程那里选择指令。
一旦不再满足作为I端饥饿正在接近的指示的所述条件之一,控制继而就移回至块113,以便重置处理器的状态,以表明对任何线程的指令端饥饿不再有任何紧接着的担忧。
利用本发明的方法及设备,就能以有效的方式来检测和解决线程的指令端饥饿。本发明的实施例能显著地降低其确保让没有访问到资源的线程获得访问而占用的时间量。
尽管这里对几个实施例作了具体说明和描述,但是应当认识到,在不脱离本发明精神及既定范围的情况下,上述教导涵盖了本发明的修改及变形并且这些修改及变形皆落入所附权利要求的范围内。
权利要求
1.一种在操纵至少第一和第二线程的并行处理的处理器中判断是否有接近指令端饥饿的指示的方法,包括判断第一线程的多个条件是否均为真,所述条件包括所述处理器是否正在多线程处理模式下操作;第一线程是否在所述处理器的执行流水线中没有指令;和第一线程是否正试图从存储器中提取指令;如果所述多个条件均为真,则就判断存在所述第一线程的接近指令端饥饿的指示。
2.如权利要求1所述的方法,进一步包括如果所述多个条件均为真,则就设定阈值计数器以执行计数操作。
3.如权利要求2所述的方法,进一步包括在所述阈值计数器结束其计数操作之后,解决指令饥饿。
4.如权利要求1所述的方法,进一步包括通过将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域,来解决所述第一线程的指令饥饿。
5.一种用于在多线程处理器中分配线程优先级的方法,包括判断在所述处理器中是否存在多个条件;根据所述多个条件的满足情况,判断是否存在至少两个线程中的第一线程的接近指令端饥饿的指示。
6.如权利要求5所述的方法,进一步包括响应于所述第一线程的接近指令端饥饿的指示,设定阈值计数器来执行计数操作.
7.如权利要求6所述的方法,进一步包括在所述阈值计数器结束其计数操作之后,解决指令饥饿。
8.如权利要求7所述的方法,其中所述解决指令饥饿包括将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
9.一种用于在操纵至少第一和第二线程的并行处理的处理器中分配线程优先级的方法,包括判断所述第一线程的多个条件是否均为真,所述条件包括处理器是否正在多线程处理模式下操作;第一线程是否在所述处理器的执行流水线中没有指令;和第一线程是否正试图从存储器中提取指令;当所述多个条件均为真时,就判断出存在所述第一线程的接近指令端饥饿的指示。
10.如权利要求9所述的方法,进一步包括如果所述多个指令均为真,则就设定阈值计数器以执行计数操作。
11.如权利要求10所述的方法,进一步包括在所述阈值计数器结束其计数操作之后,解决指令饥饿。
12.如权利要求9所述的方法,进一步包括通过将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域,来解决所述第一线程的指令饥饿。
13.一种多线程处理器,包括第一和第二线程队列;控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断在所述处理器中是否存在多个条件,并且根据所述多个条件的满足情况,判断是否存在至少第一线程和第二线程中的第一线程的接近指令端饥饿的指示。
14.如权利要求13所述的处理器,进一步包括阈值计数器,用于执行计数操作,其中如果存在所述第一线程的接近指令端饥饿的指示,则所述控制逻辑就设定所述阈值计数器。
15.如权利要求14所述的处理器,其中所述控制逻辑将在所述阈值计数器结束其计数操作之后解决指令饥饿。
16.如权利要求15所述的处理器,进一步包括执行流水线和临时存储区域,其中所述控制逻辑将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
17.一种操纵至少第一和第二线程的并行处理的处理器,包括第一和第二线程队列;控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断是否多个条件均为真,并且根据所述条件判断对于所述第一线程是否有指令端饥饿正在接近,所述条件包括所述处理器是否正在多线程处理模式下操作;第一线程是否在所述处理器的执行流水线中没有指令;和第一线程是否正试图从存储器中提取指令。
18.如权利要求17所述的处理器,进一步包括阈值计数器,用于执行计数操作,其中如果存在所述第一线程的接近指令端饥饿的指示,则所述处理器就设定所述阈值计数器。
19.如权利要求18所述的处理器,其中所述处理器将在所述阈值计数器结束其计数操作之后解决指令饥饿。
20.如权利要求19所述的处理器,进一步包括执行流水线和临时存储区域,其中所述处理器通过将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域来解决所述第一线程的指令饥饿。
21.一种操纵至少第一和第二线程的并行处理的计算机系统,包括存储器,用于存储第一和第二线程的指令;处理器,其耦合于所述存储器,并且包括第一和第二线程队列,用于存储来自于所述第一和第二线程的指令;控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断在所述处理器中的多个条件是否均为真,并且根据所述多个条件的满足情况来判断是否存在所述第一线程的接近指令端饥饿的指示。
22.如权利要求21所述的计算机系统,其中所述处理器进一步包括阈值计数器,用于执行计数操作,其中如果存在所述第一线程的接近指令端饥饿的指示,则所述控制逻辑就设定所述阈值计数器。
23.如权利要求22所述的计算机系统,其中所述控制逻辑将在所述阈值计数器结束其计数操作之后解决指令饥饿。
24.如权利要求23所述的计算机系统,其中所述处理器进一步包括执行流水线和临时存储区域,其中所述控制逻辑用于将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域。
25.一种操纵至少第一和第二线程的并行处理的计算机系统,包括存储器,用于存储第一和第二线程的指令;处理器,其耦合于所述存储器,并且包括第一和第二线程队列,用于存储来自于所述第一和第二线程的指令;控制逻辑,其耦合于所述第一和第二线程队列,所述控制逻辑用于判断是否多个条件均为真,并且根据所述条件来判断对于所述第一指令是否指令端饥饿正在接近,所述条件包括所述处理器是否正在多线程处理模式下操作;第一线程是否在所述处理器的执行流水线中没有指令;和第一线程是否正试图从存储器中读取指令。
26.如权利要求25所述的计算机系统,其中所述处理器进一步包括阈值计数器,以用于执行计数操作,其中如果存在所述第一线程的接近指令端饥饿的指示,则所述处理器就设定所述阈值计数器。
27.如权利要求26所述的计算机系统,其中所述处理器将在所述阈值计数器结束其计数操作之后解决指令饥饿。
28.如权利要求27所述的计算机系统,进一步包括执行流水线和临时存储区域,其中所述处理器通过将所述处理器的执行流水线中的指令从第二线程移动至临时存储区域来解决所述第一线程的指令饥饿。
全文摘要
在多线程处理器中,在存储器中设置线程优先级变量。根据本发明的实施例,对几个条件进行监视,以便判断可能正接近指令端饥饿的指示。如果正接近这种饥饿,则根据阈值计数器等的到期来解决所述饥饿。
文档编号G06F9/46GK1811699SQ200510048859
公开日2006年8月2日 申请日期2002年4月18日 优先权日2001年6月22日
发明者D·博格斯, A·凯克, M·乌普顿, J·阿伦, D·博恩斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1