Questions tagged «fast-math»

12
GCC为什么不将a * a * a * a * a * a优化为(a * a * a)*(a * a * a)?
我正在对科学应用程序进行一些数值优化。我注意到的一件事是,GCC将pow(a,2)通过将其编译为来优化该调用a*a,但是该调用pow(a,6)并未进行优化,实际上将调用该库函数pow,这大大降低了性能。(相反,可执行文件Intel C ++编译器icc将消除对的库调用pow(a,6)。) 我很好奇的是,当我替换pow(a,6)为a*a*a*a*a*a使用GCC 4.5.1和选项“ -O3 -lm -funroll-loops -msse4”时,它使用5 mulsd条指令: movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 而如果我写(a*a*a)*(a*a*a),它将产生 movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm13, %xmm13 这将乘法指令的数量减少到3. icc具有相似的行为。 为什么编译器无法识别此优化技巧?

2
gcc的快速数学实际上是做什么的?
我知道gcc的--ffast-math标志可以大大提高浮动操作的速度,并且超出了IEEE标准,但是我似乎无法找到有关启动时实际发生的情况的信息。谁能解释一些细节,或者给出一个清晰的例子,说明如果打开或关闭该标志会发生什么变化? 我确实尝试通过SO寻找类似问题,但找不到任何能解释快速数学原理的东西。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.