浮点运算性能C++
Float Operations Performance C++
可能重复:
浮点除法与浮点乘法
最近,我写了一个程序来计算我的电脑需要多长时间计算实数乘法、除法和加法。
为此,我使用了函数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的说明书。他的网站上有很多非常好的读物。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- 不同的类或结构初始化方法之间的性能差异是什么?