通过关闭堆栈寄存器文件的若干部分来减少功率转让专利

申请号 : CN200680012703.X

文献号 : CN101160559B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 博胡斯拉夫·雷赫利克

申请人 : 高通股份有限公司

摘要 :

许多处理器结构包括采取堆栈寄存器文件形式的寄存器,以用于保持在执行处理操作期间使用的数据。如本文所教示,形成所述堆栈的物理寄存器被组织成库。根据满足寄存器分派需求的需要,激活和去激活所述库中的一者或一者以上。

权利要求 :

1.一种用于处理器中的堆栈寄存器系统,所述系统包含:

寄存器堆栈,其包含多个寄存器库,每一寄存器库包含至少一个寄存器,每一寄存器具有接通或断开的对应状态值;以及控制器,所述控制器对指令做出响应,所述指令可操作以将所述堆栈内预定数目的寄存器分派给一个或一个以上软件功能而无需将具体寄存器指定给所述功能中的相应指令;

所述控制器选择性地控制所述寄存器库中的一者或一者以上的所述对应状态值,其中所述控制器通过以下方式对寄存器分派指令做出响应:响应于至少一个增加分派的寄存器数目的寄存器分派指令,而增加被指定了所述接通的对应状态值的寄存器库的数目,以及响应于至少一个减少分派的寄存器数目的寄存器分派指令,而减少具有所述接通的对应状态值的寄存器库的数目;

其中所述控制器响应于移出特定寄存器库的保存/恢复点,而将所述断开的对应状态值指定给所述特定寄存器库。

2.根据权利要求1所述的系统,其进一步包含一个或一个以上电路以选择性地将所述寄存库中的一者或一者以上连接到电源端子以及选择性地将所述寄存器库中的一者或一者以上从所述电源端子断开。

3.根据权利要求1所述的系统,其进一步包含一个或一个以上门电路以响应于来自所述控制器的时钟请求而选择性地向所述多个寄存器库供应系统时钟信号。

4.根据权利要求1所述的系统,其中:

当所述分派的寄存器数目小于或等于第一阈值时,所述控制器将所述接通的状态值指定给所述第一寄存器库,所述第一阈值与第一寄存器库中的寄存器数目有第一预定关系;

且响应于将分派的寄存器数目增加到大于所述第一阈值的寄存器指令,所述控制器将所述接通的状态值指定给所述寄存器库中的一个连续的库。

5.根据权利要求4所述的系统,其中响应于将所述分派的寄存器数目减少到小于或等于第二阈值的后续寄存器分派指令,所述控制器将所述断开的对应状态值指定给所述寄存器库中的所述下一个连续的库,所述第二阈值与所述第一寄存器库中的寄存器数目具有第二预定关系。

6.根据权利要求5所述的系统,其中所述第一或第二阈值中的至少一者具有等于所述第一寄存器库中的寄存器数目的值。

7.根据权利要求5所述的系统,其中所述第一或第二阈值中的至少一者从与所述第一寄存器库中的寄存器数目偏移预定的偏移值。

8.根据权利要求1所述的系统,其中堆栈顶部点位于所述寄存器库中的一者内的堆栈顶部点位置,所述堆栈顶部点位置与所述寄存器堆栈内的寄存器数目相关,且其中当所述堆栈顶部点位置位于特定寄存器库中时,所述控制器将所述接通的对应状态值指定给所述特定寄存器库。

9.根据权利要求1所述的系统,其中所述寄存器库中的至少一者包含至少32个寄存器。

10.根据权利要求1所述的系统,其中所述寄存器堆栈包含所述寄存器库中的至少四者,且所述寄存器库中的每一者包含至少32个寄存器。

11.一种用于处理器中的堆栈寄存器系统,所述系统包含:

寄存器堆栈,所述寄存器堆栈包含;

第一寄存器库,其包含第一数目的寄存器,以及

第二寄存器库,其包含第二数目的寄存器;以及

用于选择性地激活和去激活的装置,其用于响应于可操作以将所述寄存器堆栈内预定数目的寄存器分派给软件功能而无需将具体寄存器指定给所述功能中的指令的指令,来选择性地激活和去激活所述第一和第二寄存器库中的至少一者,其中所述处理器识别用于寄存器保存引擎的溢出操作的保存/恢复点,且所述用于选择性地激活和去激活的装置随着所述保存/恢复点移出所述各自寄存器库而去激活所述第一或第二寄存器库中的至少一者。

12.根据权利要求11所述的系统,其中:

响应于分派小于或等于第一阈值的第一数目的寄存器的第一寄存器分派指令,所述用于选择性地激活和去激活的装置激活所述第一寄存器库,所述阈值与所述寄存器的第一数目具有预定关系;且响应于分派第二数目的寄存器的第二寄存器分派指令,所述用于选择性地激活和去激活的装置激活所述第二寄存器库,其中所述寄存器的第二数目大于所述第一阈值。

13.根据权利要求12所述的系统,其中所述堆栈寄存器进一步包含第三寄存器库,所述第三寄存器库包含第三数目的寄存器,其中响应于分派第三数目的寄存器的第三寄存器分派指令,所述用于选择性地激活和去激活的装置激活所述第三寄存器库,其中所述寄存器的第三数目大于第二阈值。

14.根据权利要求11所述的系统,其中:

所述寄存器分派指示所述寄存器堆栈内的堆栈顶部点;且

所述用于选择性地激活和去激活的装置依序随着所述堆栈顶部点移动到所述第一寄存器库中而激活所述第一寄存器库并随着所述堆栈顶部点移动到所述第二寄存器库中而激活所述第二寄存器库。

15.根据权利要求11所述的系统,其中所述用于选择性地激活和去激活的装置包含实施为有限状态机的功率控制器。

16.一种方法,其包含:

执行指令,所述指令可操作以将堆栈寄存器文件内预定数目的寄存器分派给一个或一个以上软件功能,而无需将具体寄存器指定给与所述一个或一个以上软件功能相关联的指令;

响应于寄存器分派指令,分派小于或等于第一阈值的数目的寄存器,维持第一寄存器库处于现用状态且维持形成所述堆栈寄存器文件中的第二寄存器库的寄存器处于非现用状态,其中所述第一阈值与形成所述堆栈寄存器文件中的所述第一寄存器库的寄存器数目具有预定关系;以及响应于寄存器分派指令,分派大于所述第一阈值的数目的寄存器,维持所述第一寄存器库处于所述现用状态且激活所述第二寄存器库。

17.根据权利要求16所述的方法,其进一步包含,响应于分派小于或等于第二阈值的另一数目的寄存器的寄存器分派指令,维持所述第一寄存器库处于所述现用状态且去激活所述第二寄存器库,其中所述第二阈值与形成所述第一寄存器库的所述寄存器的第一数目具有预定关系,且在所述第二寄存器库现用时接收到所述寄存器分派指令。

