0

我正在查看FFT库的基准,并想知道为什么双精度数学会比单精度数学更快(即使在 32 位硬件上)。

4

1 回答 1

1

假设 Intel CPU - 这完全取决于编译器。为 32 位应用程序编译,您可以使用普通的 i87 浮点,其中单精度和双精度具有相同的速度。或者您可以为 SP 选择 SSE,为 DP 选择 SSE2,其中 SSE(寄存器中 4 个字)的速度是 SSE2(每个寄存器 2 个字)的两倍。编译为 64 位,i87 指令不可用。然后浮点总是被编译为使用 SSE/SSE2。由于编译器或特定程序,这些可以编译为 SIMD(单指令多数据 - 一次 4/2 个字)或 SISD(每个寄存器使用一个字的单数据)。然后,我想,SP 和 DP 的速度将相似,并且代码可能比 32 位编译慢。

使用 RAM 中的数据以及可能的缓存,性能可能会受到总线速度的限制,其中 SP 将比 DP 快。如果代码像我的 FFT 基准测试,它取决于跳过的顺序读写。然后速度会受到以至少 64 字节突发读取的数据的影响,其中 SP 可能会快一点。

比如三角函数经常在DP中计算。然后由于 DP 到 SP 的转换,SP 有点慢。

于 2013-11-22T21:44:36.707 回答