gpt4 book ai didi

c++ - IEEE 浮点与自定义浮点性能

转载 作者:可可西里 更新时间:2023-11-01 18:28:29 28 4
gpt4 key购买 nike

我在没有浮点单元的处理器上工作,所以我必须为用户界面使用固定或自定义浮点类型。

对于这三种类型,say a multiply 的性能如何:

  1. IEEE float (32)
  2. 具有 16 位有符号值和有符号 16 位指数的自定义 32 位浮点类
  3. 32位固定十进制数

我也想要一些可以扩展到带有浮点单元的处理器的东西,自定义 float 是否会在性能方面与 IEEE float 竞争?我听说 IEEE float 在没有 FPU 的处理器上的性能很糟糕,这是因为 24 位值不是 native 的,所以它必须疯狂和/或运算吗?也就是说,自定义浮点类是否会缓解该性能问题?

如有任何帮助,我们将不胜感激!

最佳答案

软件模拟的 IEEE float / double 很慢,因为需要检查并正确处理许多边缘情况。

  • 输入+/-无穷大
  • 输入的不是数字
  • +/-0 输入
  • 输入中的规范化与非规范化数字以及尾数中的隐式“1”
  • 开箱和打包
  • 规范化/反规范化
  • 不足和溢出检查
  • 正确的舍入,这会导致额外的(反)规范化和/或下溢/溢出

如果您只是粗略地将以上内容算作原始微操作的数量(列表中的每个项目 1 个),您将接近 10 个。在最坏的情况下还会有更多。

因此,如果您对符合 IEEE 标准的浮点运算感兴趣,预计每个模拟运算都比其整数运算慢 30 倍(CodesInChaos 的评论是及时的,每次加法/乘法需要 38 个时钟)。

您可以通过选择浮点格式来走捷径:

  • 只有一个零
  • 没有非数字
  • 仅规范化数字
  • 尾数中没有隐含的'1'
  • 指数和尾数各占整数个字节
  • 没有或原始舍入
  • 可能没有无穷大
  • 可能是 2 的补尾数
  • 可能没有指数偏差

定点运算可能会变得更加高效。但它的常见问题是您必须事先知道输入和中间结果的所有范围,以便您可以选择正确的格式以避免溢出。您可能还需要支持多种不同的定点格式,例如16.16、32.32、8.24、0.32。 C++ 模板可能有助于减少此处的代码重复。

无论如何,你能做的最好的事情就是定义你的问题,用浮点和定点算法解决它,观察两者中哪一个最适合哪个 CPU,然后选择获胜者。

编辑:有关更简单的浮点格式的示例,请查看 MIL-STD-1750A's 32-bit floating point format :

 MSB                                         LSB MSB          LSB
------------------------------------------------------------------
| S| Mantissa | Exponent |
------------------------------------------------------------------
0 1 23 24 31

float 表示为小数尾数乘以 2 的指数次方。在浮点运算开始时,所有 float 都被假定为归一化或浮点零,并且所有浮点运算的结果都被归一化(归一化 float 具有尾数的符号和相反值的下一位)或浮点零。浮点零定义为 0000 000016,即零尾数和零指数 (0016)。扩展浮点零定义为 0000 0000 000016,即零尾数和零指数。 32 位 float 的机器表示的一些示例:

Decimal Number  Hexadecimal Notation  (Mantissa x Exp)  0.9999998 x 2127     7FFFFF 7F  0.5 x 2127   400000 7F  0.625 x 24   500000 04  0.5 x 21     400000 01  0.5 x 20     400000 00  0.5 x 2-1    400000 FF  0.5 x 2-128  400000 80  0.0 x 20     000000 00  -1.0 x 20    800000 00  -0.5000001 x 2-128   BFFFFF 80  -0.7500001 x 24  9FFFFF 04  

关于c++ - IEEE 浮点与自定义浮点性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535310/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com