首页> 中国专利> 在多线程处理器中改变线程优先级的方法和装置

在多线程处理器中改变线程优先级的方法和装置

摘要

一种在数据处理系统中完成计算机处理操作的系统和方法包括一个多线程处理器(100)和线程切换逻辑(400)。多线程处理器能在两个或多个能被独立执行的指令线程之间切换。每个线程在线程状态寄存器(440)中有一个取决于它的执行状态的相应状态。线程切换逻辑包括一个线程切换控制寄存器(410)存储将发生线程切换的条件。该线程切换逻辑有一个超时寄存器(430),当在多线程处理器中的活动线程的执行超过一个可编程的时间段时迫使发生线程切换。线程切换逻辑还有一个前进计数寄存器(420)防止在多线程处理器中在线程之间发生反复的无产出的线程切换。线程切换逻辑还响应于一个能改变不同线程优先级的软件管理器,从而替代线程切换事件。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-11-06

    专利权有效期届满 IPC(主分类):G06F9/46 授权公告日:20030806 申请日:19981014

    专利权的终止

  • 2018-04-17

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F9/46 变更前: 变更后: 申请日:19981014

    专利权人的姓名或者名称、地址的变更

  • 2012-04-11

    专利权的转移 IPC(主分类):G06F9/46 变更前: 变更后: 登记生效日:20120301 申请日:19981014

    专利申请权、专利权的转移

  • 2003-08-06

    授权

    授权

  • 2000-12-20

    实质审查请求的生效

    实质审查请求的生效

  • 2000-12-13

    公开

    公开

查看全部

说明书

本发明涉及下列美国专利申请,这些申请的主题在此被纳入作为参考:(1)美国专利申请,题为“在多线程处理器中选择线程切换事件的方法和装置,系列号08/958,716,于1997年10月23日递交,与本申请同时递交;(2)美国专利申请,题为“多线程处理器系统中的线程切换控制”,系列号08/957,002,于1997年10月23日与本申请同时递交;(3)美国专利申请,题为“在多线程处理器中保证前进的装置和方法,系列号08/956,875,于1997年10月23日与本申请同时递交;(4)美国专利申请,题为“在多线程处理器中强行线程切换的方法和装置”,系列号08/956,577,于1997年10月23日递交,与本申请同时递交,(5)美国专利申请,题为“在多线程处理器中后台完成指令及相关的取请求”,系列号773,572,于1996年12月27日递交;(6)美国专利申请,题为“多入口全相关过渡高速缓存”,系列号761,378,于1996年12月9日递交;(7)美国专利申请,题为“对从命令源到命令容纳点的命令设定优先级和路由的方法和装置”,系列号761,380,于1996年12月9日受理;(8)美国专利申请,题为“命令追踪处理过程的方法和装置”,系列号761,379,于1996年12月9日递交;(9)美国专利申请,题为“通过减小存储器访问等待延迟以增强数据处理系统中多线程操作的方法和系统”,系列号473,692,于1995年6月7日递交;(10)美国专利5,778,243号,题为“存储器的多线程单元”,1998年7月7日发布。

一般而言,本发明涉及用于计算机数据处理系统的一种改进的方法和装置,具体而言,本发明涉及在处理器硬件中实现的一种改进的高性能多线程计算机数据处理系统和方法。

现代计算机的基本结构包括与外部世界进行信息通信的外围装置;这些外围装置可以是键盘、监视器、磁带驱动器、与网络连接的通信线路等。在计算机的基本结构中还包括从外部世界接收这种信息,处理这种信息及向外部世界发布这种信息所必须的硬件,包括总线(bus)、存储器单元、输入/输出(I/O)控制器、存储装置、以及至少一个中央处理单元(CPU)等。CPU是系统的大脑。它执行包括计算机程序的指令,指挥其他系统部件的操作。

从计算机硬件的角度看,大多数系统以基本相同的方式操作。处理器实际上是快速完成非常简单的操作,如算术和逻辑比较以及从一地到另一地移动数据。指挥计算机完成大量这种简单操作的程序给人一种错觉,似乎计算机在做复杂的事情。用户感觉到的计算机系统的新的或改善的能力实际上都可能是机器完成同样的简单操作,但快得多。所以,对计算机系统的不断改进需要使这些系统比以往更快。

对计算机系统总速度的一种度量,也称作通过量,是由每单位时间完成的运算次数来度量的。从概念上讲,对系统速度的所有可能的改进中最简单的是提高各组成部分的时钟速度,特别是处理器的时钟速度。于是,如果每个部件以两倍速度运行而工作方式完全不变,则系统将在一半时间内完成给定任务。多年以前由分离元件构成的计算机处理器通过缩小尺寸和减少元件数量使其运行速度显著加快;最终使整个处理器作为一个集成电路组装到单个芯片上。这种尺寸减小使有可能提高处理器的时钟速度,从而提高系统速度。

尽管由集成电路得到了速度的巨大改进,但仍然存在对更快计算机系统的需求。硬件设计者们通过更大规模的集成和其他技术、进一步减小电路尺寸,已能进一步改善速度。然而,设计者们认为,物理尺寸的减小不能无限地继续下去,而且继续提高处理器时钟速度也是有限的。所以,为进一步改善计算机系统的总体速度,其注意力已指向其他途径。

不改变时钟速度,利用多处理器仍能改善系统速度。组装在集成电路芯片上的单个处理器成本适中,使得使用多处理器成为实际可行的。使用从属处理器,通过把工作从CPU卸载到从属处理器,相当大地改善了系统速度。例如,从属处理器常规地执行重复的和单一专用目的的程序,例如输入/输出装置通信和控制。还可能把多个CPU放入单一计算机系统,典型情况是同时服务于多用户的基于主机的系统。每个不同的CPU能代表不同的用户单独执行不同的任务,从而提高系统同时执行多个任务的总体速度。然而,要改善单个任务(例如一个应用系统)的执行速度则困难得多。在多个CPU当中协调各功能的执行和发送结果,这是一个需要技巧的事。对于从属I/O处理器,这不那么困难,因为功能是预先确定的和有限的,然而对于执行通用应用程序的多CPU,要协调各功能则困难得多,部分原因是设计者们事先不知道程序的详细情况。大多数应用程序遵循由处理器完成的单一路径或步骤流程。但有时可能打破这一单一路径,变成多个平行的路径,这样做的通用性应用还处于研究之中。一般地说,把一个长的任务分配成较短的任务让多处理器平行处理是由根据每个具体情况来编写代码的软件工程师完成的。这种专门特定方案对于执行那些不一定会重复或不一定可预测的商业事务是特别有问题的。

这样,尽管多处理器能改善总体系统性能,但仍有许多理由要改善单个CPU的速度。如果CPU时钟速度是给定的,但通过增加每个时钟周期的平均运算次数,仍能进一步提高CPU速度,即增加每秒执行的运算次数。高性能单芯片微处理器的一般结构是简化指令集计算机(RISC)结构,其特点是一个快速执行的常用指令小型简化集合,即前面提到的那些快速完成的简单运算。随着半导体技术的进步,RISC结构的目标已经是开发能在每个机器时钟周期执行一个或多个指令的处理器。增加每个时钟周期执行的平均运算次数的另一途径是修改CPU内部的硬件。这一通过量度量,即每条指令的时钟周期数,通常用于表征高性能处理器的结构的性能。指令流水线和高速缓存存储器是能实现这一点的计算机结构特征。流水线指令执行允许在完成先前发出的指令之前开始执行其后的指令。高速缓存存储器存储经常使用的以及靠近存储器的其他数据,并在大多数情况下允许指令继续执行而无需等待主存储器的完全访问时间。利用向前看硬件找出要平行执行的指令,从而多执行单元也已表现出某些改进。

