用于低功率程序调整的功率性能监视器的装置和方法转让专利

申请号 : CN200480036103.8

文献号 : CN1890636B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : C-H·赫西

申请人 : 英特尔公司

摘要 :

在某些实施例中,描述了一种用于低功率程序调整的功率性能监视器的方法和装置。在一个实施例中,该方法包括对应用程序的指令的功耗等级的计算。一旦计算了功耗等级,就标识应用程序中呈现出过度功耗等级的指令序列。对于所标识的指令序列,重新编译应用程序以降低一个或多个所标识的指令序列的功耗。描述并要求保护了其它实施例。

权利要求 :

1.一种用于低功率程序调整的功率性能监视器的方法,包括:根据在应用程序执行期间一个或多个微架构功能单元的所测量的功耗等级计算所述应用程序的指令序列的功耗等级;

标识所述应用程序中具有过度功耗等级的指令序列;以及重新编译所述应用程序以降低一个或多个所标识的指令序列的所述过度功耗等级。

2.如权利要求1所述的方法,其特征在于,计算应用程序的指令序列的功耗等级包括:在所述一个或多个微架构功能单元内执行从所述应用程序的指令解码的微操作;

由每一功能单元,用在所述微操作执行期间处理相应的微操作所需的相应功能单元的所测量的功耗等级,来更新由相应的功能单元处理的每一微操作的功耗字段;以及在引退每一执行的微操作之前,依照每一执行的微操作的功耗字段的值更新功率历史缓冲器条目。

3.如权利要求2所述的方法,其特征在于,更新功耗字段包括:(i)为程序周期确定相应功能单元的所测量的功耗等级;

(ii)标识在所述程序周期期间处理的一个或多个微操作;

(iii)将一个或多个所标识的微操作的功耗字段的值递增所测量的功耗等级;以及(iv)由所述一个或多个功能单元的每一个对每一程序周期重复(i)-(iii)。

4.如权利要求3所述的方法,其特征在于,确定功耗等级包括:查询耦合到相应功能单元的功耗计量器;以及

接收由所述功耗计量器在所述程序周期期间测量的功耗等级作为所测量的功耗等级。

5.如权利要求3所述的方法,其特征在于,在递增之前,所述方法包括:将所测量的功耗等级除以所述程序周期期间所标识的微操作的计数,以形成每一周期值的功耗;

将所标识的微操作的功耗字段递增所述每一周期值的功耗;

依照所述每一周期值的功耗更新所述功能单元的平均功耗计量;以及对所述程序周期更新相应功能单元的利用率计量。

6.如权利要求3所述的方法,其特征在于,更新功率历史缓冲器包括:(i)接收已执行的微操作;

(ii)依照所述已执行微操作的程序计数器字段标识与所述已执行微操作相关联的程序计数器值;

(iii)依照所述已执行微操作的功耗字段标识与所述已执行微操作相关联的功耗等级;

(iv)将所述功率历史缓冲器内对应于所述已执行微操作的所标识的程序计数器的条目递增所述已执行微操作的所标识的功耗等级;以及(v)对每一接收到的已执行微操作重复包括在更新功率历史缓冲器中的(i)-(iv)。

7.如权利要求1所述的方法,其特征在于,标识还包括:周期性地查询功率历史缓冲器以标识所述应用程序的指令的功耗等级;

检测具有超过预定功耗等级的功耗等级的指令;

从所检测的指令中标识临界功率路径指令序列,作为落入频繁执行的指令路径内的指令;以及从所检测的指令中标识指令序列,作为由具有大于预定所测量的功耗等级的所测量功耗等级的功能单元执行的具有所述过度功耗等级的指令序列。

8.如权利要求1所述的方法,其特征在于,重新编译包括:用替换指令序列替代所标识的临界功率路径指令序列,以通过使用所述替换指令序列来降低程序功耗等级。

9.如权利要求1所述的方法,其特征在于,重新编译还包括:重新分发高功率等级指令序列,以利用具有较低的平均功耗等级的功能单元。

10.如权利要求1所述的方法,其特征在于,还包括:对用于执行所标识的高功率等级指令序列的一个或多个功能单元的空闲时间进行采样;以及当一个或多个功能单元的利用率较低时,向所述功能单元发出所述高功率执行序列以禁止功能单元过热。

