摘要:系統(tǒng)功耗是嵌入式系統(tǒng)的一個重要方向,功耗很大程度上取決于執(zhí)行的軟件。傳統(tǒng)的底層指令級模型功耗分析方法雖然能比較準確地估算出嵌入式系統(tǒng)的功耗,但是這種方法所需要的時間過長。本文介紹一種高層嵌入式軟件功耗分析估測方法,以對象函數所使用的算法的復雜度來對該函數構建功耗模型,從而根據此功耗模型能快速估算出該函數在各種輸入情形下的功耗情況。
1 嵌入式軟件功耗
嵌入式系統(tǒng)的功耗主要來自微處理器的功耗與外圍部件的功耗。雖然能量的水泵最終發(fā)生在底層硬件,但是微處理器的功耗很大程度上取決于其所執(zhí)行的軟件。因此,對嵌入式系統(tǒng)的功耗分析越來越多地轉移到軟件的角度上來,將能量的消耗過程視作軟件執(zhí)行過程。
目前的嵌入式軟件功耗分析大多數都是基于指令級功耗模型的分析方法。在這種模型中,嵌入式軟件程序的功耗由單條指令的基本功耗開銷、連續(xù)執(zhí)行不同類型的指令造成的功耗開銷以及額外的功耗開銷(如流水線斷流、Cache不命中)等構成。雖然這種底層的嵌入式軟件功耗的分析方法的準確性較高,但是其分析過程需要在特定微處理器平臺上將程序翻譯成匯編指令,然后通過逐條指令功耗分析和綜合因素考慮,最后才能估算出該程序在某種微處理器上執(zhí)行的系統(tǒng)功能,需要相當長的分析時間。
2 基于復雜度的嵌入式軟件功耗模型
針對指令級功耗模型的瓶頸,本文介紹一種基于復雜度的嵌入式軟件功耗模型,利用現有條件能快速估算出某函數的功耗情況。
在嵌入式軟件應用中大量使用的多媒體計算和其它數據密集型計算中,經常用到諸如查找、排序、矩陣運算等算法。由于這些算法的平均復雜度都是已知的,因此復雜度成為這些嵌入式軟件程序的一個重要特征,同樣也能夠成為分析和估測嵌入式軟件功耗的一種重要依據?;趶碗s度的嵌入式軟件功耗模型以具體函數所使用的算法的復雜度為建模的參數,選取該函數的典型輸入,并利用現有指令級模型分析方法獲得該函數在這些典型輸入情況下的功耗,利用回歸算法出該函數軟件功耗模型的系數,從而獲得完事的該函數軟件功耗模型,并可以用于快速估算該函數在任何輸入情況下的軟件功耗。
在某函數的算法復雜度是已知的或較容易獲得的情況下,假設該函數的執(zhí)行所需功耗與其復雜度有關,則可以使用一個線性公式來描述該函數的軟件功耗:

其中Pj為模型的參數與函數的算法復雜度與函數的輸入相關;cj為相應的系數;p是參數個數。
構建模型的第一步是決定描述功耗模型的參數Pj。參數的選擇與具體的函數所使用的算法密度相關。幾種比較常見的算法的功耗模型可以表1中的線性公式來描述。
表1 基于復雜度的軟件功耗模型
| 算 法 | 平均復雜度 | 軟件功耗宏模型 |
| 數組求和 | O(n) | c1+c2N |
| 插入排序 | O(n2) | c1+c2N+c3N2 |
| 快速排序 | O(nlog2n) | c1+c2N+c3Nlog2N |
參數確定之后,必須找到相應的系數cj,這是整個算法中最重要的步驟。一旦獲得系數cj后,就可以利用這些系統(tǒng)估算出該函數在任何輸入情況下的功耗。
要算出系數,首先要確定該函數的典型輸入集合S={I1,I2,…,In},S中的每個Ii都與該函數一組模型參數Pj相對應。n個Ii對應形成一個該函數的模型參數矩陣。

