在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM處理器Linux下浮點(diǎn)運(yùn)算單元運(yùn)用

            ARM處理器Linux下浮點(diǎn)運(yùn)算單元運(yùn)用

            作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
            1). 浮點(diǎn)運(yùn)算單元(FPU)簡(jiǎn)介

            Float Point Unit,浮點(diǎn)運(yùn)算單元是專用于浮點(diǎn)運(yùn)算的協(xié)處理器,在計(jì)算領(lǐng)域,例如三角函數(shù)以及時(shí)域頻域變換通常會(huì)用到浮點(diǎn)運(yùn)算。當(dāng)CPU執(zhí)行一個(gè)需要浮點(diǎn)數(shù)運(yùn)算的程序時(shí),有三種方式可以執(zhí)行:軟件仿真器(浮點(diǎn)運(yùn)算函數(shù)庫(kù))、附加浮點(diǎn)運(yùn)算器和集成浮點(diǎn)運(yùn)算單元。區(qū)別于以往的ARM9處理器,目前基于Cortex構(gòu)架的ARM處理均集成了浮點(diǎn)運(yùn)算單元。如Nvidia Tegra 2, Tegra 3和 NXP/Freescale i.MX 6集成了VFPv3浮點(diǎn)運(yùn)算單元,NXP/Freescale i.MX 7 則集成了VFPv4浮點(diǎn)運(yùn)算單元。ARM 浮點(diǎn)架構(gòu) (VFP) 為半精度、單精度和雙精度浮點(diǎn)運(yùn)算中的浮點(diǎn)操作提供硬件支持。它完全符合 IEEE 754 標(biāo)準(zhǔn),并提供完全軟件庫(kù)支持,與 NEONTM 多媒體處理功能結(jié)合使用時(shí),可增強(qiáng)圖像應(yīng)用程序的性能(如縮放、2D 和 3D 轉(zhuǎn)換、字體生成和數(shù)字過(guò)濾)。

            本文引用地址:http://www.biyoush.com/article/201611/319520.htm

            2). 浮點(diǎn)調(diào)用約定(Calling Convention)

            調(diào)用約定由應(yīng)用二進(jìn)制接口(Application Binary Interface, ABI)來(lái)定義參數(shù)是如何在調(diào)用過(guò)程中傳遞以及如何獲取返回值,對(duì)于ARM CPU常用的ABI為EABI,提供了兩種互相不兼容的方式來(lái)傳遞浮點(diǎn)數(shù):

            調(diào)用約定

            描述

            GCC flag

            EABI soft-float

            Floats are passed in normal (integer) registers.

            -mfloat-abi=soft or -mfloat-abi=softfp

            EABI hard-float

            Floats are passed in floating point registers (VFP).

            -mfloat-abi=hard

            通常交叉編譯ToolChain已經(jīng)配置好所需的ABI而無(wú)需在命令行重新設(shè)置,并且ToolChain提供的庫(kù)也已經(jīng)自動(dòng)配置為對(duì)應(yīng)的數(shù)據(jù)格式。

            兩個(gè)二進(jìn)制文件(如可執(zhí)行文件和C庫(kù)文件)使用不同的調(diào)用約定,相互之間是不兼容的。所有的程序和庫(kù)必須遵循同一個(gè)調(diào)用約定進(jìn)行編譯,要么軟浮點(diǎn),要么硬浮點(diǎn)。如果你試圖在一個(gè)基于硬浮點(diǎn)編譯的平臺(tái)上運(yùn)行一個(gè)基于軟浮點(diǎn)的程序時(shí),會(huì)出現(xiàn) " No such file or directory " 錯(cuò)誤,盡管這這個(gè)文件是存在的并且可以執(zhí)行。

            另外,硬浮點(diǎn)調(diào)用約定需要使用浮點(diǎn)運(yùn)算單元(FPU)的寄存器,因此在不帶有浮點(diǎn)運(yùn)算單元寄存器的處理器上則無(wú)法實(shí)現(xiàn)。

            下面列出Toradex Colibri Tegra ARM 計(jì)算機(jī)模塊 BSP 上所采用的調(diào)用約定

            BSP Version

            Calling Convention

            BSP V1.x

            EABI soft-float

            BSP V2.x and later

            EABI hard-float

            3). 協(xié)處理器/硬件引擎

            如本文開(kāi)篇所述,目前基于Cortex架構(gòu)的ARM處理器都內(nèi)置了浮點(diǎn)運(yùn)算單元(FPU)來(lái)加速浮點(diǎn)數(shù)據(jù)操作,通常浮點(diǎn)運(yùn)算單元會(huì)添加額外的指令到現(xiàn)有的指令集中。于此相關(guān)的NEON指令集添加了單指令多數(shù)據(jù)操作(single instruction act on multiple data ,SIMD),它實(shí)現(xiàn)的是NEON 媒體處理器引擎,提供了基于VFPv3指令集的浮點(diǎn)運(yùn)算單元功能。

            更多介紹請(qǐng)參考:

            - en.wikipedia.org/wiki/ARM_architecture

            - wiki.debian.org/ArmHardFloatPort/VfpComparison

            ./ Toradex Colibri產(chǎn)品系列所提供的協(xié)處理器/硬件引擎

            Module/CPU family

            VFP Unit

            NEON unit

            Colibri PXA(1)

            -

            -

            Colibri/Apalis iMX6

            VFPv3

            Yes

            Colibri T20

            VFPv3-D16

            -

            Colibri/Apalis T30

            VFPv3

            Yes

            Colibri VFxx

            VFPv3

            Yes

            1. 注:PXA 系列核心板沒(méi)有硬件浮點(diǎn)運(yùn)算單元,但是GCC編譯器提供了經(jīng)過(guò)優(yōu)化的基于Intel Integer SIMD extension(iWMMXt)的軟浮點(diǎn)運(yùn)算仿真功能。

            4). 編譯器選項(xiàng)

            相關(guān)介紹請(qǐng)見(jiàn)如下,下面同樣以Toradex產(chǎn)品為例:

            gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/ARM-Options.html#ARM-Options

            ./ Toradex Colibri Tegra 系列 BSP 編譯器選項(xiàng)

            BSP Version

            GCC flag

            BSP V1.x

            -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16

            BSP V2.x and later

            -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16

            ./ Toradex Colibri PXA編譯器選項(xiàng)

            使用軟浮點(diǎn)調(diào)用約定編譯器,同時(shí)編譯器選項(xiàng)不能包含F(xiàn)PU相關(guān),產(chǎn)生的代碼中不包含由FPU來(lái)執(zhí)行的指令,而是依賴于CPU整數(shù)指令集基于相關(guān)庫(kù)進(jìn)行運(yùn)算。

            ----------------------------------------------------------------------------------------

            -march=armv5te -mtune=xscale -O3

            ----------------------------------------------------------------------------------------

            ./ Toradex Colibri T20編譯器選項(xiàng)

            產(chǎn)生的代碼兼容于含NEON 協(xié)處理器的CPU 。取決于在mfloat-abi 選項(xiàng)所配置的調(diào)用約定為"softfp" 還是"hard"

            ----------------------------------------------------------------------------------------

            -march=armv7-a -mfloat-abi=xxx -mfpu=vfpv3-d16 -mtune=cortex-a9 -O3

            ----------------------------------------------------------------------------------------

            ./ Toradex Colibri/Apalis i.MX6/T30編譯器選項(xiàng)

            取決于在mfloat-abi選項(xiàng)所配置的調(diào)用約定為"softfp" 還是"hard"

            ----------------------------------------------------------------------------------------

            -march=armv7-a -mfloat-abi=xxx -mfpu=neon -mtune=cortex-a9 -O3

            ----------------------------------------------------------------------------------------

            ./ Toradex Colibri VFxx編譯器選項(xiàng)

            取決于在mfloat-abi選項(xiàng)所配置的調(diào)用約定為"softfp" 還是"hard",未來(lái)可以通過(guò)更多的mfpu 選項(xiàng)來(lái)優(yōu)化NEON的實(shí)現(xiàn)。

            ----------------------------------------------------------------------------------------

            -march=armv7-a -mfloat-abi=xxx -mfpu=neon -mtune=cortex-a5 -O3

            ----------------------------------------------------------------------------------------

            5). 檢測(cè)一個(gè)二進(jìn)制文件的浮點(diǎn)調(diào)用約定

            同樣以Toradex產(chǎn)品為例,其所發(fā)布的Linux Images 所有的object 目標(biāo)文件都使用ELF,詳細(xì)介紹請(qǐng)參考:

            en.wikipedia.org/wiki/Executable_and_Linkable_Format

            首先架構(gòu)信息(如i686 或者ARM)可以通過(guò)" file afile "程序來(lái)獲取,架構(gòu)相關(guān)屬性信息可以通過(guò)" readelf –A afile "程序來(lái)獲取 (原生或者交叉編譯ToolChain都可以使用readelf)

            如果readelf命令輸出信息里面包含"Tag_ABI_VFP_args: VFP registers",則調(diào)用約定為硬浮點(diǎn);如沒(méi)有,則為軟浮點(diǎn)。

            ./ 以Colibri T20 編譯的共享目標(biāo)文件為例

            •使用 VFPv3-D16 指令和寄存器

            •不使用 SIMD extensions

            •硬調(diào)用約定

            ---------------------------------------------------------------------------------------------------------------------------------------------------

            $ file colibri-t20/usr/lib/libcurl.so.5.3.0

            colibri-t20/usr/lib/libcurl.so.5.3.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

            $ readelf -A colibri-t20/usr/lib/libcurl.so.5.3.0

            Attribute Section: aeabi

            File Attributes

            Tag_CPU_name: "7-A"

            Tag_CPU_arch: v7

            Tag_CPU_arch_profile: Application

            Tag_ARM_ISA_use: Yes

            Tag_THUMB_ISA_use: Thumb-2

            Tag_FP_arch: VFPv3-D16

            Tag_ABI_PCS_wchar_t: 4

            Tag_ABI_FP_denormal: Needed

            Tag_ABI_FP_exceptions: Needed

            Tag_ABI_FP_number_model: IEEE 754

            Tag_ABI_align_needed: 8-byte

            Tag_ABI_align_preserved: 8-byte, except leaf SP

            Tag_ABI_enum_size: int

            Tag_ABI_HardFP_use: SP and DP

            Tag_ABI_VFP_args: VFP registers

            Tag_CPU_unaligned_access: v6

            ---------------------------------------------------------------------------------------------------------------------------------------------------

            ./ 以NXP/Freescale Vybrid 編譯的共享目標(biāo)文件為例

            •使用 VFPv3 指令和寄存器

            •使用用 NEON SIMD extensions

            •軟調(diào)用約定

            ---------------------------------------------------------------------------------------------------------------------------------------------------

            $ file twr-vf65gs10/usr/lib/libcurl.so.5.3.0

            twr-vf65gs10/usr/lib/libcurl.so.5.3.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

            $ readelf -A twr-vf65gs10/usr/lib/libcurl.so.5.3.0

            Attribute Section: aeabi

            File Attributes

            Tag_CPU_name: "7-A"

            Tag_CPU_arch: v7

            Tag_CPU_arch_profile: Application

            Tag_ARM_ISA_use: Yes

            Tag_THUMB_ISA_use: Thumb-2

            Tag_FP_arch: VFPv3

            Tag_Advanced_SIMD_arch: NEONv1

            Tag_ABI_PCS_wchar_t: 4

            Tag_ABI_FP_denormal: Needed

            Tag_ABI_FP_exceptions: Needed

            Tag_ABI_FP_number_model: IEEE 754

            Tag_ABI_align_needed: 8-byte

            Tag_ABI_align_preserved: 8-byte, except leaf SP

            Tag_ABI_enum_size: int

            Tag_ABI_HardFP_use: SP and DP

            Tag_CPU_unaligned_access: v6

            ---------------------------------------------------------------------------------------------------------------------------------------------------

            ./ 以Colibri PXA 編譯的共享目標(biāo)文件為例

            •不使用浮點(diǎn)運(yùn)算單元

            •不使用SIMD extensions

            •軟調(diào)用約定

            ---------------------------------------------------------------------------------------------------------------------------------------------------

            $ file colibri-pxa/usr/lib/libcurl.so.5.3.0

            colibri-pxa/usr/lib/libcurl.so.5.3.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

            $ readelf -A colibri-pxa/usr/lib/libcurl.so.5.3.0

            Attribute Section: aeabi

            File Attributes

            Tag_CPU_name: "5TE"

            Tag_CPU_arch: v5TE

            Tag_ARM_ISA_use: Yes

            Tag_THUMB_ISA_use: Thumb-1

            Tag_ABI_PCS_wchar_t: 4

            Tag_ABI_FP_denormal: Needed

            Tag_ABI_FP_exceptions: Needed

            Tag_ABI_FP_number_model: IEEE 754

            Tag_ABI_align8_neededU: Yes

            Tag_ABI_align8_preserved: Yes, except leaf SP

            Tag_ABI_enum_size: int

            ------------------------------------------------------------------------------------------------------------------------------------------------------



            評(píng)論


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

            關(guān)閉