表2 Integrator/CM7TDMI ARM7TDMI基本指令功耗
Instruction E/nJ Instruction E/nJ ADD R2,R0,R1 0.710 KDR R2,[R1,R3] 2.774 AND R2,R0,R1 0.856 STR R2,[R1,R3] 1.961 ORR R2,R0,R1 0.907 MUL R2,R0,R1 2.768 ORRS R2,R0,R1 0.967 MLA R2,R0,R1,R0 3.748 MOV R2,R1 0.935 CMP R0,R1 0.751 MOV R0,R0 0.903 SWP R2,R0,[R1] 3.917 ADD R2,R0,R1,ASR R3 2.137 MRS R2,CPSR 0.977 B lable 3.095 MSR CPSR_f,R2 1.143
表3 执行连接两条源操作数类型不同指令的功耗
Instr1/Instr2 SHIFT_REG SHIFT_IMM REG IMM SHIFT_REG -0.332 -0.215 -0.232 -0.159 SHIFT_IMM -0.269 -0.177 -0.165 -0.103 REG -9.02E-02 -5.98E-02 -0.186 -0.200 IMM -0.141 -5.35E-02 -9.08E-02 -7.53E-02
表4 流水线断流引起的功耗
Instruction type Energy cost/nJ Any 2.04
根据以上表中的数据结合该函数汇编指令,得出该插入排序函数的指令级功耗分析情况(表5)。
表5 简单插入排序指令级功耗分析
指 令 Base cost Inter cost Stall cost MOV r3,#1 0.930 - - B |L1,56| 3.100 -0.075 2.04 MOV r2,#0 0.930 -0.032 - B |L1,44| 3.100 -0.075 2.04 LDR r12,[r0,r3,LSL #2] 3.270 -0.032 - LDR lr,[r0,r2,LSL #2] 3.270 -0.177 - CMP r12,lr 0.830 -0.165 2.04 STRIT r12,[r0,r2,LSL #2] 2.480 -0.060 - STRLT lr,[r0,r3,LSL #2] 2.480 -0.177 - CMP r2,r2,#1 1.590 -0.103 - CMP r2,r3 0.830 -0.091 2.04 BLT |L1.20| 3.100 -0.060 2.04 ADD r3,r3,#1 1.590 -0.075 - CMP r3,r1 0.830 -0.091 2.04 BLT |L1.12| 3.100 -0.200 2.04
至此,可以得出完整的简单插入排序函数的基于复杂度的嵌入式软件功耗模型
E=93.51-5.38n+10.67 2
3.3 基于复杂度的嵌入式软件功耗模型的估算功耗
当输入数组长度为n=80的情况下,通过该模型可快速估算出插入排序函数的功耗
E=93.51-5.38×80+10.67×1600=67924.85(nJ)
与指令级功耗模型的估测值误差小于1%(表6),而利用基于复杂度的功耗模型估测该函数执行所需的功耗的速度而大大提高。
表6 各种数组长度下简单插入排序指令级功耗
数组长度 指令级功耗模型估测 基于复杂度的功耗模型估测 误 差 n=10 1106.338 - - n=20 4252.333 - - n=40 16943.823 - - n=80 67604.803 67924.85 0.4%
4 总结
本文介绍了一种基于复杂度的嵌入式软件功耗模型,以对象函数的算法平均复杂度的建模参数,利用现有底层指令级功耗模型对函数进行分析,回归出必需的系数,得到该函数完整的基于复杂度的嵌入式软件功耗模型,从而可快速估算出该函数在不同输入情况下的软件功耗。这种分析方法的缺点在于只适用于算法复杂度明显的一些函数,从而较容易构建基于复杂度的模型。另外在建模过程中,仍然需要指令级功耗模型的分析法的协助。
[此贴子已经被作者于2005-12-9 13:12:43编辑过] |