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

forlinx ( 楼主 ) 2017-12-28 10:40:58  显示全部楼层

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


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

本次开发使用的硬件平台为飞凌嵌入式OKMX6UL-C开发板,其它板卡请酌情参考使用,具体实现操作步骤如下:

硬浮点交叉编译方法为

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。


0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /7 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 粤ICP备14022951号-2 )

GMT+8, 2020-6-5 04:21 , Processed in 0.556066 second(s), Total 21, Slave 14 queries , Memcache On.

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表