新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM處理器的軟件優(yōu)化設(shè)計(jì)

基于ARM處理器的軟件優(yōu)化設(shè)計(jì)

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏


2.4 選擇字節(jié)

對(duì)于習(xí)慣使用高級(jí)語言編程的開發(fā)者,大都喜歡用if-then-else語句來控制程序流程.但高級(jí)語苦編寫的程序最終都要轉(zhuǎn)換為體現(xiàn)機(jī)器指令的匯編程序,往往一條高級(jí)語占語句需要轉(zhuǎn)換成很多條匯編指令,除編程方便外,高級(jí)語言在執(zhí)行效率和存儲(chǔ)空間上都沒有優(yōu)勢。Thumb-2指令中提供一條類似于if-then-else語句的指令,具體格式如表3所示。

使用SEL指令能夠?qū)崿F(xiàn)程序的流程控制,而且一條匯編指令實(shí)現(xiàn)了4條if-then-else語句的功能,只是每條分支只能為字符型數(shù)據(jù)賦值,相當(dāng)于c語言中的4個(gè)條件運(yùn)算符語句。

表3 SEL指令


2.5寄存器倒轉(zhuǎn)

一些強(qiáng)調(diào)算法(如FFT)的程序通常要求把源寄存器的hit[n]賦值到目標(biāo)寄存器的bit[31-n],比特倒轉(zhuǎn)指令RBIT就能夠很好地實(shí)現(xiàn)。如果不使用該指令,實(shí)現(xiàn)同樣的功能會(huì)需要很多條移位指令和邏輯操作指令才能完成,同時(shí)還需要一個(gè)保存中間變量的寄存器。而使用比特反轉(zhuǎn)指令能明顯降低需要的指令的數(shù)目和節(jié)約寄存器。

Thumb-2指令中的寄存器倒轉(zhuǎn)語句如表4所示,包含比特倒轉(zhuǎn)、字節(jié)倒轉(zhuǎn)及帶符號(hào)倒轉(zhuǎn)。

表4倒轉(zhuǎn)指令集


對(duì)于一些編碼/解碼或加密/解密程序通常要求對(duì)數(shù)據(jù)進(jìn)行高低字節(jié)互換,字節(jié)倒轉(zhuǎn)指令REV就能夠很好地實(shí)現(xiàn)。既降低指令條目數(shù)量,又節(jié)省寄存器空間,提高軟件執(zhí)行效率。

2.6實(shí)現(xiàn)跳轉(zhuǎn)表

使用跳轉(zhuǎn)表來控制程序的執(zhí)行方向足高級(jí)語言的一個(gè)常見特性,使用ARM和Thumb指令集都可以很好的實(shí)現(xiàn)這個(gè)功能。使用ARM指令集一般是為了生成高性能的代碼,編澤器會(huì)以代碼密度為代價(jià)對(duì)性能進(jìn)行優(yōu)化。而Thumb編譯器則會(huì)使用壓縮的數(shù)據(jù)表來盡可能的降低代碼大小。

Thumb-2指令集引入了兩條跳轉(zhuǎn)表指令TBB和TBH,分別對(duì)應(yīng)字節(jié)分支跳轉(zhuǎn)和半字分支跳轉(zhuǎn)。它綜合了ARM/Thumb的優(yōu)點(diǎn),在壓縮的數(shù)據(jù)表上可以使用最少的指令來實(shí)現(xiàn)跳轉(zhuǎn)表功能,最終可以以最小的代碼和數(shù)據(jù)實(shí)現(xiàn)最優(yōu)的性能。

2.7 改善小額數(shù)值運(yùn)算速度

對(duì)于普通的控制系統(tǒng)或數(shù)據(jù)采集系統(tǒng),精度往往并不要求很高,12位數(shù)據(jù)已經(jīng)足夠,但ARM指令和Thumb指令都不提供12位立即數(shù)的相關(guān)指令(前文已經(jīng)說明,ARM指令中的12位立即數(shù)的有效位數(shù)是8)。ThurIlb-2技術(shù)提供2條12位立即數(shù)參與加法和減法運(yùn)算的指令,指令格式如表5所示,利用這2條指令能夠改善數(shù)據(jù)處理速度。

