首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x87 FP堆栈仍然相关吗?

x87 FP堆栈仍然相关吗?
EN

Stack Overflow用户
提问于 2014-10-09 13:51:31
回答 1查看 1.6K关注 0票数 10

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-09 14:00:37

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

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

许多C编译器将80位格式作为long double类型提供.我经常用它。在大多数中间计算中使用它是很好的:使用它有助于提高最终结果的准确性,即使最终结果注定要以binary64 double的形式返回。一个例子是这个问题中的函数,如果中间计算是用long double完成的,而中间计算是用输入和输出相同的double类型进行的,那么它的数学直觉属性就是最终结果。

同样,在为扩展的80位格式选择参数时必须平衡的许多约束中,有一个考虑因素是,通过组合80位计算logl()来实现binary64函数pow()是完美的。为了获得良好的最终结果精度,需要额外的精度。

但是,我应该指出,当“中间”计算是一个单一的基本运算时,最好不要进行扩展精度。换句话说,当xydouble类型时,(double)(x * (long double)y)的精度比x * y的精度稍差。这两个表达式几乎总是产生相同的结果,在很少的情况下,不同的情况下,x * y是非常准确的。这种现象叫做双舍入

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26280229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档