在使用现代 C++ 编译器(包括 MSVC、GCC、ICC)时,我怎么能说它是否具有:
- 并行化代码
- 向量化循环(或使用其他特定的处理器指令)
- 展开循环
- 检测到尾递归
- 执行 RVO(返回值优化)
- 或以其他方式优化
无需深入研究编译器生成的汇编代码?
在使用现代 C++ 编译器(包括 MSVC、GCC、ICC)时,我怎么能说它是否具有:
无需深入研究编译器生成的汇编代码?
您真正可以判断的唯一方法是检查汇编器输出(您似乎已经打折了)。除此之外,您可以阅读文档以查看编译器的每个级别提供的优化类型。
但是,老实说,如果您不相信编译器的优化级别正在完成这项工作,您可能不会相信 doco :-)
我会亲自查看汇编程序,这是您可以真正确定的唯一方法。
英特尔编译器具有不错的报告功能。在参考文档或手册页中查找 -vec-report 和 -par-report。
g++ 也有矢量报告,在手册页中查找“矢量”,我认为 g++ 没有并行自动代码生成。
至于最后三件事,我认为编译器不会报告这一点,所以你可能必须去汇编才能获得这些信息
对于 RVO 或其他复制省略的东西,只需将一些日志记录 (printf) 放入您班级的 copy-ctor 和 dtor 中。如果优化有效,您应该会看到更少的对象被复制。
我很确定,如果您在编译器中使用最深度的优化,代码将被并行化,循环将被矢量化,许多其他矢量化技术也将起作用。
为了使用这么多的深度,请在运行代码时使用 -O3 命令。