我想知道是否有人对使用x86系统构建的C ++程序有经验,并且在为x86系统发布之后(但对于其他处理器硬件,例如AMD,Intel),一些结果会有所不同。 所以唯一改变的是硬件。
我想到的两件事是:
浮点标准IEEE(我不知道处理器制造商对此有多严格) (特别是对于迭代求解器,如FEM求解器,其中一个结果基于先前结果的结果。因此,小的差异可能导致不同的结果,即10000次迭代。)
多线程
我现在听过好几次了。 如果有一些与该主题相关的证据,我只会感兴趣。
答案 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)