我正在尝试从使用英特尔 OneAPI 工具包中的经典英特尔编译器切换到下一代 DPC/C++ 编译器,但处理浮点运算的默认行为似乎已损坏或不同,因为comparison with infinity always evaluates to false in fast floating point modes. 以上既是编译器警告,也是我现在在 ICX 中遇到的行为,但不是经典编译器中遇到的行为(对于使用相同的最小编译器标志集)。
#include <iostream>
#include <cmath>
int main()
{
double a = 1.0/0.0;
if (std::isinf(a))
std::cout << "is infinite";
else
std::cout << "is not infinite;";
}
Run Code Online (Sandbox Code Playgroud)
编译器标志:
-O3 -Wall -fp-model=fast
ICC 2021.5.0 输出:(
is infinite
也在几个旧版本上进行了测试)
ICX 2022.0.0 输出:(
is not infinite
也在 2022.0.1 上测试)
编译器浏览器上的现场演示: https: //godbolt.org/z/vzeYj1Wa3
默认情况下-fp-model=fast在两个编译器上都启用。如果我手动指定,-fp-model=precise我可以恢复行为,但不能恢复性能。
有谁知道使用下一代编译器保持快速浮点模型之前的行为和性能的潜在解决方案?