【发布时间】:2016-05-02 14:36:01
【问题描述】:
x86/x64 是使用 SIMD 寄存器进行高精度浮点运算还是使用专用的 FP 寄存器?
我指的是高精度版本,而不是常规的double 精度。
【问题讨论】:
-
“高精度”全部由软件完成。除了 x87 FPU 中的双精度和扩展精度之外,处理器一无所知。
-
@Mysticial - 我所知道的每个处理器都有分辨率超过 64 位的 FP 寄存器,用于内部操作以最大限度地减少近似误差。
-
软件无法访问那些“内部”寄存器。它们仅略大于 53/64 位,因此最终结果精确到 53/64 位。在舍入之前,乘法可能高达 106/128 位。但您无法访问它们。
-
您可以访问指令集公开的寄存器。其中包括 x87 FPU/SSE/AVX。但是没有软件可以使用的更高精度版本。是的,在内部,处理器可能有更高精度的寄存器,但它们仅用于内部操作,这些操作在放回 ISA 可访问寄存器时将全部舍入为 53/64 位。
-
@Mysticial 正确舍入的乘法是用结果宽度的三个附加位实现的,最后一个是特殊连接的(“粘性位”)。在en.wikipedia.org/wiki/Floating_point上向下滚动到“置顶”
标签: floating-point x86 64-bit simd cpu-registers