gpt4 book ai didi

assembly - x87 FP 堆栈仍然相关吗?

转载 作者:行者123 更新时间:2023-12-02 20:15:28 26 4
gpt4 key购买 nike

我注意到每次使用double算术时,编译器都会生成针对SIMD寄存器的代码。这适用于未优化和优化的代码。这是否意味着 x87 FP 单元可以被视为已过时且仅用于向后兼容?

我还注意到其他“流行”平台也依赖于各自的 SIMD 实现,而不是设计为堆栈的 FP。

此外,SIMD 实现往往至少为 128 位宽,所以我想知道这是否意味着操作的(内部)精度高于 x87 FP 单元?

我还想知道性能、吞吐量和延迟,因为 SIMD 是在考虑向量执行的情况下构思的,所以我想知道它们如何处理标量。

最佳答案

Also SIMD implementations tend to be at least 128bit wide, so I wonder does that mean the (internal) precision of operations is higher than for the x87 FP unit?

SIMD 寄存器的宽度不是它所表示的向量的单个组件的宽度。广泛使用的 SIMD 指令集最多提供 IEEE 754 二进制 64 格式(64 位宽)。这在精度或范围方面远不如历史上的 80 位扩展格式。

许多 C 编译器将 80 位格式提供为 long double 类型。我经常使用它。它适用于大多数中间计算:使用它有助于使最终结果更加准确,即使最终结果注定要作为二进制 64 double 值返回。一个例子是 this question 中的函数,如果使用 long double 完成中间计算,则数学上直观的属性保留最终结果,但如果使用与输入相同的 double 类型完成中间计算,则不保留最终结果和输出。

同样,在选择扩展 80 位格式的参数时必须平衡的许多限制中,一个考虑因素是它非常适合 compute由 80 位 expl()logl() 组合而成的二进制 64 函数 pow()。为了获得最终结果的良好准确性,额外的精度是必要的。

但是,我应该注意,当“中间”计算是单个基本操作时,最好不要使用扩展精度。换句话说,当xy的类型为double时,(double)(x * (long double)的精度y)x * y 的准确性稍差。这两个表达式几乎总是产生相同的结果,并且在极少数情况下它们不同,x * y 稍微更准确。这种现象称为double-rounding .

关于assembly - x87 FP 堆栈仍然相关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com