4

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

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

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

我已经使用 6,000,000 次迭代测试了我的程序: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)?

4

2 回答 2

0

是的。如果您曾经手动进行过除法,那么您就会知道它涉及很多子操作。

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

于 2012-12-30T19:55:08.857 回答
0

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

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

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

于 2012-12-30T20:10:29.823 回答