将变量从double更改为float会有多少性能提升?

时间:2014-07-29 01:35:06

标签: c++ performance floating-point double

我有一个花费太多时间的程序,所以我想稍微优化我的代码。

到目前为止,我已为每个变量使用double类型。如果我更改为float类型,是否会产生任何性能优势?

4 个答案:

答案 0 :(得分:7)

不可能毫无疑问地回答这个问题:它将取决于您的代码和硬件。这种变化会产生许多可能的影响:

  • 内存使用量将减少。
  • 缓存未命中次数会减少。
  • CPU指令将花费更少的周期。
  • 编译器可以自动向量化,或以不同方式自动向量化。
  • 您的应用程序中的数值算法可能无法再正确收敛。

告诉实际性能差异的唯一方法是自己测试。听起来像一个简单的搜索&替换工作。

答案 1 :(得分:3)

最有可能的是,如果您的代码在非常大的内存块上运行,您将只会看到明显的改进。如果您对数百万个值的数组进行double操作,则可以通过切换到float将内存带宽减半。 (我假设您使用的标准架构float为32位且double为64位。)

在减少CPU负载方面,我不希望看到重大变化。对于某些操作来说可能有一点点差异,但最多可能只有几个百分点。

答案 2 :(得分:2)

对于双精度操作数,现代处理器在大约相同的时间内执行大多数FP操作,与单精度相同。降低单精度的唯一显着速度差异是:

  • 较小的尺寸,可能会导致更高的缓存一致性。对于大多数算法而言,这不是一个重要问题。
  • SIMD中的更多插槽(没有AVX的SSE为4对2)。如果您正在SIMD化您的代码,显然只是一个问题。
  • 更快的分裂,平方根和超越。这种差异在一些极端的内部循环中可能很重要,但一般来说,您的FP操作不会占总运行时间的很大一部分。

总的来说,除了利基案例之外,它不太可能是重大胜利。如果你不熟悉浮点不精确的性质以及如何减少它,那么最好坚持双精度和它为你提供的增加的摆动空间。

答案 3 :(得分:0)

如果你想要更好的表现,你不应该这样做,如果你需要precision,你应该这样做。

Related Reference