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

Zhihao Cui

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

如果这样做,加速的源头是什么?如果不是,建议更新编译器吗?

消费税

这是有关GCC的简短答案-在其首页上可以找到大量的不同基准测试结果

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

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

内核包括:

  • Max衡量编译器内联简单条件的效果。
  • Matrix衡量编译器传播常量的程度,并提升简单不变量。
  • 迭代器衡量编译器内联短期生存的小型对象的性能。
  • 复杂度衡量编译器消除临时性的程度。

结论之一是:

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

不出所料,快速浏览一些其他基准似乎也支持“更新更好”的说法。

从“海湾合作委员会发展使命声明”中列出的“设计和开发目标”中,进行改进的原因可分为以下三种之一:

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

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

此外,请阅读发行标准-我警告说,一般来说“更好的性能”可能会误导自己,因为编译器设计需要权衡取舍:

与大多数正确性问题相反,大多数正确性问题都不可接受,但在行为上要权衡代码质量和编译时间是合理的。例如,当使用优化进行编译时,如果编译器速度较慢,但​​生成的代码更好,则可以接受。如果编译器在其他测试用例上生成大量高级代码,则在某些测试用例上生成劣质代码也是可以接受的。

因此,尤其是对于利基和性能至关重要的应用程序,您可能需要比较特定的编译器版本


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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在ubuntu上使用不同版本的gcc编译会产生不同的结果

不同版本的Java在线编译器

编译产生与Windows编译器不同的结果

Java编译器版本和Java版本不同

为不同的编译器版本维护多个版本

更好/更新的C或C ++编译器会产生性能更高的已编译代码吗?还是在编译时它们执行得更快/更好?

不同的Maven编译器版本用于测试和主要

为什么库API +编译器ABI足以确保具有不同版本gcc的对象之间的兼容性?

是因为不同的 C 编译器吗?

使用与 Eclipse 中的其他版本不同的编译器合规版本编译类

SFINAE与不同的编译器一起使用VoidT会导致不同的结果

为什么同一编译器的不同版本给出不同的结果?

Ada.Real_Time.Clock为不同版本的GNATPro Ada编译器返回不同的值

编译器会产生比人类更好的汇编代码吗?

为什么 Red Hat 提供使用不同 Java 编译器版本编译的构建?

编译器会优化吗

Java编译器会汇编吗?

不同C编译器产生的可执行文件的差异

musl的GCC包装器与musl的交叉编译器有何不同?

编译器资源管理器和 GCC 有不同的输出

Roslyn编译器服务器报告的哈希版本与生成任务不同

包含不同编译器上的文件

在WAF中指定不同的编译器

C ++ 11的不同编译器行为

跨不同编译器的C ++库

在Windows上将不同于GCC的其他编译器附加到Clion IDE

模板模板和CRTP:编译器错误以及GCC和clang不同意

为什么 gcc 编译器在这两种情况下表现不同?

两种不同的编译器配置之间可能会失去精度