摘要:系統(tǒng)功耗是嵌入式系統(tǒng)的一個重要方向,功耗很大程度上取決于執(zhí)行的軟件。傳統(tǒng)的底層指令級模型功耗分析方法雖然能比較準確地估算出嵌入式系統(tǒng)的功耗,但是這種方法所需要的時間過長。本文介紹一種高層嵌入式軟件功耗分析估測方法,以對象函數(shù)所使用的算法的復(fù)雜度來對該函數(shù)構(gòu)建功耗模型,從而根據(jù)此功耗模型能快速估算出該函數(shù)在各種輸入情形下的功耗情況。
1 嵌入式軟件功耗
嵌入式系統(tǒng)的功耗主要來自微處理器的功耗與外圍部件的功耗。雖然能量的水泵最終發(fā)生在底層硬件,但是微處理器的功耗很大程度上取決于其所執(zhí)行的軟件。因此,對嵌入式系統(tǒng)的功耗分析越來越多地轉(zhuǎn)移到軟件的角度上來,將能量的消耗過程視作軟件執(zhí)行過程。
目前的嵌入式軟件功耗分析大多數(shù)都是基于指令級功耗模型的分析方法。在這種模型中,嵌入式軟件程序的功耗由單條指令的基本功耗開銷、連續(xù)執(zhí)行不同類型的指令造成的功耗開銷以及額外的功耗開銷(如流水線斷流、Cache不命中)等構(gòu)成。雖然這種底層的嵌入式軟件功耗的分析方法的準確性較高,但是其分析過程需要在特定微處理器平臺上將程序翻譯成匯編指令,然后通過逐條指令功耗分析和綜合因素考慮,最后才能估算出該程序在某種微處理器上執(zhí)行的系統(tǒng)功能,需要相當長的分析時間。
2 基于復(fù)雜度的嵌入式軟件功耗模型
針對指令級功耗模型的瓶頸,本文介紹一種基于復(fù)雜度的嵌入式軟件功耗模型,利用現(xiàn)有條件能快速估算出某函數(shù)的功耗情況。
在嵌入式軟件應(yīng)用中大量使用的多媒體計算和其它數(shù)據(jù)密集型計算中,經(jīng)常用到諸如查找、排序、矩陣運算等算法。由于這些算法的平均復(fù)雜度都是已知的,因此復(fù)雜度成為這些嵌入式軟件程序的一個重要特征,同樣也能夠成為分析和估測嵌入式軟件功耗的一種重要依據(jù)?;趶?fù)雜度的嵌入式軟件功耗模型以具體函數(shù)所使用的算法的復(fù)雜度為建模的參數(shù),選取該函數(shù)的典型輸入,并利用現(xiàn)有指令級模型分析方法獲得該函數(shù)在這些典型輸入情況下的功耗,利用回歸算法出該函數(shù)軟件功耗模型的系數(shù),從而獲得完事的該函數(shù)軟件功耗模型,并可以用于快速估算該函數(shù)在任何輸入情況下的軟件功耗。
在某函數(shù)的算法復(fù)雜度是已知的或較容易獲得的情況下,假設(shè)該函數(shù)的執(zhí)行所需功耗與其復(fù)雜度有關(guān),則可以使用一個線性公式來描述該函數(shù)的軟件功耗:
其中Pj為模型的參數(shù)與函數(shù)的算法復(fù)雜度與函數(shù)的輸入相關(guān);cj為相應(yīng)的系數(shù);p是參數(shù)個數(shù)。
構(gòu)建模型的第一步是決定描述功耗模型的參數(shù)Pj。參數(shù)的選擇與具體的函數(shù)所使用的算法密度相關(guān)。幾種比較常見的算法的功耗模型可以表1中的線性公式來描述。
表1 基于復(fù)雜度的軟件功耗模型
算 法 | 平均復(fù)雜度 | 軟件功耗宏模型 |
數(shù)組求和 | O(n) | c1+c2N |
插入排序 | O(n2) | c1+c2N+c3N2 |
快速排序 | O(nlog2n) | c1+c2N+c3Nlog2N |
參數(shù)確定之后,必須找到相應(yīng)的系數(shù)cj,這是整個算法中最重要的步驟。一旦獲得系數(shù)cj后,就可以利用這些系統(tǒng)估算出該函數(shù)在任何輸入情況下的功耗。
要算出系數(shù),首先要確定該函數(shù)的典型輸入集合S={I1,I2,…,In},S中的每個Ii都與該函數(shù)一組模型參數(shù)Pj相對應(yīng)。n個Ii對應(yīng)形成一個該函數(shù)的模型參數(shù)矩陣。
通過底層指令級模型分析得到該函數(shù)在每組參數(shù)Ii情況下的功耗。
其中然后通過矩陣運算即可回歸出參數(shù)向量C。
3 基于復(fù)雜度的插入排序函數(shù)軟件功耗建模
以下將以Integrator/CM7TDMI評估板的ARM7TDMI微處理器為基礎(chǔ),對插入排序函數(shù)來構(gòu)建基于復(fù)雜度的嵌入式軟件功耗模型。
假設(shè)某運行在ARM7TDMI處理器上的函數(shù),對一長度為n的整形數(shù)組a[n]使用簡單插入排序算法進行排序。算法的C語言代碼與其經(jīng)過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 基于復(fù)雜度的功耗模型 簡單插入排序算法平均復(fù)雜度為O(n2)。該函數(shù)的軟件功耗模型可用如下線性公式描述: 其中,n為數(shù)組的長度,E為在輸入數(shù)組長度的n的情況下函數(shù)的功耗。 3.2 獲得系數(shù)cj 在這一步驟中,主要以Integrator/CM7TDMI評估板的三段流水線、不設(shè)cache的ARM7TDMI處理器的指令級功耗模型為基礎(chǔ),分析該插入排序函數(shù)分別在輸入數(shù)組長度n=10、20、40情況下的功耗情況,并通過回歸法獲得系數(shù)cj。 在該指令級功耗模型中,指令執(zhí)行的功耗主要來自兩個部分:執(zhí)行單條指令引起的功耗(base cost)與連續(xù)執(zhí)行不同類型的指令導(dǎo)致處理器狀態(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í)行連接兩條源操作數(shù)類型不同指令的功耗
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 |
根據(jù)以上表中的數(shù)據(jù)結(jié)合該函數(shù)匯編指令,得出該插入排序函數(shù)的指令級功耗分析情況(表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 |
至此,可以得出完整的簡單插入排序函數(shù)的基于復(fù)雜度的嵌入式軟件功耗模型
E=93.51-5.38n+10.67 2
3.3 基于復(fù)雜度的嵌入式軟件功耗模型的估算功耗
當輸入數(shù)組長度為n=80的情況下,通過該模型可快速估算出插入排序函數(shù)的功耗
E=93.51-5.38×80+10.67×1600=67924.85(nJ)
與指令級功耗模型的估測值誤差小于1%(表6),而利用基于復(fù)雜度的功耗模型估測該函數(shù)執(zhí)行所需的功耗的速度而大大提高。
表6 各種數(shù)組長度下簡單插入排序指令級功耗
數(shù)組長度 | 指令級功耗模型估測 | 基于復(fù)雜度的功耗模型估測 | 誤 差 |
n=10 | 1106.338 | - | - |
n=20 | 4252.333 | - | - |
n=40 | 16943.823 | - | - |
n=80 | 67604.803 | 67924.85 | 0.4% |
4 總結(jié)
本文介紹了一種基于復(fù)雜度的嵌入式軟件功耗模型,以對象函數(shù)的算法平均復(fù)雜度的建模參數(shù),利用現(xiàn)有底層指令級功耗模型對函數(shù)進行分析,回歸出必需的系數(shù),得到該函數(shù)完整的基于復(fù)雜度的嵌入式軟件功耗模型,從而可快速估算出該函數(shù)在不同輸入情況下的軟件功耗。這種分析方法的缺點在于只適用于算法復(fù)雜度明顯的一些函數(shù),從而較容易構(gòu)建基于復(fù)雜度的模型。另外在建模過程中,仍然需要指令級功耗模型的分析法的協(xié)助。
- 功耗模型(6198)
相關(guān)推薦
嵌入式軟件與非嵌入式軟件的區(qū)別
嵌入式軟件與非嵌入式軟件的區(qū)別?
嵌入式軟件動態(tài)的基本路徑測試步驟是什么?
嵌入式軟件和非嵌入式軟件區(qū)別
嵌入式軟件開發(fā)與非嵌入式軟件開發(fā)的區(qū)別?
嵌入式軟件開發(fā)應(yīng)該掌握哪些知識?
嵌入式軟件開發(fā)特點是什么
嵌入式軟件開發(fā)需要學(xué)習什么?
嵌入式軟件怎么學(xué)?
嵌入式軟件新途徑是什么
嵌入式軟件測試的參考書籍有哪些?
嵌入式軟件測試的研究
嵌入式軟件的重要性
嵌入式軟件設(shè)計有什么安全理念?
嵌入式低功耗電源管理框架的設(shè)計資料分享
嵌入式應(yīng)該學(xué)些什么?
嵌入式操作系統(tǒng)怎么實現(xiàn)網(wǎng)絡(luò)加載?
嵌入式系統(tǒng)軟件開發(fā)環(huán)境
嵌入式系統(tǒng)和嵌入式電腦有什么區(qū)別?
嵌入式系統(tǒng)和實時系統(tǒng)開發(fā)的關(guān)鍵工藝
嵌入式系統(tǒng)和實時系統(tǒng)開發(fā)的關(guān)鍵工藝是什么?
嵌入式系統(tǒng)概論與嵌入式系統(tǒng)的特點
嵌入式系統(tǒng)的軟件部分
嵌入式系統(tǒng)的定義及特性
嵌入式系統(tǒng)的系統(tǒng)該怎么測試和進行可靠性評估?
嵌入式組態(tài)軟件系統(tǒng)應(yīng)用舉例
嵌入式視頻教程之軟硬件關(guān)系的復(fù)雜度
嵌入式視頻教程之軟硬件關(guān)系的復(fù)雜度
嵌入式視頻教程之軟硬件關(guān)系的復(fù)雜度
嵌入式計算機性能怎么評測?
嵌入式計算機性能怎么評測?
嵌入式計算機系統(tǒng)怎么降低功耗?
嵌入式設(shè)備的發(fā)展:解決復(fù)雜的設(shè)計挑戰(zhàn)
JEM軟件復(fù)雜度的增加情況
一文講解單片機、ARM、MCU、嵌入式錯綜復(fù)雜的關(guān)系
為何要進行嵌入式軟件架構(gòu)設(shè)計?如何設(shè)計?
什么叫嵌入式軟件
什么是嵌入式軟件
什么是嵌入式主板
什么是嵌入式組態(tài)軟件系統(tǒng)?
你是如何理解嵌入式C編程
公司招聘嵌入式軟件開發(fā),求推薦!
幾個硬件和嵌入式軟件的問題
各種排序算法的時間空間復(fù)雜度、穩(wěn)定性
在嵌入式Linux下軟件編寫的幾種功耗策略
在VIM中如何實現(xiàn)對嵌入式軟件的調(diào)試?
基于嵌入式裸機或RTOS系統(tǒng)下內(nèi)存管理方法的探究
基于模型的嵌入式軟件開發(fā)設(shè)計
基于QT的嵌入式linux圖形應(yīng)用軟件設(shè)計
基于SPB怎么實現(xiàn)嵌入式音頻處理系統(tǒng)設(shè)計?
基于多核處理器的彈載嵌入式系統(tǒng)該怎么設(shè)計?
基于路徑覆蓋的嵌入式軟件動態(tài)該怎么測試?
多核處理器SoC設(shè)計怎么才能滿足嵌入式系統(tǒng)應(yīng)用?
如何學(xué)習嵌入式軟件開發(fā)
如何對嵌入式軟件進行覆蓋測試?
如何對日益復(fù)雜的嵌入式軟件進行快速有效的測試?
怎么才能在嵌入式設(shè)計中降低CPLD的功耗?
怎么設(shè)計基于路徑覆蓋的嵌入式軟件動態(tài)測試?
怎么降低嵌入式芯片的功耗?
我國嵌入式技術(shù)及應(yīng)用現(xiàn)狀
我國嵌入式技術(shù)及應(yīng)用現(xiàn)狀分析
我國嵌入式技術(shù)及應(yīng)用現(xiàn)狀分析
我國嵌入式技術(shù)及應(yīng)用現(xiàn)狀分析
時間復(fù)雜度是指什么
智能嵌入式視覺系統(tǒng)有哪些技術(shù)瓶頸和解決方法
求一種基于模型檢查的嵌入式軟件驗證方法
求大神分享嵌入式GIS系統(tǒng)軟件的低功耗設(shè)計
純軟件和嵌入式軟件區(qū)別
組件技術(shù)在嵌入式軟件中有何作用
解決嵌入式復(fù)雜設(shè)計的方法
解析嵌入式軟件開發(fā)語言:嵌入式C編程
解析嵌入式軟件開發(fā)語言:嵌入式C編程
請問怎樣去設(shè)計嵌入式軟件構(gòu)件平臺?
嵌入式系統(tǒng)軟件可靠性設(shè)計

評論