如何在i.MX6UL平台上实现硬浮点与软浮点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在i.MX6UL平台上实现硬浮点与软浮点?相关的知识,希望对你有一定的参考价值。

i.MX 6UltraLite(简称为i.MX 6UL)是i.MX6系列的新产品。i.MX 6UltraLite采用单核ARM Cortex-A7,处理器主频528MHz,采用NEON技术加速多媒体和信号处理算法,具有浮点运算单元。适合于物联网,电子支付,智能家居,能源管理等领域。


如何在i.MX6UL平台上实现硬浮点与软浮点?

 

本次开发使用的硬件平台为飞凌嵌入式OKMX6UL-C开发板(产品详情:www.forlinx.com/69.htm),其它板卡请酌情参考使用,具体实现操作步骤如下:

技术分享图片

硬浮点交叉编译方法为

arm-linux-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -o test test.c

加入编译参数   -mfloat-abi=hard,并且使用arm-linux-readelf -A test查看,如下:

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_ABI_VFP_args: VFP registers

  Tag_DIV_use: Not allowed

采用的是Tag_ABI_VFP_args: VFP registers ,已经采用硬浮点了。

 

软浮点交叉编译方法:

arm-linux-gcc -o teset_soft test.c 并且使用arm-linux-readelf -A test_soft查看,如下:

Attribute Section: aeabi

File Attributes

  Tag_CPU_name: "ARM10TDMI"

  Tag_CPU_arch: v5T

  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_align_needed: 8-byte

  Tag_ABI_align_preserved: 8-byte, except leaf SP

  Tag_ABI_enum_size: int

  Tag_DIV_use: Not allowed

未使用VFP

 

测试结果:

进行10亿次加减乘除运算,硬浮点时间为1分34.8 软浮点时间为4分19.7。


飞凌嵌入式福利:U盘免费领取

ARM相关技术日新月异,嵌入式开发平台玲琅满目,工程师在对产品进行选型时往往会感到困惑。为了帮助您更方便的进行选型,我们整理了飞凌公司基于NXP、TI、SAMSUNG等品牌的主流开发板资料与一些嵌入式学习资料供您参阅,您只需索取 U 盘就可获得,共计200个,数量有限,送完为止。

 

U盘申请时间:2018年1月2日-1月20日

U盘发放地址:飞凌嵌入式官方网站 www.forlinx.com/dongtai/216.htm



技术分享图片

技术分享图片

长按指纹“识别二维码”关注




以上是关于如何在i.MX6UL平台上实现硬浮点与软浮点?的主要内容,如果未能解决你的问题,请参考以下文章

基于INTEL FPGA硬浮点DSP实现卷积运算

如何确保跨平台的浮点大小相同?

SylixOS 在 t_main 中使用硬浮点方法

Google 的 Protocol Buffer 在实践中处理浮点类型的跨平台程度如何?

当我在 Linux 上运行使用硬浮点选项构建的 Neon 代码时出现分段错误

如何确保在 windows 和 linux 上具有相同的浮点行为?