18.根据权利要求17所述的方法,其中所述第一或第二阈值中的至少一者等于所述寄存器的第一数目。

19.根据权利要求17所述的方法,其中所述第一或第二阈值中的至少一者以一偏移值区别于所述寄存器的第一数目。

20.一种方法,其包含:

执行指令,所述指令可操作以将堆栈寄存器文件内对应预定数目的寄存器分派给一个或一个以上软件功能中的每一者,而无需将具体寄存器指定给与所述一个或一个以上软件功能中的每一者相关联的指令,每一分派包括各自堆栈顶部指针和各自保存/恢复点;以及响应于执行一个或一个以上寄存器分派指令中的每一者,其中所述堆栈寄存器文件包含一个或一个以上寄存器库且每一寄存器库包含一个或一个以上寄存器:将所述堆栈寄存器文件中的具有至少一个在指令范围内的寄存器的每一寄存器库激活或维持在现用状态,所述指令范围由所述各自保存/恢复点和所述各自堆栈顶部指针定义;以及将所述堆栈寄存器文件中的不具有至少一个在所述指令范围内的寄存器的每一寄存器库去激活或维持在去激活状态,其中随着所述各自保存/恢复点由所述寄存器分派指令移动到特定寄存器外的位置,依序选择性去激活所述一个或一个以上寄存器库中的所述特定寄存器库。

21.根据权利要求20所述的方法,其中去激活特定寄存器库包含断开到达所述特定寄存器库的功率或将处理器时钟信号与所述特定寄存器库断开。

22.根据权利要求20所述的方法,其中:

当对应的堆栈顶部指针位于所述对应的寄存器库时,择性地激活所述寄存器库中的每一者。

23.一种方法,其包含:

将堆栈寄存器文件内预定数目的寄存器分派给一个或一个以上软件功能,而无需将具体寄存器指定给所述一个或一个以上软件功能中的指令;

响应于所述分派的寄存器的预定数目,选择性地激活和去激活所述堆栈寄存器文件内的多个寄存器库中的一者或一者以上的操作。

说明书 :

通过关闭堆栈寄存器文件的若干部分来减少功率

技术领域

[0001] 本发明教示涉及用以选择性地关闭一组寄存器的若干部分(例如,形成例如微处理器或编译器等处理器的堆栈寄存器文件的寄存器库)的技术。

背景技术

[0002] 寄存器文件是用于临时存储信息的高速存储结构。处理器通常包括一个或一个以上寄存器文件,以维持数据或指令相对靠近处理器核心。寄存器文件通常充当供处理器的执行资源使用的主要数据源,且高性能处理器通常包括较大的寄存器文件,以利用其较低存取等待时间。
[0003] 寄存器管理技术向处理分派寄存器,填充来自较慢存储媒体的寄存器,且稍后当将寄存器重新分派给其它程序或功能时向其它存储媒体清空寄存器。举例来说,当第一功能非现用时,如果现用的第二功能需要比当前可用更多的寄存器,那么可将来自由第一功能使用的寄存器的数据传送到其它存储装置。当控制回到第一功能时,可重新分派寄存器,但其通常将不是所述功能在先前现用期间使用的相同寄存器。为了恢复所述功能的现用性,将所存储的数据从存储装置加载到新近分派的寄存器中。为了实现较高指令/循环(IPC)处理量,现代处理器(例如,微处理器和平行编译器)、有效的寄存器重命名、寄存器使用和功能参数的传递是考虑因素。
[0004] 利用微处理器或编译器等的许多装置和应用具有低功率要求。通常,处理器中的寄存器文件由于其大量端口和高速度的缘故而成为主要的功率消耗者。在一些处理器中,这一情况由于大量寄存器而加剧。此外,随着晶体管技术缩减,泄漏功率——甚至存在于寄存器文件的未存取部分中——变得更为显著。通常,处理器始终向组中的所有寄存器提供功率。通常,不会特意关闭寄存器文件的未使用部分,因为这些寄存器保持可在任何时间使用且在寄存器断电时会丢失的值。
[0005] 持续需要设计出需要较低功率的处理器,(例如)以应用于具有有限或受限电源的便携式/手持式装置或其它应用。为了支持这种一般需要,特别需要用以减少由处理器的寄存器群组(例如,堆栈寄存器文件)消耗的功率的技术。

发明内容

[0006] 为了减少功率消耗,在不使用时将一组寄存器中的选定部分关闭。本发明揭示用于选择被激活的寄存器和不被激活的寄存器以便提供包括所述组寄存器的处理器的功率节省且仍维持其所需性能的特定技术。
[0007] 因此,本文揭示的教示的一个方面涉及一种操作处理器中的堆栈寄存器文件的寄存器的功率控制方法。所述方法需要接收关于堆栈寄存器文件中的寄存器的分派的信息。将堆栈寄存器文件划分为多个寄存器库。所述方法包含对应于由所接收的分派指示的寄存器数目要求而选择性地激活和去激活所述堆栈寄存器文件内的寄存器库的操作。
[0008] 本发明教示包含多种用于控制激活和去激活堆栈寄存器文件中的一个或一个以上库的算法。详细论述两个特定实例。在第一实例中,功率控制算法响应于分派小于或等于一阈值的数目的寄存器而维持第一寄存器库现用且维持第二库的寄存器非现用,其中所述阈值与形成所述第一库的寄存器的数目具有预定关系。响应于分派大于所述阈值的数目的寄存器,所述控制算法维持第一寄存器库现用,且激活第二寄存器库。
[0009] 在控制算法的第二实例中,每一寄存器分派指示各自堆栈顶部指针和各自保存/恢复点。响应于每一分派,此算法操作所述堆栈寄存器文件中的具有至少一个在从各自保存/恢复点到各自堆栈顶部指针范围内的寄存器的任何库。然而,所述堆栈寄存器文件中的不具有至少一个在所述范围内的寄存器的任何库均是非现用的。
[0010] 本文揭示的教示的其它方面涉及用于处理器中的堆栈寄存器系统。在一个此类方面,寄存器堆栈包括包含第一数目的寄存器的第一寄存器库和包含第二数目的寄存器的第二寄存器库。提供用于响应于对处理器的处理操作分派和解除分派寄存器来选择性地激活和去激活所述寄存器库中的至少一者的装置。所述激活和去激活动态地调节现用的库的数目作为所分派的寄存器数目的函数。
[0011] 在另一方面,用于处理器中的堆栈寄存器系统包括寄存器堆栈,其包含寄存器库,其中每一寄存器库包括一个或一个以上所述寄存器。此系统还包括控制器,其响应于关于堆栈内的寄存器的分派的信息,来选择性地控制一个或一个以上所述寄存器库的接通/断开状态。所述控制器响应于所述堆栈内分派的寄存器的数目,来增加接通的库的数目以满足增加寄存器数目的至少一个分派。控制器还响应于减少寄存器数目的至少一个分派而减少接通的库的数目。
[0012] 以下描述内容中将部分陈述额外的目的、优点和新颖特征,且所述额外的目的、优点和新颖特征将由所属领域的技术人员在阅读下文和附图后部分了解,或可通过制作或操作实例而了解。可通过实践或使用所附权利要求书中明确指出的方法、手段和组合来实现和达成本发明教示的目的和优点。

