論ARMv7 Thumb-2指令集的性能(含Thumb指令集介紹)

[摘要] 

    主要是介紹ARM CPU中的THUMB-2功能,相對於THUMB的比較THUMB-2指令集的擴展,THUMB-2的新指令帶來的好處,新指令對性能和代碼密度的改進。    如今的嵌入式系統開發者要面對各種複雜的挑戰,其中就包括瞭如何在代碼性能和系統成本之間進行平衡。在這方面,ARM處理器可以提供給開發者領先的技術方案,在綜合考慮性能和成本的情況下取得最優的設計方案。Thumb®-2是最近才加入ARM架構的一項新技術。它以現有的ARM技術爲基礎,目標是提供低功耗,高性能的最優設計。本文描述了Thumb-2技術是如何解決這些問題並優化系統設計的。


一、ARM和Thumb指令集 
  ARM指令集爲32位指令集,可以實現ARM架構下所有功能。Thumb指令集是對32位ARM指令集的擴充,它的目標是爲了實現更高的代碼密度。Thumb指令集實現的功能只是32位A R M指令集的子集,它僅僅把常用的A R M指令壓縮成16位的指令編碼方式。在指令的執行階段,16位的指令被重新解碼,完成對等的32位指令所實現的功能。與全部用ARM指令集的方式相比,使用Thumb指令可以在代碼密度方面改善大約30%。但是,這種改進是以代碼的效率爲代價的。儘管每個Thumb指令都有相對應的ARM指令,但是,相同的功能,需要更多的Thumb指令才能完成。因此,當指令預取需要的時間沒有區別時,ARM指令相對Thumb指令具有更好的性能。


  開發者在進行系統設計的時候需要綜合考慮成本、性能和功耗等因素。如果在一個系統中綜合使用ARM指令和Thumb指令,就能在成本、性能和功耗這些因素取得比較好的平衡。軟件代碼密度直接影響到嵌入式系統需要的存儲器的大小。太大的存儲器不僅會影響系統整體成本,還會增加系統的複雜度。因此,嵌入式系統一般都希望能夠降低程序的存儲器的需求。對嵌入式系統來說,功耗也是需要考慮的重要因素。對很多便攜式產品,如何能夠延長電池使用時間一直是一個重要的課題。使用ARM指令可以提供最優的性能。嵌入式系統中性能和功耗通常是緊密相關的。如果使用效率更高的ARM指令集,就有可能用更低的處理器主頻完成相同的功能,並進而降低系統的整體功耗。同樣,如果能夠提前完成目標功能,也可以使系統進入低功耗的休眠狀態,這樣也可以降低系統的整體功耗。代碼密度和功耗之間的關係就不是那麼明顯了。對於有些系統中不同的內存類型,不同內存的不同功耗指標的情況,改善代碼密度可以影響到系統的整體功耗。相對片內存儲器,任何對片外指令或數據的訪問都會導致系統功耗的增加。這主要是因爲訪問片外存儲器需要更多的邏輯和更多的時鐘週期。但是,通常來說片內的存儲器的容量都不會很大。如果使用Thumb指令集,提高軟件的代碼密度,就可以把更多的常用代碼放到片內的存儲器中。所以可以說更高的代碼密度有助於降低系統的功耗。

   
二、ARM Thumb-2技術的代碼密度和代碼性能 
  Thumb-2技術是對ARM架構的非常重要的擴展,它可以改善Thumb指令集的性能。Thumb-2指令集在現有的Thumb指令的基礎上做了如下的擴充:增加了一些新的16位Thumb指令來改進程序的執行流程,增加了一些新的32位Thumb指令以實現一些ARM指令的專有功能32位的ARM指令也得到了擴充,增加了一些新的指令來改善代碼性能和數據處理的效率給Thumb指令集增加32位指令就解決了之前Thumb指令集不能訪問協處理器、特權指令和特殊功能指令的侷限。新的Thumb指令集現在可以實現所有的功能,這樣就不需要在ARM/Thumb狀態之間反覆切換了,代碼密度和性能得到的顯著的提高。 

新的Thumb-2技術可以帶來很多好處:
  可以實現ARM指令的所有功能 
  增加了12條新指令,可以改進代碼性能和代碼密度之間的平衡 
  代碼性能達到了純ARM代碼性能的98% 
  相對ARM代碼,Thumb-2代碼的大小僅有其74% 
  代碼密度比現有的Thumb指令集更高: 
  代碼大小平均降低5% 
  代碼速度平均提高2-3%


  在Thumb-2技術之前,開發者會因爲如何選擇使用ARM/Thumb指令而感到困惑。Thumb-2的出現使開發者只需要使用一套唯一的指令集,不再需要在不同指令之間反覆切換了。Thumb-2技術可以極大的簡化開發流程,尤其是在性能、代碼密度和功耗之間的關係並不清楚直接的情況下。並且,在Thumb-2技術下也不再像以往那樣需要在ARM/Thumb兩套指令之間切換。對於之前在ARM處理器上已經有長時間開發經驗的開發者來說,使用Thumb-2技術是非常簡單的。開發者只需要關注對整體性能影響最大的那部分代碼,其他的部分可以使用缺省的編譯配置就可以了。這樣在享有高性能、高代碼密度的優勢的時候,可以很快的更新設計並迅速將產品推向市場。

Thumb-2技術使得開發者可以更快的完成產品最優化設計。


  通過分析ARM/Thumb編譯器產生的代碼,ARM公司有針對性的在Thumb-2指令集中增加了一些新的指令。通過分析這些新的指令, 我們可以看到Thumb-2指令是如何提升代碼性能和代碼密度的。


  爲了提高處理壓縮數據結構的效率,新的ARM架構爲Thumb-2指令集和ARM指令集增加了一些新的指令來實現比特位的插入和抽取。這樣,開發者進行比特位的插入和抽取所需的指令數目就可以明顯減少,使用壓縮的數據結構也會更加方便,而代碼對存儲器的需求也會降低。

   
  三、16-bit常數 
  爲了增加處理常數的靈活性,新架構中爲Thumb-2指令集和ARM指令集增加了兩條新的指令。MOVW可以把一個16-bit常數加載到寄存器中,並用0填充高比特位;另一條指令MOVT可以把一個16-bit常數加載到寄存器高16比特中。這兩條指令組合使用就可以把一個32-bit常數加載到寄存器中。通常在訪問外設寄存器之前會把外設的基址加載到寄存器中,這時就會需要把32-bit常數加載到寄存器中。在之前的架構中需要通過literal pools來完成這樣的操作,對32位常量的訪問一般通過PC相對尋址來實現。Literal pools可以保存常量並簡化訪問這些常量的代碼,但是,在Harvard架構的處理器中會引起額外的開銷。這些開銷來自於需要額外的時鐘週期來使數據端口能夠對指令流進行訪問;這種訪問可能是需要把指令流加載的數據緩存中,或者從數據端口直接訪問指令存儲器。將32位常量分成16比特的兩個部分保存在兩條指令中,意味着數據直接在指令流中,不再需要通過數據端口來訪問了。相對於literal pool方式,這種解決辦法可以消除通過數據端口訪問指令流的額外開銷,進而提高性能,降低功耗。 

《ARM處理器中ARM和Thumb狀態的切換》 -http://www.elecfans.com/soft/study/inbuilt/2009/2009090445034.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章