O2优化级别中断了程序工作

时间:2018-08-04 12:32:30

标签: c++ linux compiler-optimization

我有一个最初在Visual Studio for Windows中编写的C ++项目。它包含对Intel MKL的调用和一些OMP代码。向量和矩阵运算不同。我已经在Windows的Microsoft和Intel编译器中的VS中进行了发布和调试测试,没有任何问题。

我已经使用Eclipse和Intel C ++编译器将其移植到Linux上。在调试配置中,通过了测试,但是当我将优化级别从“已禁用”(-O0)更改为“ MaximizeSpeed(-O2)”时。测试开始失败,某处计算会产生不同的结果(约10%)。在启用了优化的情况下,Linux上相同的英特尔编译器产生不同结果的原因可能是什么?有什么想法要检查吗?

1 个答案:

答案 0 :(得分:2)

可能的原因:

正如Jesper在评论中指出的那样,很可能您的程序具有未定义的行为,从而导致不同的结果。

其他不太可能是编译器错误-检查您是否使用最新的编译器版本和/或尝试其他编译器。

我建议按降序排列:

  • 为编译器启用所有警告(如果需要,请检查并修复问题) 适用)
  • 检查您是否使用最新的编译器
  • 运行一些静态代码分析器(例如cppcheck)
  • 尝试使用其他编译器