關於armhf (hard-float ABI for ARM)

armhf是什麼

在Ubuntu 12.04和Debian裏,除了arm, armel,還出現了一個名爲armhf的版本。這個東西是什麼?

衆所周知,armel是目前主要的ARM ABI。armhf則是armel的一個變種,主要區別在浮點計算上。

在armel中,關於浮點數計算的約定有三種。以gcc爲例,對應的-mfloat-abi參數值有三個:soft,softfp,hard。soft是指所有浮點運算全部在軟件層實現,效率當然不高,適合於早期沒有浮點計算單元的ARM處理器;softfp是目前armel的默認設置,它將浮點計算交給FPU處理,但函數參數的傳遞使用通用的整型寄存器而不是FPU寄存器;hard則使用FPU浮點寄存器將函數參數傳遞給FPU處理。

需要注意的是,在兼容性上,soft與後兩者是兼容的,但softfp和hard兩種模式不兼容。默認情況下,armel使用softfp,因此將hard模式的armel單獨作爲一個abi,稱之爲armhf。

價值

使用softfp模式,會存在不必要的浮點到整數、整數到浮點的轉換。而使用hard模式,在每次浮點相關函數調用時,平均能節省20個CPU週期[1]。對ARM這樣每個週期都很重要的體系結構來說,這樣的提升無疑是巨大的。

在完全不改變源碼和配置的情況下,在一些應用程序上,使用armhf能得到20——25%的性能提升[2]。對一些嚴重依賴於浮點運算的程序,更是可以達到300%的性能提升[3]。

使用

armhf的開啓需要硬件的支持,在Debian的wiki上要求ARMv7 CPU、Thumb-2指令集以及VFP3D16浮點處理器[4]。

在gcc的編譯參數上,使用-mfloat-abi=hard -mfpu=vfp即可。

在工具上,CodeSourcery最早支持hard模式。也可已自己編譯工具鏈[5]。

linux with armfp的歷史

2010年5月20日,Konstantinos Margaritis發文稱將Ubuntu Larmic移植爲hard模式[6]。這一消息後來在powerdeveloper上引發關於性能提升的討論[7]。

2010年7月6日,Hector Oron將他與Konstantinos的郵件討論記錄發往debian-arm郵件列表[8],將其稱之爲armelfp,引起社區重視,並得到armhf這個正式名稱。

2010年7月18日,非官方的debian-armhf移植工作開始[9]。

2011年11月24日,該移植開始成爲debian官方活動。

目前,debian倉庫中超過90%的軟件已經移植完畢[10]。

Debian預計在Wheezy (7.0)發佈armhf的正式版。而Ubuntu也計劃在Precise Pangolin 12.04 LTS中發佈一個armhf版。


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