首页 > 解决方案 > C 编译器优化的基准

问题描述

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

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

标签: cbenchmarkingcompiler-optimization

解决方案


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

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


相关: Spec master 的技巧是一篇涵盖不同基准的论文。也许最初来自一个会议。

在这个闪电般的谈话中,我将在 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 结果提交需要包括编译器版本和使用的选项(以及操作系统调整选项),因此您可以希望复制它们。


推荐阅读