11.一种用于低功率程序调整的功率性能监视器的装置,包括:至少一个功能单元,用于执行从应用程序的指令解码的微操作,所述功能单元根据在应用程序执行期间一个或多个微架构功能单元的所测量的功耗等级计算所述应用程序的指令的功耗等级;以及耦合到所述功能单元的存储器,所述存储器包括编译器,用于重新编译所述应用程序以降低被标识为具有过度功耗等级的至少一个指令序列的功耗等级。

12.如权利要求11所述的装置,其特征在于,所述至少一个功能单元还包括:引退单元,用于依照每一已执行微操作的功耗字段的值更新执行历史缓冲区条目。

13.如权利要求11所述的装置,其特征在于,所述至少一个功能单元用于将每一微操作的功耗字段递增处理相应的微操作所需的功耗等级。

14.如权利要求11所述的装置,其特征在于,还包括:耦合到所述至少一个功能单元的功率计量器,所述功率计量器用于测量在程序周期期间由所述至少一个功能单元消耗的功率。

15.如权利要求11所述的装置,其特征在于,所述至少一个功能单元还包括:平均功耗计量器,所述至少一个功能单元用于依照每一周期值的功耗更新所述平均功耗计量器。

16.一种用于低功率程序调整的功率性能监视器的系统,包括:自包含功率源;

耦合到所述功率源的处理器,所述处理器包括:至少一个功能单元,用于执行从应用程序的指令解码的微操作,所述功能单元根据在应用程序执行期间一个或多个微架构功能单元的所测量的功耗等级计算所述应用程序的指令的功耗等级;以及耦合到所述处理器的存储器,所述存储器包括编译器,用于重新编译所述应用程序以降低被标识为具有过度功耗等级的至少一个指令序列的功耗等级。

17.如权利要求16所述的系统,其特征在于,所述至少一个功能单元还包括:引退单元,用于依照每一已执行微操作的功耗字段的值更新执行历史缓冲区条目。

18.如权利要求16所述的系统,其特征在于,所述至少一个功能单元用于将每一微操作的功耗字段递增处理相应的微操作所需的功耗等级。

19.如权利要求16所述的系统,其特征在于,还包括:耦合在所述处理器和所述存储器之间的存储器控制器;以及耦合到所述存储器控制器的输入/输出控制器。

20.如权利要求16所述的系统,其特征在于,还包括:构建在与所述至少一个功能单元相同的管芯上、并耦合到所述至少一个功能单元的逻辑,用于测量在程序周期期间由所述至少一个功能单元消耗的功率;以及包含所述管芯的集成电路块,其中构建了所述逻辑、所述至少一个功能单元和所述处理器。

说明书 :

用于低功率程序调整的功率性能监视器的装置和方法

