ARM程序設(shè)計(jì)優(yōu)化_第1頁
ARM程序設(shè)計(jì)優(yōu)化_第2頁
ARM程序設(shè)計(jì)優(yōu)化_第3頁
ARM程序設(shè)計(jì)優(yōu)化_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ARM程序設(shè)計(jì)優(yōu)化    程序優(yōu)化是指軟件編程結(jié)束后,利用軟件開發(fā)工具對(duì)程序進(jìn)行調(diào)整和改進(jìn),讓程序充分利用資源, 提高運(yùn)行效率, 縮減代碼尺寸的過程。按照優(yōu)化的側(cè)重點(diǎn)不同, 程序優(yōu)化可分為運(yùn)行速度優(yōu)化和代碼尺寸優(yōu)化。運(yùn)行速度優(yōu)化是指在充分掌握軟硬件特性的基礎(chǔ)上, 通過應(yīng)用程序結(jié)構(gòu)調(diào)整等手段來降低完成指定任務(wù)所需執(zhí)行的指令數(shù)。在同一個(gè)處理器上, 經(jīng)過速度優(yōu)化的程序比未經(jīng)優(yōu)化的程序在完成指定任務(wù)時(shí)所需的時(shí)間更短,即前者比后者具有更高的運(yùn)行效率。代碼尺寸優(yōu)化是指,采取措施使應(yīng)用程序在能夠正確完成所需功能的前提下, 盡可能減少程序的代碼量。然而在實(shí)際的程序設(shè)計(jì)過

2、程中,程序優(yōu)化的兩個(gè)目標(biāo)(運(yùn)行速度和代碼大小) 通常是互相矛盾的。為了提高程序運(yùn)行效率,往往要以犧牲存儲(chǔ)空間、增加代碼量為代價(jià), 例如程序設(shè)計(jì)中經(jīng)常使用的以查表代替計(jì)算、循環(huán)展開等方法就容易導(dǎo)致程序代碼量增加。而為了減少程序代碼量、壓縮存儲(chǔ)器空間,可能又要以降低程序運(yùn)行效率為代價(jià)。因此, 在對(duì)程序?qū)嵤﹥?yōu)化之前, 應(yīng)先根據(jù)實(shí)際需求確定相應(yīng)的策略。在處理器資源緊張的情況下, 應(yīng)著重考慮運(yùn)行速度優(yōu)化;而在存儲(chǔ)器資源使用受限的情況下, 則應(yīng)優(yōu)先考慮代碼尺寸的優(yōu)化。1 程序運(yùn)行速度優(yōu)化程序運(yùn)行速度優(yōu)化的方法可分為以下幾大類。1.1 通用的優(yōu)化方法(1)減小運(yùn)算強(qiáng)度利用左/ 右移位操作代替乘/ 除2 運(yùn)算

3、:通常需要乘以或除以2 的冪次方都可以通過左移或右移n 位來完成。實(shí)際上乘以任何一個(gè)整數(shù)都可以用移位和加法來代替乘法。arm 7 中加法和移位可以通過一條指令來完成,且執(zhí)行時(shí)間少于乘法指令。例如: i = i × 5 可以用i = (i<<2) + i 來代替。利用乘法代替乘方運(yùn)算:arm7 核中內(nèi)建有32 ×8 乘法器, 因此可以通過乘法運(yùn)算來代替乘方運(yùn)算以節(jié)約乘方函數(shù)調(diào)用的開銷。例如: i = pow(i, 3.0) 可用 i = i×i × i 來代替。利用與運(yùn)算代替求余運(yùn)算:有時(shí)可以通過用與(AND )指令代替求余操作(% )來提高效

