我知道x87具有更高的内部精度,这可能是人们在它与SSE操作之间看到的最大差异。但我不得不怀疑,使用x87还有其他好处吗?我习惯在任何项目中自动输入-mfpmath=sse
,我想知道我是否遗漏了x87 FPU提供的任何其他内容。
答案 0 :(得分:16)
EOF
答案 1 :(得分:16)
x87有一些SSE指令集中不存在的指令。
从头开始,它是所有三角函数,如fsin,fcos,fatan,fatan2和一些指数/对数的东西。
如果您的代码大部分时间花在三角测量上,那么使用x87时可能会略微提升性能。一些DSP算法属于这一类。
然而,对于代码数学代码,你花费大部分时间做加法,乘法等。 SSE通常更快。
答案 2 :(得分:8)
FPU指令小于SSE指令,因此它们非常适用于demoscene的东西
答案 3 :(得分:4)
x87具有相当大的传统和小系统兼容性:SSE是一种相对较新的处理器功能。如果您的代码要在嵌入式微控制器上运行,那么它很可能不支持SSE指令。
即使没有安装FPU的系统也经常提供80x87仿真器,这将使代码透明地运行(或多或少)。我不知道任何SSE模拟器 - 当然我的系统之一没有,所以最新的Adobe Photoshop元素版本拒绝运行。
80x87指令具有良好的并行操作特性,自1982年左右推出以来,已经过彻底的探索和分析。 x86的各种克隆可能会在SSE指令上停滞。
答案 4 :(得分:0)
float
和double
之间的转换,x87(通常是免费的)比使用SSE更快。使用x87,您可以在寄存器堆栈中加载和存储float
,double
或long double
,并将其转换为扩展精度或从扩展精度转换而无需额外成本。对于SSE,如果类型是混合的,则需要其他指令来进行类型转换,因为寄存器包含float
或double
值。这些转换指令相当快,但确实需要额外的时间。
真正的解决方法是避免过度混合float
和double
,当然不要使用x87。