在超标量(superscalar)计算机和甚长指令字(VLIW)计算机中能进一步提高传统RISC处理器的性能,这两种计算机在每个处理器周期平行地执行多于1条指令。在这种结构中提供了多功能单元或多执行单元以平行地运行多个流水线。在超标量结构中,指令可以按顺序完成和不按顺序完成。按顺序完成的意思是在其前面已安排的所有指令已经完成之前没有任何指令能完成。不按顺序完成的意思是允许在其前面的所有指令完成之前来完成该指令,只要能满足预先定义的规则即可。

为了在超标量系统中按顺序和不按顺序完成指令,在某些环境下流水线将停止。如果一条指令依赖于先前分配的未完成指令的结果,则会造成流水线停止。例如,一些指令所依赖的加载/存储指令中所需数据未在高速缓存中,即高速缓存缺失(miss),则在高速缓存中能得到数据之前便不能完成这些指令。在高速缓存中保持为继续执行所需的数据,并维持高命中率,即对数据的请求次数与在高速缓存中准备好可用数据的次数之比,对于特别是涉及大数据结构的计算而言,可不是小事。高速缓存缺失能造成流水线停止达几个周期,而且如果在大部分时间里不能得到数据,则存储器等待时间总量将是严重的。虽然主存储器所用存储器装置的速度在变得更快,但这种存储器芯片和高端处理器之间的这种速度差距都不断增大。于是,在当前的高端处理器设计中有大量执行时间量花费在等待解决高速缓存缺失,而这些存储器访问延迟用去了处理器执行时间中越来越多的部分。

改进CPU内硬件效率的又一种技术是把处理任务分配成可独立执行的指令序列,称作线程(thread)。这一技术涉及把一较大任务分配成较小的任务而由不同的处理器执行,唯其其中这些线程是由同一处理器执行。于是,当由于多种理由中的任何一个使CPU不能继续处理或执行这些线程之一时,该CPU便切换到去执行另一线程。在计算机结构领域中定义的术语“多线程(multithreading)”不同于该术语在软件方面的应用,在软件使用中该术语的意思是一个任务分成多个相关线程。在结构定义中,线程可以是独立的。所以,“硬件多线程”常用于区分该术语的两种应用。在本发明的范围内,术语“多线程”的意思就是承受存储器等待时间的硬件多线程。

当对当前线程检测到流水线停止条件时,多线程允许处理器的流水线在不同的线程上作有用的工作。多线程还允许在检测到当前线程的停止条件时让实现非流水线结构的处理器为一单独的线程去做有用的工作。有两种基本的多线程形式。一种传统的形式是在处理器中保持N个线程或状态,并在逐个周期的基础上使这些线程相互交错。这要消除所有流水线的依赖关系,因为在单一线程中的指令是彼此分离的。多线程的另一种形式,即本发明中要考虑的一种形式,是对某些长等待时间事件交错其线程。

多线程的传统形式涉及对每个线程复制处理器寄存器。例如,以商品名PowerPCTM售出的实现该结构的处理器,为实现多线程,处理器必须维持N个状态以运行N个线程。于是下列寄存器被复制N次:通用寄存器、浮点寄存器、条件(condition)寄存器、浮点状态和控制寄存器、计数寄存器、链路寄存器、异常寄存器、保存/恢复寄存器、以及专用寄存器。再有,特殊的缓存器,如段后备缓存器,可被复制或每个入口可以用线程号作标记,如果不如此做,则可在每次线程切换时清仓。还有,一些分支预测机制,例如相关寄存器和返回堆栈,也应被复制。幸运的是,不需要复制处理器的某些更大的功能,例如一级指令高速缓存(L1I-高速缓存)、一级数据高速缓存(L1D-高速缓存)、指令缓存器、存储队列、指令调度器、功能或执行单元、流水线、翻译后备缓存器(TLB)、以及分支历史表。当一个线程遇到延迟时,处理器迅速切换到另一线程。这一线程的执行复盖了在第一线程上的存储器延迟。

现有的多线程技术在一高速缓存缺失或一存储器查访上描述切换线程。在“Sparcle:大规模多处理器的一种变革性设计”(Agarwal等,IEEE微(Micro)卷13、No.3,pp48-60,1993年6月)中回顾了这一技术的主要实例。如在RISC体系结构中应用的那样,通常用于支持功能调用的多寄存器集被修改成用于维持多线程。8个重叠的寄存器窗口被修改成4个不重叠的寄存器集,其中每个寄存器集是为捕获和消息处理所作的保留。这一系统揭示出一个线程切换,它发生在每次远程存储器请求中所造成的一级高速缓存缺失时。尽管这一系统代表了技术上的一种进步,但现代处理器设计经常利用附加在处理器上的多级高速缓存和高速存储器。该处理器系统利用某种公知的算法以确定每级高速缓存内将加载的主存储器的那个部分,这样,每当发生存储器访问时,如果它不在第一级高速缓存中,则处理器必须试图从第二级或更高级高速缓存中得到那个存储器访问内容。

这样,本发明的一个目标是提供一种改进的数据处理系统,它能利用多线程数据处理系统中实现的硬件逻辑和寄存器在一多级高速缓存系统中减小由于存储器等待时间造成的延迟。

本发明通过提供一个能在两个指令线程之间切换执行的多线程处理器和在带有可选的对线程切换条件进行软件改写的硬件寄存器中实现的线程切换逻辑来实现这一目标。处理各种指令线程的各种状态允许优化处理器在各线程当中的使用。当处理器为第一线程从各种存储器部件,例如第一线程的高速缓存、存储器、外部I/O、直接存取存储器,检索必要的数据和/或指令时,允许该处理器去执行第二指令线程从而提高对处理器的利用程度,否则它会是空闲的。线程线换的条件对于每个线程可以是不同的,或者可以通过利用一个软件线程控制管理器在处理过程中改变线程切换条件。

当第一线程具有要求大量周期来完成的等待时间事件例如高速缓存缺失时,可处理第二线程,在此期间第二线程可能遇到在同一或不同高速缓存级上的高速缓存缺失,但它可在短得多的时间内完成。

通过本发明实现一个前进计数寄存器和允许一个可编程最大线程切换次数的方法(在超过此最大次数之后处理器停止切换线程直至一个线程能够执行),可以避免翻来复去地重复,其中每个线程被锁在切换线程的一个重复周期中而没有任何指令在执行的情况。前进寄存器及其阈值监视在没有指令执行的情况下已发生的线程切换次数,并当这个次数等于阈值时便不再发生线程切换,直至一条指令被执行。前进计数寄存器的一个附加优点是能对某些等待时间的事件定制寄存器和阈值,例如一个阈值用于像访问外部计算机网络那样的等待时间很长的事件;而另一个前进阈值用于像高速缓存缺失那样的等待时间较短的事件。

在等待由一线程切换超时寄存器中指定的周期数之后迫使一线程切换可以防止对一线程的计算机处理在一个超常的时间段内处于不活动状态。计算机处理系统不会由于急用共享资源而遭到挂起。实现了在线程之间公平分配处理器周期,而且限定了对外部中断及处理器外部其他事件的最大响应等待时间。

快速线程切换是由硬件寄存器实现的,这些寄存器存储线程状态、线程优先级、以及线程切换条件。