表5 12位立即數(shù)的算術(shù)運(yùn)算


特別是閉環(huán)控制系統(tǒng),需要根據(jù)預(yù)設(shè)值和反饋值計(jì)算偏移量,并根據(jù)偏移量來控制被控對(duì)象。預(yù)設(shè)值通常是一個(gè)常量,在系統(tǒng)運(yùn)行過程中都不會(huì)改變。習(xí)慣于高級(jí)語言編程的開發(fā)者喜歡使用宏定義的方式來設(shè)置該常量,但讀取保存在內(nèi)存中的常量會(huì)降低數(shù)據(jù)處理速度,如果把常量保存在寄存器當(dāng)中則浪費(fèi)一個(gè)非常宗貴寄存器。針對(duì)預(yù)設(shè)值不易改變的情況,直接使用12位立即數(shù)來表示該預(yù)設(shè)常量并直接參與算術(shù)運(yùn)算的方式既可以節(jié)約存儲(chǔ)空間,還能夠改善數(shù)據(jù)處理速度,而且與12位AD轉(zhuǎn)換器做反饋采樣環(huán)節(jié)剛好對(duì)應(yīng)。

2.8最大限度地使用寄存器

像ARM這樣的load-store體系結(jié)構(gòu)的處理器上,訪問寄存器中的數(shù)據(jù)要比訪問存儲(chǔ)器中的數(shù)據(jù)效率高很多,為軟件變量分配寄存器要遠(yuǎn)比分配存儲(chǔ)空間性能優(yōu)越。

ARM Cortex處理器共有14個(gè)通用寄存器,實(shí)際工程應(yīng)用軟件巾的變量數(shù)大多超出14個(gè),但數(shù)值較小,可以把多個(gè)變量存放在一個(gè)寄存器當(dāng)中。還可以讓不同函數(shù)的局部變量對(duì)寄存器進(jìn)行時(shí)分復(fù)用,以充分發(fā)揮寄存器的優(yōu)勢。

2.9其他

Thumb-2技術(shù)提供2條過零檢測并跳轉(zhuǎn)的指令CBZ和CBNZ。分別對(duì)應(yīng)檢測到零跳轉(zhuǎn)或檢測到非零跳轉(zhuǎn)。該指令可以被用來替換常用的一個(gè)指令序列:與零比較,以及隨后的跳轉(zhuǎn)指令,這樣的指令序列通常被用來檢查指針是否為空。Thumb-2指令集中還增加了訪問協(xié)處理器的指令,這樣Thumb-2代碼就可以直接支持欠量浮點(diǎn)防處理器,以及其他的協(xié)處理器。配合其他訪問系統(tǒng)寄存器的指令。整個(gè)應(yīng)用程序就都可以用Thumb-2指令來實(shí)現(xiàn),不必再切換的ARM狀態(tài)才能實(shí)現(xiàn)一些特殊的功能。

3 結(jié)束語

在一個(gè)應(yīng)用程序中,要實(shí)現(xiàn)最好的性能.就需要編寫優(yōu)化的匯編程序。只不過是對(duì)性能影響最大的關(guān)鍵程序才值得優(yōu)化??梢允褂眯阅芊治銎骰蛘咧噶钪芷谟?jì)數(shù)工具來找這些敏感的關(guān)鍵程序段。優(yōu)化程序的基本思想就是盡可能地壓縮代碼尺寸以節(jié)省存儲(chǔ)空間,盡可能提高程序的執(zhí)行效率以獲得更高的性能,并降低功耗。

上一頁 1 2 下一頁

關(guān)鍵詞: ARM處理器軟件優(yōu)

評(píng)論


技術(shù)專區(qū)

關(guān)閉