You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARMv8(aarch64)平台GCC软件模拟浮点运算的编译方法问询

背景

我在搭载Ubuntu 20.04 LTS aarch64系统的Raspberry Pi 4 Model B Rev 1.4上做编译测试。lscpu命令输出如下:

Architecture:            aarch64
  CPU op-mode(s):        32-bit, 64-bit
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               ARM
  Model name:            Cortex-A72
    Model:               3
    Thread(s) per core:  1
    Core(s) per cluster: 4
    Socket(s):           -
    Cluster(s):          1
    Stepping:            r0p3
    CPU max MHz:         1800.0000
    CPU min MHz:         600.0000
    BogoMIPS:            108.00
    Flags:               fp asimd evtstrm crc32 cpuid

当前环境下GCC的目标架构是aarch64-linux-gnu,我清楚Cortex-A72具备浮点硬件,且aarch64不支持-mfloat-abi=soft编译选项。

需求

我正在用C语言实现定点算术版的atan()函数,想对比这个定点实现和通过软件例程模拟浮点运算的atan()函数的运行性能:

  • 已有一个包含定点函数实现的.c文件,仅使用整数参数;
  • 已有一个引用文件.c,调用数学库中接收浮点参数的atan()函数。

问题

有没有GCC编译选项能在当前环境下把浮点指令转换成软件模拟实现?这可行吗?还是必须更换无浮点硬件支持的平台?
我的定点实现可正常编译(无需特殊选项,无浮点指令需模拟),但希望编译调用浮点参数的引用函数时,将其转换成模拟浮点行为的定点汇编指令。


解决方案

在aarch64架构下确实没法用-mfloat-abi=soft,但有两种可行方式实现软件模拟浮点运算:

  1. 指定无FP的aarch64架构变体:编译引用文件时加上-march=armv8-a+nofp选项,GCC会生成完全不依赖浮点硬件的代码,所有浮点操作都会通过软件模拟实现,正好满足你对比性能的需求。
  2. 链接软浮点数学库:如果系统中有软浮点版本的数学库(比如libmsoft.a),编译时加上-lmsoft选项,强制链接软浮点库以替代默认的硬件加速浮点库。如果系统没有该库,可能需要自行编译带软浮点支持的GCC工具链。

注意事项

  • 仅给引用文件使用上述编译选项,定点实现的文件保持原编译方式,避免不必要的性能损耗。
  • 使用-march=armv8-a+nofp时,生成的代码兼容性更广,但性能会显著下降,这正是你需要的测试场景。

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:36:27