)?在所有类型的X86_64cpus上,二进制是否总是为每个指令(addps,fmadd ...或其他SSE/AVX浮动说明)产生确定结果? 如果没有,任何指令/拱形示例? 它取决于您的二进制可执行文件。 软件开发人员和/或编译器可以选择根据实际CPU和/或OS(运行时CPU调度)的指令集支持使用不同的代码路径。 X86-64仅授权SSE和SSE2支持。现代CPU可能会支持AVX2/FMA和AVX-512等指导集。这些指令集可能有助于提高浮点操作的性能和/或准确性。但是,例如,通过单独的
vfmadd132ss
add
指令(
mul
和
vmulss
)的结果,使用单个指令计算A*B+C的结果不一定是相同的。 。
请注意,库呼叫也可能情况(意外)运行时CPU调度。
在AMD和Intel处理器中,诸如近似平方根的更多说明不相同。基本的浮点指令,例如
vaddss
,vrsqrtss
,add
,sub
,
mul
和div
是确定性的。对于相同的代码路径,结果应相同。