我有一个很长时间的问题,即新版本的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] 删除。
我来说两句