【问题标题】:why are floating point operations considered expensive?为什么浮点运算被认为是昂贵的?
【发布时间】:2012-09-28 10:50:28
【问题描述】:

我读到 gprof(函数分析)和其他分析方法可以返回在程序执行过程中发生的浮点操作的数量,因此想知道为什么 Flop 比常规操作要昂贵得多?

【问题讨论】:

    标签: profiling flops


    【解决方案1】:

    我假设您说的是 x86,但以下很多内容同样适用于其他架构

    浮点运算成本很高,因为浮点数运算比整数运算成本高得多。就是这么简单。整数的格式使得加法和减法在硬件中实现起来非常简单。浮点数(几乎总是)在IEEE 754 中实现,它将数字存储为符号、指数和尾数,这允许表示非常大和非常小的数字,但它以运算速度为代价。如果数字只有 3 位小数,则可以使用整数,最后除以 3;广泛的精度使事情变得复杂。

    话虽如此,现代处理器在浮点数方面比以前更好。浮点数学最初是在一个可选的协处理器上实现的——特别是Intel 80387——它只能通过特殊指令来访问。您将值压入 x87 堆栈,执行操作,然后将其弹出回硬件寄存器。很慢,因为它不得不离开处理器。更重要的是,使用这些特定操作变得“有风险”,因为您无法确定处理器是否存在 - 如果不存在,您的程序将工作,但它会使用模拟协处理器的软件例程。如果你是一名游戏开发者,并且你不能指望inverse square root 的速度很快,你可以自己完成这项工作,并且你会在所有系统上运行同样快——在某些系统上运行速度不会稍快,而在某些系统上运行速度会慢很多其他人。

    如今,处理器有special floating point operations,专为提高性能而设计,更重要的是,它保证了性能。所以它们非常快,虽然浮点运算不可避免地比整数运算慢,但它们通常不足以解决问题——尤其是以错误和复杂性为代价的。更重要的是,this answer 表明,在大多数情况下,它是一种清洗。

    无论如何,性能现在已经足够好,这句古老的格言开始生效了——程序员的时间比机器时间更重要,而且你肯定会花更多的时间来编写一些避免浮点数的花哨算法只需使用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 2010-11-26
      • 2018-09-29
      • 2017-02-14
      • 2017-10-12
      相关资源
      最近更新 更多