附图说明

[0013] 附图仅以举例方式而并非限制方式来描绘根据本发明教示的一个或一个以上实施方案。图中,相同参考标号指代相同或相似元件。
[0014] 图1是可用于解释对由堆栈寄存器文件形成的库的激活的选择性控制的逻辑图。
[0015] 图2是处理器的一部分的功能方框图,其包括堆栈寄存器文件的库和功率控制器以及与所述控制器相互作用的特定元件,用于实施利用固定排序来激活和去激活堆栈寄存器文件的库的功率控制算法的第一实例。
[0016] 图3是用于响应于功率控制器通过控制时钟信号来激活和去激活寄存器库的门电路的第一图形说明。
[0017] 图4是用于响应于功率控制器通过控制功率来激活和去激活寄存器库的门电路的第二图形说明。
[0018] 图5-7是在根据第一功率控制算法的操作期间处于三个不同状态的图2的寄存器文件和功率控制器的图。
[0019] 图8是处理器的一部分的功能方框图,其包括堆栈寄存器文件的库和功率控制器以及与所述控制器相互作用的特定元件,用于实施利用可变排序机制来激活和去激活堆栈寄存器文件的库的功率控制算法的第二实例。
[0020] 图9-11是在根据第二功率控制算法的操作期间处于三个不同状态的图8的寄存器文件和功率控制器的图。
[0021] 图12A是可用于解释堆栈寄存器文件与寄存器保存引擎(RSE)和后备存储器的一般操作的逻辑图。
[0022] 图12B是可用于解释堆栈寄存器文件中的卷绕寄存器分派的实例的一般操作的逻辑图。

具体实施方式

