【背景技术】
现今,设计者运用许多技术以增加微处理器的性能。大部份的微处理器均使用在一个固定的频率运行的时钟信号进行工作。在每一个时钟周期,微处理器的电路均执行他们相对应的功能。依据轩尼斯和派特森的方法,真实测量微处理器的性能是执行一个程序或是一群程序所需要的时间。从这个观点来说,微处理器的性能是它的时钟频率,执行一个指令所需要的平均时钟周期数目(换个说法,每个时钟周期执行指令的平均数目),和在该个程序或是该群程序中所执行的指令数目的函数。半导体科学家和工程师持续在技术上提供进展,使得微处理器能够运算在更快的时钟频率上。这些技术进展有效地缩减晶体管的大小,导致在一个集成电路中更快速的交换时间。执行的指令数目主要取决于将被该程序所执行的任务,虽然它也受微处理器指令集架构的影响。然而,大幅的性能提升已经由架构上和组织上的技术来达成,该技术提高了每时钟周期执行的指令数目,特别是通过允许指令平行执行的技术(也就是,平行处理理论)。
已经提高微处理器每个时钟周期的指令数目,和他们的时钟频率的平行处理技术是流水线的。以相当类似于装配线的阶段的方式,在微处理器流水线阶段内,流水线重叠多指令的执行。在一个理想情形,一个指令在每一个时钟周期向流水线下方移到一个新阶段,该新阶段对这些指令执行不同的功能。因此,虽然每一个各别指令花数个时钟周期来完成,因为各别指令的时钟周期有重叠,每个指令的平均时钟会被减少。在程序中指令允许的情形下实现流水线的性能提升,也就是一个指令的执行并不需要依赖它的前一个指令,因此可以和它先前的指令平行地执行,通常被称为指令级平行处理。另一种被当今微处理器所采用的指令级平行处理的方法,是在相同的时钟周期发出许多执行的指令给不同的功能单元,各单元执行他们被规定的功能。以这种方法完成指令级平行处理的微处理器,通常被视为“超级标量”微处理器。
以上所讨论的平行处理机制是和各别的指令级平行处理有关。然而,经由指令级平行处理的开发所达成的性能的改善是有限的。由有限的指令级平行处理所加诸的各种限制和其它性能限制的问题,最近重新引发开发利用在指令区块级,或指令序列级层,或指令流级层,或指令线程(thread)级层,平行处理的兴趣。该级的平行处理通常是指线程层平行处理。一个线程就是程序指令的一个序列或是流。依据一些调度原则,一个多线程微处理器同时执行许多的线程,该调度原则支配各式线程的指令的提取和发配,例如,交错,阻挡,或同时的多线程化。以一个同时进行的方式,一个多线程微处理器典型地允许许多线程来共享微处理器的功能单元(例如,指令提取和解码单元,高速缓存,分支预测单元,和加载与储存,整数,浮点,SIMD等执行单元)。然而,多线程微处理器包含多组的硬件/固件资源,或是线程上下文(thread context),用于储存每一个线程独特的状态,以实现线程间快速切换的能力,以提取和配发指令。例如每一个线程上下文包含它自己的程序计数器用于指令提取和线程识别信息,而且典型地也包含它自己的通用寄存器组。
一个由多线程微处理器所引发的性能限制问题的例子是由于贮存错失而必须对微处理器外的存储器进行存取,通常会有一个相对长的等待时间的事实。以现今基于微处理器架构的计算机系统的存储器的存取时间通常是在大于高速缓存命中存取时间的1至2个数量级之间。结果当流水线停顿等待来自存储器的数据,某些或是全部的单一线程微处理器的流水线阶段可能会闲置许多时钟周期而没有执行任何有用的工作。多线程微处理器,在存储器提取等待时间期间,通过发出从其它线程来的指令,可以缓和这个情形,因此可以使流水线阶段向前迈进执行有用的工作,有些类似一个操作系统为响应页面错误所执行的任务工作切换但以更精确的粒度水平。另一个性能限制问题的例子是流水线停顿和他们伴随的时钟闲置,由于错误的分支预测和伴随的流水线冲洗(pipelineflush),或是由于数据相依性,或是由于一个长等待时间指令,例如一个除法指令。再者,多线程微处理器从其它线程发配指令至空闲的流水线阶段的能力,将可以大幅地降低执行组成该些线程的程序或是程序群所需要的时间。另一个问题,特别是在嵌入式系统,是与中断服务相关联的浪费的开销。典型地,当一个输入/输出装置传送一个中断信号给微处理器,该微处理器将控制权切换至一个中断服务程序,该程序要求储存目前的程序状态,服务该中断,当中断被服务完成后回复目前的程序状态。一个多线程微处理器提供事件服务码成为他自己的线程的能力,该线程有他自己线程的上下文。因此,在响应输入/输出装置送出一个事件的信号,该微处理器能够很快的,或许在一个时钟周期内,切换至事件服务线程,因此避免发生传统的中断服务程序管开销。
正如指令级平行处理的程度指示一个微处理器可以利用流水线和超纯量指令发出的好处的范围,线程级平行处理的程度指示一个微处理器可以利用多线程执行好处的范围。线程的一个重要特色是它和其它在多线程微处理器上被执行的线程是完全独立无关的。一个线程与其它的线程的无关性达到它的指令不依赖在其它线程上的指令的程度。线程独立的特性使得微处理器可以同时执行不同线程的指令。也就是,微处理器可以发出一个线程的指令至执行单元,不必关心被其它线程所发出的指令。在线程存取共同数据的条件下,线程本身必须被程序化以相互同步数据存取,以确保适当的运算,如此,微处理器指令发出阶段不需要与相依性有关。
由前述观察可得,一个具有多线程上下文的处理器,同时执行许多线程,可以减少执行包括这些线程的程序或是程序群所需要的时间。然而,引进多线程上下文同时也引进一组新的问题,特别是对于系统软件,以管理多指令流和他们相关的线程上下文。本发明人已经指出在一个微处理器中提高与指令执行相关的平行处理所要求的另一级。在此和相关的应用,本发明人解决了在同一个微处理器中提供虚拟处理元件。应用至这一级,一个多线程虚拟处理元件,除了实施许多程序计数器和线程上下文以确保有效的切换程序线程之外,实现所需要的全部资源以提供一给定指令集和特许的资源架构的一单个例示,该架构是足以执行一个每处理器(per-processor)操作系统图像。实际上,一个实现N个虚拟处理元件的微处理器(也就是,一个虚拟微处理器有N个虚拟处理元件)呈现给操作系统软件的是一个N路(N-way)的对称多处理器。依据本发明的虚拟多处理器和一个传统对称多处理器之间的实际差别是,除了共享存储器和某种程度的连接性之外,在一个虚拟多处理器中的虚拟处理元件,也共享虚拟微处理器的单片资源或属性,例如指令提取和发出逻辑,地址转换逻辑(也就是,转换后备缓冲器逻辑),功能单元,例如整数单元,符点单元,多媒体单元,媒体加速单元,SIMD单元,和协处理器。此外,虚拟处理元件必须共享虚拟多处理器的性能属性或是利用方面(也就是带宽),这些是根据配置给每一个虚拟处理元件的线程数目所决定,当执行被需要的情形下,与一个虚拟处理元件相关联的线程可以比与其它虚拟处理元件相关联的线程有更高的优先权的程度,和给该虚拟处理元件的某些全处理器的资源(例如,加载和储存缓冲器)的配置。例如,考量一个其中两种不同处理同时发生的嵌入式系统:影音数据的实时压缩和使用者图形界面的运作。使用20世纪晚期的技术,这些任务可以通过使用两个不同的处理器来完成:一个实时的数字信号处理器用来处理多媒体数据和一个交互式处理器核心来执行一个多任务操作系统。本发明允许这两个功能在同一个的虚拟多处理器上执行。虚拟多处理器的两个虚拟处理元件将会被采用:一个专用于执行多媒体处理任务,而另一个专用于执行使用者界面工作。采用两个虚拟处理元件解决两种不同软件示例性的共同存在或是共同举例说明的问题,但并不保证像一个专用于处理器相同的实时性能的要求,因为该多媒体虚拟处理元件和使用者界面虚拟处理元件必须共享在虚拟多处理器内的某些资源和在一个虚拟多处理器上执行的应用程序的性能,如上述所提及,是基于如何将那些资源或属性发出给每一个虚拟处理元件。
在一个多处理应用呈现一个广泛和多样的资源需求的市场,去制造具有针对一个特殊多处理应用量身订做的资源的虚拟多处理器将会是耗费很多成本。因此,本发明人已经观察到,提供一个能够被用于横跨广泛多处理应用的虚拟多处理器,是很期望的。他进一步表示,该虚拟多处理器包含通过软件对各种虚拟处理元件进行资源配置的机制,是很期望的。这类机制应该允许该虚拟多处理器被配置一个或多个虚拟处理元件,其中每一个虚拟处理元件是被配置以执行一个或多个线程。此外,在运行时刻,可由被信赖的虚拟处理元件动态配置这些资源和提供一个撤回配置特权的机制是期望的。
【具体实施方式】
以下的描述是呈现给本领域的熟练技术人员以制造和使用本发明,如在一个特别的应用和它的要求的上下文之内。针对本最佳实施例的各式的修改,对本领域的熟练技术人员将是显而易见的,且定义在此的一般原则将可应用至其它实施例。因此,本发明不意欲被限制在此所描述和所示的特殊实施例,而是遵从和在此所揭露的原理和新特征一致的最广的范围。考虑到上述有关平行处理和相关的在当前处理器中被采用的多线程和多处理技术的背景讨论,本发明的讨论将会参照图1至图7来呈现。
参照图1显示,示出依据本发明的一个多处理环境100的一个方瑰圖方框图。该多处理环境100,包括连接至一个系统界面控制器105的一个虚拟多处理器101。该系统界面控制器105连接至一个系统存储器106和一个或多个输入/输出装置107。每一个输入/输出装置107提供一个中断要求线108至虚拟多处理器101。该虚拟多处理器101包括一个或多个虚拟处理元件102。每一个虚拟处理元件102有一个对应的虚拟处理元件上下文104和一个或多个对应的线程上下文103。该多处理环境100,可能但不限于,一个通用的可程序化的计算机系统,服务器计算机,工作站计算机,个人计算机,笔记型计算机,个人数字助理,或嵌入式系统,例如,但不限于,一个网络路由器或交换器,打印机,海量储存控制器,相机,扫瞄仪,汽车控制器等等。
系统存储器106可以被具体化成存储器,例如动态随机存取存储器RAM和只读存储器ROM,用于储存在虚拟多处理器101执行的程序指令,并用于储存依据程序指令待被虚拟多处理器101处理的数据。程序指令可包括一个或多个由虚拟多处理器101同时执行的程序线程。一个程序线程或是线程包括一个程序指令的序列或流和相关联的在虚拟多处理器101中的对应虚拟处理元件102内的状态变化序列,该状态变化序列和指令序列的执行有关。每一个线程上下文103包括支持相对应程序线程执行所需的硬件状态。在一个实施例中,每一个线程上下文包括一组通用寄存器,一个程序计数器,和其它寄存器保存执行线程的状态,例如,乘法器状态和协处理器状态。每一个虚拟处理元件102提供资源以支持一个完整指令集架构和特许的资源架构的示例,该些架构足以执行一个单全处理器操作系统图像。在一个实施例中,每一个虚拟处理元件102提供资源以支持一个完整MIPS32/MIPS64指令集架构和特许的资源架构的示例。每一个虚拟处理元件上下文104组成一个支持在一个相对应虚拟处理元件102中线程执行所需的硬件状态。在一个实施例中,每一个虚拟处理元件上下文104规定分配给一个相对应虚拟处理元件102的资源,例如,地址转换逻辑资源(例如,转换后备缓冲器输入),功能单元(例如,整数单元,浮点单元,多媒体单元,媒体加速单元,SIMD单元,协处理器)和性能属性。在一个特别实施例,该性能属性包括允许停止和配置分配给其它虚拟处理元件102的资源,线程列举的数目,相对应虚拟处理元件102的激活/抑制和虚拟多处理器101的与带宽相关的资源(例如,指令执行带宽或优先权,加载储存带宽等等),这些资源被分配给相对应虚拟处理元件102。本发明提供多种带宽配置技术包括调度提示,执行优先权指派,加载/储存缓冲器分配等等。
系统界面控制器105和虚拟多处理器101经由一个处理器总线相互连接。在一个实施例中,系统界面控制器105包括一个存储器控制器以控制系统存储器106。在一个实施例中,系统界面控制器105包括一个局部总线界面控制器以提供一个局部总线,例如,一个PCI总线,连接至输入/输出装置107。
输入/输出装置107可包括,但不限于,使用者输入装置,例如,键盘,鼠标,扫瞄仪等等;显示装置,例如,监视器,打印机等等。储存装置,例如,磁盘驱动器,磁带机,光驱等等;系统外围装置,例如,直接存储器存取控制器DMAC,时钟,定时器,输入/输出端口等等;网络装置,例如,用于以太网络,光纤网络,无限频带(infiniband),或其它高速网络界面的媒体存取控制器MAC;数据转换装置,例如,模拟—数字转换器,数字—模拟转换器等等。输入/输出装置107产生中断信号108给虚拟多处理器101以要求服务。有利地,虚拟多处理器101能够同时执行许多用以处理在中断要求线108上表示的事件的程序线程,不需要传统的与保存微处理器102状态,转移控制权给中断服务例程,和在完成中断服务例程之后回复状态相关联的开销。
在一个实施例中,虚拟多处理器101提供两种不同,但不互相排斥,的多线程能力。首先,虚拟多处理器包括一个或多个虚拟处理元件(VPEs)102以支持一个对应的一个或多个逻辑处理器上下文,经由在虚拟多处理器101中的资源共享,每个逻辑处理器上下文呈现给操作系统的是一个独立的处理元件。对一个操作系统,一个有N个VPEs102的虚拟多处理器101看起来像一个N路(N-way)对称多处理器(SMP),其允许存在SMP可操作系统来管理一个或多个VPEs 102。第二,每一个VPE 102可以包括一个或多个线程上下文103,以同时执行对应的一个或多个程序线程。因此,依据本发明,虚拟多处理器101提供一个多线程程序化模型,其中在典型的情况下,程序线程能够被产生和销毁而不需要操作系统的干预,且系统服务线程能够用最小的中断等待时间被调度以响应外部的条件(例如,输入/输出服务事件信号)。
在一个实施例中,每一个线程上下文包括一个或多个储存元件,例如,寄存器或锁存器,其中具有描述相对应线程的执行状态的字段(例如,位)。也就是,一个给定线程上下文103描述各自线程的状态,其对该线程是唯一的,而不是和在虚拟处理元件102上同时执行的其他线程共享的状态。一个线程,这里也被称为程序线程、执行的线程、或指令流,是一个指令序列。每一个虚拟处理元件102有能力同时处理许多线程。通过在线程上下文103内储存每一个线程的状态,在虚拟多处理器101中的每一个虚拟处理元件102被配置成能在线程间快速切换,以提取和发出指令。有利地,本发明的虚拟多处理器101是被配置成执行指令以在不同线程上下文103间搬移线程上下文信息,正如共有待审的美国专利申请(案卷编号:MIPS.0194-00-US),其标题为“多计算上下文软件管理的机制”所详细描述的。
在一个实施例中,每一个VPE上下文104包括一群的储存元件,例如,寄存器或锁存器,其中具有描述相对应VPE 102的执行状态的字段(例如,位),提供相对应VPE 102的资源的配置,例如,但不限于,地址转换资源,协处理资源(例如,浮点处理器,媒体处理器等等),线程容量和列举,特定VPE 102激活/抑制执行的允许,和配置特定VPE 102资源的允许。在一个实施例中,一个VPE 102可以通过更新它的VPE上下文104来配置它自己的资源。另外,一个VPE 102可以通过更新对应不同VPE 102的VPE上下文104来配置不同VPE 102的资源。因此,一个有N个VPE 102的虚拟多处理器101呈现给操作系统或是其它对称多处理应用是一个N路对称多处理器。在一个实施例中,VPE 102共享在虚拟多处理器101中特定的资源,例如,指令高速缓存,指令提取器,指令解码器,指令发出器,指令调度器,执行单元和协处理单元,和对于操作单元是显然的数据贮存。资源共享的范围和程度是由VPE上下文104所规定,且可以通过更新VPE上下文104,在运行时间或其它时间被动态地配置。对一个给定的VPE 102来配置它自己的资源,或规定给其它VPE102的资源,他自己的VPE上下文104必须规定该被给定的VPE 102是被允许配置虚拟多处理器101的资源,在下面将会有更详细的描述。因此,假如给定VPE 102的VPE上下文104指出该给定的VPE 102是被允许来配置资源,则该给定的VPE 102可以更新所有的VPE上下文104以提供动态资源配置,包括资源配置许可的修改,其中包括撤销配置许可的能力。在一个实施例中,每一个VPE 102基本上符合一个MIPS32或MIPS64指令集架构(ISA)和一个MIPS特许资源架构(PRA),且每一个VPE上下文104包括该MIPS PRA协处理器0和描述其一示例所需的系统状态。在一个实施例中,VPE上下文106包括图5D-5G所描述的,VPECONTROL寄存器504,VPECONF0寄存器505,VPECONF1寄存器506,和VPESCHEDULE寄存器592。在一方面,一个VPE 102可以被当成是一个异常域(exceptiondomain)。也就是当VPE 102的一个线程上下文103产生一个异常,在VPE 102上的多线程被暂停(也就是,只有与线程上下文104服务该异常相关联的指令流的指令被提取和发出),且每一个VPE上下文104包括服务该异常所需的状态。一但该异常被服务之后,异常处理器将会选择性地重新启动在VPE 102上的多重线程。
现在请参阅图2,其是说明依据本发明的一个虚拟多处理器内的虚拟多处理器流水线200的方框图。该流水线200包括许多的流水线阶段且另外包括一个或多个线程内容103。图2的示例性实施例显示四个线程上下文103。在一个实施例,每一个线程上下文103包括一个程序计数器(PC)222,用于储存提取在相关的指令流中的下一个指令的地址,一个通用寄存器(GPR)组224,用于储存依据程序计数器222的值,从线程所发出的指令流的中间执行结果,和其它每线程(per-thread)上下文226。在一个实施例中,流水线222包括一个乘法器单元(未显示于图中),且其它线程上下文226包括用于储存乘法器单元的结果的寄存器,这些结果与指令流中的乘法指令特别有关。在一个实施例中,其它线程上下文226包括用于唯一辨识每一个线程上下文103的信息。在一个实施例中,该线程辨识信息包括用于规定有关的线程的执行特权级的信息,例如,是否该线程是一个核心,监督者,或使用者层线程。在一个实施例中,该线程辨识信息包括用于辨识组成该线程的一个任务或过程的信息。特别的是,该任务识别信息可以被用作为一个地址空间标识符(ASID)以将实际地址转换成虚拟地址。
流水线200包括一个调度器216用于被虚拟多处理器100所同时执行的许多线程的调度。调度器216连接到VMP上下文210,图1的VPE上下文104,和其它每线程(per-thread)上下文226。特别的是,调度器216是负责调度从不同线程上下文104的程序计数器222中提取的指令,和调度将提取指令发出给虚拟多处理器100的执行单元212,如下所描述。依据虚拟多处理器100的调度原则,调度器216对线程的执行进行调度。调度原则可以包括,但不限于,任何下列的调度原则。在一个实施例中,调度器216采用一个循环,或时分多路复用,或交叉的调度原则,配置一个预先决定数目的时钟周期,或指令发出时段,以一个环绕的顺序给每一个就序的线程。循环原则在一个其中公平性是重要的和基本服务品质对于某些线程是需要的应用上是有用的,例如,实时应用程序线程。在一个实施例中,调度器216采用一个阻挡调度原则,其中,调度器216持续对正在执行线程的提取和发出进行调度,直到一个阻挡线程进一步进展的事件发生,例如,一个贮存失误,一个分支预测错误,一个数据相依性,或一个长等待时间的指令。在一个实施例中,流水线200包括一个采用许多执行单元212的超级标量流水线,且调度器216调度每时钟周期许多指令的发出,特别的是,每时钟周期来自多个线程的指令发出,一般被认为是同时多线程。在其它实施例,调度器216采用一个利用经由VPE上下文104提供的调度信息的调度原则,其中,调度信息指出配置给每一个VPE 102的带宽和/或带宽相关的资源。
流水线200包括一个指令高速缓存202,用于贮存从一个系统存储器提取出的程序指令。在一个实施例,流水线200提供虚拟存储器的能力,且提取单元204包括一个转换后备缓冲器(未示出)用于贮存实际到虚拟存储器页面转换。在这个实施例,在转换后备缓冲器内的资源(例如,入口)被分配给共享流水线200的每一个VPE 102,正如VPE上下文104所规定的。在一个实施例中,在流水线200内所执行的每一个程序或任务,被指派一个唯一的任务ID,或地址空间ID(ASID),其被用来执行存储器存取,及具体地执行存储器地址转换,且一个线程上下文103,也包括储存与该线程相关联的ASID。
流水线200还包括一个提取单元204,连接到指令高速缓存202,用于从指令高速缓存202和系统存储器提取程序指令。提取单元204从多路复用器244所提供的指令提取地址提取地址。多路复用器244从对应的多个程序计数器222,接收多个指令提取地址。每一个程序计数器222储存用于不同程序线程的当前指令提取地址。图2的实施例说明了与四个不同线程相关联的四个不同程序计数器222。依据由调度器216提供的一个选择输入,多路复用器244从四个程序计数器222中选择一个。在一个实施例中,在微处理器100上执行的不同线程共享该提取单元204。
流水线200还包括一个解码单元206,连接至提取单元204,用于解码由提取单元204所提取的程序指令。解码单元206解码操作码,操作数,和指令的其它字段。在一个实施例中中,在微处理器100上执行的不同线程共享一个解码单元206。
流水线200也包括执行单元212,用于执行指令。执行单元212可以包括,但不限于,一个或多个整数单元,用于执行整数算术,布尔运算,位移运算,旋转运算等等;用于执行浮点运算的浮点单元;用于执行存储器存取及特别地对连接到执行单元212的数据高速缓存242的存取的加载/储存单元;多媒体加速单元,用于执行多媒体运算;和一个分支解析单元,用于解析分支指令的结果和目标地址。在一个实施例中,数据高速缓存242包括一个转换后备缓冲器用于贮存实际到虚拟存储器页面转换。除了从数据高速缓存242所收到的操作数,执行单元212也从通用寄存器组224的寄存器接收操作数。具体地,一个执行单元212接收从线程上下文104的寄存器组224来的操作数,该线程上下文104是分配给该指令所属的线程。一个多路复用器248选择来自的适当寄存器组224的操作数提供给执行单元212。此外,多路复用器248接收从另一个线程上下文226和程序计数器222来的数据,以根据由执行单元212所执行的指令的线程上下文104来选择性地提供给执行单元212。在一个实施例中,不同的执行单元212可以同时执行从多个并存线程来的指令。
流水线200也包括一个指令发出单元208,该指令发出单元208连接到调度器216,并连接到解码单元206和执行单元212之间,用于依调度器216的指示发出指令给执行单元212,并响应有关被解码单元206所解码的指令的信息。特别的是,假如当指令和先前发出给执行单元212的其它指令有数据相依性,指令发出单元208确保这些指令不会发出给执行单元212。在一个实施例中,一个指令队列(未示于图中)被置于解码单元206和指令发出单元208之间,用于缓冲等待发出给执行单元212的指令,用以减少执行单元212空乏的可能性。在一个实施例中,在流水线200中的许多线程执行共享该指令发出单元208。
流水线200也包括一个写回单元214,其连接到执行单元212,用于将指令的结果写回到通用寄存器组224,程序计数器222,和其它线程上下文226。一个解多路复用器246接收从写回单元214来的指令结果,并将指令结果储存到适当的寄存器组224,程序计数器222,和其它跟该指令的线程有关的线程上下文226。该指令结果也被提供用于储存到VPE上下文104和一个虚拟多处理器(VMP)上下文210。
在一个实施例中,VMP上下文210包括一组储存元件,例如,寄存器或锁存器,在该储存元件有一个或多个字段(例如,字节)描述虚拟多处理器101的执行状态。特别的是,VMP上下文210储存关于在VPE102中被共享的虚拟多处理器101,全部资源的状态,如上所描述。具体地,VMP上下文规定在配置期间可以分配给VPEs102的资源,也控制虚拟多处理器101是否是在一个配置这些资源的配置状态。在一个实施例中,该VMP上下文210包括如下所述的图5A—5C的一个MVPCONTROL寄存器501,MVPCON0寄存器502,和MVPCON1寄存器503。
图2所示流水线200的具体阶段202,204,206,208,212,214被提供来清楚地说明本发明而不会模糊实质性方面。本领域的熟练技术人员可以领会流水线200的阶段化可通过增加或减少阶段的数目,或通过分配不同的功能给阶段而被修改以增进性能,而不会偏离本发明的精神和范围。
参照图3,显示依据本发明的一个动态可配置虚拟多处理器300的方框图。该多处理器300包括一个或多个VPEs 302-304,列举为VPE1302,VPE 2 303,直到VPE N 304。每一个VPE 302-304有一个对应的VPE上下文305-307。该些VPEs 302-304和VMP上下文210连接到执行逻辑212,如上参照图2所述。该执行逻辑212包括VPE配置逻辑310。该VPE配置逻辑310连接到一个例外信号311。该方框图中还示出有一个或多个资源322,324,326,328,它们分别被列举为RESOURCE1 322,RESOURCE2 324,RESOURCE3 326,直到RESOURCEM 328。
在操作上,资源322-328的配置是通过执行一个由被允许配置这些资源322-328的VPEs 302-304,所发出的配置指令序列而被实现的。在一个实施例中,配置资源322-328的允许权是由对应VPEs 302-304的VPE上下文305-307所规定。当一个配置指令序列是由流水线200中的执行逻辑212所接收,该VPE配置逻辑310存取对应于VPEs 302-304的VPE上下文305-307,VPEs 302-304的程序线程导致配置指令序列被提取以决定VPEs 302-304是否被允许配置这些资源322-328。如果不是,则配置逻辑310导致例外(exception)信号311被断言,且配置指令序列不被执行。如果VPEs 302-304被允许配置这些资源322-328,则VPE配置逻辑310执行配置指令序列以指引虚拟多处理器300进入配置状态,且更新一个或多个规定的VPE上下文305-307,因此,重新配置这些资源。在一个实施例中,配置指令序列通过更新VMP上下文210来指引虚拟多处理器300进入配置状态。在一个实施例中,配置指令的序列包括遵循MIPS32/MIPS64多线程(MT)应用特殊延伸(ASE)架构的指令。
该方框图示出一个由配置指令序列的执行导致的配置的资源322-328的具体实施例,且图表地描绘根据本发明,具体资源322-328如何能够被动态地配置,以最佳化在一个给定的多线程多处理应用中,同时执行线程的性能。例如,考虑到RESOURCE1 322图标分支对应于地址转换资源(例如,转换后备缓冲器输入)。从分支所示,VPE1 302是被规定为地址转换资源的一部份,且小于分配给剩余的VPEs 303-304的部分。或许,在VPE1 302执行的线程相对于其它线程是短的和反复的,因此,不需要扩大的地址转换资源。也考虑RESOURCE2 324代表对应到多线程协处理器的上下文(例如,浮点元件,媒体元件,SIMD元件等等)。VPE2 303,如在其VPE上下文306中所指定,相较于其它VPEs 302,307,是被配置较少的上下文数目,或许是由于由VPE2 303所发出指令线程所指引的运算,不需要大量的共处理资源。此外,考虑到RESOURCE3 326代表资源配置许可。如图表所呈现,只有VPE2 303被允许配置虚拟多处理器300中的资源302-304。也就是指明,已经获得配置许可的一个给定的VPE302-304(在这个例子为VPE2 303)可以授予配置许可给其它的VPEs302-304,或取消它们的配置许可,或取消它自己的配置许可。这是通过如这里所描述的更新规定的VPE上下文305-307来实现的。考虑到RESOURCE M 328是一个带宽资源,其根据如上所述的一被实现的调度原则,配置虚拟多处理器300的带宽给他的VPEs 302-304。因此,图表呈现每一个示例性的VPEs 302-304被给予相同部份的多处理器带宽,或者经由直接执行带宽配置,或通过设定几近相同的执行优先权,或通过其它用于规定带宽或与带宽相关的资源的技术。一个由本发明所尝试的规定与带宽相关的资源这样的技术,是加载/储存给VPEs 302-304的带宽的分配。例如,在VPEs 302-304间共享的在虚拟多处理器300中的存储器运算缓冲器的数目(未示出)小于执行线程的数目,则在执行一个与给定VPE302-304的线程有关的存储器运算之前,该虚拟多处理器300将会评估,是否要将给定的线程断开,因为,这样的运算可能会超过被规定用于给定的VPE302-304的与带宽相关的资源分配。这样一个带宽分配方案有利地解决了与VPEs302-304有关的小数量的线程,例如,产生一长串的贮存失误可能独占与带宽相关的资源(在该示例中未存储器运算缓冲器)的情况,因此,防止来自其它VPEs302-304的线程的执行。通过规定与带宽相关的资源的份额,依据本发明,这样的情况已经被排除在虚拟多处理器300外。
请参照图4,给出一表格400,其描绘的根据本发明的一示例性实施例的虚拟多处理上下文寄存器。该虚拟多处理上下文寄存器被采用以配置一个虚拟多处理器上下文210,或是一个虚拟处理元件上下文104,如上所述。该虚拟多处理上下文包括寄存器MVPCONTROL,MVPCONF0,和MVPCONF1。用于一个虚拟多处理器内的每一个VPE的虚拟处理元件上下文包括寄存器VPECONTROL,VPECONF0,VPECONF1,和VPESCHEDULE。表格400显示寄存器和到MIPS32/MIPS64指令集和特许资源架构的多线程应用特殊延伸一致,其中,规定一个CPO寄存器的数目和寄存器选择数目给每一个所示寄存器以存取其中的上下文。上述寄存器的架构和上下文将会参照图5来讨论。
图5是一系列方框图,描述图4的每一个虚拟多处理器上下文寄存器501-506,592的示例性实施例。图5A—5F包括每一个寄存器的字段和一个描述不同字段的表格的说明,特别相关的字段会在此详加讨论。图5所说明的每一个寄存器,可以选择性的由VPE读或写,依VPECONF0寄存器505中MVP字段553的值指出,VPE有动态配置这些资源的许可。在寄存器501-506,592中某些字段是只能由VPE写入,VPE的MVP字段553指出它有配置许可。否则,某些字段是只读,如同由配置逻辑310所控制的。
MVPCONTROL寄存器501有一个STLB字段511,一个VPC字段512,和一个EVP字段513。一个有如上所述配置许可的VPE102可以更新VPC字段512和EVP字段513以将虚拟多处理器101置于一个配置状态用于资源配置。清除VPC字段512和设定EVP字段513使新资源值被锁存在配置寄存器501-506,592中且用于虚拟处理以重新开始。一个有配置许可的VPE102可以更新STLB字段511以共享地址转换资源。
MVPCONF0寄存器502,和MVPCONF1寄存器503是只读寄存器,这些寄存器由一个有配置许可的VPE102所读取,以决定在一个给定虚拟多处理器101中设置的可配置这些资源的数目和范围。字段TLBS指出,地址转换资源是可共享的,且地址转换资源共享可以通过设定MVPCONTROL寄存器501的字段STLB511来配置。字段PVPE524规定由虚拟多处理器101所提供VPEs102的总数量。在图5的实施例,会采用多至16个VPEs102。字段PTC525指出由虚拟多处理器101所提供线程上下文103的总数量。在该示出的实施例中,多至256个线程上下文103将会被举例说明。字段C1M531指出可分配的协处理器是可多媒体延伸的。字段C1F532指出是否可分配的协处理器是可浮点的。字段533-535指出可用于分配给VPEs102的其它ISA特定资源的总数。
资源分配给具体VPE 104是通过将VPE数写到VPECONTROL寄存器504的字段TARGVPE334。一个写入字段334的实施例是经由上述的MIPSMTTR和MFTR指令。
在寄存器VPECONF0505中字段VPA552的值是被设定来起动/取消一个规定的VPE 102。字段MVP 553是设定为给予或取消资源配置许可。字段MINTC 554和MAXTC 555是被更新以配分配线程上下文103的数目和例举给一个规定的VPE 102。在本发明MIPS32/MIPS64多线程应用特殊延伸的实施例中,字段NCX 561,NCP2 562,和NCP1 563是被更新以配置协处理器资源给一个具体的VPE102。如上所述,图5E-5F的表格显示,该注明的资源分配字段552-555,561-563是只读的字段。所有VPEs 102没有资源配置许可,如VPECONF0寄存器505中MVP位553的状态所示。对于一个被授予资源配置许可的VPE102,配置逻辑310使注明的字段552-555,561-563能够被更新(也就是被写入)。
寄存器VPESCHEDULE 592包括一个调度器提示字段529,该字段529能够被更新以配置跨越在虚拟多处理器101中VPEs 102的带宽资源。
虽然图4和图5描述本发明的一示例性实施例,其中,某些资源能够在一个MIPS32/MIPS64多线程应用特殊延伸环境中被动态地配置,本发明人指出该示例性实施例是依据一个已知的指令集架构被提供的以教示本发明的多个方面。本发明人还指出,其它的架构同样的也可以被包含。
请参阅图6,示出一个说明依据本发明的用于虚拟处理器资源的动态配置的方法的流程图600。本方法由区块602开始,其中,依据本发明,一个VPE想要动态地配置这些资源。流程前进至区块604。
在区块604,对应至该请求VPE的VPE上下文被读取。流程前进至决定区块606。
在决定区块606,该VPE上下文被评估以决定是否该请求VPE被允许在虚拟多处理器中动态地配置这些资源。如果是,流程前进至区块608。如果不是,流程前进至区块607。
在区块607,因为该请求VPE没有资源配置许可,一个例外被宣告且流程前进至区块620。
在区块608,在虚拟多处理器中的虚拟处理被禁止,以允许资源配置。流程前进至区块610。
在区块610,在虚拟多处理器中一个配置状态被建立。流程前进至区块612。
在区块612,在虚拟多处理器中的一个VMP上下文被存取,以决定什么和多少资源是可用于配置。流程前进至区块614。
在区块614,一个目标VPE被选取用于它分配的资源的配置。流程前进至区块616。
在区块616,通过更新其相对应的VPE上下文,这些资源被配置用于选定的VPE。流程前进至区块618。
在区块618,用于选定的VPE的资源的新配置通过退出配置状态而被锁存,且在虚拟多处理器中的虚拟处理被再次起动。流程前进至区块620。
在区块620,该方法完成。
图7是一个流程图700描述依据本发明的用于虚拟处理器资源的动态配置的一可撤回的方法。图7的流程图700的所有的区块702-720等同于图6的流程图600的对应的区块602-620,其中百位数是由7所取代,除了一个额外的区块717,其中,被选定的VPE的VPE上下文被更新以撤销它的动态配置这些资源的许可。区块702的请求VPE,可以和区块717的被选定的VPE相同,因此,启动一个VPE来撤销它自己的配置许可。在区块718中锁存新配置之后,该请求VPE不能再配置这些资源。
虽然本发明和它的目的,特征,优点,已经被详细地描述,其它实施例被本发明所包括。例如,除了本发明使用硬件的实现方案外,本发明也可以例如,在一个计算机可使用(例如,可读取的)的媒体中配置的软件(例如,计算机可读取码,程序代码,指令和/或数据)来实现。这样的软件激活在这里描述的装置和方法的功能,制造,模型化,仿真,描述和/或测试。例如,可以由使用通常的程序语言(例如,C,C++,JAVA等等),GDSII数据库,包括Verilog HDL,VHDL的硬件描述语言(HDL)等等,或其它可用的程序,数据库,和/或电路(也就是,简图)捕捉工具来完成。这样的软件能够被配置在任何已知计算机可使用的(例如,可读取的)媒体,包括半导体存储器,磁盘,光盘(例如,CD-ROM,DVD-ROM等等)中,且作为在一个计算机可使用的(例如,可读取的)传输媒体(例如,载波或其它媒体包括数字,光学,或基于模拟的媒体)中的计算机数据信号。这样的软件可以在包括网际网络和内部网络的通讯网络上被传送。本发明可以软件(例如,作为半导体知识产权核心的一部分的HDL中,例如一个微处理器核心,或是一个系统级设计,例如单芯片系统或SOC)来实现和转换成硬件成为集成电路产品的一部分。本发明也可以由软件和硬件的结合来实施。
最后,本领域的熟练技术人员可以理解他们可以使用在此公开的概念和特定实施例为基础,设计或修改其它架构以实现本发明的相同目的,而不会背离如后附权利要求所定义的本发明的精神和范围。