用于在多线程处理器中分配线程优先级的方法和设备的制作方法

文档序号:6423352阅读:293来源:国知局
专利名称:用于在多线程处理器中分配线程优先级的方法和设备的制作方法
背景技术
本发明涉及处理器或类似设备的操作。更具体地,本发明涉及在多线程处理器中给线程分配优先级。
正如本领域所公知的,处理器包括各种子模块,每个子模块适合执行专门的任务。在一个已知的处理器中,这些子模决包括以下各项指令高速缓存器、用于从指令高速缓存器取出适当指令的取指单元;将指令译码为最终或中间格式的译码逻辑,将中间指令转换为用于执行的最终格式的微操作逻辑;以及执行最终格式指令的执行单元(在一些例子中,所述最终格式指令来自于译码逻辑或者在其他例子中来自于微操作逻辑)。如在此所使用的,将最终格式的指令称为微操作。
待由处理器执行的程序代码有时可以被拆分为称为“线程”的更小部分。线程是一连串的指令,这些指令的执行完成给定的任务。例如,在电视电话应用中,可以请求处理器来执行代码以处理视频图像数据以及音频数据。还可以有相互独立的代码序列,这些代码序列的执行被设计为处理这些数据类型的每一种。由此,第一线程可包括用于处理视频图像数据的指令,而第二线程可以是用于处理音频数据的指令。换言之,线程是通常与线程标识符相关联的自包含程序,并且在多线程环境中执行期间,可以保持其体系结构状态,同时执行来自于另一个线程的指令。
在本领域中,已经提出了使用多线程处理器的建议。在这种处理器中,它可以在两个或更多个线程的执行间进行切换。在其他的多线程处理器中,线程可以被同时执行。但在这些处理器的任意一种中,都没有描述在多个线程间如何进行处理。特别是,给予来自于一个线程的代码与来自于另一个线程的代码相同的优先级。这能够导致对整个系统性能的消极影响,这一点在临界代码的执行因非临界代码的执行而挂起或者减慢之时尤其如此。
考虑到上述内容,需要在两个或更多个线程之间分配优先级。
附图简述

