不同版本的编译器(例如GCC)是否会产生不同的性能?

Do different versions of compilers (e.g GCC) generate different performance?

本文关键字:性能 是否 GCC 版本 编译器 例如      更新时间:2023-10-16

我有一个问题很久了,即新版本的 C/C++ 编译器是否生成了性能更好的代码(例如 G++ 7.3 与 G++ 4.8(?

如果他们这样做,加速的来源是什么?如果没有,是否建议更新编译器?

这里有一个关于GCC的简短答案 - 在他们的主页上有一个广泛的不同基准测试结果列表。

例如,查看Charles Leggett的OOPACK基准测试的特定运行:

OOPACK 内核由 4 个程序组成,用于测量抽象数据类型的C++编译器与 C 编译器的相对性能。内核的构造方式使其可以用 C 或 C++ 编码。C 程序由C++编译器编译。

内核包括:

  • Max 衡量编译器内联简单条件的能力。
  • 矩阵衡量编译器传播常量和提升简单不变量的能力。
  • 迭代器衡量编译器内联生存期较短的小对象的能力。
  • 复杂度量编译器消除临时性的程度。

其中一条结论是:

gcc 优化的 C 在 2.91.66 和 3.x 之间有所改进

正如预期的那样,快速浏览其他一些基准似乎也支持"越新越好"的说法。

从海湾合作委员会发展使命声明中列出的"设计和开发目标"中选取类别,改进的原因分为以下三个之一:

  • 新的优化
  • 改进的运行时库
  • 各种其他基础设施改进

需要注意的是,其他目标涉及"新语言"和"新目标"——因此新版本的相关性将取决于您的用例。

此外,阅读有关发布标准的信息 - 我警告不要通过谈论"更好的性能"来误导自己,因为编译器设计需要权衡许多:

与大多数正确性问题相反,在

大多数正确性问题中,除了正确之外,任何正确都是可以接受的,因此在代码质量和编译时间之间进行行为权衡是合理的。例如,在使用优化进行编译时,如果编译器速度较慢,但生成高级代码,则可能是可以接受的。如果编译器在其他测试用例上生成了实质上优越的代码,则编译器在某些测试用例上生成劣质代码也是可以接受的。

因此,特别是对于利基和性能关键型应用程序,您可能希望比较特定的编译器版本


作为旁注,您可能会发现阅读有关其开发计划的更多信息很有趣,其中包括版本编号等说明。

是的,较新版本的 GCC 生成更好的代码并具有更好的性能。

加速来自写入 GCC 的更好的代码生成算法。

如果没有兼容性问题,我建议升级 GCC。较新的 GCC 版本具有更少的错误并生成更好的代码。

如果您升级 GCC,您可能也必须升级 Binutils。


只是需要澄清的说明,这可能不适用于任何Microsoft产品(请参阅评论(。由于我对他们没有任何经验,我不知道。然而,总的来说,GCC在每个版本中都有更少的错误和更好的代码,这就是我写我所做的的原因。

相关文章: