新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARMHF(hard-float ABI for ARM)

        ARMHF(hard-float ABI for ARM)

        作者: 時間:2016-11-10 來源:網絡 收藏
        1. armhf是什么

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

        本文引用地址:http://www.104case.com/article/201611/317196.htm

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

        在armel中,關于浮點數計算的約定有三種。

        以gcc為例,對應的-mfloat-abi參數值有三個:

        soft

        soft是指所有浮點運算全部在軟件層實現,效率當然不高,適合于早期沒有浮點計算單元的ARM處理器;

        softfp

        softfp是目前armel的默認設置,它將浮點計算交給FPU處理,但函數參數的傳遞--使用通用的整型寄存器而不是FPU寄存器

        hard

        hard則使用FPU浮點寄存器將函數參數傳遞給FPU處理。

        需要注意的是,在兼容性上,soft與后兩者是兼容的,但softfp和hard兩種模式不兼容。

        默認情況下,armel使用softfp,因此將hard模式的armel單獨作為一個abi,稱之為armhf。


        2. 價值

        使用softfp模式,會存在不必要的浮點到整數、整數到浮點的轉換。

        而使用hard模式,在每次浮點相關函數調用時,平均能節省20個CPU周期[1]。

        對ARM這樣每個周期都很重要的體系結構來說,這樣的提升無疑是巨大的。

        在完全不改變源碼和配置的情況下,在一些應用程序上,使用armhf能得到20——25%的性能提升[2]。

        對一些嚴重依賴于浮點運算的程序,更是可以達到300%的性能提升[3]。


        3. 使用

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

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

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


        4. 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版。

        此外,對此前提到過的Toshiba AC100,目前已經有了armhf的debian和ubuntu鏡像可以安裝試用[11, 12]。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 平阳县| 潜江市| 延边| 鹤峰县| 汾西县| 平罗县| 铁岭市| 平利县| 阿尔山市| 玉溪市| 金湖县| 广东省| 沙田区| 万荣县| 苍南县| 汾阳市| 贵溪市| 宜昌市| 辽源市| 朔州市| 武清区| 凤山市| 中山市| 龙井市| 平谷区| 普安县| 泗洪县| 固原市| 湖州市| 轮台县| 泉州市| 玉田县| 揭阳市| 柳河县| 东阿县| 丰顺县| 大邑县| 五峰| 赤城县| 松江区| 南充市|