C编译器优化的基准

Tal*_*ath 3 c benchmarking compiler-optimization

比较各种C编译器的C优化器的标准基准是什么?

我对ARM基准测试(或可以移植到ARM的基准测试)特别感兴趣。

Pet*_*des 5

https://zh.wikipedia.org/wiki/SPECint主要用C编写,并且是用于实际硬件,计算机体系结构理论研究(例如,更大的ROB或模拟CPU中的某些缓存差异)的行业标准基准,并且供编译器开发人员测试建议的可更改代码源的补丁。

SPECfp的C部分(https://en.wikipedia.org/wiki/SPECfp)也是不错的选择。或者对于编译器后端优化器,前端语言的选择不是很重要。Fortran程序也很好。


相关: Spec大师的技巧是一篇涵盖了不同基准的论文。也许最初是从会议开始的。

在这次闪电般的讨论中,我将以GCC所做的优化来概括介绍这些基准测试的性能特征。例如,某些基准是经典的浮点应用程序,可从SIMD(单指令多数据)指令中受益,而其他基准则没有。


维基百科已过时。SPECint / fp 2017很长时间了,但是它于2017年发布,比2006年有了重大改进。例如,一些基准被诸如循环反转之类的聪明的编译器优化所轻视。(这些年来,一些编译器已经添加了基本的模式识别功能来优化libquantum中的循环,但即使在安全的情况下,他们也无法总是通常对其他循环执行此操作。显然,它也可以轻松地自动并行化。)

对于测试编译器,您实际上可能希望积极优化的代码可以在其中找到主要的简化,因此SPECcpu 2006是一个不错的选择。请注意libquantum的问题。

https://www.anandtech.com/show/10353/investigating-cavium-thunderx-48-arm-cores/12将gcc描述为“不试图“破坏”基准测试(libquantum ...)”的编译器。但是,CPU供应商使用/用于自己的硬件(Intel x86和Sun UltraSPARC及更高版本的x86)的SPEC提交使用的ICC和SunCC之类的编译器在SPEC基准测试中要尽可能地具有攻击性。

SPEC结果提交必须包含所使用的编译器版本和选项(以及OS调整选项),因此您可以希望将其复制。