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

2024-11-06 08:34:00
admin
原创
29
摘要:问题描述:当我使用交叉工具链编译 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,不要在每次有人进行内核调用时浪费周期将其推送到内存中或从内存中推送出去。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用