可能重复:
Floating point division vs floating point multiplication
最近,我写了一个程序来计算我的电脑需要多长时间 计算实数乘法,除法和加法。
为此,我使用了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
分割是否可能比乘法慢6倍 加法实际上等于乘法(~0.42 ns)?
答案 0 :(得分:0)
是的。如果您曾经手动完成除法,那么您就知道它涉及许多子操作。
对于加法与乘法大约相同的速度:这些与设置操作数和存储结果有关,而不是实际计算。通过使用SSE指令进行加法和乘法(在x86上),您可以在它们之间获得更多的差异。
答案 1 :(得分:0)
使用现代CPU,倍数与添加的速度大致相同。
在英特尔的Sandy Bridge上,使用SSE的乘法需要加上4/3的时间。但考虑到ILP,可以同时处理多个指令,它们实际上需要相同的时间。在同一个CPU上,使用ILP,单精度分区需要7-14倍的时间!
来源:Agner Fog's instruction tables。在他的网站上有很多非常好的读物。