32位和64位SSE浮点运算之间的差异

时间:2015-02-26 13:08:50

标签: linux windows gcc cross-platform 32bit-64bit

我有一个代码,我想从Windows 32位移植到Linux 64位。这段代码使用双类型数字的基本浮点运算进行了大量计算,我尝试在两种环境中保持相同的结果。

在Windows上,我使用VisualC ++使用/ fp:strict选项编译代码。 我的第一步是将代码移植到Linux 32位(实际上在X86-64 Linux环境中以32位编译代码)。 这个问题已经在这里得到广泛解决(例如in this question)。建议我使用gcc和选项 -msse2 -mfpmath = sse 编译代码,结果在Windows 32位和Linux 32位之间完全相同。

我最终用64位编译代码,期望保存相同的结果......但是存在很多差异。这个问题也已经讨论过(参见herethere),但由于gcc选项已经使用了SSE浮点单元,我通常应该在Linux 32和64位之间观察到相同的结果。

所以我现在有点卡住了。我能想到的唯一剩下的解释是问题在于代码(比较两个双重用于平等的东西 - 希望没有,但不能绝对肯定)。你怎么看 ?我在某个地方错过了一点吗?我错过了另一种解释吗?

非常感谢任何建议。

注意1:我也尝试了选项 -ffloat-store ,但它没有帮助我让结果彼此接近。

0 个答案:

没有答案