Profiling 为什么浮点运算被认为是昂贵的?

Profiling 为什么浮点运算被认为是昂贵的?,profiling,flops,Profiling,Flops,我读到gprof(函数评测)和其他评测方法可以返回程序执行过程中发生的浮点操作数,因此我想知道触发器的成本为何比常规操作高出这么多?我假设您正在谈论x86,但下面的许多内容同样适用于其他体系结构 浮点运算的代价很高,因为对浮点数的运算比对整数的运算要昂贵得多。就这么简单。整数的格式使得加法和减法在硬件中实现起来非常简单。浮点数(几乎总是)在中实现,它将数字存储为符号、指数和尾数,允许表示非常大和非常小的数字,但它以运算速度为代价。如果数字只有3个小数位,你可以使用整数,最后只需除以3;广泛的精度

我读到gprof(函数评测)和其他评测方法可以返回程序执行过程中发生的浮点操作数,因此我想知道触发器的成本为何比常规操作高出这么多?

我假设您正在谈论x86,但下面的许多内容同样适用于其他体系结构

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

这就是说,现代处理器比过去更适合使用浮点数。浮点数学最初是在一个可选的协处理器上实现的,尤其是,它只能通过特殊指令访问。您可以将值推送到x87堆栈上,执行一个操作,然后将其弹出回硬件寄存器。非常慢,因为它必须离开处理器。更重要的是,使用这些特定操作变得“有风险”,因为您无法确定处理器是否存在——如果处理器不存在,您的程序将正常工作,但它将使用模拟协处理器的软件例程。如果你是一个游戏开发人员,你不能依赖于,比如说,速度,你可以自己做这项工作,你在所有系统上运行的速度都一样快——在某些系统上不会稍快,在其他系统上则会慢得多

如今,处理器的设计都是为了提高性能,更重要的是,保证了它的存在。因此,它们非常快,虽然浮点运算不可避免地比整数运算慢,但它们通常不足以解决任何问题,尤其是以错误和复杂性为代价。更重要的是,这表明,在大多数情况下,这是一个清洗

在任何情况下,性能现在已经足够好了,这句古老的格言开始生效——程序员时间比机器时间更重要,而且你肯定会花更多的时间在编程一些避免浮点数的奇特算法上,而不仅仅是使用浮点数