6

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

  1. 并行化代码
  2. 向量化循环(或使用其他特定的处理器指令)
  3. 展开循环
  4. 检测到尾递归
  5. 执行 RVO(返回值优化)
  6. 或以其他方式优化

无需深入研究编译器生成的汇编代码?

4

4 回答 4

18

真正可以判断的唯一方法是检查汇编器输出(您似乎已经打折了)。除此之外,您可以阅读文档以查看编译器的每个级别提供的优化类型。

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

我会亲自查看汇编程序,这是您可以真正确定的唯一方法。

于 2009-11-29T08:27:10.563 回答
3

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

g++ 也有矢量报告,在手册页中查找“矢量”,我认为 g++ 没有并行自动代码生成。

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

于 2009-11-29T08:58:47.250 回答
0

对于 RVO 或其他复制省略的东西,只需将一些日志记录 (printf) 放入您班级的 copy-ctor 和 dtor 中。如果优化有效,您应该会看到更少的对象被复制。

于 2009-11-29T10:04:25.383 回答
0

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

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

于 2014-03-09T07:53:39.693 回答