我的 C++ 编译器会优化我的代码吗?

问题描述 投票:0回答:4

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

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

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

c++ optimization compiler-construction
4个回答
18
投票

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

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

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


3
投票

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

g++ 也有向量报告,请在手册页中查找“向量”,我不认为 g++ 具有并行自动代码生成功能。

就最后三件事而言,我认为编译器不会报告这一点,因此您可能必须转到汇编来获取该信息


0
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.