我试图找出不同硬件上的长时间计算结果不一致的根源。一些计算机产生结果 A,另一些计算机产生结果 B。
假设所有其他环境细节(其他硬件、Linux 内核版本、glibc 版本、编译器设置等)都相同,具有相同架构(在我的例子中为 x86_64)的不同 CPU 的计算机是否可能会产生不同的结果相同的确定性计算?
如果我们假设所有其他环境细节都是相同的(实际上从来没有这种情况,我强烈建议寻找那里的差异),那么发生这种情况的唯一原因是由于硬件或软件错误。
硬件错误的一个例子是 Pentium FDIV bug (Wikipedia)。
软件错误的一个例子是有缺陷的 SIMD 感知代码,只有在检测到支持 SIMD 的 CPU 时才会执行该代码,而如果未检测到支持 SIMD 的 CPU,则会执行一些速度较慢、传统但正常工作的代码。