利用线程切换硬件寄存器能改变处理器中一个或多个线程的优先级。来自中断请求的信号或者软件指令都能用于修改指示每个线程优先级的状态寄存器中的位。然后,根据每个线程的优先级,可以发生线程切换,以允许较高优先级的线程有更多的处理周期。改变优先级的好处在于允许改变线程切换频率,增加至关重要的任务的执行周期数,减小由于线程切换等待时间造成的高优先级线程丢失的处理周期数。

本发明的另一方面是在数据处理系统中完成多线程操作的一种计算机方法,作法是在与至少一个存储器单元相连的多线程处理器中执行多个指令线程中的至少一个,每个指令线程有一个优先级,并改变这多个线程中一个或多个的优先级。根据所有这些线程的优先级,该多重处理器能从一个线程切换到另一线程。优先级或者可由来自中断的信号改变,或者可由称作线程切换管理器的硬件和软件结构安排来改变。线程优先级意味着一个线程的优先级能高于另一个,但这些线程也能有相等的优先级。提出了一种优先级方案,其中每个线程能有3个优先级之一。当第二线程处于准备好状态时,能从较低优先级的第一线程离开的切换。当高优先级线程有一个缺失是来自一级高速缓存或其他有快速响应时间的存储器时,能取消从这个有较高优先级的第一线程离开的切换。

简言之,本发明是根据处理器中所有线程的相对优先级在此多线程处理器中对多个指令线程的每一个分配处理器周期的计算机处理方法。

线程切换管理器是一种硬件和软件的结构安排,它有至少一个优先级切换指令,在一个第一寄存器(如机器状态寄存器和/或线程切换控制寄存器)中的至少一个线程切换优先级位,以及在一个第二寄存器(如线程状态寄存器)中的多个状态位,其中优先级切换指令能改变这多个优先级状态位中的任何一位。在一个有不只一个线程的多线程处理系统中,正在执行的线程称作活动线程。优先级切换指令能改变与多线程处理系统中的活动线程或任何其他线程相对应的优先级状态位。然后,如果一个线程切换优先级位是有效的,则多线程处理器把处理从活动线程切换出去,以响应于该活动线程或另一线程优先级的变化。

为把一现有的处理器改造成能容纳线程切换管理器,该优先级切换指令不应改变多线程处理器中被纳入结构的多个寄存器中的任何一个,还应在多线程处理器上执行并且没有非法指令中断,例如该优先级切换指令可以是一个优选的空操作(no op)指令。

在本发明还是一个计算机处理系统,包括处理多个指令线程的装置;存储这多个线程中每个优先级状态的装置;改变这多个线程中每个的优先级状态的装置,以及响应于该装置使处理装置能把处理从多个线程中的第一线程切换到多个线程中的第二线程的装置。

从下面对最佳实施例及附图的详细描述,将清楚看出本发明的其他目标、特性和特征;其结构的相关元件的方法、操作和功能;部件的组合;以及制造的经济方面,所有这些都构成本发明的一部分,其中在各图中相似参考数字标明相应的部件。

然而,参考下文中结合附图阅读示例性实施例的详细描述,将会最好地理解发明本身及其最佳使用方式,以及其他目标和优点,其中,

图1是能实现其中描述的发明的计算机系统方框图。

图2显示根据本发明的多线程数据处理系统的高层次方框图。

图3显示图2的存储控制单元的方框图。

图4显示图2的线程切换逻辑、存储控制单元及指令单元的方框图。

图5显示当线程遇到图4所示不同线程切换事件时该线程状态的变化。

图6是本发明的前进计数的流程图。

现在参考附图,具体参考图1,图中描述了计算机数据处理系统10的高极方框图,该系统可用于实现本发明的方法和系统。能利用本发明的计算机数据处理系统10的主要硬件及相互连接示于图1。用于处理指令的中央处理单元(CPU)100与高速缓存120、130及150相连。指令高速缓存150存储供CPU100执行的指令。数据高速缓存120存储CPU100所用数据,而高速缓存130能存储由CPU100使用的数据和指令二者,例如高速缓存130能是一个L2高速缓存。高速缓存与主存储器140中的随机存取存储器通信。CPU100和主存储器140还经由总线接口152与系统总线155通信。各种输入/输出处理器(IOP)160-168附加在系统总线155上并支持与各种存储装置及输入/输出(I/O)装置通信,例如直接存取存储装置(DASD)170、带驱动器172、远程通信线路174、工作站176、及打印机178。应该理解,图1是要在高一级上描述计算机数据处理系统10的代表性组成部件,这些组成部件的数量和类型可以变化。

在CPU100内部,处理器核110包括专门化的功能单元,它们每个完成基本的操作,如对指令排序、执行涉及整数的运算、执行涉及实数的运算、在可编址存储器和逻辑寄存器阵列之间传送数值。图2显示处在计算机数据处理系统10的其他组成部件环境中的处理器核110的细节。在一个最佳实施例中,数据处理系统10的处理器核110是一个单个集成电路、构成流水线的超标量微处理器,它可利用任何计算机结构实现,如以商品名PowerPCTM出售的RISC处理器系列;例如由IBM出售的PowerPCTM 604微处理器芯片。

如下文中要讨论的那样,数据处理系统10最好包括各种单元、寄存器、缓存器、存储器及其他部分,它们都最好由集成电路构成。应该理解,在图中各数据路径已被简化;在实际上,有许多单独的和平行的数据路径进出各部件。此外,与其中描述的发明关系不密切的各种部件已被略去,但应该理解,处理器含有额外的单元用于额外的功能。数据处理系统10可根据简化指令集计算(RISC)技术或其他计算技术进行操作。

如图2所示,数据处理系统10的处理器核100最好包括一个一级数据高速缓存(L1 D-高速缓存)120,一个二级L2高速缓存130,一个主存储器140,以及一个一级指令高速缓存(L1 I-高速缓存)150,所有这些都在操作上利用各种总线连接连至存储控制单元200。如图1中所示,存储控制单元200包括用于互连L1 D-高速缓存120和L2高速缓存130的过渡高速缓存210、主存储器140、以及多个执行单元。L1D-高速缓存120和L1 I-高速缓存150最好作为处理器100的一部分在芯片上提供,而主存储器140和L2高速缓存130可在芯片外提供。存储器系统140准备用于代表随机存取主存储器(它可以在处理器核100内部,也可以不在)以及在处理器核100外部的其他数据缓存器和高速缓存(如果有的话),以及其他外部存储器,例如DASD170、带驱动器172及工作站176,如图1中所示。L2高速缓存130最好是比主存储器140速度更高的存储器系统,通过把选定的数据存储在L2高速缓存130中,能将由于访问主存储器140而发生的存储器等待时间减至最小。如图1所示,L2高速缓存130和主存储器140经由存储控制单元200直接连至L1 I-高速缓存150和指令单元220二者。

来自L1 I-高速缓存150的指令最好输出到指令单元220,根据本发明的方法和系统,指令单元220控制由各种子处理单元(如分支单元260、定点单元270、存储控制单元200、浮点单元280以及其他单元)执行多个线程,这些单元由数据处理系统10的结构指定。除了图1中描述的各种执行单元外,本领域技术人员会理解,现代超标量微处理器系统常常包括每个这种执行单元的多种版本,可以增加它们而不离开本发明的实质和范围。这些单元大多数将有来自各种寄存器(如通用寄存器GPR272、浮点寄存器FPR282)的操作数信息,作为输入源。此外,可以利用多个专用寄存器SPR274。如图1所示,存储控制单元200和过渡高速缓存210直接与通用寄存器272及浮点寄存器282相连。通用寄存器272与专用寄存器274相连。

