标签: icx

下一代英特尔编译器破坏了快速浮点模型

描述

我正在尝试从使用英特尔 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我可以恢复行为,但不能恢复性能。

有谁知道使用下一代编译器保持快速浮点模型之前的行为和性能的潜在解决方案?

c++ floating-point compiler-flags icc icx

8
推荐指数
1
解决办法
775
查看次数

标签 统计

c++ ×1

compiler-flags ×1

floating-point ×1

icc ×1

icx ×1