版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、個人收集整理勿做商業(yè)用途封面?zhèn)€人收集整理勿做商業(yè)用途作者: Pan Hongliang僅供個人學(xué)習(xí)ARM程序設(shè)計優(yōu)化策略與技術(shù)程序優(yōu)化是指軟件編程結(jié)束后,利用軟件開發(fā)工具對程序進(jìn)行調(diào)整和改進(jìn),讓程序充分利用資源,提高運行效率,縮減代碼尺寸的過程。按照優(yōu)化的側(cè)重點不同,程序 ARM優(yōu)化可分為運行速度優(yōu)化和個人收集整理勿做商業(yè)用途代碼尺寸優(yōu)化。運行速度優(yōu)化是指在充分掌握軟硬件特性的基礎(chǔ)上,通過應(yīng)用程序結(jié)構(gòu)調(diào)整等手段來降低完成指定任務(wù)所需執(zhí)行的指令數(shù)。在同一個處理器上,經(jīng)過速度優(yōu)化的程序比未經(jīng)優(yōu)化的程序在完成指定任務(wù)時所需的時間更短,即前者比后者具有更高的運行效率。代碼尺寸優(yōu)化是指, 采取措施使應(yīng)用
2、程序在能夠正確完成所需功能的前提下,盡可能減少程序的ARM代碼量。然而在實際的程序設(shè)計ARM過程中,程序優(yōu)化的兩個目標(biāo)(運行速度和代碼大?。┩ǔJ腔ハ嗝艿?。為了提高程序運行效率,往往要以犧牲存儲空間、增加代碼量為代價,例如程序設(shè)計中經(jīng)常使用的以查表代替計算、循環(huán)展開等方法就容易導(dǎo)致程序代碼量增加。而為了減少程序代碼量、壓縮存儲器空間,可能又要以降低程序運行效率為代價。因此,在對程序?qū)嵤﹥?yōu)化之前,應(yīng)先根據(jù)實際需求確定相應(yīng)的策略。在處理器資源ARM緊張的情況下,應(yīng)著重考慮運行速度優(yōu)化;而在存儲器資源使用受限的情況下,則應(yīng)優(yōu)先考慮代碼尺寸的優(yōu)化。1 程序運行速度優(yōu)化程序運行速度優(yōu)化的方法可分為以下
3、 ARM幾大類。1.1 通用的優(yōu)化方法(1) 減小運算強度利用左 /右移位操作代替乘 / 除 2運算:通常需要乘以 ARM或除以 2 的冪次方都可以通過左移或右移 n 位來完成。實際上乘以任何一個整數(shù)都可以用移位和加法來代替乘法。ARM 7 中加法和移位可以通過一條指令來完成,且執(zhí)行時間少于乘法指令。例如:i = i × 5可以用 i = (i<<2) + i來代替。利用乘法代替乘方運算: ARM7核中內(nèi)建有32 ×8 ARM乘法器, 因此可以通過乘法運算來代替乘方運算以節(jié)約乘方函數(shù)調(diào)用的開銷。例如:i = pow(i, 3.0)可用 i = i×i&
4、#215; i 來代替。利用與運算代替求余運算:有時可以通過用與(AND )指令代替求余操作(% )來提高效率。例如:i = i % 8可以用 i = i & 0x07來代替。(2) 優(yōu)化循環(huán)終止 ARM條件在一個循環(huán)結(jié)構(gòu)中,循環(huán)的終止條件將嚴(yán)重影響著循環(huán)的效率,再加上ARM指令的條件執(zhí)行特性,所以在書寫循環(huán)的終止條件時應(yīng)盡量使用count-down-to-zero結(jié)構(gòu)。這樣編譯器可以用一條BNE(若非零則跳轉(zhuǎn))指令代替 CMP(比較)和 BLE (若小于則跳轉(zhuǎn))兩條指令,既減小代碼尺寸,又加快了運行 ARM速度。(3) 使用 inline函數(shù)ARM C支持 inline關(guān)鍵字,如果一
5、個函數(shù)被設(shè)計ARM成一個inline函數(shù),那么在調(diào)用它的地方將會用函數(shù)體來替代函數(shù)調(diào)用語句,這樣將會徹底省去函數(shù)調(diào)用的開銷。使用inline的最大缺點是函數(shù)在被頻繁調(diào)用時,代碼量將增大。個人收集整理勿做商業(yè)用途1.2 處理器相關(guān)的優(yōu)化ARM方法(1) 保持流水線暢通從前面的介紹可知,流水線延遲或阻斷會對處理器的性能造成影響,因此應(yīng)該盡量保持流水線暢通。流水線延遲難以避免, 但可以利用延遲周期進(jìn)行其它 ARM操作。LOAD/STORE指令中的自動索引( auto-indexing)功能就是為利用ARM流水線延遲周期而設(shè)計的。當(dāng)流水線處于延遲周期時,處理器的執(zhí)行單元被占用,算術(shù)邏輯單元ARM(AL
6、U )和桶形移位器卻可能處于空閑狀態(tài),此時可以利用它們來完成往基址寄存器上加一個偏移量的操作,供后面的指令使用。例如:指令LDR R1, R2, #4完成 R1= R2 及 R2 += 4兩個操作,是后索引( post-indexing)的例子;而指令LDR R1, R2, #4!完成 R1 =(R2 + 4)和 R2 +=4兩個操作,是前索引( pre-indexing)的例子。流水線阻斷的情況可通過循環(huán)拆解等方法加以改善。一個循環(huán)可以考慮拆解以減小跳轉(zhuǎn)指令在循環(huán)指令中所占的比重,進(jìn)而提高代碼效率。下面以一個內(nèi)存復(fù)制函數(shù)加以ARM說明。void memcopy(charto, char fr
7、om, unsigned int nbytes)while(nbytes-)ARM to+ = from+;為簡單起見,這里假設(shè) nbytes 為 16 的 ARM倍數(shù)(省略對余數(shù)的處理)。上面的函數(shù)每處理一個字節(jié)就要進(jìn)行一次判斷和跳轉(zhuǎn), 對其中的循環(huán)體可作如下拆解:void memcopy(charto, char from, unsigned int nbytes)while(nbytes) to+ = from+; to+ = from+;ARM to+ = from+; to+ = from+; nbytes - = 4;這樣一來, 循環(huán)體中的指令數(shù)增加了,循環(huán)次數(shù)卻減少了。 跳轉(zhuǎn)指令
8、 ARM帶來的負(fù)面影響得以削弱。利用 ARM 7 處理器 32 位字長的特性,上述代碼可進(jìn)一步作如下調(diào)整:個人收集整理勿做商業(yè)用途void memcopy(charto, char from, unsigned int nbytes)ARMintp_to = (int)to;intp_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 個字節(jié)。跳轉(zhuǎn)指令帶來的影響 ARM進(jìn)一步得到減弱。不
9、過可以看出, 調(diào)整后的代碼在代碼量方面有所增加。(2) 使用寄存器變量CPU 對寄存器的存取要比對內(nèi)存的存取快得多ARM, 因此為變量分配一個寄存器,將有助于代碼的優(yōu)化和運行效率的提高。整型、指針、浮點等類型的變量都可以分配寄存器;全部也可以分配寄存器。給循環(huán)體中需要頻繁訪問的變量分配寄存器也能在一定程度上提高程序效率。一個結(jié)構(gòu)的部分或者1.3 指令集相關(guān)的優(yōu)化方法有時可以利用ARM7指令集的特點對程序ARM進(jìn)行優(yōu)化。(1) 避免除法ARM7 指令集中沒有除法指令, 其除法是通過調(diào)用C 庫函數(shù)實現(xiàn)的。一個 32 位的除法通常需要20140個時鐘周期。因此,除法成了一個程序效率的瓶頸,應(yīng)盡量避免
10、使用。有些除法可用乘法代替,例如: if ( (x / y) > z)可變通為if ( x > (y× z)。在能滿足精度,且存儲器空間冗余的情況下,也可考慮使用查表法代替除法。當(dāng)除數(shù)為2 的 ARM冪次方時,應(yīng)用移位操作代替除法。(2) 利用條件執(zhí)行ARM指令集的一個重要特征就是所有的指令均可包含一個可選的條件碼。當(dāng)程序狀態(tài)寄存器(PSR )中的條件碼標(biāo)志滿足指定條件時,帶條件碼的指令才能執(zhí)行。利用條件執(zhí)行通??梢允∪为毜呐袛?ARM指令,因而可以減小代碼尺寸并提高程序效率。(3) 使用合適的變量類型ARM指令集支持有符號/無符號的 8 位、 16 位、 32 位整型
11、及浮點型變量。恰當(dāng)?shù)氖褂米兞康念愋?,個人收集整理勿做商業(yè)用途不僅可以節(jié)省代碼,并且可以提高代碼運行效率。應(yīng)該盡可能地避免使用char 、short型的ARM局部變量,因為操作8 位/16位局部變量往往比操作3 2位變量需要更多指令,請對比下列3 個函數(shù)和它們的匯編代碼。intwordinc(inta) wordinc ADD a1,a1,#1return a + 1; MOV pc,lr shortincshortshortinc(shorta) ADD a1,a1,#1 MOV a1,a1,LSL #16return a + 1; MOV a1,a1,ASR #16ARM MOV pc,lr
12、 charcharinc(chara) charinc ADD a1,a1,#1return a + 1; AND a1,a1,#&ff MOV pc,lr可以看出,操作 3 2位變量所需的指令要少于操作8 位及 16 位變量。1.4 存儲器相關(guān)的優(yōu)化方法(1) 用查表代替計算在處理器資源緊張而存儲器資源相對富裕的情況下,可以用犧牲存儲空間換取運行速度的辦法。例如需要頻繁計算正弦或余弦函數(shù)值時,可預(yù)先將函數(shù)值計算出來置于內(nèi)存中供以后ARM查找。(2) 充分利用片內(nèi) RAM一些廠商出產(chǎn)的 ARM芯片內(nèi)集成有一定容量的 RAM,如 Atmel 公司的 AT91R40807 內(nèi)有 128KB
13、 的 RAM,夏普公司的 LH75400/LH75401 內(nèi)有 32KB 的 RAM。處理器對片內(nèi) RAM的訪問速度要快于對外部 RAM的訪問,所以應(yīng)盡可能將程序調(diào)入片內(nèi) RAM中運行。若因程序太大無法完全放入片內(nèi) RAM,可考慮 ARM 將使用最頻繁的數(shù)據(jù)或程序段調(diào)入片內(nèi) RAM以提高程序運行效率。1.5 編譯器相關(guān)的優(yōu)化方法多數(shù)編譯器都支持對程序速度和程序大小的優(yōu)化,有些編譯器還允許用戶選擇可供優(yōu)化的內(nèi)容及優(yōu)化的程度。相比前面的各種優(yōu)化方法, 通過設(shè)置編譯器選項對程序進(jìn)行優(yōu)化不失為一種簡單有效的途徑。2 代碼尺寸優(yōu)化精簡指令集計算機(jī)的一個重要特點是指令長度固定,這樣做可以簡化指令譯碼的過程
14、,但卻容易導(dǎo)致代碼尺寸增加。為避免這個問題,可以考慮采取以下措施來縮減程序ARM代碼量。個人收集整理勿做商業(yè)用途2.1 使用多寄存器操作指令A(yù)RM指令集中的多寄存器操作指令LDM/STM可以加載 /存儲多個寄存器,這在保存/恢復(fù)寄存器組的狀態(tài)及進(jìn)行大塊數(shù)據(jù)復(fù)制時非常有效。例如要將寄存器R4R12 及 R14的內(nèi)容保存到堆棧中,若用STR 指令共需要10 條,而一條STMEA R13!, R4R12, R14指令就能達(dá)到相同的目的,節(jié)省的指令存儲空間相當(dāng)可觀。不過需要注意的是, 雖然一條 LDM/STM指令能代替多條 LDR/STR 指令,但這并不意味著程序運行速度得到了 ARM提高。實際上處理
15、器在執(zhí)行 LDM/STM指令的時候還是將它拆分成多條單獨的 LDR/STR 指令來執(zhí)行。2.2 合理安排變量順序ARM 7 處理器要求ARM程序中的 32 位/16 位變量必須按字 /半字對齊,這意味著如果變量順序安排不合理,有可能會造成存儲空間的浪費。例如:一個結(jié)構(gòu)體中的4 個 32 位 int型變量 i1 i4和4 個 8 位 char型變量 c1 c4,若按照 i1 、c1、i2 、c2、i3 、 c3、i4 、c4 的順序交錯存放時,由于整型變量的對齊會導(dǎo)致位于2 個整型變量中間的那個8 位 char型變量實際占用32 位的存儲器,這樣就造成了存儲空間的浪費。為避免這種情況,應(yīng)將 in
16、t型變量和 char型變量按類似i1 、 i2 、i3 、i4、c1、 c2、 c3、c4的順序連續(xù)存放。2.3 使用 Thumb 指令為了從根本上有效 ARM降低代碼尺寸, ARM公司開發(fā)了 16 位的 Thumb 指令集。 Thumb 是 ARM體系結(jié)構(gòu)的擴(kuò)充。 Thumb 指令集是大多數(shù)常用 32 位 ARM指令壓縮成 16 位寬指令的集合。在執(zhí)行時, 16 位指令透明的實時解壓成 32 位 ARM指令并沒有性能損失。而且程序在 Thumb狀態(tài)和 ARM狀態(tài)之間切換是零開銷的。與等價的 32 位 ARM代碼相比, Thumb 代碼節(jié)省的存儲器空間可高達(dá) 35% 以上。結(jié)語綜上所述,優(yōu)化的
17、過程是 ARM在透徹了解軟 / 硬件結(jié)構(gòu)和特性的前提下,充分利用硬件資源,不斷調(diào)整程序結(jié)構(gòu)使之趨于合理的過程。其目的是最大程度發(fā)揮處理器效能,最大限度利用資源,盡可能提高程序在特定硬件平臺上的性能。隨著 ARM處理器在通信及消費電子等行業(yè)中的應(yīng)用日趨廣泛,優(yōu)化技術(shù)將在基于 ARM處理器的程序設(shè)計過程中發(fā)揮越來越重要的作用。值得注意的是,程序的優(yōu)化通常只是軟件設(shè)計需要達(dá)到的諸多目標(biāo)之一,優(yōu)化應(yīng)在不影響程序正確性、健壯性、可移植性及可維護(hù)性的前提下進(jìn)行。片面追求程序的優(yōu)化往往會影響健壯性、可移植性等重要目標(biāo)個人收集整理勿做商業(yè)用途版權(quán)申明本文部分內(nèi)容,包括文字、圖片、以及設(shè)計等在網(wǎng)上搜集整理。版權(quán)
18、為潘宏亮個人所有This articleincludessome parts,includingtext,pictures,and design. Copyright is Pan Hongliang's personal ownership.用戶可將本文的內(nèi)容或服務(wù)用于個人學(xué)習(xí)、研究或欣賞,以及其他非商業(yè)性或非盈利性用途, 但同時應(yīng)遵守著作權(quán)法及其他相關(guān)法律的規(guī)定,不得侵犯本網(wǎng)站及相關(guān)權(quán)利人的合法權(quán)利。除此以外,將本文任何內(nèi)容或服務(wù)用于其他用途時,須征得本人及相關(guān)權(quán)利人的書面許可,并支付報酬。Users may use the contents or services of this article for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the le
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育場館大白施工合同
- 專利代理人聘用合同律師
- 航空航天企業(yè)研發(fā)經(jīng)理聘用合同
- 實驗室施工合同模板
- 水利工程監(jiān)理服務(wù)協(xié)議
- 餐飲業(yè)財務(wù)人員招聘協(xié)議
- 外語翻譯專家聘用協(xié)議
- 中醫(yī)學(xué)說教師聘用合同
- 大型工廠給排水系統(tǒng)施工合同
- 江蘇省鹽城市大豐區(qū)部分學(xué)校2024-2025學(xué)年九年級上學(xué)期12月調(diào)研考試化學(xué)試題(含答案)
- 《上課用的小動物過冬》課件
- 2024版建筑工程設(shè)計居間協(xié)議3篇
- 醫(yī)學(xué)教程 梅毒
- 貴州省銅仁市2023-2024學(xué)年高二上學(xué)期期末質(zhì)量監(jiān)測試題 地理 含答案
- 2025屆新高考語文必背74篇古詩詞譯文(解析版)
- 4.3.1海氣相互作用課件高中地理湘教版(2019)選擇性必修1
- 2023年天津南開區(qū)教育系統(tǒng)招聘筆試真題
- 人教版(2024新版)七年級上冊數(shù)學(xué)全冊重點知識點講義
- 維修電工題庫(300道)
- 地球歷史及其生命的奧秘學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論