在只有这个多线程处理器100才有的各功能硬件单元当中,是线程切换逻辑400和过渡高速缓存210。线程切换逻辑400含有各种寄存器,它们确定哪个线程将是活动的或执行的线程。线程切换逻辑400在操作上与存储控制单元200、执行单元260、270和280、以及指令单元220相连。在存储控制单元200内部的过渡高速缓存210必须能实现多线程。存储控制单元200和过渡高速缓存210最好允许每线程至少一个未完成的数据请求。这样,当第一线程响应于例如L1 D-高速缓存缺失的发生而被挂起时,第二线程将能访问L1 D-高速缓存以得到那里存在的数据。如果这第二线程也造成L1 D-高速缓存缺失,则将发出另一个数据请求,这样在存储控制单元200和过渡高速缓存210中必须保持多个数据请求。过渡缓存210最好是递交美国专利申请系列号08/761,378的过渡高速缓存,该申请于1996年12月9日递交,题为“多入口全相关过渡高速缓存”,其中作为参考引入。存储控制单元200、执行单元260、270和280以及指令单元220都在操作上与线程切换逻辑400相连。由它确定要执行哪个线程。

如图2所示,在存储控制单元200和指令单元220之间提供了总线205,用于例如把数据请求传送给存储控制单元200和把L2高速缓存130缺失传送给指令单元220。再有,提供了一个翻译后备缓存器TLB250,它含有虚拟到实际地址映射。虽然在本发明中未予说明,但可以提供各种附加的高级存储器映射缓存器,如段后备缓存器,它的工作方式与翻译后备缓存器250相同。

图3更详细地显示存储控制单元200,如它的名称表明的那样,这一单元控制从各种存储单元输入和输出的数据和指令,它们包括各种高速缓存、缓存器以及主存储器。如图3所示,存储控制单元200包括过渡高速缓存210,它在功能上与L1 D-高速缓存120、多路复用器360、L2高速缓存130以及主存储器140相连。再有,过渡高速缓存210从排序器350接收控制信号。排序器350包括多个排序器,最好是3个,用于处理指令和/或数据的取请求。排序器350还向过渡高速缓存210及L2高速缓存130输出控制信号,并对主存储器140收、发控制信号。

图3所示存储控制单元200中的多路复用器360从L1 D-高速缓存120、过渡高速缓存210、L2高速缓存130及主存储器140接收数据,如果数据是要存储到存储器的话,则还从执行单元270和280接收数据。多路复用器360对来自这些源的数据进行选择,并响应于一个从排序器350收到的选择控制信号,把数据输出到L1 D-高速缓存120或执行单元。再有,如图3所示,排序器350输出一个选择信号去控制第二多路复用器370。多路复用器370根据从排序器350收到的这个选择信号,把来自L2高速缓存130或主存储器140的数据输出到L1 I-高速缓存150或指令单元220。在产生上文讨论的控制和选择信号时,排序器350访问和更新L1 D-高速缓存120的L1目录320及L2高速缓存130的L2目录。

关于其中描述的处理器的多线程能力,存储控制单元200的排序器350还向线程切换逻辑400输出信号,这些信号指出数据和指令请求的状态。于是,来自高速缓存120、130和150、主存储器140以及过渡后备缓存器250的反馈被送到排序器350,然后传送到线程切换逻辑400,它可以造成线程切换,如下文讨论的那样。请注意,如果在任何装置中发生能在多线程处理器中造成线程切换的事件,则它在操作上与排序器350相连。

图4是线程切换逻辑硬件400的逻辑表示和方框图,该硬件400确定是否一个线程将被切换,如果是,是哪个线程。存储控制单元200和指令单元220与线程切换逻辑400互连。线程切换逻辑400最好容纳在指令单元220中,但如果有许多线程,则线程切换逻辑400的复杂性会增加,因此该逻辑对指令单元220而言是外部的。为易于解释,图示的线程切换逻辑400对指令单元220是外部的。

在本实施例中会造成一个线程被切换的事件在线470、472、474、476、478、480、482、484及486上从存储控制单元200的排序器350向线程切换逻辑400传送。其他等待事件能引起线程切换;这个清单不想全包括;相反,它只是表示如何能实现线程切换。由第一线程T0或第二线程T1请求一个未在指令单元220中的指令,则造成一个能引起线程切换的事件,在图4中分别由470和472表示。线474指示何时活动线程(不论是T0还是T1)遇到一个L1 D-高速缓存缺失120。L2高速缓存130对于线程T0或T1的高速缓存缺失分别由线476和478表示。当为T0线程或为T1线程返回数据时线480和482分别被激活。翻译后备缓存器缺失和完成表游动(table walk)分别由线484和486指示。

这些事件都被馈送到线程切换逻辑400,更具体地说是馈送到线程状态寄存器440和线程切换控制器450。线程切换逻辑400对每个线程有一个线程状态寄存器。在其中描述的实施例中表现出两个线程,所以有T0状态寄存器442用于第一线程T0和T1状态寄存器444用于第二线程T1,其中将对它们进行描述。线程切换逻辑400包括线程切换控制寄存器410,它控制哪些事件将造成线程切换。例如,线程切换控制寄存器410能锁住会引起状态变化的事件,使线程切换控制器450看不到这些事件,从而使一线程不会由于被锁住事件的结果而被切换。线程状态寄存器和改变线程的逻辑与操作是题为“多线程处理器系统中的线程切换控制”的美国专利申请的主题,该专利申请系列号为08/957,002,于1997年10月23日与本申请同时递交,其中作为参考引入。线程切换控制寄存器410是题为“在多线程处理器中选择线程切换事件的方法和装置”的美国专利申请的主题,该申请的系列号是08/958,716,1997年10月23日递交,与本申请同时递交,其中作为参考引入。前进计数寄存器420用于防止翻来复去地重复,它可以包括在线程切换控制寄存器410中。前进计数寄存器420是题为“在多线程处理器中保证前进的装置和方法”的美国专利申请的主题,该申请的系列号是08/956,875,1997年10月23日递交,与本申请同时递交,其中作为参考引入。线程切换超时寄存器430是题为“在多线程处理器中迫使线程切换的方法和装置”的美国专利申请的主题,该申请的系列号是08/956,577,1997年10月23日递交,与本申请同时递交,其中作为参考引入。线程切换超时寄存器430分配公平性和实际锁定(live lock)事项。最后,但不限于此,线程切换控制器450包括无数个逻辑门,它们代表了所有逻辑的终极,这些逻辑实际确定是否一个线程被切换,哪个线程以及在什么环境下被切换。将进一步详细给出这些逻辑部件及其功能。

线程状态寄存器

线程状态寄存器440包括每个线程的一个状态寄存器,如其名称所表明的那样,它存储相应线程的状态;在这一情况中是T0线程状态寄存器442和T1线程状态寄存器444。对于具体的结构和线程切换优先级方案,可以定制位数和特定位的位置以描述每个线程的状态。在下表中列出对具有两个线程的多线程处理器在其线程状态寄存器442和444中各位的分配。

                线程状态寄存器位分配

        (0)     指令/数据

                0=指令

                1=数据

        (1:2)  缺失类型排序器

                00=无缺失

                01=翻译后备缓存器缺失(检验位0判定I/D)

                10=L1高速缓存缺失

                11=L2高速缓存缺失

        (3)     过渡

                0=到当前状态的过渡不造成线程切换

                1=到当前状态的过渡造成线程切换

        (4:7)  保留

        (8)     0=加载

                1=存储

        (9:14) 保留

        (15:17)前进计数器

                111=复位(在这一线程中指令已完成)

                000=该线程W/0指令第一次执行完成

                001=该线程W/0指令第二次执行完成

                010=该线程W/0指令第三次执行完成

                011=该线程W/0指令第四次执行完成

              100=该线程W/0指令第五次执行完成

      (18:19)优先级(可由软件设置)

              00=中等

              01=低

              10=高

              11=<非法>

      (20:31)保留

      (32:63)保留,如果是64位实现的话

