在使用现代C++编译器(包括MSVC,GCC,ICC)时,如何判断它是否已经:
- 并行化代码
- 向量化循环(或使用其他特定的处理器指令)
- 展开循环
- 检测到尾递归
- 执行RVO(返回值优化)
- 或以其他方式进行了优化
而不必深入到编译器生成的汇编代码中?
在使用现代C++编译器(包括MSVC,GCC,ICC)时,如何判断它是否已经:
而不必深入到编译器生成的汇编代码中?
你能够真正地判断的唯一方法是检查汇编输出(但你好像已经忽略了这个步骤)。除此之外,你可以阅读文档,了解编译器每个优化级别提供的优化类型。
但说实话,如果你不相信编译器的优化级别能够胜任工作,那么你可能也不会相信文档 :-)
我会亲自查看汇编代码,这是唯一可以让你真正确定的方法。
英特尔编译器具有不错的报告功能。在参考文档或手册中查找-vec-report和-par-report。
g++也有向量报告,可以在手册中查找“vector”,但我认为g++没有并行自动代码生成。
至于最后三件事,我认为编译器不会报告,所以您可能需要查看汇编代码以获取该信息。
我非常确信,如果您在编译器中使用最深度的优化,那么代码将被并行化,循环将被向量化,并且许多其他向量化技术也将起作用。
为了使用如此多的深度,请在运行代码时使用-O3命令。