将变量从double改为float会获得多少性能增益

How much performance gain for changing variables from double to float?

本文关键字:多少 性能 变量 double 改为 float      更新时间:2023-10-16

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

到目前为止,我对每个变量都使用了double类型。如果我将类型更改为float,是否会出现任何性能优势?

要回答这个问题是不可能的:这取决于你的代码和硬件。这个变化将有许多可能的影响:

  • 内存使用将会减少
  • 缓存丢失将更少。
  • CPU指令需要更少的周期。
  • 编译器可以自动向量化,也可以以不同的方式自动向量化。
  • 应用中的数值算法可能不再正确收敛。

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

最有可能的是,只有当您的代码在非常大的内存块上工作时,您才会看到明显的改进。如果您正在对数百万个值的数组进行double操作,则可以通过切换到float来减少一半的内存带宽。(我假设你是在一个标准的体系结构上,float是32位,double是64位。)

在降低CPU负载方面,我不希望看到显著的变化。

现代处理器对于双精度操作数和单精度操作数执行大多数FP操作所需的时间大致相同。下降到单精度的唯一显著的速度差异是:

  • 更小的大小,可能导致更多的缓存一致性。对于大多数算法来说,这不是一个重大问题。
  • SIMD中的更多插槽(没有AVX的SSE为4个插槽,SSE为2个插槽)。显然,只有当你在SIMDizing你的代码时才需要考虑。
  • 更快的除法、平方根和超越。这种差异在一些极端的内循环中可能会很明显,但一般来说,你的FP操作不会占你总运行时的很大一部分。

总的来说,它不太可能是一个重大的胜利,除了利基案例。如果您不熟悉浮点不精度的本质以及如何减少它,那么最好坚持使用双精度,并为您提供更多的回旋余地。

如果你想要更好的性能,你不应该这样做,如果你需要精度,你应该这样做。

相关参考