在其中描述的实施例中,位0标识缺失或处理器停止执行的理由是否是一个请求指令或数据的结果。位1和2指示所请求的信息能否得到,如果如此,是从哪个硬件,即所翻译的数据或指令地址是否不在翻译后备缓存器250中,或者数据或指令本身不在L1 D-高速缓存120或L2高速缓存130中,在图5的描述中将进一步解释。位3指示是否一线程状态的改变会造成线程切换。一个线程可以改变其状态而不造成线程切换。例如,如果当线程T1遇到一个L1高速缓存缺失时发生了线程切换,那么如果线程T1遇到一个L2高速缓存缺失则将不会有线程切换,因为该线程已由于L1高速缓存缺失而切换了。然而,T1的状态仍然改变。另一种情况是,如果通过选择,线程切换逻辑400被配置或编程,使得在L1高速缓存缺失时不切换,那么当一线程确实遇到L1高速缓存缺失时,即使该线程改变其状态,将没有线程切换。线程状态寄存器442和444的位8被分配为特定线程请求的信息是要加载到处理器核中还是从处理器核中存储到高速缓存或主存储器中。位15至17被分配为防止翻来复去的重复,下文中将参考前进计数寄存器420加以讨论。位18和19能在硬件中设定,或能由软件设定,以指示线程优先级。

图5代表本实施例中由数据处理系统10处理的一个线程的4种状态,这些状态存储在线程状态寄存器440中,位的位置是1:2。状态00代表“准备好”状态,即该线程已准备好供处理,因为所需要的所有数据和指令都能得到;状态10代表这样的线程状态,其中在处理器内该线程的执行被停止,因为该线程在等待或者数据返回到L1 D-高速缓存120中或者指令返回到L1 I-高速缓存150中;状态11代表该线程在等待数据返回到L2高速缓存130;状态01表明在翻译后备缓存器250上有一缺失,即虚拟地址错或不可用,称作“表游走(table walk)”。在图5中还显示出线程状态的层次结构,其中状态00指示该线程已准备好供执行,具有最高优先级。短等待时间的事件最好赋予较高优先级。

图5还显示了当从各种源提取数据时状态的变化。正常的无中断地执行线程T0在块510中表示为状态00。如果发生L1 D-高速缓存或I-高速缓存缺失,则线程状态变为状态10,如在块512中表示的,遵循分别在线474(图4)上由存储器控制单元200发出的信号和在线470(图4)上由指令单元200发出的信号。如果所需的数据或指令在L2高速缓存130中并被提取,则在块510恢复T0的正常执行。类似地,图5的块514代表L2高速缓存缺失,它把T0或T1线程的状态改变为状态11,此时存储控制单元200在线476或478(图4)上通知这一缺失。当如线480和482(图4)上所指示的那样,从主存储器140中取出指令或数据到L2高速缓存中,并将其加载到处理器核100,则在块510,状态再变回到状态00。当所请求信息的虚拟地址在翻译后备缓存器250中不可用时,存储控制单元200在线484(图4)上与线程寄存器440通信,如块516所示,作为TLB缺失或状态01。当该地址变为可用的或者如果存在一个由存储控制单元200在线486(图4)上通告的数据存储中断指令,则该线程的状态返回到状态00,意思是已准备好供执行。

状态数和每个状态代表什么,可由计算机结构自由选定。例如,如果一线程有多个L1高速缓存缺失,例如L1 I-高速缓存缺失和L1 D-高速缓存缺失二者,则可对每个高速缓存类型赋予单独的状态。另一种作法是可以赋予单个线程状态来代表不只一个事件或事件发生。

给出了一个线程切换算法的实例,它针对有相等优先级的两个线程,用于确定是否要切换线程。能根据本发明的原理扩展和修改该算法,从而适用于更多的线程和线程切换条件。线程状态寄存器440(图4)中存储的每个线程的状态与线程切换算法给出的每个线程优先级二者之间的相互作用在每个周期要动态地被询问。如果活动线程T0有一个L1缺失,则该算法将使线程切换到休眠的线程T1,除非休眠线程T1在等待一个L2缺失的解决。如果未曾发生切换而且活动线程T0的L1高速缓存缺失转变成了L2高速缓存缺失,则该算法指示处理器切换到休眠线程T1而不管T1的状态如何。如果这两个线程都在等待一个L2高速缓存缺失的解决,则首先使L2缺失得到解决的那个线程成为活动线程。在每个切换决定时刻,在大多数情况下采取的行动是最佳化的,造成最好的性能。请注意,由L2高速缓存缺失造成的线程切换以其他线程的状态为条件,如果不是这样,则额外的线程切换就会发生,造成性能降低。

线程切换控制寄存器

在任何多线程处理器中,都存在与切换线程相关联的等待时间和性能代价。在其中描述的最佳实施例中的多线程处理器中,这种等待时间包括使当前线程完成到它能被中断并在其后被调用时能正确地重新启动的那一点所需要的时间,把针对该线程的硬件设施从当前线程的状态切换到新线程的状态所需要的时间,以及重新启动新线程和开始其执行所需要的时间。以本发明可操作的针对线程的硬件设施最好包括前面描述的线程状态寄存器和在美国专利5,778,243号中描述的存储器单元,该专利题为“存储器的多线程单元”,其中作为参考引入。为了在一个“粗粒的”多线程数据处理系统中实现最佳性能,与通常的单线程方式相反,在多线程方式中产生线程切换的事件的等待时间必须大于与切换线程相关联的性能损失。

用于产生线程切换的事件的等待时间依赖于硬件和软件二者。例如,在多线程处理器中特别的硬件考虑包括实现处理器芯片外部L2高速缓存所用外部SRAM的速度。在L2高速缓存中的快SRAM减小L1缺失的平均等待时间,而较慢的SRAMS增加L1缺失的平均等待时间。这样,如果在外部L2高速缓存数据访问等待时间大于线程切换代价的硬件中把一个线程切换事件定义为一个L1高速缓存缺失,则性能得到增强。作为特定软件代码特性如何影响线程切换事件等待时间的一例,考虑代码的L2高速缓存命中与缺失之比,即在L2高速缓存中能准确得到数据的次数与由于数据不在L2高速缓存中而必须从主存储器中提取数据的次数之比。L2命中与缺失之比高则减小L2高速缓存缺失的平均等待时间,因为L1高速缓存缺失很少会造成更长的L2缺失等待时间。L2命中与缺失之比低则增加L1缺失的平均等待时间,因为更多的L1缺失造成更长等待时间的L2缺失。这样,如果执行代码的L2命中与缺失之比高,则一个L1高速缓存缺失可不作为线程切换事件,因为L2高速缓存数据访问等待时间小于线程切换代价。当执行的软件代码具有低L2命中与缺失之比时,L1高速缓存缺失将被启动为线程切换事件,因为L1高速缓存缺失多半能导致更长等待时间的L2高速缓存缺失。

