[论文解读] Automatically Tuning the GCC Compiler to Optimize the Performance of Applications Running on Embedded Systems
本文提出一种自动化方法,用于为嵌入式系统调优GCC编译器标志,生成针对特定平台的优化级别(-Ocm3、-Oca8、-Oavr),在各类基准测试中表现优于-O3。通过使用迭代编译来优化一组嵌入式程序而非单个程序,该方法在极低开销下实现了接近最优的性能提升,在ARM Cortex-M3、Cortex-A8和AVR处理器上显著提升了运行速度。
This paper introduces a novel method for automatically tuning the selection of compiler flags to optimize the performance of software intended to run on embedded hardware platforms. We begin by developing our approach on code compiled by the GNU C Compiler (GCC) for the ARM Cortex-M3 (CM3) processor; and we show how our method outperforms the industry standard -O3 optimization level across a diverse embedded benchmark suite. First we quantify the potential gains by using existing iterative compilation approaches that time-intensively search for optimal configurations for each benchmark. Then we adapt iterative compilation to output a single configuration that optimizes performance across the entire benchmark suite. Although this is a time-consuming process, our approach constructs an optimized variation of -O3, which we call -Ocm3, that realizes nearly two thirds of known available gains on the CM3 and significantly outperforms a more complex state-of-the-art predictive method in cross-validation experiments. Finally, we demonstrate our method on additional platforms by constructing two more optimization levels that find even more significant speed-ups on the ARM Cortex-A8 and 8-bit AVR processors.
研究动机与目标
- 开发一种自动化方法,用于调优GCC编译器标志,以在不修改源代码或编译器的前提下,最大化嵌入式系统上的性能。
- 识别一种单一的、平台通用的优化配置,使其在多样化的基准测试套件中表现优于标准的-O3级别。
- 通过将针对每个程序的迭代编译替换为单一可复用的优化级别,减少手动调优的时间和复杂度。
- 将该方法推广至多个嵌入式平台,包括ARM Cortex-M3、Cortex-A8和8位AVR处理器。
- 提供实用且可部署的编译器配置,使应用开发者无需运行耗时的搜索即可使用。
提出的方法
- 使用迭代编译在每个目标平台的代表性基准测试套件(BEEBS)上探索大量GCC标志组合的空间。
- 应用以性能为导向的搜索策略,识别出能在所有基准测试中最大化加速比的单一配置,而非针对单个程序进行优化。
- 基于搜索过程中找到的最佳标志组合,构建新的优化级别(-Ocm3、-Oca8、-Oavr)。
- 分析特定标志(如-fno-exceptions、-fno-rtti)从-O3中移除的影响,以解释性能提升的原因。
- 使用10折交叉验证,将新配置与最先进的机器学习方法(1NN)进行验证。
- 发布最终配置,以支持可复现性,并促进开发者实际采用。
实验结果
研究问题
- RQ1能否自动生成一种单一的、平台特定的编译器配置,使其在多样化的嵌入式基准测试中表现优于-O3?
- RQ2迭代编译在多大程度上可以被调整,以优化基准测试套件而非单个程序?
- RQ3-O3中的哪些特定编译器标志会对某些嵌入式架构的性能产生负面影响,且能否安全地禁用?
- RQ4自动生成的优化级别在未见程序上是否具有良好泛化能力?与基于机器学习的预测方法相比表现如何?
- RQ5该方法能否扩展至其他具有不同指令集和性能特征的嵌入式平台?
主要发现
- 所提出的-Ocm3优化级别在ARM Cortex-M3上实现了近乎最大可能性能提升的三分之二,该提升是通过全面的迭代编译识别出的。
- -Ocm3在CM3平台的交叉验证实验中,显著优于-O3和最先进的1NN机器学习方法。
- 该方法成功为ARM Cortex-A8和8位AVR分别生成了-Oca8和-Oavr,两者在各自平台上均优于-O3。
- 在CM3上禁用-O3中的特定标志(如-fno-exceptions和-fno-rtti)可提升性能,作者详细解释了这些标志在此上下文中的负面影响。
- 新优化级别在未见程序上表现出良好的泛化能力,10折交叉验证中一致实现了性能提升。
- 该方法提供了一种实用且低开销的替代方案,避免了耗时的逐程序迭代编译,无需机器学习或自定义训练数据。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。