通過底層指令級模型分析得到該函數在每組參數Ii情況下的功耗。
![]()
其中然后通過矩陣運算即可回歸出參數向量C。
![]()
3 基于復雜度的插入排序函數軟件功耗建模
以下將以Integrator/CM7TDMI評估板的ARM7TDMI微處理器為基礎,對插入排序函數來構建基于復雜度的嵌入式軟件功耗模型。
假設某運行在ARM7TDMI處理器上的函數,對一長度為n的整形數組a[n]使用簡單插入排序算法進行排序。算法的C語言代碼與其經過ARMCC編譯器編譯后的匯編代碼如下:
void ins_sort(int a[],int n){
int x,i,j;
for(i=1;i for(j=0;j if(a[i] x=a[j]; a[j]=a[i]; a[i]=x; } } } ins_sort PROC STR lr,[sp,#-4]! MOV r3,#1 B |L1.56| |L1.12| MOV r2,#0 B |L1.44| |L1.20| LDR r12,[r0,r3,LSL #2] LDR lr,[r0,r2,LSL #2] CMP r12,lr STRLT r12,[r0,r2,LSL #2] STRL lr,[r0,r3,LSL #2] ADD r2,r2,#1 |L1.44| CMP r2,r3 BLT |L1.20| ADD r3,r3,#1 |L1.56| CMP r3,r1 BLT |L1.12| LDR pc,|sp|,#4 3.1 基于復雜度的功耗模型 簡單插入排序算法平均復雜度為O(n2)。該函數的軟件功耗模型可用如下線性公式描述: 其中,n為數組的長度,E為在輸入數組長度的n的情況下函數的功耗。 3.2 獲得系數cj 在這一步驟中,主要以Integrator/CM7TDMI評估板的三段流水線、不設cache的ARM7TDMI處理器的指令級功耗模型為基礎,分析該插入排序函數分別在輸入數組長度n=10、20、40情況下的功耗情況,并通過回歸法獲得系數cj。 在該指令級功耗模型中,指令執(zhí)行的功耗主要來自兩個部分:執(zhí)行單條指令引起的功耗(base cost)與連續(xù)執(zhí)行不同類型的指令導致處理器狀態(tài)改變所引起的額外功耗(inter-instruction cost)。其公式如下: 其中,Ei為執(zhí)行第I條指令的基本指令功耗(表2),Oij為連續(xù)執(zhí)行第I條和第I指令引起的額外功耗(表3),ε為流水線斷流引起的功耗(表4)。![]()

表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 執(zhí)行連接兩條源操作數類型不同指令的功耗
| 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),而利用基于復雜度的功耗模型估測該函數執(zhí)行所需的功耗的速度而大大提高。
表6 各種數組長度下簡單插入排序指令級功耗
| 數組長度 | 指令級功耗模型估測 | 基于復雜度的功耗模型估測 | 誤 差 |
| n=10 | 1106.338 | - | - |
| n=20 | 4252.333 | - | - |
| n=40 | 16943.823 | - | - |
| n=80 | 67604.803 | 67924.85 | 0.4% |
4 總結
本文介紹了一種基于復雜度的嵌入式軟件功耗模型,以對象函數的算法平均復雜度的建模參數,利用現有底層指令級功耗模型對函數進行分析,回歸出必需的系數,得到該函數完整的基于復雜度的嵌入式軟件功耗模型,從而可快速估算出該函數在不同輸入情況下的軟件功耗。這種分析方法的缺點在于只適用于算法復雜度明顯的一些函數,從而較容易構建基于復雜度的模型。另外在建模過程中,仍然需要指令級功耗模型的分析法的協(xié)助。
- 功耗模型(6263)
業(yè)務復雜度治理方法論--十年系統(tǒng)設計經驗總結
1847
嵌入式軟件動態(tài)的基本路徑測試步驟是什么?
嵌入式軟件和非嵌入式軟件區(qū)別
嵌入式軟件開發(fā)與非嵌入式軟件開發(fā)的區(qū)別?
嵌入式軟件開發(fā)應該掌握哪些知識?
嵌入式軟件開發(fā)特點是什么
嵌入式軟件測試的研究
嵌入式應該學些什么?
嵌入式系統(tǒng)軟件開發(fā)環(huán)境
嵌入式系統(tǒng)和實時系統(tǒng)開發(fā)的關鍵工藝
嵌入式系統(tǒng)和實時系統(tǒng)開發(fā)的關鍵工藝是什么?
嵌入式系統(tǒng)的軟件部分
嵌入式組態(tài)軟件系統(tǒng)應用舉例
嵌入式視頻教程之軟硬件關系的復雜度
嵌入式視頻教程之軟硬件關系的復雜度
嵌入式視頻教程之軟硬件關系的復雜度
嵌入式設備的發(fā)展:解決復雜的設計挑戰(zhàn)
JEM軟件復雜度的增加情況
PCB與PCBA工藝復雜度的量化評估與應用初探!
什么叫嵌入式軟件
什么是嵌入式軟件
什么是嵌入式組態(tài)軟件系統(tǒng)?
公司招聘嵌入式軟件開發(fā),求推薦!
在嵌入式Linux下軟件編寫的幾種功耗策略
在以下嵌入式軟件設計模型中,屬于數據流模型的是,哪里有設計模型的介紹?
基于模型的嵌入式軟件開發(fā)設計
基于路徑覆蓋的嵌入式軟件動態(tài)該怎么測試?
如何對嵌入式軟件進行覆蓋測試?
如何對日益復雜的嵌入式軟件進行快速有效的測試?
怎么才能在嵌入式設計中降低CPLD的功耗?
怎么設計基于路徑覆蓋的嵌入式軟件動態(tài)測試?
怎么降低嵌入式芯片的功耗?
時間復雜度是指什么
求一種基于模型檢查的嵌入式軟件驗證方法
純軟件和嵌入式軟件區(qū)別
組件技術在嵌入式軟件中有何作用
解析嵌入式軟件開發(fā)語言:嵌入式C編程
解析嵌入式軟件開發(fā)語言:嵌入式C編程
基于模塊化設計的嵌入式軟件測試方法
23構造嵌入式系統(tǒng)軟件的構件模型研究
17基于嵌入式組件電能質量分析軟件的研究
20嵌入式ZigBee串口模塊的設計
57嵌入式系統(tǒng)軟件可靠性設計
38基于模塊化設計的嵌入式軟件測試方法
2343
什么是嵌入式軟件開發(fā)
9165基于CodeTEST的嵌入式軟件測試技術
41嵌入式系統(tǒng)及其實時軟件的開發(fā)
55嵌入式系統(tǒng)設計中的低功耗技術
1606嵌入式軟件開發(fā)中構件技術的研究
32如何利用嵌入式儀器調試SoC?
7703SCADE為嵌入式軟件提供了一套基于模型的開發(fā)方式
7實時多任務嵌入式軟件的架構方式的設計應用
1基于模型檢查的嵌入式軟件驗證方法解析
0嵌入式程序開發(fā)
8圖像復雜度對信息隱藏性能影響分析
5開源與嵌入式軟件設計:需要被管理的復用
435嵌入式系統(tǒng)的組成及其低功耗的設計
9基于SCADE模型的高安全性嵌入式軟件解決方案設計
3325
隨著嵌入式系統(tǒng)復雜度的提高 軟硬件的協(xié)同是嵌入式系統(tǒng)的關鍵
1145基于嵌入式軟件的JNI技術應用解析
1395
航天高可靠嵌入式實時操作系統(tǒng)的詳細資料簡介
3如何為嵌入式應用程序選擇操作系統(tǒng)
1378嵌入式軟件的開發(fā)流程_嵌入式軟件的調試
6732嵌入式軟件復習總結
7嵌入式軟件測試參考書籍
51嵌入式軟件測試研究意義,嵌入式軟件測試的研究
17嵌入式軟件開發(fā)環(huán)境
7嵌入式Linux的低功耗策略
1嵌入式軟件開發(fā)的特點、設計流程、嵌入式軟件的結構
38嵌入式系統(tǒng)設計的問答
6嵌入式系統(tǒng)筆記
3幾款常見的嵌入式軟件測試工具
8222
談談汽車嵌入式軟件
1600嵌入式軟件的設計模式(上)
2167
嵌入式軟件架構設計之程序分層
2692
攻破嵌入式系統(tǒng)開發(fā)中的復雜代碼
451如何計算時間復雜度
4716
軟件架構搞好了,還用擔心代碼可讀性差?
861
嵌入式機器學習的應用特性與軟件開發(fā)環(huán)境
1340
電子發(fā)燒友App


評論