硬浮点数和软浮点数有什么区别?

2024-11-06 08:34:00
admin
原创
139
摘要:问题描述:当我使用交叉工具链编译 C 代码时,链接器会打印警告页面,指出我的可执行文件使用硬浮点,但我的 libc 使用软浮点。这有什么区别?解决方案 1:硬浮点使用片上浮点单元。软浮点在软件中模拟一个。区别在于速度。奇怪的是看到两者都用在同一个目标架构上,因为芯片要么有 FPU,要么没有。您可以使用 -ms...

问题描述:

当我使用交叉工具链编译 C 代码时,链接器会打印警告页面,指出我的可执行文件使用硬浮点,但我的 libc 使用软浮点。这有什么区别?


解决方案 1:

硬浮点使用片上浮点单元。软浮点在软件中模拟一个。区别在于速度。奇怪的是看到两者都用在同一个目标架构上,因为芯片要么有 FPU,要么没有。您可以使用 -msoft-float 在 GCC 中启用软浮点。如果您使用硬件浮点,您可能需要重新编译 libc 以使用硬件浮点。

解决方案 2:

严格来说,所有这些答案在我看来都是错误的。

当我使用交叉工具链编译 C 代码时,链接器会打印警告页面,指出我的可执行文件使用硬浮点,但我的 libc 使用软浮点。这有什么区别?

Debian VFP wiki提供了有关 的三个选择的信息-mfloat-abi

  • soft- 这是纯软件

  • softfp- 这支持硬件 FPU,但ABI是软兼容的。

  • hard- ABI 使用浮点VFP寄存器。

链接器(加载器)错误是因为您有一个共享库,它将在整数寄存器中传递浮点值。您仍然可以使用 等编译代码-mfpu=vfp,但您应该使用 ,-mfloat-abi=softfp这样如果libc需要浮点数,它就会以库可以理解的方式传递。

Linux 内核可以支持 VFP 指令的仿真。显然,在这种情况下,您最好使用 进行编译-mfpu=none,并让编译器直接生成代码,而不是依赖任何 Linux 内核仿真。但是,我不认为 OP 的错误实际上与此问题有关。它是独立的,也必须与 一起处理-mfloat-abi

Armv5 共享库与 ArmV7 CPU正好相反;libc是硬浮点,但应用程序只是软浮点。它有一些方法可以解决这个问题,但用正确的选项重新编译总是最简单的。

另一个问题是,Linux 内核必须支持 VFP 任务(或任何存在的 ARM 浮点)才能在上下文切换时保存/恢复寄存器。

解决方案 3:

浮点运算有三种方法:

  • 如果您的 CPU 有 FPU,请使用浮点指令。(快速)

  • 让你的编译器将浮点运算转换为整数运算。(慢)

  • 使用浮点指令和没有 FPU 的 CPU。您的 CPU 将生成异常(保留指令、未实现指令或类似指令),如果您的操作系统内核包含浮点模拟器,它将模拟这些指令(最慢)。

解决方案 4:

听起来你的 libc 是为软件浮点运算而构建的,而你的 exe 是在假设硬件支持浮点的情况下编译的。短期内,你可以强制使用软浮点作为编译器标志。(如果你使用的是 gcc,我认为它是 -msoft-float)

从长远来看,如果您的目标处理器具有对浮点​​运算的硬件支持,您通常会希望构建或找到启用硬件浮点的交叉工具链以提高速度。一些处理器系列有型号变体,一些有硬件支持,一些没有。因此,例如,仅仅说您的处理器是 ARM 不足以知道您是否有硬件浮点支持。

解决方案 5:

计算可以通过浮点硬件或基于整数算法的软件来完成。

在硬件中执行此操作要快得多,但许多微控制器没有浮点硬件。在这种情况下,您可以避免使用浮点(通常是最佳选择)或依靠软件实现,这将是 C 库的一部分。

在某些控制器系列中,例如 ARM,浮点硬件存在于该系列的某些型号中,但不存在于其他型号中,因此这些系列的 gcc 支持两者。您的问题似乎是您混淆了这两个选项。

解决方案 6:

可能的情况是软浮点数将数据留在 fpu 中,而硬浮点数则需要在进程激活时将 fpu 寄存器推送到缓存中。这就是为什么通常在编译时禁用内核的 FPU,不要在每次有人进行内核调用时浪费周期将其推送到内存中或从内存中推送出去。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1142  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   96  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   87  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   95  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   92  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用