floating-point - 在 Cortex M0 上,浮点比较与整数比较的开销有多大?

标签 floating-point embedded instruction-set cortex-m

所以我正在开发一个需要计算 float 的嵌入式项目。显然,有多种方法可以估算输出并减少计算周期。我的问题是, float 比较与整数比较(相对而言,不是精确的周期)有多昂贵?其中一项操作可能可以通过这种方式进行优化,但我想知道是否值得为此付出努力。该芯片是皮质 M0(无浮点硬件)。所有浮点都是通过软件完成的。

最佳答案

可靠地确定浮点比较成本的最简单方法是对其计时。如果由于某种原因这不可能,人们可能会估计它。

我在 2003 年左右使用无 FPU 的 ARM 处理器,并为这些处理器编写了我自己的高度优化的单精度 float 。虽然我无法再访问该代码,但我发现它的性能与已发布的性能数据非常相似 in this paper by Iordache and Tang for a floating-point emulation library on XScale .

这表明单精度加法在 35 个周期内执行,减法的时间基本相同。由于比较是减法的一种简化形式,其中不需要计算浮点结果,因此比较会稍微便宜一些,从而为比较成本设置上限。

在浮点仿真中,单精度操作数由 32 位整数表示并存储在通用寄存器中。如果两个操作数都是有限的正操作数,则可以直接通过整数比较来比较它们。基本上,这对重新解释为 int32binary32 操作数使用整数比较。这给出了成本的下限。 This answer展示了如何将这种方法推广到成对的非异常操作数。

关于floating-point - 在 Cortex M0 上,浮点比较与整数比较的开销有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612267/

相关文章:

Python乘法失去浮点精度

c - 读取 MSP430 IO 寄存器太快?

c++ - ARM 架构中的指针处理和 Valgrind 方法

cpu - 指令集随机化的大致工作原理

assembly - Arm64: "HINT 0x1b"和 "HINT 0x1F"的含义是什么?

types - 为什么 IEEE754 单精度 float 只有 7 位精度?

c - 将 float/double 转换为字符串的高效函数

swift - 转换函数以处理 Double 和 Float...使用 FloatingPoint 类型?

c - 将输入值存储在结构中以便稍后进行最快的比较

assembly - 68k寄存器地址