现在位置:范文先生网>理工论文>电子通信论文>基于复杂度的嵌入式软件功耗模型

基于复杂度的嵌入式软件功耗模型

时间:2023-02-21 00:11:50 电子通信论文 我要投稿
  • 相关推荐

基于复杂度的嵌入式软件功耗模型

  摘要:系统功耗是嵌入式系统的一个重要方向,功耗很大程度上取决于执行的软件。传统的底层指令级模型功耗分析方法虽然能比较准确地估算出嵌入式系统的功耗,但是这种方法所需要的时间过长。本文介绍一种高层嵌入式软件功耗分析估测方法,以对象函数所使用的算法的复杂度来对该函数构建功耗模型,从而根据此功耗模型能快速估算出该函数在各种输入情形下的功耗情况。
  关键词:算法复杂度嵌入式系统软件功耗模型
  
  1嵌入式软件功耗
  
  嵌入式系统的功耗主要来自微处理器的功耗与外围部件的功耗。虽然能量的水泵最终发生在底层硬件,但是微处理器的功耗很大程度上取决于其所执行的软件。因此,对嵌入式系统的功耗分析越来越多地转移到软件的角度上来,将能量的消耗过程视作软件执行过程。
  
  目前的嵌入式软件功耗分析大多数都是基于指令级功耗模型的分析方法。在这种模型中,嵌入式软件程序的功耗由单条指令的基本功耗开销、连续执行不同类型的指令造成的功耗开销以及额外的功耗开销(如流水线断流、Cache不命中)等构成。虽然这种底层的嵌入式软件功耗的分析方法的准确性较高,但是其分析过程需要在特定微处理器平台上将程序翻译成汇编指令,然后通过逐条指令功耗分析和综合因素考虑,最后才能估算出该程序在某种微处理器上执行的系统功能,需要相当长的分析时间。
  
  2基于复杂度的嵌入式软件功耗模型
  
  针对指令级功耗模型的瓶颈,本文介绍一种基于复杂度的嵌入式软件功耗模型,利用现有条件能快速估算出某函数的功耗情况。
  
  在嵌入式软件应用中大量使用的多媒体计算和其它数据密集型计算中,经常用到诸如查找、排序、矩阵运算等算法。由于这些算法的平均复杂度都是已知的,因此复杂度成为这些嵌入式软件程序的一个重要特征,同样也能够成为分析和估测嵌入式软件功耗的一种重要依据。基于复杂度的嵌入式软件功耗模型以具体函数所使用的算法的复杂度为建模的参数,选取该函数的典型输入,并利用现有指令级模型分析方法获得该函数在这些典型输入情况下的功耗,利用回归算法出该函数软件功耗模型的系数,从而获得完事的该函数软件功耗模型,并可以用于快速估算该函数在任何输入情况下的软件功耗。
  
  在某函数的算法复杂度是已知的或较容易获得的情况下,假设该函数的执行所需功耗与其复杂度有关,则可以使用一个线性公式来描述该函数的软件功耗:
  
  
  
  其中Pj为模型的参数与函数的算法复杂度与函数的输入相关;cj为相应的系数;p是参数个数。
  
  构建模型的第一步是决定描述功耗模型的参数Pj。参数的选择与具体的函数所使用的算法密度相关。几种比较常见的算法的功耗模型可以表1中的线性公式来描述。
  
  表1基于复杂度的软件功耗模型
  
  算法平均复杂度软件功耗宏模型数组求和O(n)c1+c2N插入排序O(n2)c1+c2N+c3N2快速排序O(nlog2n)c1+c2N+c3Nlog2N
  参数确定之后,必须找到相应的系数cj,这是整个算法中最重要的步骤。一旦获得系数cj后,就可以利用这些系统估算出该函数在任何输入情况下的功耗。
  
  要算出系数,首先要确定该函数的典型输入集合S={I1,I2,…,In},S中的每个Ii都与该函数一组模型参数Pj相对应。n个Ii对应形成一个该函数的模型参数矩阵。
  
  
  
  通过底层指令级模型分析得到该函数在每组参数Ii情况下的功耗。
  
  
  
  其中然后通过矩阵运算即可回归出参数向量C。
  
  
  
  3基于复杂度的插入排序函数软件功耗建模
  
  以下将以Integrator/CM7TDMI评估板的ARM7TDMI微处理器为基础,对插入排序函数来构建基于复杂度的嵌入式软件功耗模型。
  
  假设某运行在ARM7TDMI处理器上的函数,对一长度为n的整形数组a[n]使用简单插入排序算法进行排序。算法的C语言代码与其经过ARMCC编译器编译后的汇编代码如下:
  
  voidins_sort(inta[],intn){
  
  intx,i,j;
  
  for(i=1;i<n;i++)
  
  for(j=0;j<i;j++){
  
  if(a[i]<a[j]){
  
  x=a[j];
  
  a[j]=a[i];
  
  a[i]=x;
  
  }
  
  }
  
  }
  
  ins_sortPROC
  
  STRlr,[sp,#-4]!
  
  MOVr3,#1
  
  B|L1.56|
  
  |L1.12|MOVr2,#0
  
  B|L1.44|
  
  |L1.20|LDRr12,[r0,r3,LSL#2]
  
  LDRlr,[r0,r2,LSL#2]
  
  CMPr12,lr
  
  STRLTr12,[r0,r2,LSL#2]
  
  STRLlr,[r0,r3,LSL#2]
  
  ADDr2,r2,#1
  
  |L1.44|CMPr2,r3
  
  BLT|L1.20|
  
  ADDr3,r3,#1
  
  |L1.56|CMPr3,r1
  
  BLT|L1.12|
  
  LDRpc,|sp|,#4
  
  3.1基于复杂度的功耗模型
  
  简单插入排序算法平均复杂度为O(n2)。该函数的软件功耗模型可用如下线性公式描述:
  
  
  
  其中,n为数组的长度,E为在输入数组长度的n的情况下函数的功耗。
  
  3.2获得系数cj
  
  在这一步骤中,主要以Integrator/CM7TDMI评估板的三段流水线、不设cache的ARM7TDMI处理器的指令级功耗模型为基础,分析该插入排序函数分别在输入数组长度n=10、20、40情况下的功耗情况,并通过回归法获得系数cj。
  
  在该指令级功耗模型中,指令执行的功耗主要来自两个部分:执行单条指令引起的功耗(basecost)与连续执行不同类型的指令导致处理器状态改变所引起的额外功耗(inter-instructioncost)。其公式如下:
  
  
  
  其中,Ei为执行第I条指令的基本指令功耗(表2),Oij为连续执行第I条和第I指令引起的额外功耗(表3),ε为流水线断流引起的功耗(表4)。
  
  表2Integrator/CM7TDMIARM7TDMI基本指令功耗
  
  InstructionE/nJInstructionE/nJADDR2,R0,R10.710KDRR2,[R1,R3]2.774ANDR2,R0,R10.856STRR2,[R1,R3]1.961ORRR2,R0,R10.907MULR2,R0,R12.768ORRSR2,R0,R10.967MLAR2,R0,R1,R03.748MOVR2,R10.935CMPR0,R10.751MOVR0,R00.903SWPR2,R0,[R1]3.917ADDR2,R0,R1,ASRR32.137MRSR2,CPSR0.977Blable3.095MSRCPSR_f,R21.143
  表3执行连接两条源操作数类型不同指令的功耗
  
  Instr1/Instr2SHIFT_REGSHIFT_IMMREGIMMSHIFT_REG-0.332-0.215-0.232-0.159SHIFT_IMM-0.269-0.177-0.165-0.103REG-9.02E-02-5.98E-02-0.186-0.200IMM-0.141-5.35E-02-9.08E-02-7.53E-02
  表4流水线断流引起的功耗
  
  InstructiontypeEnergycost/nJAny2.04
  根据以上表中的数据结合该函数汇编指令,得出该插入排序函数的指令级功耗分析情况(表5)。
  
  表5简单插入排序指令级功耗分析
  
  指令BasecostIntercostStallcostMOVr3,#10.930--B|L1,56|3.100-0.0752.04MOVr2,#00.930-0.032-B|L1,44|3.100-0.0752.04LDRr12,[r0,r3,LSL#2]3.270-0.032-LDRlr,[r0,r2,LSL#2]3.270-0.177-CMPr12,lr0.830-0.1652.04STRITr12,[r0,r2,LSL#2]2.480-0.060-STRLTlr,[r0,r3,LSL#2]2.480-0.177-CMPr2,r2,#11.590-0.103-CMPr2,r30.830-0.0912.04BLT|L1.20|3.100-0.0602.04ADDr3,r3,#11.590-0.075-CMPr3,r10.830-0.0912.04BLT|L1.12|3.100-0.2002.04
  
  
  至此,可以得出完整的简单插入排序函数的基于复杂度的嵌入式软件功耗模型
  
  E=93.51-5.38n+10.672
  
  3.3基于复杂度的嵌入式软件功耗模型的估算功耗
  
  当输入数组长度为n=80的情况下,通过该模型可快速估算出插入排序函数的功耗
  
  E=93.51-5.38×80+10.67×1600=67924.85(nJ)
  
  与指令级功耗模型的估测值误差小于1%(表6),而利用基于复杂度的功耗模型估测该函数执行所需的功耗的速度而大大提高。
  
  表6各种数组长度下简单插入排序指令级功耗
  
  数组长度指令级功耗模型估测基于复杂度的功耗模型估测误差n=101106.338--n=204252.333--n=4016943.823--n=8067604.80367924.850.4%
  4总结
  
  本文介绍了一种基于复杂度的嵌入式软件功耗模型,以对象函数的算法平均复杂度的建模参数,利用现有底层指令级功耗模型对函数进行分析,回归出必需的系数,得到该函数完整的基于复杂度的嵌入式软件功耗模型,从而可快速估算出该函数在不同输入情况下的软件功耗。这种分析方法的缺点在于只适用于算法复杂度明显的一些函数,从而较容易构建基于复杂度的模型。另外在建模过程中,仍然需要指令级功耗模型的分析法的协助。
  
  
  
  

【基于复杂度的嵌入式软件功耗模型】相关文章:

基于模块化设计的嵌入式软件测试方法08-06

基于嵌入式Linux的BACnet控制器软件设计08-06

嵌入式Linux下基于MiniGUI的信息终端软件开发08-06

嵌入式系统面向低功耗的协同设计08-06

基于MSP430的极低功耗系统设计08-06

CIMS环境下基于特征的产品模型08-06

基于DSP的Bluetooth嵌入式系统应用08-06

基于Web的嵌入式设备管理08-06

基于椭圆曲线的嵌入式文件加密08-06