[0023] 在以下具体实施方式中,以举例方式陈述许多特定细节,以便提供对相关教示的彻底理解。然而,所属领域的技术人员应了解,可在没有此类细节的情况下实践本发明教示。在其它例子中,已相对概括而没有细节地描述众所周知的方法、程序、组件和电路,以免不必要地混淆本发明教示的各方面。
[0024] 为了减少功率消耗,基于对与将需要用于特定操作的寄存器的分派相关的指令和/或指针的分析,在不使用时将寄存器组或堆栈的选定部分关闭。本文论述的技术利用若干观测资料。首先,关于至少一些处理器中的寄存器的分派的指令提供对任何时间点所需的寄存器数目的提前认识。大多数功能并不需要所有可用的寄存器。因此,可通过关闭寄存器文件的若干部分来节省寄存器堆栈的功率消耗。为了理解如何分派和使用寄存器以及如何控制处理来激活和去激活库,首先回顾堆栈寄存器文件的操作的某些一般方面可能是有帮助的。
[0025] 对于堆栈寄存器文件,编译器通过使用ALLOC指令分派和解除分派理论上无限的堆栈上的寄存器来管理将虚拟寄存器名称映射到物理寄存器名称。ALLOC指令的核心功能在于确保编译器请求用于当前堆栈帧的物理寄存器的数目可用,且调节存储在寄存器堆栈基底(RSB)寄存器中的寄存器映射偏移。在执行期间,将RSB添加到由编译器指定的虚拟寄存器名称以帮助产生由所有寄存器存取指令使用的实际物理寄存器名称。
[0026] 以下实例展现ALLOC指令的简化操作:
[0027] 简化组合:
[0028] ;;Rx=虚拟寄存器x
[0029] ;;PRx=物理寄存器x
[0030] ;;假定RSB=0;0局部寄存器
[0031] ALLOC 0,2 ;;请求2个局部寄存器(RSB=0)
[0032] ;;堆栈顶部=2(指向PR1)
[0033] MOV R0=1 ;;PR0=1
[0034] ADD R1=R0,3 ;; PR1=PR0+3 (PR1=4)
[0035] CALLf ;;函数调用f(x)
[0036] ALLOC 1,2 ;;请求1个输入寄存器、2个局部寄存器[0037] ;;RSB=(先前局部—所请求的输入)=(2-1)=1[0038] ;;堆栈顶部=4(指向PR3)
[0039] MOV R1=5 ;;PR2=5
[0040] MUL R2=R0,R1 ;;PR3=PR1*PR2(PR3=20)
[0041] ;;MOVR3=7 ;;非法!不能存取超过堆栈顶部。
[0042] ;;仅输入+局部=1+2=3个寄存器被分派[0043] 此一般设计的特征在于ALLOC指令向处理器准确地指示编译器在每一功能中使用的寄存器的数目,且编译器决不应产生存取超过那些明确分派的寄存器的寄存器的指令。应注意,某些结构实际上指定某些寄存器为全局的而没有重新映射,且其它寄存器使用上文描述的机制来重新映射。然而,为了简单起见,本文献假定所有寄存器均被重新映射。
[0044] 在操作期间,为了维持无限寄存器堆栈的假象,分派超过所实施的物理寄存器数目的寄存器回绕到堆栈物理寄存器0。在此类情况下,寄存器保存引擎(RSE)可根据需要自动将数据从寄存器保存到保持在存储器中的后备存储器和将数据从所述后备存储器恢复到寄存器。在此类操作中,保存/恢复点还根据需要卷绕通过物理寄存器堆栈(见图12A和图12B)。以此方式,寄存器堆栈文件充当含有最新近寄存器数据帧的环形缓冲器。RSE将数据在当前分派不需要时移动到保持在存储器中的后备存储器(“溢出”操作),且RSE将数据在需要时从后备存储器恢复到经分派的寄存器(“填充”操作)。RSE从所述堆栈中当前现用的群组或帧外部的寄存器溢出以及填充所述寄存器。
[0045] 参看图1,为了促进功率节省,实例有效地将物理寄存器文件分割成具有个别功率控制器的库。在实例中,寄存器堆栈11包括128个指令寄存器PR0到PR127。每一库包括一个或一个以上寄存器。在所述实例中,由于大多数处理需要30个或少于30个寄存器,因而方便将所述128个寄存器堆栈11划分为四个库,每一库具有32个寄存器。在所述实例中,库0(13)现包括寄存器PR0到PR31;且库1(15)现包括寄存器PR32到PR63。进而,库2(17)现包括寄存器PR64到PR95;且库3(19)现包括寄存器PR96到PR127。所属领域的技术人员将认识到,可使用其它数目的库或每一库中其它数目的寄存器,且举例来说,每一库中的寄存器数目不需要相等。在实例中,可单独激活和去激活所述库中的每一者,以动态地将现用的库的数目且因此现用寄存器的数目与变化的寄存器数目要求匹配。去激活不需要的库节省了功率。
[0046] 为了实施库的接通-断开控制,处理器将包括功率控制器21,其与堆栈寄存器文件的库相关联。所述控制器21响应于关于所需的寄存器数目的分派信息。举例来说,在某些处理器中,ALLOC和其它指令提供关于寄存器使用的提示,功率控制器21明智地使用所述提示来根据需要对库通电/断电且调节各种堆栈维持指针。
[0047] 功率控制器通过使用恰当算法选择性地激活和去激活经划分的寄存器堆栈的库。在一个实例中,所述算法在对库进行通电和断电时利用库的固定排序,以减小库激活/去激活的频率。固定排序算法通常保持第一库接通,且随着寄存器分派达到或经过与对应于库边界的寄存器的编号相关的阈值,接通额外的库。随着寄存器分派减少,以相反次序去激活库。
[0048] 在另一实例中,所述算法在对库进行通电和断电时利用库的可变排序,以将同时现用的库的数目减到最小,且因此增加功率消耗的节省。在处理器提供所分派的寄存器的堆栈顶部(TOS)指针和RSE保存/恢复点(所分派堆栈的底部)的情况下,随着指针移动通过库,所述算法激活和去激活库。具有一个或一个以上在从一个指针到另一个指针的范围内(或在相关联的偏移值之间)的寄存器的库是现用的。没有在所述范围内的寄存器的库非现用。随着堆栈顶部指针接近并进入新的库,控制器激活所述库。随着保存/恢复点离开库,可去激活所述库。
[0049] 图2是处理器的一部分的功能方框图,其使用固定排序算法实施功率控制。展示在寄存器操作和寄存器库的功率控制中所涉及的处理器的元件。所属领域的技术人员将认识到,处理器通常包括出于方便起见未展示的许多其它元件。当然,那些元件中的某些可向堆栈中的寄存器供应数据或利用来自所述寄存器的数据,但它们不直接参与示范性接通/断开控制算法。
[0050] 出于此第一实例的目的,再次假定物理寄存器堆栈25包括128个寄存器PR0到PR127,且出于功率控制的目的而被划分为四个库。再次,库0(27)包括寄存器PR0到PR31;且库1(29)包括寄存器PR32到PR63。进而,库2(31)包括寄存器PR64到PR95;且库3(33)现包括寄存器PR96到PR127。
[0051] 尽管出于方便起见而未展示连接和其它元件,但堆栈25中的各个寄存器从处理器的其它元件和/或单独存储装置接收数据且向其供应数据。举例来说,寄存器可最初加载有来自存储器的数据,所述存储器可驻存在处理器芯片上或单独芯片上。寄存器将所述数据提供到核心处理元件以供处理,且接收并存储结果。当临时重新分派寄存器时,将数据传送到后备存储器或从后备存储器传送数据,且当特定操作完成时可将数据传送回存储器。一般来说,物理寄存器堆栈文件25中的寄存器的操作与众所周知的寄存器堆栈文件的操作相同,且此处将不再作详细论述,不同之处只是此类操作影响本发明教示的功率控制算法或受所述算法影响。
[0052] 可响应于来自功率控制器37的选择信号,以多种已知方式中的一者来控制堆栈25的库27-33的现用状态。出于一般论述的目的,图2展示需要用于寄存器驱动的信号(SRD)和用于响应于来自功率控制器37的库功率控制信号将SRD信号耦合到所述库的一般门电路。举例来说,门41响应于来自控制器37的功率控制信号选择性地将寄存器驱动信号SRD供应到库0(27),且门43响应于来自控制器37的另一功率控制信号选择性地将寄存器驱动信号SRD供应到库1(29)。类似地,门45响应于来自控制器37的功率控制信号选择性地将寄存器驱动信号SRD供应到库2(31),且门47响应于来自控制器37的另一功率控制信号选择性地将寄存器驱动信号SRD供应到库3(33)。所述门可以是逻辑门、开关、其组合或经配置以响应于来自控制器37的恰当选择信号将恰当类型的信号供应到寄存器库的任何其它电路。
[0053] 注意到,多种不同技术可用于控制寄存器库的接通-断开状态。为了确保完全理解,考虑两个实例可能是有帮助的。
[0054] 在第一实例中,通过控制是否将必需的时钟信号供应给每一库来选择性地激活/去激活所述库。图3展示应用于逻辑电路27的此类控制。在所述实例中,门41是与门。将时钟信号(CLK)施加到所述与门41的一个输入,且将接通/断开控制信号施加到来自功率控制器37的另一输入。当控制信号是“接通”时,门41施加时钟信号(CLK),其允许寄存器库27的逻辑以正常方式接收数据“输入”且供应数据“输出”。当控制信号是“断开”时,门41阻断时钟信号(CLK)。在此状态下,寄存器库27的逻辑将不循环,且因此其汲取较少功率。对于其它库可使用类似的控制。
[0055] 在另一实例中,接通和断开用于每一库的功率。这可通过控制到达电源电压的连接或通过选择性地连接到接地来实施,如图4的实例中展示。直接功率控制具有以下优点:其排除非现用寄存器库的泄漏电流。在图4的实例中,两个晶体管充当门43以选择性地将库29的CMOS电路连接到接地。当控制器37将接通状态信号施加到门43时,所述门提供接地连接。库29的电路汲取电源电压(V)与接地(GND)之间的功率,且所述库如本文描述那样操作。当功率控制器37断开门43时,所述门将库29的电路与接地断开,切断功率,且去激活库29。对于其它库可使用类似的功率控制。
[0056] 所属领域的技术人员将认识到,可使用其它技术来控制寄存器库的接通/断开状态。并且,给定处理器可对形成堆栈寄存器文件25的不同库实施不同技术的组合。
[0057] 回到图2,功率控制器37是有限状态机。所述状态机可实施为可编程处理器,但还可由电路和/或逻辑块形成以响应于特定输入而产生所需的输出,也就是说,以便实施特定控制算法。在所述实例(见图2和8)中,状态机实施单个控制算法,但所述算法的某些参数可由处理器设定。所属领域的技术人员将认识到,所述控制器可经设计以响应于来自处理器或用户的选择或控制输入而选择性地实施两个或两个以上算法。还可能能够(例如)在临时“高性能”模式中禁用功率控制算法且在所有寄存器接通的情况下操作。
[0058] 当实施功率控制时,控制器37的状态机响应于特定输入信息,以根据特定功率控制算法而选择性地输出信号以激活寄存器堆栈文件25的库27-33。在此实例中,控制器37的状态机响应于来自处理器的与堆栈25相互作用或利用堆栈25的若干元件的信号。展示到达功率控制器37的连接,因为其与寄存器库的激活/去激活有关,但为了便于说明,此图式中省略了其它处理器元件到堆栈25/堆栈25到其它处理器元件的正常连接。
[0059] 在所述实例中,功率控制器37响应于高电平处理器控制元件51。处理器控制器51可使用各种控制寄存器(软件控制的或内部控制的)来改变功率控制器37所使用的功率设置、参数选择、阈值等。
[0060] 功率控制器37还响应于来自寄存器文件控制元件53的若干信号。寄存器文件控制器53是(例如)通过为各种处理使用的功能命名或重命名那些寄存器来正常控制堆栈寄存器文件25的寄存器的分派和操作的元件。控制器53使用对应于现用寄存器的数目的模数来设置文件的堆栈顶部(TOS)点,识别寄存器堆栈基底(RSB)寄存器,且产生用于堆栈寄存器文件的卷绕和/或其它管理的任何其它指针。举例来说,在标准128寄存器堆栈中,控制器53将以模数128进行操作;且当所有四个库27-33均现用时,控制器53使用所述模数来控制堆栈25。然而,当所述库中只有一个、两个或三个现用时,寄存器文件控制器53将其模数计数调节为32、64或96。因此,功率控制器37将信号BON.RSC提供到寄存器文件控制器53,从而指示通电的库的数目,且寄存器文件控制器53在其指针设置处理和类似处理中设置其内部计数逻辑,以使用相应的模数数字。
[0061] ALLOC指令是用以向给定处理分派许多寄存器的明确指令(调用)。解除分派是实质上指示将寄存器在不再需要时从所述处理收回的返回或响应。这些指令因此界定在任何给定时间需要的寄存器的数目。寄存器文件控制器53向功率控制器37提供此关于分派和解除分派的寄存器的数目的信息,以用于激活和去激活堆栈寄存器文件中的库。寄存器文件控制器53还提供指针TOS和某些数值A及D,如下文论述。
[0062] 寄存器保存引擎(RSE)55根据需要自动地将数据从堆栈文件25中的寄存器保存到保持在存储器中的后备存储器以及将数据从所述后备存储器恢复到寄存器(见图12A和12B)。一般来说,RSE 55的操作与在正常处理器中相同。然而,类似于寄存器文件控制器
53,RSE以对应于现用寄存器的数目的模数数字来计数,在此情况下以便设置寄存器保存引擎保存/恢复点(RSEP)的位置。因此,功率控制器37向RSE 55供应信号BON.RSE,从而指示通电的库的数目,且RSE 55相应地调节其操作。BON.RSC和BON.RSE信号是类似的,但在所有例子中可以是不完全相同的。
[0063] 在所说明的固定排序算法的实施方案中,每一库27-33受到独立控制,以使得其可独立于组成堆栈25的其它库而被激活和去激活。处理器可接着通过仅在需要时激活库且对不需要的库断电来相对于由物理堆栈或文件25的寄存器消耗的功率以低功率模式操作。
[0064] 图2的实例利用固定排序技术。堆栈25通常在仅对一个寄存器库27通电的情况下运作,且控制器37仅在单个分派需要一个以上寄存器库时对额外寄存器库通电。
[0065] 使用以下定义稍微较详细地考虑固定排序算法实例可能是有帮助的:
[0066] ·设R为每一库中寄存器的数目;
[0067] ·设B为所有库的数目,所述库被编号为0到B-1;
[0068] o因此,存在总共B*R个堆栈寄存器;
[0069] ·设B_On为通电的库的数目;
[0070] ·设A为请求用于分派的寄存器的数目;
[0071] ·设D为请求用于解除分派的寄存器的数目;
[0072] ·设TOS为寄存器堆栈顶部的位置;
[0073] ·设RSEP为寄存器保存引擎保存/恢复点的位置
[0074] 在用于本实例的术语中,B×R将为96,其是堆栈寄存器文件中物理卷绕可用的寄存器总数目。本实例结构实际上将寄存器R0-R31指定为全局的而没有重新映射,且只有寄存器R32-R127被重新映射且可服从功率控制算法。这里为了论述起见,假定所有128个寄存器可被重新映射(B×R=128)且服从功率控制。
[0075] 在固定排序实例中,始终以严格升序对库进行通电:首先库0,接着库1等,直到库B-1。在所述四库实例中,这意味着库0(27)被首先通电(实际上始终接通);接下来对库1(29)通电;接下来对库2(31)通电;且最后对库3(33)通电(只有在需要96个以上寄存器时才接通)。相反,始终以严格降序对库进行断电:首先库B-1,接着库B-2等,直到库1。
在所述四库实例中,这意味着首先对库3(33)断电;对库2(31)断电;接着对库1(29)断电。
在处理器的最低功率操作期间,库0(27)通常保持接通。在此第一模式中,只有在A≥B_On*R时才对额外的库通电。只有在TOS>RSEP时,才对库断电。
[0076] 用于此操作模式的示范性算法可如下:
[0077] 1.在只有库0(27)通电的情况下开始(R个寄存器)。
[0078] 2.在寄存器分派请求时(由于ALLOC指令的缘故):
[0079] a.如果(A<B_On*R),那么使用当前通电的寄存器库作为B_On*R大小的卷绕寄存器文件。这意味着用于RSB、TOS和RSEP的所有算术遵循模(B_On*R)算术。
[0080] b.如果(A≥B_On*R),那么
[0081] i.设B_On_previous=B_On;
[0082] ii.当(A≥B_On*R)时,对另一库通电((B_On++);
[0083] iii.递增(TOS+=A)模(B_On*R)
[0084] iv.当(RSEP>TOS)时,使用具有RSEP点的模((B_On-1)*R,旧值)算术,直到其回绕到物理寄存器0为止。这确保正确地保存当前分派在TOS与PR0之间的寄存器。
[0085] v.转到步骤2。
[0086] 3.在寄存器解除分派时(由于调用返回等缘故):
[0087] a.如果((TOS-D)模(B_On*R)>RSE保存/恢复点),那么
[0088] i.当((TOS-D)模(B_On*R)<(B_on-1*R))时,对另一库断电(B_On--);
[0089] ii.递减(TOS-=D)模(B_On*R);
[0090] iii.转到步骤2。
[0091] BON对应于RSE.N_STACKED_PHYS,其表示堆栈寄存器的数目(通常为96)。然而,使用图2的实施方案,此值依据现用的库的数目而变化。
[0092] RSB值对应于RSE.BOF(RSE文件底部)。TOS值对应于RSE.BOF+CFM.sol。RSEP值因而对应于RSE.LoadReg,其为比待加载在对应于堆栈物理寄存器数目的模数中的下一寄存器大一的物理寄存器编号。
[0093] 图5-7描绘根据此第一示范性排序算法的堆栈操作中的若干示范性状态。在图5展示的状态中,当前分派利用少于32个寄存器。RSE保存/恢复点(RSEP)在寄存器PR0下方,也就是说,在物理寄存器堆栈25底部。堆栈顶部(TOS)指针识别库0(27)中较高寄存器中的一者。RSE对堆栈顶部点上方的寄存器执行溢出和填充操作,回绕到RSE保存/恢复点(在此情况下,在寄存器PR0下方)。经分派的现用寄存器是在从PR0到TOS指针下方的寄存器的范围内的那些寄存器。在此状态中,功率控制器37提供接通信号以仅对一个库“库0(27)”通电。功率控制器37向其它库29-33提供断开信号,使得那些库非现用。尽管在分派小于或等于32个寄存器的情况下操作,但系统将保持在类似于图5的状态中,只是TOS和RSE保存/恢复点将移动,以促进通过RSE的溢出和填充操作。这些指针的回绕将保持在库0内。通过这样做,控制器53和RSE 55用于移动这些指针的计数操作将利用链接到32(现用库0(27)中寄存器的数目)的计数模数。
[0094] 图5所示的特定状态有利于当需要32个以上寄存器时向上过渡到使用两个库中的寄存器的状态。然而,如果库0中的处理由于库0内卷绕的缘故而具有物理上在保存/恢复点下方的堆栈顶部(TOS)指针,那么处理器需要在激活下一较高库之前,将下一库“库1”的激活延迟到保存/恢复点已经回绕且物理上再次在TOS指针下方(直到TOS>RSEP)为止。此延迟确保库0中在过渡之前物理上位于保存/恢复点上方的寄存器中的数据不会由于过早分派到需要更多寄存器的处理而丢失。
[0095] 在图6说明的实例中,当前分派利用32个以上但64个以下寄存器。在此实例中,功率控制器37提供接通信号以激活库0(27)和库1(29)两者。功率控制器37向另外两个库31和33提供断开信号,使得那些库非现用。图6展示RSE保存/恢复点在寄存器PR0处(也就是说,在物理寄存器堆栈25的底部处)的状态。堆栈顶部(TOS)指针识别库1(29)中较高寄存器的一者。经分派的现用寄存器是在从PR0到TOS指针下方的寄存器的范围内的那些寄存器。库1(29)中未分派的现用寄存器是在TOS点与RSE保存/恢复点(其当前在寄存器PR0下方)之间的那些寄存器。RSE对库1中的在堆栈顶部点上方的寄存器执行溢出和填充操作,回绕到RSE保存/恢复点(其在此实例中在寄存器PR0下方)。
[0096] RSE引擎进行的回绕处理大致上类似于在使用整个128寄存器堆栈时的处理,不同之处只是回绕计数限于现用库0和1的64个寄存器。此类处理导致例如图7所示的状态。此处,当前分派利用32个以上但64个以下寄存器。功率控制器37仍提供接通信号以激活库0(27)和库1(29)两者;且功率控制器37仍向另外两个库31和33提供断开信号,使得那些库非现用。然而,在此状态下,RSE保存/恢复点在库1中的寄存器处,也就是说,在PR32处或其上方。所述处理已回绕到库0的寄存器中,因此堆栈顶部(TOS)指针识别库0中的寄存器中的一者(例如,寄存器PR0)。
[0097] 当然,所述排序算法支持使用三个寄存器库和使用所有四个寄存器库的类似过渡。与只有一个库现用时的情况一样,在控制器37激活下一寄存器库以满足进一步增加的分派之前,指针必须从回绕状态(如图7)过渡到TOS>RSEP的状态(如图6)。举例来说,如果需要从如图7所示的状态过渡到3或4库现用状态,那么必须允许RSE处理将保存/恢复点向上移动通过库1(29)且再次回绕到寄存器库0(27)中的点(如图6所示的状态),以确保在从先前RSE保存/恢复点(图7所示)到顶部库1(29)处的寄存器PR63的范围内的寄存器中的数据已被保存到存储器中的后备存储器。对于TOS>RSEP的要求类似地适用于从3个库到4个库的过渡。通过类似限制,也可能直接过渡到较高数目的现用库,例如从1个库到3或4个,或从2个库到4个库。
[0098] 向下到较小数目的现用库的每一过渡还必须等待指针的恰当状态。具体地说,在现用寄存器堆栈底部处的保存/恢复点必须已经回绕且处于将保持现用的库内。堆栈顶部指针必须在保存/恢复点上方且位于或可安全移动到将保持现用的库中的点。
[0099] 一旦分派越过库之间的边界(在我们的实例中从库0到库1),较高数目的库保持现用,直到寄存器分派达到允许过渡回到较低数目的现用库的状态为止。在我们的实例中,此类新的分派状态将允许从库1现用过渡回到仅库0现用的状态。
[0100] 举例来说,如果当RSE保存/恢复点和堆栈顶部点如图7所示而定位时将寄存器解除分派到低于32的数目未决,那么必须由RSE继续处理,直到堆栈顶部点和RSE保存/恢复点两者均回到库0内为止,接着功率控制器37可断开另一库“库1”以返回到图5所示的较低状态。
[0101] 编译器可改变其寄存器分派。对于希望优化性能的设计来说,编译器可分派更多寄存器以增加性能。然而,利用功率控制功能,这将增加对更多库通电的机会,且减少功率节省。较不积极的寄存器分派(在另一处理器设计中或当一个处理器正以较低功率模式进行编译时)将以性能为代价来分派较少寄存器。然而,此类操作将增加通过寄存器库功率控制获得的优点。
[0102] 在所述实例中,所述库中的寄存器数目界定用于确定何时对库进行通电和断电以大致与寄存器分派匹配的阈值。在以上论述中,这些阈值与所述库中的寄存器数目匹配,且因此对应于库边界。在以上算法的变化形式中,用于对库进行通电或断电的触发或阈值可用额外的阈值偏移来改变(即,检查A+T≥B_On*R),以提前开始对库通电且延迟其断电。这可能对于掩盖通电/断电时间特别有用。
[0103] 在上文论述的实例中,库0(27)始终是接通的。所属领域的技术人员将认识到,对于此类实施方案,功率控制器37对所述库的操作状态的门控控制是不必要的。因此,可能会将控制限于对其它库的操作状态的激活和去激活,但由于控制其它库的方法或算法将基本上如上文描述那样操作。在特别简单的实施方案中,可将堆栈仅划分为2个库,其中一个库始终接通,且根据固定排序算法来控制另一库的接通/断开。
[0104] 通过将堆栈寄存器文件划分为库且控制对所述库的激活,处理器大多数时间需要对较少寄存器通电。
[0105] 可使用各种功率控制算法来激活和去激活库。以上实例使用固定排序实例。以上实例中所描述的固定算法的特定特征在于,其适当不频繁地对库进行通电/断电。只有在功能需要大于已通电寄存器数目的同时寄存器分派时才对新的库进行通电。类似地,只有在满足特定条件时才对库进行断电。这使得其适合于限制对库进行通电/断电的频率。现考虑使用寄存器库的通电/断电操作的可变排序的实例。
[0106] 从以下论述中将了解,通过可变排序算法,没有必要修改寄存器控制器和RSE的模数计数,因为寄存器分派以类似于在整个现用堆栈中(例如,如在图12A和12B中)的方式循环通过整个堆栈。第二示范性算法较频繁地对寄存器文件的若干部分进行通电/断电,然而,这导致通电寄存器可能更紧密配合此时实际上需要的寄存器。代替以固定的预定次序对寄存器库进行通电和断电,由第二算法实施的排序完全依赖于处理器的编码行为。
[0107] 图8是处理器的一部分的功能方框图,其使用可变排序算法实施功率控制。展示在寄存器操作和寄存器库的功率控制中所涉及的处理器的元件。所属领域的技术人员将认识到,处理器通常包括出于方便起见未展示的许多其它元件。当然,那些元件中的某些可向堆栈中的寄存器供应数据或利用来自所述寄存器的数据,但它们不直接参与示范性接通/断开控制算法。
[0108] 出于此第二实例的目的,再次假定物理寄存器堆栈125包括128个寄存器PR0到PR127,且出于功率控制目的而被划分为四个库。出于论述的目的,所有寄存器服从卷绕,且所有库服从功率控制。再次,库0(127)包括寄存器PR0到PR31;且库1(129)包括寄存器PR32到PR63。进而,库2(131)包括寄存器PR64到PR95;且库3(133)包括寄存器PR96到PR127。
[0109] 尽管为了方便而未展示连接和其它元件,但堆栈125中的个别寄存器从处理器的其它元件和/或单独存储装置接收数据且向其供应数据。举例来说,寄存器可最初加载有来自存储器的数据,所述存储器可驻存在处理器芯片上或单独芯片上。寄存器将所述数据提供到核心处理元件以供处理,且接收并存储结果。当临时重新分派寄存器时,将数据传送到后备存储器或从后备存储器传送数据,且当特定操作完成时可将数据传送回存储器。一般来说,物理寄存器堆栈文件125中的寄存器的操作与众所周知的寄存器堆栈文件的操作相同,且此处将不作详细论述,不同之处只是此类操作影响本发明教示的功率控制算法或受所述算法影响。
[0110] 可响应于来自功率控制器137的选择信号,以多种已知方式中的一者来控制堆栈125的库127-133的现用状态。出于一般论述的目的,图8展示需要用于寄存器驱动的信号(SRD)和用于响应于来自功率控制器137的库功率控制信号将SRD信号耦合到所述库的一般门电路。举例来说,门141响应于来自控制器137的功率控制信号选择性地将寄存器驱动信号SRD供应到库0(127),且门143响应于来自控制器137的另一功率控制信号选择性地将寄存器驱动信号SRD供应到库1(129)。类似地,门145响应于来自控制器137的功率控制信号选择性地将寄存器驱动信号SRD供应到库2(131),且门147响应于来自控制器137的另一功率控制信号选择性地将寄存器驱动信号SRD供应到库3(133)。
[0111] 所述门可以是逻辑门、开关、其组合或经配置以响应于来自控制器137的恰当选择信号将恰当类型的信号供应到寄存器库的任何其它电路。与之前的实例一样,个别寄存器库的实际激活可使用时钟门控(如在图3中)、用于门控电源电压的电路(如在图4中)、用于门控到达接地的连接的电路,或其它装置。
[0112] 如在之前的实例中,功率控制器137是有限状态机,但状态机137响应于不同组的输入且根据可变排序算法来控制库激活和去激活。状态机137根据所述功率控制算法而选择性地将信号输出到门141-147以激活寄存器堆栈文件25的库127-133。再次,控制器137的状态机响应于来自处理器的与堆栈125相互作用或利用堆栈125的若干元件的信号。展示到达功率控制器137的连接,因为其与寄存器库的激活/去激活有关,但为了便于说明,此图式中省略了其它处理器元件到堆栈125/堆栈125到其它处理器的正常连接。
[0113] 在第二实例中,功率控制器137响应于高电平处理器控制元件151。处理器控制器151可使用各种控制寄存器(软件控制的或内部控制的)来改变功率控制器137所使用的功率设置、参数选择、阈值等。
[0114] 功率控制器137还响应于来自寄存器文件控制元件153的若干信号。再次,寄存器文件控制器153是(例如)通过为各种处理使用的功能命名或重命名那些寄存器来正常控制堆栈寄存器文件125的寄存器的分派和操作的元件。控制器153使用对应于现用寄存器数目的模数来设置文件的堆栈顶部(TOS)点,识别寄存器堆栈基底(RSB)寄存器,且产生用于堆栈寄存器文件的卷绕和/或其它管理的任何其它指针。在此实例中,控制器153继续使用模数128,就好像所有128个寄存器是持续现用的。
[0115] ALLOC指令是用于向给定处理分派许多寄存器的明确指令(调用)。解除分派是实质上指示将寄存器在不再需要时从所述处理收回的返回或响应。这些指令因此界定在任何给定时间需要的寄存器的数目。寄存器文件控制器53向功率控制器37提供此关于分派和解除分派的寄存器的数目的信息,以用于激活和去激活堆栈寄存器文件中的库。寄存器文件控制器53还提供指针TOS和某些数值A及D,如下文论述。
[0116] 寄存器保存引擎(RSE)155根据需要自动地将数据从堆栈文件125中的寄存器保存到保持在存储器中的后备存储器(未图示)以及将数据从所述后备存储器恢复到寄存器。RSE 155的操作与图12A和12B表示的操作大致相同。为了设置寄存器保存引擎保存/恢复点(RSEP)的位置,RSE 155以对应于现用寄存器数目的模数数字来计数(在此情况下为128),基本上与在始终对所有寄存器通电的处理器中一样。
[0117] 每一库127-133处于个别功率控制下,使得其可独立于组成堆栈125的其它库而被通电/断电。处理器可接着通过激活具有在TOS与RSEP之间的范围内的寄存器的库且去激活其它库来相对于由物理堆栈或文件125的寄存器消耗的功率以低功率模式进行操作。
[0118] 图8的实例利用动态地将同时现用的库的数目与寄存器分派匹配的排序算法。在此模式中,通电的库的数目仅由当前堆栈帧的大小(或帧的设定数目)决定,且可能更为频繁地对库进行通电/断电,因为寄存器堆栈顶部的位置决定对哪些库通电。
[0119] 使用以下定义稍微较详细地考虑固定排序算法实例可能是有帮助的:
[0120] ·设R为每一库中寄存器的数目;
[0121] ·设B为所有库的数目,所述库被编号为0到B-1;
[0122] o因此,存在总共B*R个堆栈寄存器;
[0123] ·设TOS为寄存器堆栈顶部的位置;
[0124] ·设RSB为当前帧的底部的位置;
[0125] ·设RSEP为寄存器保存引擎保存/恢复点的位置;
[0126] ·每当指针指向库X中的寄存器时,认为其指向库X。
[0127] ·设库(指针)为指针所指向的库的编号。
[0128] ·设(X,Z)是X与Z之间的库。认为库Y在库X与Z之间,如果通过用模数B算术递增X,则在Z之前到达Y。
[0129] 注意,我们可使用方括号来指示包含:(X,Z]意指在X与Z之间的库(包括Z)。在对此模式的这种可变排序中,不以任何严格次序对库进行通电/断电,但被通电的库始终是邻近的(认为库B-1邻近于库0)。每当TOS或RSEP跨越库边界时,对库进行通电/断电。阈值对应于库边界,但如稍后所论述,触发点可能稍微偏离与库中的寄存器编号相关联的边界。TOS、RSB和RSEP的卷绕仅从库N-1到库0(在我们的N=4实例中为从库3到库0)发生;这意味着模数B*R算术始终用于递增/递减TOS、RSB和RSEP指针值。
[0130] 用于此操作模式的算法如下。
[0131] 1.在任意库I通电的情况下开始。确保RSB、RSEP和TOS指向库I。
[0132] 2.每当打算递增TOS(由于分派的缘故)以从库I改为指向库J时,对I与J之间(包括J)的任何未通电库进行通电。(对(I,J)中的库进行通电)。
[0133] 3.每当打算递减TOS(由于解除分派的缘故)以从库J改为指向库I且J!=I以及库(RSEP)!=J时,对I与J之间(包括J)的库进行断电。(对(I,J)中的库进行断电。)
[0134] 4.每当打算递增RSEP(由于寄存器保存的缘故)以从库I改为指向库J且I!=J以及库(TOS)!=I时,对I与J之间(包括I)的库进行断电。(对[I,J]中的库进行断电。)
[0135] 5.每当打算递减RSEP(由于寄存器恢复的缘故)以从库J改为指向库I时,对I与J之间(包括I)的任何未通电库进行通电。(对[I,J]中的库进行通电。)[0136] 6.在后台积极地将寄存器保存到备用存储器,以将必须通电的库的数目减到最小。
[0137] 此方法对任何数目的库和寄存器/库透明地操作。
[0138] 图9-11描绘根据此第二排序算法的堆栈的操作中的若干示范性状态。举例来说,图9描绘所述算法在只有一个库通电的情况下操作的状态。注意,不需要因为将要对库1(129)或任何较高的库通电而对库0(127)通电。当前分派利用少于32个寄存器。在所说明的状态中,所分派的寄存器在库1(129)中,但其它三个寄存器库中的任何一者内分派的所有寄存器可能具有类似状态。在所说明的状态中,RSE保存/恢复点(RSEP)在寄存器PR32处或其上方,且堆栈顶部(TOS)指针识别库1(27)中较高寄存器中的一者(在此情况下为PR63)。在此状态中,功率控制器137提供且/或维持接通信号以激活或启用仅一个库“库1(127)”,且向其它库127、131和133提供断开信号。现用或分派的寄存器在RSE保存/恢复点(RESP)与堆栈顶部(TOS)指针之间的区域中,当前没有回绕。RSE在RSE保存/恢复点下方执行溢出和填充操作。
[0139] 本质上,边界处的寄存器编号充当触发点或阈值。当TOS指针达到或超过阈值时,功率控制器137激活下一个库。当RSEP指针经过阈值时,功率控制器可去激活下部的库。在某些实施方案中,阈值可偏离实际边界。
[0140] 假定是第一单个库现用状态(例如图9中所示),那么当堆栈顶部指针越过下一较高库边界(比如说图9和10的实例中库1(129)中的寄存器PR63与库2(131)中的寄存器PR64之间的边界)时发生向两个库现用状态的过渡。图10描绘所述算法在2个库通电的情况下操作的状态。在所述实例中,PSE保存/恢复点仍在寄存器PR32处或其上方。然而,堆栈顶部(TOS)指针已向上移动且越过库边界而到达库2(131)中的寄存器中。库2和库1两者均具有在从RSEP到TOS的被分派范围内的一个或一个以上寄存器。其它库没有。
[0141] 预期向此状态过渡时,功率控制器137已经施加接通信号以激活库2(131),且同时保持库1(129)接通。在此状态实例中,功率控制器137继续向另外两个库127和133提供断开信号,使得那些库非现用。随着堆栈顶部向上移动且回绕到堆栈底部处的寄存器中(在库0中),使用类似技术对额外库通电。随着RSE保存/恢复点向上移动通过堆栈且回绕到堆栈底部,以类似方式对寄存器库断电。
[0142] 在所述实例中,从一个现用库过渡到2个且回到1个。随着寄存器分派和相关联的指针移动且随着激活更多库以支持分派较大数目的寄存器(也就是说,向和从使用三个现用寄存器库的状态过渡以及向和从使用所有四个所述寄存器库的状态过渡),发生类似过渡。
[0143] 图11描绘两个库现用状态,然而,在此状态中,所述算法在2个库通电且堆栈顶部卷绕的情况下操作。RSE保存/恢复点(RSEP)识别库3(133)中的PR96上方的寄存器,且堆栈顶部(TOS)指针识别库0(127)中的PR0上方的寄存器。在此状态中,功率控制器137已施加接通信号来激活库0(127),且同时保持库3(133)接通。在此状态实例中,功率控制器137向另外两个库129和13 1提供断开信号,使得那些库非现用。
[0144] 在以上可变排序算法的变化形式中,对库进行通电或断电的触发可用额外的阈值偏移来改变以提前开始对库进行通电且延迟其断电。举例来说,可检查TOS+T来代替TOS,以确定是否在寄存器分派期间对库进行通电;且对于其它触发可使用类似阈值。这可能对于掩盖库的通电/断电时间特别有帮助。
[0145] 并且,用于触发库激活/去激活的阈值和RSE引擎的积极性可响应于各种因素而在运行时间变化,所述因素例如功率消耗和热量、处理器性能和库激活/去激活的频率。这可有助于根据需要调谐库激活的频率。
[0146] 类似于第一实例,寄存器库功率控制的可变排序使处理器能够在大部分时间对较少寄存器通电。
[0147] 可变排序算法的特定特征在于,其适当频繁地对库进行通电/断电,以试图尽可能紧密地将通电的寄存器的数目与当前寄存器使用匹配。这使得其在对库进行通电/断电不造成相当大成本时且在将通电的库的数目减到最小较为重要时是适宜的。其还不会改变用于调节用于管理寄存器堆栈的指针的算术。
[0148] 尽管以上已描述了被认为是最佳模式的内容和/或其它实例,但应了解,可在其中作出各种修改且本文揭示的主题可以各种形式和实例实施,且所述教示可应用于许多应用,本文中仅描述了其中某些应用。所附权利要求书希望主张属于本发明教示的真正范围内的任何和所有的应用、修改及变化。