我发现在发布版和调试版的程序结果中存在一些差异。经过一些研究,我意识到一些浮点数优化导致了这些差异。通过使用fenv_access指令来禁用一些关键方法的优化,我解决了这个问题。
考虑到这一点,我意识到由于其特性,使用fp:strict模型可能比使用fp:precise模型更好,但我担心它会影响性能。我试图找到有关fp:strict的性能问题或精确和严格模型之间性能差异的信息,但我找到的信息非常少。
有人知道这方面的情况吗?
提前感谢。
我发现在发布版和调试版的程序结果中存在一些差异。经过一些研究,我意识到一些浮点数优化导致了这些差异。通过使用fenv_access指令来禁用一些关键方法的优化,我解决了这个问题。
考虑到这一点,我意识到由于其特性,使用fp:strict模型可能比使用fp:precise模型更好,但我担心它会影响性能。我试图找到有关fp:strict的性能问题或精确和严格模型之间性能差异的信息,但我找到的信息非常少。
有人知道这方面的情况吗?
提前感谢。
我不确定这是否是一个解决方案,但这是我所拥有的 :) 就像我之前发过的帖子一样,我编写了一个测试程序,执行浮点运算,据说在 fp:precise 下进行优化,而在 fp:strict 下则没有进行优化,然后测量性能。我运行了它 10000 次,在平均情况下,fp:strict 比 fp:precise 慢了 2.85%。
我只是提供一些意见:
我有一个图像处理程序,可以自动矢量化,目的是将Matlab作为黄金标准进行性能和准确性比较。
使用VS2012和Intel i950。
关键区域错误和运行时间。
2.3328196e-02 465 ms with strict
7.1277611e-02 182 ms with precise
7.1277611e-02 188 ms with fast
strict没有矢量化
使用strict会使代码变慢2倍,这是不可接受的。
在Debug版本和Release版本之间看到性能差异是完全正常的。
编译器和运行时会在Debug版本中进行更多的附加检查;不要将其与其他版本进行比较,特别是在性能方面;请使用不同的编译器开关进行Release vs. Release的比较。
另一方面,如果这两个版本之间的结果不同,则必须进入程序内部检查错误(最有可能的情况)。
Max.
/arch:SSE2
,它会尽可能地用SSE2变体覆盖x87指令 :) - Necrolis