IEEE 浮点与自定义浮点性能
IEEE floating point vs custom float performance
我正在研究没有浮点单元的处理器,所以我必须为用户界面使用固定或自定义浮点类型。
这三种类型的乘法性能如何:
- IEEE浮型 (32) 具有 16 位
- 有符号值和有符号 16 位指数的自定义 32 位浮点类
- 32 位固定十进制
我想要一些也可以扩展到带有浮点单元的处理器的东西,自定义浮点数在性能方面是否会与 IEEE 浮点数竞争? 我听说 IEEE 浮点数在没有 FPU 的处理器上很糟糕,是因为 24 位值不是本机值,它必须做疯狂和/或? 也就是说,自定义浮点类是否会缓解该性能问题?
任何帮助将不胜感激!
软件模拟的 IEEE 浮点数/双精度值很慢,因为需要检查并正确处理许多边缘情况。
- 输入中的 +/-无穷大
- 输入中的非数字
- 输入 +/-0 输入中的归一
- 化与非归一化数字以及尾数中的隐式"1"
- 开箱和包装 规范化
- /非规范化
- 下溢和溢出检查
- 正确的舍入,这可能导致额外的(去)规范化和/或下溢/溢出
如果你只是粗略地将上述操作算作一些原始的微操作(列表中的每个项目1),你会接近10。在最坏的情况下,还会有更多。
因此,如果您对IEEE编译浮点运算感兴趣,则期望每个模拟运算都比整数运算慢30倍(CodesInChaos的评论是及时的,每次加法/乘法38个时钟)。
您可以通过使用以下浮点格式来削减一些角落:
- 只有一个零
- 没有非数字
- 仅规范化数字
- 尾数中没有隐含的"1"
- 指数和尾数各占整数字节数 无舍入
- 或基本舍入
- 可能,没有无穷大
- 可能,2的补体尾 数
- 可能,没有指数偏差
定点运算可能会变得更高性能。但是它的常见问题是,您必须事先知道输入和中间结果的所有范围,以便选择正确的格式以避免溢出。您可能还需要支持许多不同的定点格式,例如 16.16、32.32、8.24、0.32。C++模板可能有助于减少此处的代码重复。
无论如何,你能做的最好的事情就是定义你的问题,用浮点和定点算法来解决它,观察两者中哪一个最适合哪个 CPU,然后选择获胜者。
编辑:有关更简单的浮点格式的示例,请查看MIL-STD-1750A的32位浮点格式:
MSB LSB MSB LSB
------------------------------------------------------------------
| S| Mantissa | Exponent |
------------------------------------------------------------------
0 1 23 24 31
浮点数表示为小数尾数乘以 2 的指数幂。在浮点运算开始时假定所有浮点数归一化或浮点为零,所有浮点运算的结果归一化(归一化浮点数具有尾数符号和下一个相反值的位)或浮点零。浮点零定义为 0000 0000 16,即零尾数和零指数 (0016)。扩展浮点零定义为 0000 0000 000016,即零尾数和零指数。32 位浮点数的机器表示形式的一些示例:
十进制数十六进制表示法 (尾数 x 经验) 0.99999998 x 2127 7FFFFF 7F 0.5 x 2127 400000 7楼 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++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 我的自定义使用 std::unordered_map 的性能非常慢
- 在 Qt C++ 中在自定义项委托上绘制文本时的性能问题
- 自定义类中的移动与复制性能
- 自定义线程池的令人失望的性能
- 自定义分配器性能
- 改进性能自定义进度条动画
- 如果构建和破坏了许多向量,自定义分配器会提高性能<T>吗?
- QListWidget性能与许多自定义项目
- QT中的自定义外观svg GUI小部件,性能非常差
- C- wrapper DLL在自定义语言中的性能
- IEEE 浮点与自定义浮点性能
- 通过引用传递自定义类型-任何性能优势