C ++程序是否有可能在不同的x86硬件上提供不同的结果?

时间:2012-05-02 10:48:42

标签: c++

我想知道是否有人对使用x86系统构建的C ++程序有经验,并且在为x86系统发布之后(但对于其他处理器硬件,例如AMD,Intel),一些结果会有所不同。 所以唯一改变的是硬件。

我想到的两件事是:

  1. 浮点标准IEEE(我不知道处理器制造商对此有多严格) (特别是对于迭代求解器,如FEM求解器,其中一个结果基于先前结果的结果。因此,小的差异可能导致不同的结果,即10000次迭代。)

  2. 多线程

  3. 我现在听过好几次了。 如果有一些与该主题相关的证据,我只会感兴趣。

3 个答案:

答案 0 :(得分:2)

初学者总是Pentium FDIV bug,但有些编制者可以考虑这一点。

有些编译器可以生成代码以利用SIMD指令,因此在doinf浮点时可以在SIMD和非SIMD版本之间给出不同的结果。

还有一些指令在不同的CPU上表现不同,例如pushf / popf。

所以,是的,程序可以在不同的硬件上表现不同(事实上,识别CPU的程序如何工作)。

答案 1 :(得分:0)

不会先讨论你(1)的情况,但很确定存在很多以不同方式表现的命令(通常是内部/未记录的)。

但是关于多线程(2) - 我可以说同一个处理器在同一个进程中的行为会产生不同的结果。通常,多线程(特别是在超线程和多核处理器上)是随机的。这取决于很多因素 - 不仅是制造商,还取决于过程的加载,DMA控制器的种类......甚至还有特殊的线程技术(随机线程提升) - 调用随机生成器来改善多线程引擎的响应。

答案 2 :(得分:0)

这被称为竞争条件。 (http://en.wikipedia.org/wiki/Race_condition