某些类型的等待事件是不容易被检测到的。例如,在某些系统中,当发生一高速缓存缺失时L2高速缓存向指令单元输出一个信号。然而,其他L2高速缓存不输出这种信号,例如,如果L2高速缓存控制器在处理器以外的单独芯片上,于是处理器不能容易地确定一个状态变化。在这些结构中,该处理器可对每个待决L1高速缓存缺失有一个周期计数器。如果在预定周期数之后缺失数据尚未从L2高速缓存返回,则处理器的行动犹如已发生了一个L2高速缓存缺失并相应地改变线程状态。这一算法可应用于有不只一种独特等待时间类型的其他场合。只作为一例,对于一个处理器中的L2高速缓存缺失,从主存储器取得数据的等待时间可能显著地不同于从另一处理器取得数据的等待时间。在线程状态寄存器中可对这两种事件赋予不同的状态。如果没有信号去区分这些状态,则可用一计数器去确定在它遇到L2高速缓存缺失之后该线程应为哪一状态。

线程切换控制寄存器410是一个软件可编程的寄存器,它选择事件以确定线程切换,并对每个定义的线程切换控制事件有一个单独的启动位。虽然其中描述的实施例未对每个线程实施单独的线程切换控制寄存器410,但能对每个线程实施单独的线程切换控制寄存器410,从而以更多的硬件和复杂性为代价提供更大的灵活性和更高的性能。再有,在一个线程切换控制寄存器中的线程切换控制事件不需要与任何其他线程切换控制寄存器中的线程切换控制事件完全相同。

线程切换控制寄存器410能由服务处理器以软件写入,例如在美国专利5,079,725号中说明的动态扫描通信接口,该专利题为“与扫描设计系统和扫描测试技术一起使用的芯片识别方法”,或者由处理器本身用软件系统代码写入。线程切换控制器450使用线程切换控制寄存器410的内容去使能允许或不允许产生一个线程切换。在寄存器410中的值1使与该位关联的线程切换控制事件能产生一个线程切换。在线程切换控制寄存器410中的值零不允许与该位关联的线程切换控制事件产生一个线程切换。当然,在执行线程过程中的一条指令能使那个特定线程或其他线程的任何一个或全部线程切换条件变为“不能”。下表显示线程切换事件和它们在寄存器410中的使能位之间的关联。

                  线程切换控制寄存器位赋值

(0)L1数据高速缓存取缺失时切换

(1)L1数据高速缓存存储缺失时切换

(2)L1指令高速缓存缺失时切换

(3)指令TLB缺失时切换

(4)L2高速缓存取缺失时切换

(5)L2高速缓存存储缺失时切换

(6)L2指令高速缓存缺失时切换

(7)数据TLB/段后备缓存器缺失时切换

(8)L2高速缓存缺失而且休眠线程无L2高速缓存缺失时切换

(9)当达到线程切换超时值时切换

(10)当L2高速缓存数据返回时切换

(11)IO外部访问时切换

(12)双X存储:两个中第一缺失(*)时切换

(13)双X存储:两个中第二个缺失(*)时切换

(14)存储多重/串:任何访问缺失时切换

(15)加载多重/串:任何访问缺失时切换

(16)保留

(17)双X加载:两个中第一个缺失(*)时切换

(18)双X加载:两个中第二个缺失(*)时切换

(19)如果机器状态寄存器(问题状态)位,msr(pr)=1则当“或”1,1,1指令时切换。允许软件优先级变化不依赖于msr(pr)。如果位19为1,“或”1,1,1指令设为低优先级。如果位19为0,在“或”1,1,1指令被执行时,只有当msr(pr)=0时优先级才设为低优先级。见下文要讨论的“以软件改变为优先级”。

(20)保留

(21)线程切换优先级使能

(22:29)保留

(30:31)前进计数

(32:63)在64位寄存器实现中保留

(*)双X加载/存储是指加载或存储一个基本半字、字或双字,它们穿过一个双字边界。在本文范围内的双X加载/存储不是加载或存储多个字或字串。线程切换超时寄存器

如前文讨论的那样,粗粒多线程处理器依靠长等待时间的事件去触发线程切换。有时在执行过程中在一多处理器环境中的一个处理器或在一多线程结构中的一个后台线程有一资源的所有权,该资源只能有单一所有者,而另一处理器或活动线程需要访问该资源,然后它才能前进。实例包括更新存储器页面表或从任务分配器得到一任务。该活动线程不能得到对该资源的所有权时不造成线程切换事件,尽管如此,线程在一个循环中绕圈,不能做有用的工作。在这种情况中,握有资源的后台线程不能得到对处理器的访问以释放资源,因为它从未遇到一个线程切换事件,因而不能成为活动线程。

在各线程当中分配处理周期是另一个关心的问题;如果与在同一处理器中其他线程上运行的软件代码相比,在一个线程上运行的软件代码很少遇到长等待时间的切换事件。那么该线程得到的处理周期便多于它的公平分享的处理周期。而可能超过最大可接受时间的另一种过度延迟是在一有限时间段内等待服务于一外部中断或在处理器外部的某些其他事件的一个不活动线程的等待时间。这样,如果没有有用的处理要完成以防止系统挂起的话,最好在某一时间之后迫使一线程切换到休眠线程。

在一时间段之后迫使一线程切换的逻辑是线程切换超时寄存器430(图4),一个减量器,以及一个减量器寄存器用于保持被减量的值。该线程切换超时寄存器430保持线程切换超时值。在本实施例中使用的线程切换超时寄存器430的实现示于下表:

                   线程切换超时寄存器位

(0:21)保留

(22:31)线程切换超时值

其中描述的本发明实施例不对每个线程实现一个单独的线程切换超时寄存器430,当然可以那样做以提供更大的灵活性。类似地,如果有多个线程,每个线程不需要有相同的线程切换超时值。每次发生线程切换时,由硬件把线程切换超时值从线程切换超时寄存器430加载到减量寄存器中。减量寄存器每周期减量一次,直至减量寄存器值等于零为止,然后一个信号发送到线程切换控制器450,它迫使产生一个线程切换,除非没有任何其他线程准备好处理指令。例如,如果系统中所有其他线程由于高速缓存缺失而在等待因而没有准备好去执行指令,则线程切换控制器450不迫使产生一个线程切换。如果当减量寄存器中之值达到零时没有其他线程准备好处理指令,则被减量的值冻结在零直至另一线程准备好处理指令,在这一点上便发生一个线程切换,减量寄存器重新加载那个线程的线程切换超时值。类似地,减量寄存器也能同样容易地命名为增量寄存器,当一线程在执行时,该寄存器可增量至某一预先确定值,此时将迫使产生线程切换。

线程切换超时寄存器430可如前述由一服务处理器写入,或由处理器本身用软件代码写入。可根据特定的硬件配置和/或特定的软件代码来专门确定加载到线程切换超时寄存器430中的线程切换超时值,从而使不必要的线程切换造成的周期浪费达到最小。当活动线程等待由另一线程掌握的资源时,或者如果一个外部中断290或处理器外部的其他事件的响应等待时间太长,则线性切换超时寄存器430中的值太高会造成性能下降。如果一个线程遇到的线程切换事件次数高而其他线程不是,则太高的超时值还会防碍公平性。推荐的线程切换超时值为长于最频繁的最长等待时间事件(例如访问主存储器)的2倍至若干倍。在等待由线程切换超时寄存器430中指定的周期数之后迫使产生一个线程切换,这防止了系统由于争夺共享资源而挂起,坚持了线程间处理器周期分配的公平性,并限制了对外部中断及处理器外部其他事件的响应等待时间。前进保证

