浮点运算性能C++

Float Operations Performance C++

本文关键字:C++ 性能 浮点运算      更新时间:2023-10-16

可能重复:
浮点除法与浮点乘法

最近,我写了一个程序来计算我的电脑需要多长时间计算实数乘法、除法和加法。

为此,我使用了函数QueryPerformanceFrequency和QueryPerformanceCounter以便获得时间间隔。

我用6000000次迭代测试了我的程序:6000000次乘法、除法和求和(使用浮点变量(,得到了以下结果:

O.S = Windows Vista (TM) Home Premium, 32-bit (Service Pack 2)
Processor = Intel Core (TM)2 Quad CPU Q8200
Processor Freq = 2.33 GHz
Compiler = Visual C++ Express Edition

    nº iterations                              time in micro seconds
    6000000 x real    mult + assignment ->     15685.024214 us
    6000000 x real     div + assignment ->     51737.441490 us
    6000000 x real     sum + assignment ->     15448.471803 us
    6000000 x real           assignment ->     12987.614348 us
    nº iterations                              time in micro seconds 
    6000000 x real                mults ->      2697.409866 us
    6000000 x real                 divs ->     38749.827143 us
    6000000 x real                 sums ->      2460.857455 us
    1 Iteration                          time in nano seconds
    real                 mult ->         0.449568 ns
    real                  div ->         6.458305 ns
    real                  sum ->         0.410143 ns

除法有可能比乘法慢六倍吗加法实际上等于乘法(~0.42 ns(?

是的。如果你曾经手动做过除法,那么你就会知道它涉及到很多子运算。

至于加法和乘法的速度大致相同:它们更多地与设置操作数和存储结果有关,而不是与实际计算有关。通过使用SSE指令进行加法和乘法(在x86上(编译,您可能能够获得它们之间的更多差异。

使用现代CPU,乘法运算的速度与加法运算的速度大致相同。

在英特尔的SandyBridge上,使用SSE进行乘法运算的时间是加法运算的三分之四。但考虑到ILP,即可以同时处理多个指令,它们实际上需要相同的时间。在相同的CPU上,使用ILP,单精度除法所需的时间是原来的7-14倍!

资料来源:Agner Fog的说明书。他的网站上有很多非常好的读物。