【问题标题】:When to use Fixed Point these days这些天什么时候使用定点
【发布时间】:2010-09-15 08:15:43
【问题描述】:

对于激烈的数字运算,我正在考虑使用定点而不是浮点。当然,定点类型的大小有多少字节,它将在什么 CPU 上运行,如果我可以使用(对于 Intel)MMX 或 SSE 或任何新事物出现......

我想知道这些天浮点运行速度比以往任何时候都快,是否值得考虑定点?有没有一般的经验法则,我们可以说它会影响超过几个百分点? 35,000 英尺的数值性能概述是什么? (顺便说一句,我假设大多数计算机都使用通用 CPU,而不是 DSP 或专门的嵌入式系统。)

【问题讨论】:

    标签: optimization floating-point performance numerical fixed-point


    【解决方案1】:

    还是值得的。浮点比过去快,但定点也是。如果您关心超出 IEEE 754 所保证的精度,那么固定仍然是唯一的方法。

    【讨论】:

    • +1,您是否有任何基准测试软件可用于针对不同架构验证这一点。我通过分析得出了相同的结论,但这是一项相当多的工作,结果仅与我测试过的特定硬件有关。有兴趣了解 ARM 以及更常见的 Intel 和 AMD 在移动设备上的差异。
    【解决方案2】:

    在处理大量数据的情况下,定点的内存效率可以提高一倍,例如一个四字节长的整数,而不是一个八字节的双精度数。大型地理空间数据集中经常使用的一种技术是将所有数据减少到一个共同的来源,以便可以处理最高有效位,并使用定点整数处理其余数据。浮点仅在点确实浮动时才重要,即您正在以非常高的精度处理非常广泛的数字。

    【讨论】:

    • 关于浮点的“浮动”部分的精彩评论 - 让我大开眼界,回想起来是如此明显。
    【解决方案3】:

    使用固定小数的另一个好理由是舍入更简单且可预测。大多数财务软件使用定点任意精度小数,半偶数舍入来表示货币。

    【讨论】:

    • 非常正确。这也适用于实施确定性的分布式实时仿真。 IEEE-754 实现的细微差异可能会导致极难发现错误,即相同的计算在不同的分布式系统上具有不同的结果,从而导致它们偏离预期的模拟状态。见this article
    【解决方案4】:

    使用定点几乎总是更快(x86、奔腾、68k 和 ARM 的经验)。但是,它也可以取决于应用程序类型。对于图形编程(定点的主要用途之一),我已经能够使用预构建的余弦表、日志表等来优化代码。而且基本的数学运算也被证明更快。

    对财务软件的评论。在较早的答案中说过,定点对于财务计算很有用。以我自己的经验(大型金库管理系统的开发和信用卡处理的丰富经验)我不会使用定点。使用浮点数或定点数都会出现舍入误差。我们总是使用整数来表示货币金额,计算可能的最低金额(欧元或美元为 1c)。这确保不会丢失部分金额。在进行复杂计算时,会将值转换为双精度数,应用特定于应用程序的舍入规则并将结果转换回整数。

    【讨论】:

    • 在我的例子中(佣金计算),我们使用 Java BigDecimal,它不完全是一个固定点,但非常接近。舍入规则确实是特定于应用程序的,但 10 次中有 9 次是半偶数。
    • 通过复杂的计算,您的意思是复利、税率等?对于帐户中的加减金额,固定不就是一种真正的方式吗?在这种情况下你会使用浮点数吗?
    • 表查找是我正在做的一个重要考虑因素,以及许多其他人可能需要的 - 这对于浮点是不切实际的。一个很好的观点。
    【解决方案5】:

    当硬件不支持浮点或硬件实现很糟糕时使用定点。

    在为它上课时也要小心。由于(非)必要的类副本,当涉及到分析时,你认为很快的东西实际上可能会变成一条狗。不过,这是另一个问题。

    【讨论】:

    • 现在知道哪些硬件不支持浮点会很有趣。看来现在连破烂的破鞋带都做浮点运算了……8P
    • (顺便说一句,我在佛罗里达穿凉鞋,所以我不喜欢鞋带技术)
    • @DarenW:Nintendo DS(我仍然认为它有点新)不支持通过硬件进行浮点运算。这是我开发的唯一手持设备,但我猜很多其他手持设备也没有 FPU。
    • 最近我遇到了一些使用Blackfin ARM处理器的业务,该处理器显然不支持硬件中的浮点运算,并且在软件中进行此类计算,这非常昂贵。
    • 许多 DSP(数字信号处理器)不支持浮点。
    【解决方案6】:

    另一个使用定点的原因ARM 设备,如手机和平板电脑,缺少 FPU(至少其中很多)。

    对于开发实时应用程序,使用定点算法优化函数是有意义的。 FFT(快速傅里叶变换)的实现对图形非常重要,它的改进基于依赖浮点运算的效率。

    【讨论】:

    • 我认为你的最后一句话是“依靠定点算术”。
    【解决方案7】:

    由于您使用的是通用 CPU,我建议不要使用定点,除非性能对您的应用程序非常重要,以至于您必须计算每个 tic。实现定点的麻烦,处理溢出等问题是不值得的,当你有一个 CPU 时,它会为你做的。

    恕我直言,仅当您使用没有硬件支持浮点运算的 DSP 时,才需要定点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多