在某些情况下,例如当一个单一指令产生多个高速缓存访问和/或多个高速缓存缺失时,每次发出线程切换和新线程变为活动线程时必须至少有一个指令被执行的限制太强了。例如,一个取指令可能引起L1I-高速缓存150缺失,如果所请求的指令不在该高速缓存中的话;但当指令返回时,所请求的数据可能在L1 D-高速缓存120中得不到。类似地,翻译后备缓存器250中的缺失也能造成数据高速缓存缺失。因此,如果严格地强迫向前进,则在其后访问时的缺失不会造成线程切换。第二个问题是某些高速缓存缺失可能需要大量周期去完成,在此期间可能有另一线程在同一高速缓存级别上遇到高速缓存缺失,而这一缺失能在短得多的时间内完成。如果在返回第一线程时强迫严格的前进,则处理器便不能切换到有较短高速缓存缺失的线程。

翻来复去重复即在那种情况下每个线程被锁在切换线程重复周期中而没有执行任何指令,为了补救这一问题,存在一个前进计数寄存器420(图4),它允许达到可编程的最大线程切换次数,称作前进阈值值。在最大线程切换次数之后,一条指令必须被完成,然后才能再发生切换。这样,防止了翻来复去的重复。前进计数寄存器420实际上可以是线程切换控制寄存器410中的30:31位,或该处理器的软件可编程前进阈值寄存器。前进计数逻辑使用线程状态寄存器442、444的位15:17,它们指示线程的状态并被分配一个线程在没有指令执行的情况下已遇到的线程切换数。于是,这些位最好包括前进计数器。

当一线程改变状态而启动线程切换算法时,如果在该活动线程中已完成了至少一个指令,则该活动线程的前进计数器复位,而线程切换算法继续比较处理器中各线程之间的线程状态。如果没有完成任何指令,则在活动线程的线程状态寄存器中的前进计数器值与前进阈值比较。如果计数器值不等于阈值,由线程切换算法继续评估处理器中各线程的线程状态。然后,如果发生线程切换,则前进计数器增量。然而,如果计数器值或状态等于阈值,则在能执行一条指令之前将不发生线程切换,即直到发生前进时才会发生线程切换。请注意,如果阈值寄存器有零值,则在切换到另一线之前在该活动线程内必须完成至少一条指令。如果每次线程切换需要3个处理器周期,而且如果存在两个线程,而且如果线程切换逻辑被编程为5次尝试之后停止尝试切换线程,则处理器将在30个周期内翻来复去地重复。本领域技术人员会理解,在一方面由于没有前进而禁止线程切换和另一方面由于已超过超时计数而迫使线程切换这二者之间存在潜在的冲突。这种冲突能根据结构和软件容易地解决。

图6是线程切换逻辑400的前进计数特性的流程图,这防止翻来复去重复。在块610,在从属于线程T0的线程状态寄存器442中的位15:17被复位为状态111。在块620试图执行这一线程,于是状态变为000。如果对线程T0成功地执行了一条指令,则线程T0的状态变回为111并保持此状态。然而,如果线程T0不能执行一条指令,则线程T1发生线程切换,或者切换到另一后台线程,如果在处理器结构中允许两个以上线程的话。当发生离开T1或其他后台线程的线程切换并使执行返回到线程T0时,则发生执行线程T0的第二次尝试,于是线程T0的状态在块630变为001。如果线程T0遇到线程切换事件,则处理器的控制再次从线程T0切换到另一线程。类似地,每当发生离开另一线程(例如T1)返回线程T0的线程切换,则在这第3次尝试执行T0时T0的状态变为010(块640);在第4次尝试执行T0时变为011(块650),并在第5次尝试执行T0时变为状态100(块660)。

在这一实现中,有5次试图切换到线程T0。在第5次尝试之后,或每当线程状态寄存器(TSR)442中位15:17的值等于线程切换控制寄存器(TSC)410中位30:31之值加1的时候,即每当TSC(30:31)+1=TSR(15:17)时,则不会发生从线程T0离开的线程切换。可以理解,5次尝试是一个任意数;由于不成功执行而允许切换的最大次数,即前进阈值,是可编程的,而且在某些结构中可能认为5次切换太多,而在另一些结构中5次又太少。不管怎样,在无指令执行的情况下试图切换到一线程的次数必须与一阈值比较,而且一旦已达到那一阈值值,则不会再发生离开那个线程的线程切换,其中处理器将等待直至与那个线性关联的等待时间被化解为止。在其中描述的实施例中,由线程状态寄存器442的位15:17代表的线程状态与线程切换控制寄存器410中的位30:31比较。对于有特别长等待时间的特殊事件,如与输入/输出装置的相互作用,进行特殊处理以防止由前进逻辑过早地锁住线程切换,从而改善了处理器性能。处置这些特别长等待时间事件的一种方式是锁住前进计数器增量,或者忽略前进计数器与阈值比较的输出信号,如果数据尚未返回的话。处理特别长等待时间事件的另一方式是对这些特殊事件使用单独的更长的前进计数。分配给处理器的所有软件线程的线程状态最好如所描述的那样保持在图4中的线性状态寄存器442和444中。在单一处理器中在一个时刻一个线程执行它的指令而其他线程在休眠。当相对于前进寄存器420、线程切换控制寄存器410或线性切换超时寄存器430而言,该活动线程遇到了一个长等待时间事件,则执行从活动线程切换到一个休眠线程。与哪个线程是活动线程无关,这些硬件寄存器使用的条件在执行过程中不发生动态变化。

由线程切换管理器灵活地改变线程切换条件改善了系统的总体性能。一个软件线程切换管理器能改变线程切换频率,增大至关重要任务可得到的执行周期数和减小由于线程切换等待时间造成的总周期损失。线程切换管理器或者可在编译时或者可在执行过程中由操作系统编程,例如,一个闭锁循环能改变线程切换频率;或者由于处在较低优先级的休眠线程在等待一个外部中断或否则已准备好,则可以把一操作系统任务分配。不允许或降低离开一活动线程的线程切换,从而使当前指令流的性能不受进出于它的切换所造成的等待时间的影响,这可能是有利的。另一种作法是,通过基本上降低其优先级,一个线程能放弃一些或全部它的执行周期,结果降低了进入它的切换频率或增加了离开该线程的切换频率,以增强系统的总体性能。线程切换管理器还能无条件地迫使或禁止一线程切换,或者影响下一次选择哪个线程去执行。

多优先级线程切换方案对每个线程赋予一个优先级值,以使引起切换的条件定量化。还可能希望在某些情况下有由硬件改变线程优先级。例如,一个低优先级线程可能在等待某一事件,而当该事件发生时,该硬件能提高该线程的的优先级以影响该线程对该事件(例如一个外部中断290)的响应时间。各线程间的相对优先级或某一线程的优先级将影响对这一事件的处理。线程的优先级可由硬件响应于一个事件来调节,或由线程切换管理器软件使用一个或多个指令来调节。线程切换管理器改变硬件线程切换逻辑完成的行动,以有效地改变线程的相对优先级。

对于其中描述的有两线程的实施例使用了3个优先级,这3个优先级足以区分线程以允许对性能调优而不会使系统性能变坏。利用3个优先级,两个线程能有相等的中等优先级状态,对两个线程选择3个优先级这种做法不想成为一种限制。在某些结构中,一个“正常”状态可能是有一个线程的优先级总是高于其他线程。在本发明的范围内想要复盖多于两个执行线程,具有一个或多个优先级,它们可在硬件中设定或由软件编程。