4、率。例如:i = i % 8 可以用 i = i & 0x07 來代替。(2)優(yōu)化循環(huán)終止條件在一個(gè)循環(huán)結(jié)構(gòu)中,循環(huán)的終止條件將嚴(yán)重影響著循環(huán)的效率,再加上arm 指令的條件執(zhí)行特性,所以在書寫循環(huán)的終止條件時(shí)應(yīng)盡量使用count-down-to-zero結(jié)構(gòu)。這樣編譯器可以用一條BNE (若非零則跳轉(zhuǎn))指令代替CMP (比較)和BLE (若小于則跳轉(zhuǎn))兩條指令,既減小代碼尺寸,又加快了運(yùn)行速度。(3)使用inline 函數(shù)arm C 支持 inline 關(guān)鍵字,如果一個(gè)函數(shù)被設(shè)計(jì)成一個(gè)inline 函數(shù),那么在調(diào)用它的地方將會(huì)用函數(shù)體來替代函數(shù)調(diào)用語句, 這樣將會(huì)徹底省去函數(shù)調(diào)用的開

5、銷。使用inline 的最大缺點(diǎn)是函數(shù)在被頻繁調(diào)用時(shí),代碼量將增大。1.2 處理器相關(guān)的優(yōu)化方法(1)保持流水線暢通從前面的介紹可知,流水線延遲或阻斷會(huì)對(duì)處理器的性能造成影響,因此應(yīng)該盡量保持流水線暢通。流水線延遲難以避免, 但可以利用延遲周期進(jìn)行其它操作。LOAD/STORE 指令中的自動(dòng)索引(auto-indexing)功能就是為利用流水線延遲周期而設(shè)計(jì)的。當(dāng)流水線處于延遲周期時(shí), 處理器的執(zhí)行單元被占用, 算術(shù)邏輯單元(ALU )和桶形移位器卻可能處于空閑狀態(tài),此時(shí)可以利用它們來完成往基址寄存器上加一個(gè)偏移量的操作,供后面的指令使用。例如:指令 LDR R1, R2, #4 完成 R1=

6、 *R2 及 R2 += 4 兩個(gè)操作,是后索引(post-indexing)的例子;而指令 LDR R1, R2, #4! 完成 R1 = *(R2 + 4) 和 R2 +=4 兩個(gè)操作,是前索引(pre-indexing)的例子。流水線阻斷的情況可通過循環(huán)拆解等方法加以改善。一個(gè)循環(huán)可以考慮拆解以減小跳轉(zhuǎn)指令在循環(huán)指令中所占的比重, 進(jìn)而提高代碼效率。下面以一個(gè)內(nèi)存復(fù)制函數(shù)加以說明。void memcopy(char *to, char *from, unsigned int nbytes)while(nbytes-)*to+ = *from+;為簡單起見,這里假設(shè)nbytes 為16 的

7、倍數(shù)(省略對(duì)余數(shù)的處理)。上面的函數(shù)每處理一個(gè)字節(jié)就要進(jìn)行一次判斷和跳轉(zhuǎn), 對(duì)其中的循環(huán)體可作如下拆解:void memcopy(char *to, char *from, unsigned int nbytes)while(nbytes) *to+ = *from+;*to+ = *from+;*to+ = *from+;*to+ = *from+;nbytes - = 4;這樣一來, 循環(huán)體中的指令數(shù)增加了,循環(huán)次數(shù)卻減少了。跳轉(zhuǎn)指令帶來的負(fù)面影響得以削弱。利用arm 7 處理器32 位字長的特性, 上述代碼可進(jìn)一步作如下調(diào)整:void memcopy(char *to, char *from, unsigned int nbytes)int *p_to = (int *)to;int *p_from = (int *)from;while(nbytes) *p_to+ = *p_from+;*p_to+ = *p_from+;*p_to+ = *p_from+;*p_to+ = *p_from+;nbytes - = 16;經(jīng)過優(yōu)化后,一次循環(huán)可以處理16 個(gè)字節(jié)。跳轉(zhuǎn)指令帶來的影響進(jìn)一步得到減弱。不過可以看出, 調(diào)整后的代碼在代碼量方面有所增加。(2)使用寄存器變量CPU 對(duì)寄存器的存取

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論