我的C ++编译器是否优化了我的代码?

时间:2009-11-29 08:23:32

标签: c++ optimization compiler-construction compiler-optimization

在使用现代C ++编译器(包括MSVC,GCC,ICC)时,我怎么说它是否有:

  1. 并行化代码
  2. 对循环进行矢量化(或使用其他特定处理器指令)
  3. 展开循环
  4. 检测到尾递归
  5. 执行了RVO(返回值优化)
  6. 或以其他方式优化
  7. 没有深入编译器产生的汇编代码?

4 个答案:

答案 0 :(得分:18)

真正告诉的唯一方法是检查汇编程序输出(您似乎已打折)。除此之外,您可以阅读doco以了解编译器的每个级别提供的优化类型。

但是,老实说,如果你不相信编译器的优化级别正在完成工作,你可能不会相信doco: - )

我自己会看看汇编程序,这是你真正确定的唯一方法。

答案 1 :(得分:3)

英特尔编译器具有良好的报告功能。在参考文档或手册页中查找-vec-report和-par-report。

g ++也有矢量报告,在man页面查看“vector”,我不认为g ++有并行自动代码生成。

至于最后三件事,我不认为编译器报告这一点,所以你可能不得不去汇编来获取这些信息

答案 2 :(得分:0)

对于RVO或其他复制内容,只需在您的班级的copy-ctor和dtor中添加一些日志记录(printf)。如果优化有效,您应该会看到更少的对象被复制。

答案 3 :(得分:0)

我很确定如果你在编译器中使用最深度优化,代码将被并行化,循环将被矢量化,许多其他矢量化技术也将起作用。

为了使用这么多深度,请在运行代码时使用-O3命令。