相当直截了当,Intel编译器值得购买吗? 我主要从事系统级和桌面工作,所以我想我可能会受益。 有没有一些更有经验的人能够解释一下?
如果你正在比较ICL和MSVC++的数值行为,你必须考虑到/fp:设置的不同行为。 ICL /fp:source(比默认设置更温和)等价于MSVC /fp:fast(比默认设置更激进)。 Microsoft不执行ICL默认启用的任何优化。这些包括simd缩减(通常会提高精度,但是具有不可预测的幅度)。ICL还默认违反了关于圆括号的标准。仍然存在争议,是否通过更好的手段而不是/fp:source来解决这个问题。
如果浮点数精度对您很重要,那么请使用Visual Studio编译器而不是Intel编译器。 在使用Intel编译器时,32位和64位应用程序的计算结果可能会有所不同(已经检查过)。 而使用Visual Studio编译器,32位和64位应用程序的计算结果将会相同。
-fp-model
是 fast:1
,而大多数其他编译器则默认为 strict
(例如 gcc -fno-fast-math
)。 如果您想要从 ICC 获得严格的浮点运算语义,可以通过请求来实现(https://www.intel.com/content/www/us/en/docs/cpp-compiler/developer-guide-reference/2021-8/fp-model-fp.html)。 除非有编译器错误导致不完全遵守它,否则您应该得到 ISO C 标准求值顺序。 - Peter Cordes