gpt4 book ai didi

x86 - FP操作在各种x86 CPU上是否能给出完全相同的结果?

转载 作者:行者123 更新时间:2023-12-04 03:45:07 24 4
gpt4 key购买 nike

假设要比较的CPU上可以使用相同的指令,相同的输入和相同的操作参数,不同的x86 CPU(具有内置FPU并在最近才推出的合理的最新性能,比如说在本千年中发布)会产生完全相同的结果吗?舍入模式?我对时间上的差异和Pentium FDIV bug(仅因为该事件是古老的而没有资格)不感兴趣。

我猜答案是肯定的,因为它们具有精确的定义,所以加法,减法,求反和四舍五入都是整数,而且我几乎无法想象实现之间的差异(可能是检测溢出/下溢,但这在某些应用程序中将是一场灾难,因此我想这早已被发现并解决了)。

乘法似乎更可能具有不同的实现方式:确定两个DPFPN乘积的(例如)最接近的可表示 double 浮点数(64位,包括尾数52 + 1)有时需要将其尾数的乘积计算为(大约)104位精度,对于少数LSBit来说,这无疑是浪费精力。我不知道是否可以尝试并正确完成此操作。也许是IEEE-754或某些事实上的标准规定了某些内容?

划分似乎更加微妙。

而且,由于缺乏通用的设计,我怀疑在可以使用多种数学方法的情况下,更复杂的事物(触发函数,日志..)的所有实现是否可能完全同步。

我要的是纯粹的吵闹感。改善that answer of mine的意愿;并希望有一种方法(有时)允许在VM中运行的程序检测到假装要运行的CPU与实际运行的CPU之间的不匹配。

最佳答案

在汇编级别,基本的浮点指令(加,减,乘,除,平方根,FMA,舍入)总是产生相同的结果,如IEEE754标准所述。有两种指令可能会在不同的体系结构上产生不同的结果:用于计算先验运算的复杂FPU指令(FSIN,FCOS,F2XM1等),以及近似SSE指令(用于计算近似倒数的RCPSS/RCPPS,以及RSQRTSS,RSQRTPS用于计算近似倒数平方根)。超越性的x87 FPU操作以微码实现,并且AFAIK(除AMD K5外)所有Intel和AMD CPU都使用相同的微码,因此您不能将其用于检测。它可能仅对VIA,Cyrix,Transmeta和其他旧CPU的检测有用,但是很少考虑。大约SSE指令在Intel和AMD上的实现方式有所不同,而AFAIK在旧(K8之前)和较新的AMD CPU上的实现存在一些差异。您可以使用这种差异来检测冒充Intel的AMD CPU,反之亦然,但这是一个有限的用例。

关于x86 - FP操作在各种x86 CPU上是否能给出完全相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102167/

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