新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM處理器的軟件優化設計

        基于ARM處理器的軟件優化設計

        作者: 時間:2016-12-02 來源:網絡 收藏
        引言

        隨著嵌入式系統在工業控制、汽車系統、家庭網絡、醫療衛生、無線技術等領域內的大量應用,嵌入式系統開發者必須面對務種復雜的挑戰,其中就包括如何在代碼性能和系統成本之間進行平衡。在這方面,ARM處理器可以提供給開發者業界領先的技術方案ARMCortex系列提供了一個標準的體系結構來滿足各種技術的不同性能要求,是專門針對功耗和成本敏感的嵌入式應用領域實現高性能而設計的,它大大簡化了編程的復雜性,其成熟的技術使ARM架構成為各種應用的上佳選擇。

        ARM Cortex處理器的統一技術是Thumb-2技術,它以現有的ARM技術為基礎,綜合了ARM指令和Thumb指令的優勢,對優化嵌人式軟件設計具有獨到的優勢,提供了最佳的代碼密度,能更合理地使用存儲器,對于靠近處理器內核的高速存儲器至關重要,即使只節省小部分內存,也將大大提高系統的性能,大幅降低功耗。

        1 Thumb-2 指令簡介

        并非所有的運算都能夠映射到Thumb指令集,有時需要多條Thumb指令來模擬一條32位指令的任務。而且Thumb指令不能訪問協處理器,不能使用異常中斷指令,不支持媒體功能,當應用中有這些需求而且對存儲器窄問要求較高時,必須混合使用ARM指令和Thumb指令,處理器內核根據需要切換到Thumb狀態以獲取高代碼密度或切換到ARM狀態以獲取出色的性能。在開發階段,為r充分利用存儲器,需要反復調整哪些代碼使用ARM指令、哪些代碼使用Thumb指令。往往只有等到軟件和硬件完成后,才能最終決定ARM/Thumb指令的使用方式,這些因素會使開發流程變得非常復雜。

        Thumb-2技術足對ARM架構的非常重要的擴展,它可以改善Thumb指令集的性能。Thumb-2指令集在現有的Thumb指令的基礎上做了如下的擴充:

        · 增加了一些新的16位Thumb指令來改進程序的執行流程

        · 增加了一些新的32位Thumb指令以實現一些ARM指令的專有功能。

        · 擴充原有的ARM指令,增加了一些新的指令來改善代碼性能和數據處理的效率。

        使用Thumb-2指令就不需要在ARM/Thumb狀態之間反復切換了,代碼密度和性能得到的顯著的提高。

        2 使用Thumb-2指令優化設計

        對于已經有ARM處理器開發經驗的嵌入式開發工程師析言,使用Thumb-2技術是非常簡單的,因為Thumb-2技術是在ARM和Thumb基礎上經過創新后發展起來的,它繼承了原有的基本編程方法,同時具備ARM/Thumb不可比擬的優越性。開發人員在設計嵌入式軟件時,只需要重點關注對整體性能影響最大的那部分代碼設計,就能夠平衡好性能、代碼密度和功耗之間的關系。

        2.1 減小漢名(Hamming)距離

        表1漢名距離變化對比


        如表1所示,兩組代碼都是用于計算表達式(x1+x2)x(x3-x4)的值,分別使用3條指令束實現。每條指令先成的功能、字書數、寄存器的使用數目、操作碼都完全一樣,不同之處就是各寄存器操作數的二進制編碼不同。

        Rd代表目標寄存器,Rn和Rm代表源操作數寄存器。執行原代碼時,Rd的比特位變化4次,Rn和Rm分別變化3次和5次,操作數總的比特位變化12次。執行優化后的代碼時,操作數總的比特位變化為6次,僅為原代碼的一半,能有效地降低指令執行時的功耗。

        2.2擅用16位常數指令

        Thumb-2指令集中增加了2條關于16位常數的新指令。MOVW可以把一個16位常數加載到寄存器中,并用0填充寄存器的高16位;另一條指令MOVT可以把一個16位常數加載到寄存器的高16位中。這兩條指令組合使用就可以把一個32位常數加載到寄存器中。

        操作32位立即數或是訪問外設,都需要把32位常數加載到寄存器中。對于原來的ARM/Thumb指令系統,因指令編碼位數限制.最多只能使用12位常數,且其有效位數只有8位,另外4位用于移位。對任意一個32位的立即數或者一個地址值讀取到寄存器需要使用到LDR偽指令,編澤器把該32位數據放在數據緩沖區中,同時用基于PC的LDR指令讀取該數據,程序執行時,會在處理器中引起額外的開銷,這些開銷來自于需要額外的時鐘周期使數據端口能夠對指令流進行訪問。

        用兩條指令把32位常數分成兩個16位常數分兩次加載到寄存器中,意味著數據直接在指令流內部,不再需要通過數據端口來訪問。相對于LDR偽指令方式,這種解決辦法可以消除通過數據端口訪問指令流的額外開銷,進而提高性能,降低功耗。

        2.3靈活應用位操作指令

        嵌入式軟件開發者經常會碰到位操作方面的問題,如需要對某個變量中的某幾位賦值或復位。提取寄存器的部分數據位信息,寄存器中插入固定比特信息等,開發人員往往采用邏輯運算指令和移位操作指令的組合來實現。如表2所爾,兩組代碼完成的功能一樣,把寄存器R1和寄存器R2的有用信息集中壓縮到寄存器R0中,以節省寄存器。R1的有用信息為R1[15:0],R2的有用信息為R2[24:8]。對于原代碼,因為需要屏蔽寄存器R1和R2的16位數據,需要16位常數參與,所以使用MOVW指令把16位常數引入,完成程序功能共用了4條指令,還額外使用寄存器R3來存放中間變量。優化后的代碼只需要一條指令即可實現,而且不需要額外的寄存器參與計算。

        表2位操作指令對比


        除PKHBT指令外。Thumb-2技術還提供PKHTB、BFC、BFI、SBFX、UBFX等位操作指令。這樣,開發者進行比特位的插入和抽取所需的指令數目就可以明顯減少,使用壓縮的數據結構也會更加方便。而代碼對寄存器的需求也會降低。

        上一頁 1 2 下一頁

        關鍵詞: ARM處理器軟件優

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东乡族自治县| 东莞市| 太康县| 丹江口市| 蒙自县| 潞城市| 舒兰市| 湖南省| 巴林左旗| 灌云县| 巴塘县| 玉溪市| 尚义县| 禄劝| 桐梓县| 芮城县| 梁平县| 嘉义市| 资溪县| 眉山市| 定襄县| 扎赉特旗| 思茅市| 康乐县| 商洛市| 怀仁县| 南汇区| 株洲市| 沂水县| 郸城县| 常山县| 故城县| 宝清县| 巍山| 德江县| 法库县| 昭苏县| 利川市| 巢湖市| 临洮县| 连江县|