浮点运算性能C++

4

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

最近,我编写了一个计算计算机实际乘法、除法和加法所需时间的程序。

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

我已经使用600万次迭代对我的程序进行了测试: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纳秒)?


问: 除法比乘法慢六倍,加法和乘法基本相等,这种情况可能吗? 答: 可以的。 - David Heffernan
2个回答

0

是的,没错。如果你曾经手动进行过除法运算,那么你就知道它涉及到很多子操作。

至于加法和乘法速度相同的问题:这更多与设置操作数和存储结果有关,而不是实际计算。通过在x86上使用SSE指令编译加法和乘法,你可能能够获得更大的差异。


0

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

在英特尔的Sandy Bridge上,使用SSE进行乘法所需的时间为加法的4/3。但是考虑到指令级并行性(ILP),多个指令可以同时处理,它们实际上需要相同的时间。在相同的CPU上,使用ILP,单精度除法需要7-14倍的时间!

来源:Agner Fog的指令表。他的网站有很多非常好的阅读材料。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接