我知道x87具有更高的内部精度,这可能是人们看到它与SSE操作之间最大的区别。但我想知道,使用x87还有其他好处吗?我有在任何项目中自动输入-mfpmath=sse的习惯,我想知道我是否遗漏了x87 FPU提供的其他东西。
发布于 2009-12-04 14:19:19
对于手写的asm,x87有一些在SSE指令集中不存在的指令。
在我的头上,它是所有三角的东西,像fsin,fcos,fatan,fatan2和一些指数/对数的东西。
使用gcc -O3 -ffast-math -mfpmath=387,GCC9实际上仍然会将sin(x)作为fsin指令内联,而不管libm中的实现将使用什么。(https://godbolt.org/z/Euc5gp)。
编译32位x86时,MSVC调用__libm_sse2_sin_precise。
如果您的代码大部分时间都在做三角运算,那么如果使用x87,您可能会看到性能略有提高或降低,这取决于在您使用的任何CPU上,使用SSE1/SSE2的标准数学库实现比fsin的慢微码快还是慢。
在最新一代的CPU中,CPU供应商没有花太多的精力来优化x87指令的微代码,因为它通常被认为是过时的,很少使用。(看看最近几代CPU中Agner Fog's instruction tables中复杂x87指令的uop计数和吞吐量:比旧CPU中的周期更多)。CPU越新,x87在计算log、exp、pow或trig函数时就越有可能比许多SSE或AVX指令慢。
即使当x87可用时,并不是所有的数学库都选择使用像fsin这样的复杂指令来实现像sin()这样的函数,或者特别是在exp/log中,用于操作基于日志的FP位模式的整数技巧非常有用。
一些DSP算法使用了大量的触发器,但通常会从SIMD数学库的自动矢量化中获益良多。
然而,对于你花大部分时间做加法、乘法等的数学代码来说,SSE通常更快。
还相关:Intel Underestimates Error Bounds by 1.3 quintillion - fsin的最坏情况(非常接近π的fsin输入的灾难性消除)非常糟糕。软件可以做得更好,但只能使用缓慢的扩展精度技术。
发布于 2009-12-04 11:44:54
EOF
发布于 2010-10-13 03:35:34
FPU指令比SSE指令小,所以它们非常适合于演示
https://stackoverflow.com/questions/1844669
复制相似问题