c - C 编译器优化的基准
问题描述
比较各种 C 编译器的优化器 C 的标准基准是什么?
我对 ARM(或可以移植到 ARM)的基准特别感兴趣。
解决方案
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 结果提交需要包括编译器版本和使用的选项(以及操作系统调整选项),因此您可以希望复制它们。
推荐阅读
- python - 访问从 Microsoft Graph API 获得的特定 JSON 嵌套数据
- python - 在keras中从一开始就训练有很高的准确率是正常的吗?
- pandas - 使用日期时间组件作为级别的多索引重新索引
- php - 如何选择所有前后没有空格的“?
- objective-c - 在 Objective-C 代码中使用 Swift 的缺点?
- javascript - @Html.Partial 之后的 Ko 绑定不起作用
- python - Selenium:检查元素是否存在于循环中,如果为真,则单击,如果不存在则继续
- asp.net-identity - 使用带有 aspnet.identity 的简单注入器
- jdbc - 如何使用 Grafana 监控 JDBC 调用和统计信息
- openssl - 如何创建自己的扩展验证证书以显示绿条?