[0001] 发明领域
[0002] 本发明的一个或多个实施例一般涉及低功率编程领域。更具体而言,本发明的一个或多个实施例涉及用于低功率程序调整的功率性能监视器的方法和装置。
[0003] 发明背景
[0004] 大量的研究和系统架构设计工作针对提高计算机系统内的数据吞吐量。诸如数据管道、无序执行等技术使得在以高得多的时钟速率处理时的高级架构能够达到世界级的性能。此外,该研究以及架构重新设计打开了对于膝上型计算机、手持式设备、个人数字助理(PDA)等的移动市场。
[0005] 不幸的是,当另一功率源不可用时,这些移动平台可能限于由各自的移动平台所使用的电池寿命规定的运行时间。取决于移动平台的复杂性,来自附加电池的功率源可能在相对很短的时间量内耗尽。此外,在移动平台内包括诸如数据管道、无序执行等技术一般导致在执行期间消耗无节制的功率量。因此,高性能移动平台可能无法向用户提供足够数量的移动操作时间。
[0006] 当前的Intel 架构(IA)处 理器家族(IA-32和 IA-64)向执行程 序提供了各种性能监视器,用于记录诸如高速缓存未命中、分支缺失预测、引退指令(retiredinstruction)等信息,而只有极少的额外开销。编译器也可安装操作系统驱动器以记录各种性能监视器信息。另外,性能监视信息用于下一程序编译以加速基于典型使用周期的代码。在过去,性能监视器帮助程序员和编译器改良所生成的程序代码而无需求助于传统的探测代码,这些探测代码实质上导致了额外开销或改变程序特征而使所测得的统计量变得不可使用。
[0007] 不幸的是,在低功率编程领域,用于精确测定应用程序中比该程序的剩余部分消耗更多功率的各部分的性能监视器不存在。常规的编译器无法在没有处理器的帮助下收集处理器的功耗信息。因此,如果没有合适的工具,研究人员通常依赖于某些低功率原则以将其编程或计算策略提升为要求低功率。这些实践通常造成对处理器中实际发生了什么的不准确考虑。研究人员通常将低功率与性能相关。因此,以较少时间实现同一吞吐量的大多数性能增强操作被错误地标记为低功率技术。
[0008] 附图简述
[0009] 在各附图中,本发明的各种实施例是作为示例而非局限示出的,附图中:
[0010] 图1是示出依照一个实施例包括功率优化编译器的计算机系统的框图。
[0011] 图2是示出依照一个实施例,被配置成计算执行应用程序的指令所需的功耗等级的图1所描述的微架构的框图。
[0012] 图3是进一步示出依照一个实施例的图2的功能单元和微操作的框图。
[0013] 图4是进一步示出依照一个实施例的图1的编译器的运行时优化器的框图,用于标识应用程序中具有过度功耗等级的指令序列。
[0014] 图5是示出依照一个实施例,用于重新编译应用程序以降低所标识的具有过度功耗等级的指令序列的功耗等级的方法的流程图。
[0015] 图6是示出依照一个实施例,用于计算应用程序的指令的功耗等级的方法的流程图。
[0016] 图7是示出依照一个实施例,用于更新由微架构的功能单元处理的微操作的功耗字段的方法的流程图。
[0017] 图8是示出依照一个实施例,用于将一个或多个所标识的微操作的功耗字段递增一确定的功耗等级的方法的流程图。
[0018] 图9是示出依照一个实施例,用于依照每一所执行的微操作功耗字段的值更新功率历史缓冲器条目的方法的流程图。
[0019] 图10是示出依照一个实施例,用于标识应用程序中具有过度功耗等级的指令序列的方法的流程图。
[0020] 图11是示出用于重新编译应用程序以降低一个或多个所标识的指令序列的功耗等级的方法的流程图。
[0021] 图12是示出使用所公开的技术的设计的模拟、仿真和制造的各种设计表示或格式的框图。
[0022] 详细描述
[0023] 描述了用于低功率程序调整的功率性能监视器的方法和装置。在一个实施例中,该方法包括对应用程序的指令的功耗等级的计算。一旦计算了功耗等级,标识应用程序中显示出过度功耗等级的指令序列。对于所标识的指令序列,重新编译应用程序,以降低一个或多个所标识的指令序列的功耗等级。
[0024] 在一个实施例中,在无法降低指令序列的功耗的情况下,监视对执行该指令序列所需的功能单元的利用。因此,可在对功能单元的利用低于预定等级的时间段期间执行该指令序列。在一个实施例中,降低了应用程序的指令的功耗等级,并且除功耗降低之外,还可减少对功能单元的利用以防止过热。
[0025] 系统
[0026] 图1是示出依照本发明的一个实施例包括具有微架构200的处理器110的计算机系统100。在一个实施例中,依照一个实施例,计算机系统100包括功率优化编译器300,以重新编译应用程序来降低所标识的具有过度功耗等级的指令序列的功耗等级。计算机系统100包括用于在处理器(CPU)110和通过前端总线(FSB)102耦合在一起的芯片组180之间传递信息的处理器系统总线(FSB)102。
[0027] 如此处所描述的,术语“芯片组”以对本领域的技术人员公知的方式来使用,以共同描述耦合到CPU 110来执行所需的系统功能的各种设备。芯片组180由存储器控制器或存储器控制器集线器(MCH)120以及输入/输出(I/O)控制器或I/O控制器集线器(ICH)130组成。在一个实施例中,I/O总线125将MCH 120耦合到ICH 130。芯片组180的存储器控制器120耦合到主存储器140以及一个或多个图形设备或图形控制器160。
[0028] 在一个实施例中,主存储器110是非易失性存储器,包括但不限于,随机存取存储器(RAM)、同步RAM(SRAM)、双数据速率(DDR)S-数据RAM(SDRAM)、Rambus数据RAM(RDRAM)等等。另外,硬盘驱动器设备(HDD)150以及一个或多个I/O设备170(170-1、……、170-N)耦合到芯片组180的I/O控制器130。如图所示,依照本发明的一个实施例,如对图2所示出的,CPU 110包括计算执行应用程序的指令所需的功耗等级的微架构200。
[0029] 应当理解,本发明的实施例可用于具有处理器的任何装置。尽管系统100的实施例在这一方面不受限制,但是系统100可以是包括诸如电池等自包含电源供给(源)104的便携式设备。这类便携式设备的示例的非穷举列表包括膝上型和笔记本计算机、移动电话、个人数字助理(PDA)等等。或者,系统100可以是非便携式设备,诸如不包括可任选源104的台式计算机或服务器计算机。
[0030] 不幸的是,当另一功率源不可用时,这些移动平台可能限于由各自的移动平台所使用的电池寿命规定的运行时间。取决于移动平台的复杂性,来自附加电池的功率资源可在相对很短的时间量内耗尽。此外,在移动平台中包括诸如数据管道、无序执行等技术一般导致在执行期间消耗无节制的功率量。因此,高性能移动平台可能无法向用户提供足够数量的移动操作时间。
[0031] 因此,在一个实施例中,如图2所示,微架构200包括功耗计量器(PM)以协助编译器300精确测定应用程序中比该程序的剩余部分消耗更多功率的各部分。在一个实施例中,编译器300确定与采样的程序计数器处的指令(序列)相关联的功耗信息。编译器300可使用该信息来标识应用程序的哪一部分消耗了最多的功率,并切换到替换的算法或优化策略来实现较少的功耗。在一个实施例中,运行时分析器接收恒定的反馈来重新编译程序,以对给定的性能目标实现较低的功耗。因此,编译器300可在提供指定的吞吐量的同时在性能和消耗的功率之间良好地权衡利弊。
[0032] 作为代表,微架构200被配置成实现动态执行。如此处所描述的,“动态执行”指的是依照程序顺序使用前端逻辑202来取出下一指令,并准备用于系统管道中的后续执行的指令。因此,前端逻辑202IFU(未示出)经由总线接口单元(BIU)270取出宏指令。一旦取出了指令,将指令解码成基本操作,此处称为“微操作”(uOP)。响应于所接收到的宏指令204,指令解码器(ID)210(210-1、210-2)将宏指令解码成一个或多个uOP,这些uOP被提供给指令解码器队列(IDQ)(未示出),随后提供给无序(OOO)核心220。
[0033] 实际上,前端逻辑202向OOO核心220提供高带宽的已解码指令流,这指示了指令的执行(实际编译)。为了以最有效的方式执行指令,前端逻辑202可利用高度准确的分支预测逻辑(未示出)以推测程序下一步将执行哪里,或者此处称为动态执行。一旦接收到,uOP被调度成避免在遵循延迟指令时停止。换言之,当需要确保对可用处理器资源的最有效使用时,uOP是以“无序”执行方式来执行的。
[0034] 作为代表,OOO核心220的保留站(RS)230从前端逻辑202接收已解码的uOP 212。在一个实施例中,由RS 230接收的uOP 212保留在RS 230中,以等待所引用的源操作数的到达。一旦接收到相应的uOP的源操作数,RS 230在一个或多个执行单元中调度相应uOP的执行,这些执行单元包括处理简单的算术和逻辑操作的算术逻辑单元(ALU)240(A1 240-1、A2 240-2)。同样,保留在浮点单元(FP)管道250中调度浮点指令的执行。如此处所描述的,FP 250和ALU 240被总称为执行单元。
[0035] 在一个实施例中,执行单元使用存储器单元管道(M),该管道使用总线和存储器子系统块(BIU)270来执行所接收的uOP。随后,所执行的uOP由引退单元(RT)280接收。在一个实施例中,RT 280依照程序顺序从执行单元240-250接收所执行的uOP的完成状态,并处理该结果以提交(引退)正确的架构状态。如此处所描述的,术语“功能单元”(FU)指的是用于调度和执行uOP的前端逻辑202和OOO核心220的各种组件(210-280)。
[0036] 然而,与常规的微架构形成对比,微架构200包括相应的功率计量器(PM)290(290-1、……、290-9),它耦合到微架构200的各种FU(210-280)。在一个实施例中,PM 290被配置成测量由附加的FU(210-280)在程序周期期间消耗的功率。在一个实施例中,诸如解码器(ID 210)等FU(210-280)包括被配置成测量由ID 210在例如程序周期期间消耗的功率的附加PM(例如,290)。
[0037] 在一个实施例中,FU(210-280)与附加的PM 290通信以接收由附加的PM 290在程序周期期间测量的功耗值。在一个实施例中,FU(210-280)允许测量应用程序的指令在执行期间消耗的功耗等级。作为代表,如此处所描述的PM被放置在管芯上,并直接耦合到微架构的相应FU以提供对相应PU在程序周期期间消耗的功率的实际上精确的测量。
[0038] 在一个实施例中,如参考图3所示的,uOP 212包括程序计数器(PC)字段214,以及功耗值(PCV)字段216。因此,在所接收的宏指令的初始解码期间,与宏指令204相关联的程序计数器值被放置在从宏指令204解码的每一uOP的PC字段214内。然而,某些复杂宏指令可能需要解码成多个uOP。因此,当uOP在微架构200的各种FU(210-280)之间转移时,在一个实施例中,各种FU(210-280)查询附加的功率计量器290以确定由相应的FU(210-280)在程序周期期间处理一个或多个uOP所消耗的功耗值。
[0039] 在一个实施例中,FU(210-280)重复查询其各自的PM以接收功耗值。在一个实施例中,功耗值用于递增uOP 212的PCV字段216。因此,一旦执行了uOP212并到达RT 280,PCV字段216就包含表示每一FU(210-280)在执行期间处理相应的uOP所需的所消耗的功率的总和的功耗值。因此,在一个实施例中,RT 280在引退每一接收到的已执行uOP之前更新内部功率历史缓冲器PHB。
[0040] 因此,在一个实施例中,RT 280依照已执行的uOP 212的PC字段214确定程序计数器值,并更新对应于已执行uOP 212的PCD值的内部PHB内的条目。在一个实施例中,内部PHB可在例如微架构200的硬件寄存器(未示出)内实现。在一个实施例中,内部PHB包括固定数量的条目。因此,RT 280在内部PHB内生成新条目会导致内部PHB的最近最少更新条目的转储清除(“PHB溢出事件”)。在一个实施例中,内部PHB可在一个或多个128位寄存器中实现以避免PHB溢出事件。
[0041] 在一个实施例中,运行时分析器(RTA)350可利用操作系统(OS)驱动程序来周期性地发出中断,以从内部PHB读取值来形成PHB 380,如图4所示。作为代表,PHB 380包括PC列382以及功耗值(PCV)列384。因此,一旦在微架构200中执行了从接收的宏指令解码的每一uOP,PCV列420就表示由相应的宏指令消耗的功率。在一个实施例中,RTA 350周期性地发出中断,以从内部PHB读取值来更新PHB 380,并可使用各种程序功耗信息来标识应用程序中具有过度功耗等级的指令序列。
[0042] 再次参考图3,示出了FU 400,在一个实施例中,它可用作图2的微架构200的FU(210-280)。作为代表,在一个实施例中,FU 400包括平均功率计量器(APM)字段(寄存器)410,以及利用(U)字段(寄存器)420。在一个实施例中,FU 400依照所测得的功耗值除以由FU 400在程序周期期间处理的uOP数(每周期值的功耗)来更新APM寄存器410。在一个实施例中,FU 400累积每周期值功耗来生成由FU 400在APM寄存器410内消耗的平均功耗量。
[0043] 在另一实施例中,除跟踪消耗的平均功耗之外,每一FU(210-280)也可跟踪例如U寄存器420中的利用率(即,总周期除以完成实际工作的周期(非空闲周期)),如图3所示的。在一个实施例中,U寄存器420是使用两个寄存器来实现的。例如,第一寄存器可用于包含总周期的计数。另外,第二寄存器可用于包含总非空闲周期的计数。在一个实施例中,第一和第二寄存器是128位寄存器。
[0044] 因此,在一个实施例中,如图4所示,例如,由RTA 350指向的操作系统(OS)驱动程序可读取FU 400的各种U寄存器420以及APM寄存器410,以对每一FU210-280标识典型的功率使用。作为代表,RTA 350维护依照APM寄存器410和U寄存器420的功耗表(PCT)360。在一个实施例中,PCT 360以及PHB 380是通过使用可由RTA 350以及OS驱动程序访问的一个或多个寄存器,诸如128位寄存器来实现的。作为代表,RTA 350被实现为软件组件,但是可取决于期望的实现而被实现为硬件组件。
[0045] 在一个实施例中,编译器300可利用来自APM寄存器410的信息以及来自U寄存器420的信息来标识由FU执行的具有超过预定FU功耗等级的APM值的指令序列。在一个实施例中,这样标识的“高功率指令序列”可用替换的指令序列来替代,以利用少于预定FU功耗等级的具有平均功耗等级的FU。在又一实施例中,当替换指令序列不可用时,依照U寄存器420,编译器300延迟发出所标识的高功率指令序列,并在所标识的低利用时间期间限制向FU发出这些指令序列。现在将描述用于实现本发明的各实施例的过程方法。
[0046] 操作
[0047] 图5是示出依照一个实施例,如参考图1-4所描述的,用于重新编译应用程序以降低具有过度功耗等级的一个或多个所标识的指令序列的功耗等级的方法500的流程图。在处理框502,为应用程序的指令计算功耗等级。在处理框560,标识应用程序中具有过度功耗等级的指令序列。如此处所描述的,具有过度功耗等级的指令可包括属于临界功率路径指令序列的指令,诸如作为显示出过度功耗等级的临界路径的一部分的指令序列。
[0048] 在一个实施例中,所标识的具有过度功耗等级的指令序列可能属于高功率等级指令序列。如此处所描述的,高功率等级指令序列包括由微架构中具有超过预定FU功耗等级的功耗等级的功能单元(FU)执行的指令。一旦标识了指令序列,在处理框580,重新编译应用程序以降低一个或多个所标识的指令序列的功耗等级。在一个替换实施例中,重新编译应用程序以降低处理器微架构的各种功能单元的过热。
[0049] 图6是示出依照本发明的一个实施例,图5的处理框502中用于计算指令的功耗等级的方法510的流程图。在处理框512,在一个或多个微架构功能单元(FU)内执行从应用程序的指令解码的微指令(uOP)。在处理框514,每一FU用相应FU处理相应uOP所需的功耗等级更新由相应FU处理的每一uOP的功耗字段。
[0050] 因此,如参考图2和3所示的,各种FU(210-280)更新例如uOP 212的PCV字段216。一旦被更新,在处理框540,依照每一所执行的微操作的功耗字段的值来更新功率历史缓冲器(PHB)。因此,在一个实施例中,如参考图2所示的,在RT 280引退之前,在RT 280的内部PHB中更新每一uOP 212的PCV字段216的值。在一个实施例中,运行时分析器(RTA)350依照RT 280的内部PHB更新PHB380,如参考图4所示的。
[0051] 图7是示出依照一个实施例,图6的处理框514中用于更新的功耗字段的方法520的流程图。在处理框522,为程序周期确定FU的功耗等级。在一个实施例中,通过查询耦合到FU的功耗计量器(PM)(例如,参考图2所示的)来执行FU的功耗等级的确定。一旦被查询,PM 290就返回由PM 290在程序周期期间测量的功耗等级。在处理框524,标识由FU在程序周期期间处理的一个或多个uOP。
[0052] 因此,如参考图2所示的,FU(210-280)跟踪在程序周期期间处理的各种uOP。在处理框526,将越来越多的所标识的uOP的功耗字段的值递增一确定的功耗等级。因此,在处理框538,为每一程序周期重复处理框522-526。如此处所描述的,图2的微架构200表示处理器管道,这实现了各种uOP的并行执行。因此,在一个实施例中,由微架构200的每一FU(210-280)并行地执行方法510和520。
[0053] 图8是示出图7的处理框526中用于递增PCV字段的方法528的流程图。在处理框530,将确定的功耗等级除以程序周期期间处理的所标识的uOP的计数,以形成每一周期值的功耗。一旦形成,在处理框532,将所标识的uOP的PCV字段递增每一周期值的功耗。在处理框534,将FU的平均功耗计量器(APM)递增一每一周期值的功耗。在处理框536,为程序周期递增FU的利用寄存器(计量器)。
[0054] 在一个实施例中,每一APM 410包含所消耗的总功率除以为相应的FU(例如,210-280)处理的uOP的总数。在一个替换实施例中,将包含为相应的FU消耗的总功率的总和的第一128位整数寄存器递增每一新uP在由相应的FU(210-280)处理时消耗的功率量。
另外,为由相应的FU处理的每一新uOP递增包含由相应的FU处理的uOP的总数的总和的第二128位整数寄存器。作为代表,RTA 350或OS驱动程序对第一和第二128寄存器进行采样,并离线划分采样的值以将相应的FU的APM值储存在PCT 360中(见图4)。
[0055] 图9是示出依照一个实施例,图6的处理框540中用于更新内部PHB的方法542的流程图。在处理框544,接收已执行的uOP。一旦接收,在处理框546,依照已执行uOP的PC字段标识与已执行uOP相关联的程序计数器值。在处理框548,依照已执行uOP的PCV字段标识与已执行uOP相关联的功耗等级。
[0056] 在处理框550,将内部PHB内对应于已执行uOP的PC字段值的条目递增已执行uOP的PCV字段的值。在处理框552,为每一接收的已执行uOP重复处理框544-550。在一个实施例中,方法542描述了由RT 280执行的操作,例如,如参考图4所示的,用于更新由RTA350读取来形成PHB 380的内部PHB。
[0057] 图10是示出依照一个实施例,图5的处理框560中用于标识具有过度功耗等级的指令序列的方法562的流程图。在处理框564,周期性地查询内部PHB以标识应用程序的指令的功耗等级。在一个实施例中,CPU 110可以在预定的周期或者在发生内部PHB溢出事件时发出中断,以使驱动程序能够记录可任选地清除的内部PHB的内容。在一个实施例中,由RTA 350从APM寄存器410和U寄存器420中读取APM值和U值(图4)。如此处所描述的,执行对内部PHB的查询,因为当使用寄存器实现时,内部PHB包括有限个数的条目。
[0058] 在处理框566,检测具有超过预定功耗等级的功耗等级的指令。在处理框568,从检测的指令中标识临界路径功率指令,作为落入具有高功耗等级的频繁执行的指令路径内的指令。在一个实施例中,应用程序临界路径可使用常规技术来标识。一旦被标识,可分析临界路径以确定由临界路径消耗的功耗等级。对于具有过度功耗等级的临界路径,这些临界路径被标识为临界功率路径指令序列。在处理框570,从检测的指令中标识高功率等级指令序列,作为由具有大于预定FU功耗等级的平均功耗等级的FU执行的指令序列。
[0059] 图11是示出图5的处理框580中,用于重新编译应用程序以降低由具有过度功耗等级的一个或多个所标识指令序列消耗的功率的方法582的流程图。在处理框584,用替换指令序列替代所标识的临界功率路径指令序列,以通过使用替换指令序列来降低功耗等级。在处理框586,重新分发高功率等级指令序列以利用具有较低的平均功耗等级的FU。
[0060] 在处理框588,运行时优化器可标识用于执行所标识的高功率等级指令序列的一个或多个FU的空闲时间。在一个实施例中,这可通过访问例如相应FU的利用寄存器来执行。由此,在处理框590,当不能向具有较低平均功耗等级的FU重新分发高功率等级指令序列时,在一个实施例中,编译器可在FU的利用较低时向一个或多个FU发出高功率指令序列以禁止FU过热。
[0061] 因此,如此处所描述的,对于需要额外的时间来完成执行的指令,或对于位于临界路径上的指令,这些指令一般会显示出高功耗等级,如从PHB 380中确定的(图4)。因此,在一个实施例中,可使用各种技术以如应用程序所需的在例如RTA 350的后处理期间将执行频率与调整功率信息相关。因此,如此处所描述的,编译器300可使用随时间采样的二元组字段(PC、PCV)来标识具有过度功耗等级的应用程序。
[0062] 在一个实施例中,当从指令解码的uOP由显示出超过平均功耗等级的FU执行时,该指令被标识为高功率等级指令。另外,显示出过度功耗等级的所标识的指令序列可包括被解码成多个uOP以供执行的指令序列,和/或落入应用程序的临界路径的指令序列。因此,在一个实施例中,编译器300可用替换指令序列来代替这些指令序列,替换指令序列以略微降低的性能为代价消耗较少的功率,同时满足了总体性能目标。
[0063] 在一个替换实施例中,编译器300可通过使用OS驱动程序来对APM寄存器采样,以标识消耗较少功率的FU。因此,在重新编译应用程序期间,编译器300可分发具有过度功耗等级的所标识指令序列,以最小化应用程序的总功耗。在又一实施例中,微架构的FU的利用等级用于在各种FU的所标识的空闲时间段期间发出指令。因此,在一个实施例中,编码器可通过在所标识的FU利用率低时发出所标识的高功率指令序列,而利用动态方法来防止FU过热。
[0064] 因此,在一个实施例中,编译器使用PHB,通过查询APM寄存器以及U寄存器来标识消耗无节制的功率量的程序各部分,以协助编译器对功能单元的不同混合实现不同的优化策略。尽管此处所描述的实施例针对处理器的微架构,此处所描述的实施例可应用于其它单元,诸如存储、计算机图形设备和I/O,诸如外围互连设备。因此,在一个实施例中,可将功率计量器附加并采样到所附加的程序组件的类似功能单元。因此,OS可对外部单元中消耗的功率采样,并相应地调度任务以防止程序系统组件过热。
[0065] 图12是示出用于使用所公开的技术的设计的模拟、仿真和制造的各种表示或格式的框图。表示设计的数据可以用多种方式来表示设计。首先,如在模拟中有用的,硬件可使用硬件描述语言或本质上提供关于期望所设计的硬件如何执行的计算机化模型的另一功能描述语言来表示。硬件模型610可被储存在诸如计算机存储器等存储介质600中,使得该模型可使用向硬件模型应用特定的测试套件630来确定它实际上是否如预期的那样运作的模拟软件620来模拟。在某些实施例中,不在介质中记录、捕捉或包含模拟软件。
[0066] 在设计的任何表示中,数据可以被储存在任何形式的机器可读介质中。被调制或另外生成来传输这些信息的光波或电波660、存储器650或诸如磁盘等磁或光存储640可以是机器可读介质。这些介质中的任一个可承载设计信息。由此,术语“承载”(例如,承载信息的机器可读介质)覆盖了储存在存储设备上的信息或被编码或调制成载波或被编码或调制到载波上的信息。描述设计或设计细节的一组位 (当被包含在诸如载波或存储介质等机器可读介质中时)是可被密封在其本身中或其本身外,或可由其它事物用于进一步设计或制造的物品。
[0067] 可以理解,即使在以上描述中陈述了各种实施例的众多特性优点,但是本公开连同本发明的各种实施例的结构和功能的细节都仅是说明性的。在某些情况下,仅对于一个这样的实施例详细描述了某些子组件。尽管如此,可以认识并预期到,这些子组件可在本发明的其它实施例中使用。可在本发明的实施例的原理内,在由表达了所附权利要求书的术语的广泛概括意义所指示的完全意义上,部分地在细节上,尤其在结构和管理的方面进行改变。
[0068] 公开了示例性实施例和最佳模式之后,可以对所公开的实施例进行修改和变化,同时保留在如所附权利要求书所定义的本发明的实施例的范围之内。