图1是依照本发明实施例操作的计算机系统的框图。
图2是依照本发明实施例构造的处理器的一部分的框图。
图3是依照本发明实施例的分配线程优先级的状态图。
图4是依照本发明实施例的用于设定线程0和线程1之一的起始计数器的状态图。
详细描述参考图1,示出了依照本发明实施例操作的计算机系统的框图。在该例中,计算机系统1包括处理器3,所述处理器3能够执行在存储器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中。正如本领域所公知的,分支预测所关注的是根据过去执行代码序列的历史进行的预测,例如,是否会出现分支指令(例如,如果Not Equal,则是BNE-分支)。分支一经预测,下一条指令就可以被载入“流水线”(例如,作为执行单元41先导的单元)中,以便当如所预测的那样出现该分支时,对于执行单元而言适当的指令立即就成为可利用的。如果分支预测是不正确的,那么流水线中的指令是不正确的,且必须被清除,并将适当的指令载入流水线中。
在多线程处理器的一个例子中,可以并行处理两个线程。在此给出教导,本发明可扩展为并行处理三个或更多个线程。在该实施例中,术语“并行”包括指令的同时和/或连续处理/执行。如在此使用的,当两个线程需要同时使用同一资源时,线程优先级被用于确定哪个线程可开始使用共享资源。线程优先级可以由存储在处理器10的存储区域4(图1)中的一个或多个信号来指示。例如,线程0优先级以及线程1优先级将指示两个线程(线程0或线程1)中的哪个线程具有比另一个线程高的优先级。在一个例子中,如果两个信号都是关断的,那么两个线程都不具有比另一个线程高的优先级。此外,可以提供三个“计数器”来帮助分配线程优先级。在图2中,这些计数器可作为引退单元51的一部分来提供。首先,提供优先序计数器52,在该实施例中,给所述优先序计数器设定一初始值(下文描述),并向下计数直到0。当优先序计数器52到期(例如,达到0)时,其指示处理器10应该将所述优先级从已经具有优先级的线程转移到不具有优先级的线程。还提供了线程0起始计数器53以及线程1起始计数器55,这两个计数器用于存储将用于设定优先序计数器初始值的值(下文描述)。
依照本发明的实施例,线程优先序计数器适用于根据线程的进度来提供适当大小的时间窗。例如,线程的进度可以根据引退的微操作的数量而定。当线程优先序计数器被设定时(例如,在它已期满后),其可以被重新载入一个值,该值等于来自于与不久将具有优先级的线程相关联的起始计数器的值的倍数(最大达到预定的最大值)。因此,起始计数器应该具有最小值1。如此,当微操作由引退单元51引退时,该线程的起始计数器可以设定为1,以便当其重新获得线程优先级时,将线程优先序计数器设定为相对低的数。如果当线程具有优先级时,线程优先序计数器就引退,并且该线程曾在该时间窗期间不能够引退微操作,那么起始计数器就增加一个值(例如,1),以便下次线程具有优先级时,该线程具有更多的时间来引退至少一个微操作。
使用该方法来分配优选次序具有至少两个缺陷。第一,有可能尽管线程正在引退微操作中,但是它仍将继续具有线程优先级,而另一个线程在其线程优先级时间窗期间却不能够引退微操作。例如,如果线程0包括一千个连续的除法运算,并且包括很大的线程优先级时间窗,同时线程1包括一条除法指令,那么线程1可能会被阻塞,直到线程0的执行完成一千个除法运算为止,或者直到线程优先级时间窗结束为止。在该实施例中,线程优先级时间窗根据时间量而定,所述时间量是线程优先序计数器在设定后达到期满的时间量。第二,如果该线程因指令而“挨饿”(即,资源能够用于执行微操作,但是取指令却被剥夺了),则当该线程获得优先级时,被安排可由线程优先序计数器利用的时间可能不足以允许取出一条指令。这一点例如在使用页错误处理器(page mis-handler)或PMH时就可以看出,其中PMH用于处理数据转换后备缓冲区和指令转换后备缓冲区以及页和高速缓存线的边界问题。在这种情况中,PMH因TLB未命中而需要迅速地取指令,但是它又不能够做到那样。因此,在可由线程优先序计数器利用的最终时间足以允许取指令之前(其将最终导致执行和引退该线程的微操作),该线程的起始计数器的增加需要执行多次。因此,每次线程1的执行试图装载指令但未能装载指令时,线程0的处理时间可能被错过,并且指令装载失败的处理时间也可能被错过。
依照本发明的实施例,提出了通过分配线程优先级来改善多线程处理器性能的系统和方法。参考图3,示出了依照本发明实施例分配线程优先级的状态图。在状态61中,线程优先级指向第一线程,即线程0。在该实施例中,线程优先序计数器被根据处理器的系统时钟而递减63。如框65所示,当满足以下条件之一时,状态从状态61改变为状态671.线程优先序计数器已达到0;2.线程0引退微操作;3.对于线程0,不再存在靠近指令端(I端)饥饿的指示。
I端饥饿是指一个线程因另一个或多个线程已经有效阻止其取指令而无法取出指令的时候。如在此所使用的,靠近I端饥饿的指示是指示这种情形可能将靠近线程。接近I端饥饿的指示可通过监控一个或多个条件来预见。在一个实施例中,所述条件可包括以下一项或多项1.与单线程处理模式相比,处理器处于多线程处理模式中,并且一个以上的线程是活动的。
2.考虑中的线程在执行流水线中没有任何指令(例如,在MUX 35处没有指令等待调度控制逻辑37来引起该线程的微操作被传递到执行单元41(图2))。
3.由于考虑中的线程已经满足了所需要的资源,因此将新指令发送到执行流水线不被阻塞。在该实施例中,执行流水线包括经由执行单元41处理来自于MUX 35的指令。例如,执行单元41可包括用于考虑中线程的存储缓冲器,所述存储缓冲器装满存储指令。在该情况中,线程的处理还未必因缺少指令取出而受到消极的影响,但是在执行存储指令的过程中有延迟。
4.没有给予除了考虑的那个线程之外的线程完全地或独占地使用处理器模块的权力。换言之,如果另一个线程已被给予完全地或独占地使用处理器模块的权力,那么该条件就不满足。在这种情形中,将意味着在考虑中的线程部分上的任意指令饥饿。
5.考虑中的线程处于正试图取指令的状态。例如,包括由Intel公司(Santa Clara,California)制造的那些处理器在内的许多处理器都包括“停止时钟(Stop Clock)”管脚。使该管脚上的信号有效导致处理器清除其资源。在该情况中,所有资源都可能没有考虑中的线程的可执行指令。由此,在这种情况中,没有取出指令不会被认为是饥饿。从多线程模式切换到单线程模式是另一个例子,其中指令饥饿将不应被认为问题。
6.更高等级的性能节省协议是不活动的。例如,如果存在另一个协议有效地来将优先级从一个线程切换到另一个线程,那么依照本发明的指令饥饿处理来运行该协议,在处理器性能上可能具有消极影响。
7.设定指令饥饿使能位(即,一个可由控制逻辑设定以用于关断I端饥饿检测/解决的位)。
8.考虑中的线程不等待指令取出,其已经到了芯片外(例如,到了诸如主存储器之类的处理器外)。
在该实施例中,如果所有的监控条件都满足,那么对于线程0,存在靠近I端饥饿的指示。虽然上文提出了8项条件,但是本发明可以扩大到附加的条件或更少数量的条件。例如,靠近I端饥饿的指示可以仅仅根据上文为真的条件1、2和5为真而定。
在框67中,线程优先级从线程0改变到线程1。线程优先序计数器被载入一个等于第二线程(线程1)起始计数器中的值乘以16的值。在这时,线程优先级信号转为指示线程1具有比线程0高的优先级。然后,控制传到框69,在那里线程1具有优先级,并且线程优先序计数器依照系统时钟来递减(框70)。正如框71中的条件所指示的,当符合一个或多个条件时,状态从框69转变到框73。在该实施例中,当满足以下三个条件中的任意一个时改变状态1.线程优先序计数器达到0;2.线程0引退微操作;3.对于线程1,不再有靠近I端(指令端)饥饿的指示。
在状态73中,给线程优先序计数器装载一个是线程1的起始计数器中的值乘以16的值,并且将适当的线程优先级信号转为指示线程0具有优先级。然后,控制传回到框61。在该实施例中,在重置处理器(框75)时,状态73的动作发生,并且给予线程0优先级。
参考图4,依照本发明的实施例示出了用于设定线程0和线程1之一的起始计数器的状态图。在重置时(框80),控制传到框81,在那里将起始计数器的值设定为1。为了从框81前进到框82,将要满足两个条件之一(框85)1.在当前线程能够引退微操作之前,线程优先级已经被切换到另一个线程;2.对于当前线程,存在靠近指令端饥饿的指示。
在框82中,起始计数器中的值进行几何修改(例如,通过移入二进制的1位并且将所有位向左移)。例如,使值1变为值3,值3变为值7,以及使值2n-1变为值2n+1-1(其中n>0)。当存在靠近I端饥饿的指示时(框86),控制保持在状态82。在该实施例中,对每一系统时钟来说,起始计数器的值如上所述那样递增,直到达到最大值。如果发生以下各项条件之一(框84),则控制移回到框811.引退该线程的微操作;2.对于该线程,不存在靠近I端饥饿的指示。
如果“其他条件”不满足,则控制从框82传到框83。在该实施例中,如果因当前线程能够引退微操作之前线程优先级已经切换到另一个线程,而使得控制从框81传到框82,那么如果下述“其他”条件不满足时,控制从框82传到框831.考虑中的线程已经引退微操作;以及2.还未将线程优先级信号切换到考虑中的线程。(框87)。换言之,如果线程仍未引退微操作以及该线程具有线程优先级的话,计数器中的值将保持在相同的值。控制保持在框83中,在那里,只要其它条件不满足(框88),起始计数器中的当前值就保持在相同的值。如果满足下述条件之一(框89),则控制返回框821.在微操作能够被引退之前,线程优先级从当前线程切换到另一个线程;2.对于所述线程,存在靠近指令端饥饿的指示。
如果线程引退微操作(框90),则控制从框83传到框81。最后,当其他条件不满足时(框91),控制从框81传到框83。使用本发明的方法和系统,可以避免上文提及的问题。图3和4的流程图的实现可以通过正确配置控制逻辑(例如包括图2中的控制逻辑37)来执行。作为选择,控制逻辑可以是处理器10的子模块,其执行指令以实现图3和4的流程图。
虽然在此具体说明以及描述了几个实施例,但是将意识到的是,在不脱离本发明的精神和范围的情况下,通过上述教导可覆盖本发明的修改以及变化,并且所述修改和变化包含在所附权利要求的范围内。
权利要求
1.在用于具有至少第一和第二线程的多线程处理器中,一种分配线程优先级的方法,包括将优先级分配给所述第一线程;将初始值载入线程优先序计数器中;以及响应所述线程优先序计数器到期,将优先级分配给所述第二线程。
2.如权利要求1所述的方法,其特征在于,所述初始值根据存储在与所述第一线程相关联的第一起始计数器中的值而定。
3.如权利要求2所述的方法,进一步包括确定对于所述第一线程是否存在靠近指令端饥饿的指示;以及响应对所述第一线程靠近指令端饥饿的指示,递增存储在所述第一起始计数器中的值。
4.如权利要求3所述的方法,其特征在于,确定对于所述第一线程是否存在靠近指令端饥饿的指示,包括确定多个条件是否为真,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中没有指令;以及所述第一线程是否正试图从存储器中取指令。
5.如权利要求4所述的方法,其特征在于,当递增存储在所述第一起始计数器中的值时,几何递增所述值。
6.如权利要求5所述的方法,其特征在于,通过将二进制1位向左移入所述值中,来几何递增所述值。
7.在用于操纵至少第一和第二线程处理的多线程处理器中,一种分配线程优先级的方法,包括将优先级分配给所述第一线程;以及响应为真的多个条件的一个条件,将优先级分配给所述第二线程,所述条件包括所述第一线程的处理是否从所述第一线程引退指令;以及对于所述第一线程,是否存在靠近指令端饥饿的指示。
8.如权利要求7所述的方法,其特征在于,所述对于第一线程靠近指令端饥饿的指示,包括多个为真的条件,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不存在指令;以及所述第一线程是否正试图从存储器取指令。
9.一种用于并行处理至少第一和第二线程的处理器,包括控制逻辑,用于将优先级分配给所述至少第一和第二线程中的一个线程;与所述控制逻辑耦合的线程优先序计数器,其中在所述线程优先序计数器到期之后,将优先级分配给所述第二线程。
10.如权利要求9所述的处理器,其特征在于,所述线程优先序计数器的初始值根据与所述第一线程相关联的第一起始计数器中存储的值而定。
11.如权利要求10所述的处理器,其特征在于,所述控制逻辑将确定对于所述第一线程是否存在靠近指令端饥饿的指示,并且如果对于所述第一线程存在靠近指令端饥饿的指示,则递增存储在所述第一起始计数器中的值。
12.如权利要求11所述的处理器,其特征在于,所述控制逻辑通过确定多个条件是否为真,来确定对于所述第一线程是否存在靠近指令端饥饿的指示,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不具有指令;以及所述第一线程是否正试图从存储器取指令。
13.如权利要求12所述的处理器,其特征在于,所述控制逻辑将几何递增存储在第一起始计数器中的值。
14.如权利要求13所述的处理器,其特征在于,通过将二进制1位向左移入所述值中,来几何递增所述值。
15.一种用于操纵并行处理至少第一和第二线程的处理器,包括控制逻辑,用于将优先级分配给所述第一线程,并且响应多个为真的条件之一,将优先级分配给所述第二线程,所述条件包括所述第一线程的处理是否从所述第一线程引退指令;以及对于所述第一线程是否不存在靠近指令端饥饿的指示。
16.如权利要求15所述的处理器,其特征在于,所述对于所述第一线程靠近指令端饥饿的指示包括多个为真的条件,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不具有指令;以及所述第一线程是否正试图从存储器取指令。
17.一种用于操纵并行处理至少第一和第二线程的计算机系统,包括存储器,用于存储第一和第二线程的指令;处理器,包括与所述存储器相耦合的控制逻辑,用于在所述第一和第二线程之间分配优先级;与所述控制逻辑相耦合的线程优先序计数器,其中在所述线程优先序计数器到期后,将优先级分配给所述第二线程。
18.如权利要求17所述的计算机系统,其特征在于,所述线程优先序计数器的初始值根据存储在与所述第一线程相关联的第一起始计数器中的值而定。
19.如权利要求18所述的计算机系统,其特征在于,所述控制逻辑将确定对于所述第一线程是否存在靠近指令端饥饿的指示,并且响应对于所述第一线程靠近指令端饥饿的指示来递增存储在所述第一起始计数器中的值。
20.如权利要求19所述的计算机系统,其特征在于,所述控制逻辑通过确定多个条件是否为真,来确定对于所述第一线程是否存在靠近指令端饥饿的指示,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不具有指令;以及所述第一线程是否正试图从存储器取指令。
21.如权利要求20所述的计算机系统,其特征在于,所述控制逻辑将几何递增存储在第一起始计数器中的值。
22.如权利要求21所述的计算机系统,其特征在于,通过将二进制1位向左移入所述值中,来几何递增所述值。
23.一种用于操纵并行处理至少第一和第二线程的计算机系统,包括存储器,用于存储第一和第二线程的指令;处理器,包括控制逻辑,用于将优先级分配给所述第一线程,并且响应多个为真的条件之一,将优先级分配给所述第二线程,所述条件包括所述第一线程的处理是否从所述第一线程引退指令;以及对于所述第一线程是否不存在靠近指令端饥饿的指示。
24.如权利要求23所述的计算机系统,其特征在于,所述对于所述第一线程靠近指令端饥饿的指示包括多个为真的条件,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不具有指令;以及所述第一线程是否正试图从存储器取指令。
25.一种驻留在存储介质中的指令集,所述指令集能够被处理器执行来操纵并行处理至少第一和第二线程并且分配线程优先级,包括将优先级分配给所述第一线程;将初始值载入线程优先序计数器;以及在所述线程优先序计数器到期后,将优先级分配给所述第二线程。
26.如权利要求25所述的指令集,其特征在于,所述初始值根据存储在与所述第一线程相关联的第一起始计数器中的值而定。
27.如权利要求26所述的指令集,其特征在于所述方法进一步包括确定对于所述第一线程是否存在靠近指令端饥饿的指示;以及响应对于所述第一线程靠近指令端饥饿的指示,递增存储在所述第一起始计数器中的值。
28.如权利要求27所述的指令集,其特征在于,确定对于所述第一线程是否存在靠近指令端饥饿的指示,包括确定多个条件是否为真,所述条件包括所述处理器是否在多线程处理模式中操作;所述第一线程是否在所述处理器的执行流水线中不具有指令;以及所述第一线程是否正试图从存储器中取指令。
29.如权利要求28所述的指令集,其特征在于,当递增存储在第一起始计数器中的值时,几何递增所述值。
30.如权利要求29所述的指令集,其特征在于,通过将二进制1位向左移入所述值中,来几何递增所述值。
全文摘要
在多线程处理器中,在存储器中设置线程优先级变量。线程优先级的实际分配根据线程优先序计数器的到期而定。为进一步增加,线程优先序计数器的效率,起始计数器与每个线程相关联,所述起始计数器用作在线程优先序计数器中要用的值的乘法器。起始计数器中的值被操纵,以便阻止一个线程获得对多线程处理器的资源的不适当的优先级。
文档编号G06F9/48GK1518691SQ02812515
公开日2004年8月4日 申请日期2002年4月18日 优先权日2001年6月22日
发明者D·博格斯, D·萨格尔, M·乌普顿, J·阿伦, D·博恩斯, D 博格斯, 斩 , 穸 , 魉 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1