0

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

我想到的两件事是:

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

  2. 多线程

我现在已经多次听到这样的事情了。我只是对是否有与该主题相关的一些经过验证的事实感兴趣。

4

3 回答 3

2

对于初学者来说,总是存在Pentium FDIV 错误,尽管一些编译器可以考虑到这一点。

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

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

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

于 2012-05-02T11:13:39.597 回答
0

不打算先讨论(1)案例,但很确定存在许多以不同方式表现的命令(通常是内部/未记录的)。

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

于 2012-05-02T11:15:07.660 回答
0

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

于 2012-05-02T22:59:20.973 回答