Zhi*_*Cui 2 c c++ optimization g++ compiler-optimization
我有一个很长一段时间的问题,即新版本的C/C++编译器是否会生成性能更好的代码(例如G++ 7.3 vs G++ 4.8)?
如果他们这样做,加速的来源是什么?如果没有,是否建议更新编译器?
这是关于 GCC 的简短回答——在他们的主页上有大量不同的基准测试结果列表。
例如,查看Charles Leggett对 OOPACK 基准测试的特定运行:
OOPACK 内核由 4 个程序组成,用于测量抽象数据类型的 C++ 编译器与 C 编译器的相对性能。内核的构造方式使其可以用 C 或 C++ 进行编码。C 程序由 C++ 编译器编译。
内核包括:
- Max 衡量编译器内联简单条件的程度。
- 矩阵衡量编译器传播常量和提升简单不变量的程度。
- 迭代器衡量编译器内联短期小对象的程度。
- Complex 衡量编译器消除临时变量的程度。
其中一项结论如下:
gcc 优化的 C 在 2.91.66 和 3.x 之间有所改进
正如预期的那样,快速浏览其他一些基准似乎也支持“越新越好”的说法。
从GCC 发展使命声明中列出的“设计和发展目标”中的类别来看,改进的原因属于以下三个之一:
- 新的优化
- 改进的运行时库
- 各种其他基础设施改进
重要的是要注意其他目标涉及“新语言”和“新目标”——因此新版本的相关性将取决于您的用例。
此外,阅读发布标准——我警告不要通过谈论“更好的性能”来误导自己,因为编译器设计有许多权衡:
与大多数正确性问题相比,只有正确是可以接受的,为了代码质量和编译时间而权衡行为是合理的。例如,在优化编译时,如果编译器速度较慢,但生成优质代码,这可能是可以接受的。如果编译器在其他测试用例上生成了非常优秀的代码,那么它在某些测试用例上生成劣质代码也是可以接受的。
因此,特别是对于利基和性能关键的应用程序,您可能想要比较特定的编译器版本
作为旁注,您可能会发现阅读更多关于他们的开发计划的信息很有趣,其中包括对版本编号等的解释。