每个线程的3个优先级是高、中、低。当线程T0的优先级与线程T1的优先级相同时,这对线程切换逻辑无影响。两个线程都有相等的优先级,则哪一个也没有优先的执行时间。当线程T0的优先级大于线程T1的优先级时,对某些线程切换事件,即所有L1高速缓存缺失(即数据加载、数据存储和指令取),便不能由T0切换到T1,因为L1高速缓存缺失的解决要比其他条件(例如L2缺失和翻译)快得多。可能使任何线程切换事件失效,从而给予线程T0以更好的机会,以比线程T1接受更多的执行周期,这允许线程T0继续执行,只要它不浪费过多的执行周期数。然而,如果线程T0遇到一个较长的执行等待时间,例如一个L2高速缓存缺失或从计算机系统外部的源提取数据,则处理器仍将放弃对线程T1的控制。从线程T1到T0的线程切换不受影响,除非当休眠线程T0准备好而在这种情况中线程T0优先于线程T1时发生切换。当由于一L2高速缓存缺失或翻译请求使线程T0被切换开,而当线程T1在执行时这一条件在后台得以解决,这时预计会发生这种情况。线程T0的优先级低于线程T1的情况类似于上述情况,只是指定的线程相反。

有几种不同的可能途径去实现通过改变线程优先级来管理线程切换。对处理器结构可以增加新指令。有所希望的行动的那些有副作用的现存处理器指令也能使用。对在允许软件控制的各种方法当中进行选择有影响的各因素当中有:(a)重新定义结构以包括新指令的容易程度和结构改变对现有处理器的影响;(b)在不同版本处理器上运行同一软件的需要;(c)在使用新的专用指令与重用现有指令并确定造成的副作用二者之间作性能权衡;(d)所希望的软件控制水平,例如能否由某些现有指令的每次执行(例如特殊的加载或存储)造成这种作用,或者是否需要通过向指令流中增加指令来增加控制以特别造成这种作用。

其中描述的结构最好利用未用过的指令,它的值不改变处理器中纳入结构的通用寄存器;这一特性对于把多线程能力改进到一个处理器结构中是至关重要的。否则可对特殊指令编码。这个指令是一个“优选的空操作”“或0,0,0”;然而,其他指令能有效地用作空操作。空操作(no-op或nop)是这样一条指令,它的执行使计算机进入下一个要执行的指令而不完成任何操作。在一个最佳结构实施例中,通过使用不同版本的“或”指令,“或0,0,0”或“1,1,1”或任何现有的能把额外的优先权切换意义加到它上面以改变线程优先级的指令,这同一指令流可在一处理器上执行而不产生坏作用,例如非法指令中断。当试图执行一个非法指令,或不由本实现提供的保留指令或可选指令时,便会产生非法指令中断。一个扩展利用机器状态寄存器的状态去改变这些指令的意义。例如,可能不希望允许用户对部分或全部这些线程优先级指令进行编码并访问它们提供的功能。它们提供的特殊功能可能被规定为只在某些执行方式中发生,而在其他方式中它们没有作用而且将作为一个“空操作”正常执行。

一种可能的实现,利用双线程的多线程处理器,使用3个优先级切换指令,这些指令成为执行软件本身的一部分,以改变本身的优先级:tsop1“或1,1,1”-切换到休眠线程tsop2“或1,1,1”-置活动线程于低优先级

              -切换到休眠线程

              -注意:只在特权模式下有效,除非TSC〔19〕

              =1Tsop3“或2,2,2”-置活动线程于中等优先级Tsop4“或3,3,3”-置活动线程于高优先级

              -注意:只在特权模式下有效

优先级切换指令tsop1和tsop2可为同一指令,如在其中实现为“或1,1,1”,但它们也可以各为单独的指令。如其中描述的那样,这些指令与线程切换控制寄存器410的19和21位以及机器状态寄存器的问题/特权位相互作用。如果线程切换控制寄存器410的位21位有值1,则线程切换管理器能把它的线程优先级置为线程状态寄存器中位18:19中代表的3个优先级之一。如果线程切换控制寄存器410的位19有值0,则指令tsop2的线程切换与线程优先级设置由机器状态寄存器的问题/特权位控制。另一方面,如果线程切换控制寄存器410的位19有值1,或者如果机器状态寄存器的问题/特权位有值0而且在代码中出现指令“或1,1,1”,则该活动线程的优先级设为低而且执行立即切换到休眠或后台线程,如果该休眠线程被允许的话。指令“或2,2,2”置活动线程的优先级于中等,不管机器状态寄存器的问题/特权位的值如何。而当机器状态寄存器的问题/特权位有值0时,指令“或3,3,3”置活动线程的优先级于高。如果线程切换控制寄存器320的位21为零,则两个线程的优先级都置于中等,而且“或X,X,X,”指令时优先级的作用被锁住。如果一个外部中断请求有效,而且如果相应线程的优先级为低,则把该线程的优先级置于中等。

被线程优先级改变的事件是:(1)由于L1 D-高速缓存加载数据缺失而切换;(2)由于L1 D-高速缓存存储数据缺失而切换;(3)由于L1 I-高速缓存指令取缺失而切换;(4)如果休眠线程处于准备好状态而切换。此外,外部中断生效可能改变相应线程的优先级。下表显示优先级对引起线程切换的条件的影响。在第3和第4列中的简单的TSC条目的意思是利用线程切换控制(TSC)寄存器410中提出的条件去启动一次线程切换。把TSC〔0:2〕条目作为0对待的意思是线程切换控制寄存器410的位0:2被看作是对那个线程这些位的值犹如零,而线程切换控制寄存器410中的其他位按原样定义引起线程切换的条件。在第4列中的短语“当线程T0准备好时”的意思是一旦线程T0不再等待使它切换出去的缺失事件时便发生到线程T0的切换。在第3列中的短语“当线程T1准备好时”的意思是一旦线程T1不再等待使它切换出去的缺失事件时便发生到线程T1的切换。如果这缺失事件是一个线程切换超时,则不保证在一较高优先级线程切换回来之前较低优先级事件能完成一条指令。

T0优先  级T1优先  级T0线程切换条件  T1线程切换条件  高  高TSC  TSC  高  中TSC〔0:2〕被看作是0  TSC或如果T0准备好  高  低TSC〔0:2〕被看作是0  TSC或如果T0准备好
    中  高TSC或如果T1准备好TSC〔0:2〕被看作是0    中  中TSCTSC    中  低TSC〔0:2〕被看作是0TSC或如果T0准备好    低  高TSC或如果T1准备好TSC〔0:2〕被看作是0    低  中TSC或如果T1准备好TSC〔0:2〕被看作是0    低  低TSCTSC

建议给予做无产出工作的线程以低优先级以避免损失性能,即使在闲循环中的每条指令引起线程切换也如此。然而,仍然重要的是,如果一个设在低先级的线程请求一外部中断,则应允许硬件改变线程优先级。在这种情况下,该线程被提高到中等优先级以允许更快地响应中断。这允许一个等待外部事件的线程把它本身设为低优先级,它将停留在那里直至该事件被通知出去。

尽管已联系当前认为最实际的和最佳的实施例描述了本发明,但应该理解,本发明不限于所说明的实施例,而是相反,本发明要复盖在所附各权利要求的实质和范围内包括的各种修改和等价安排。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号