[論文レビュー] Automatically Tuning the GCC Compiler to Optimize the Performance of Applications Running on Embedded Systems
本稿では、組み込みシステム向けにGCCコンパイラフラグを自動チューニングする手法を提示している。この手法により、ARM Cortex-M3、Cortex-A8、AVRプロセッサ向けに、-O3を上回る性能を発揮するプラットフォーム固有の最適化レベル(-Ocm3、-Oca8、-Oavr)を生成する。個々のプログラムではなく、複数の組み込みプログラムからなるベンチマークスイートを対象として反復的コンパイルを適用することで、最小限のオーバーヘッドでほぼ最適に近い性能向上を達成し、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 レベルを上回る、1つのプラットフォーム全体に適用可能な最適化設定を特定すること。
- 個々のプログラムごとの反復的コンパイルに代わって、1回の再利用可能な最適化レベルに置き換えることで、手動チューニングにかかる時間と複雑さを低減すること。
- ARM Cortex-M3、Cortex-A8、8ビットAVRプロセッサを含む複数の組み込みプラットフォームへこのアプローチを一般化すること。
- アプリケーション開発者が時間のかかる探索を実行せずに利用可能な、実用的でデプロイ可能なコンパイラ設定を提供すること。
提案手法
- 各ターゲットプラットフォームに対して、代表的なベンチマークスイート(BEEBS)を対象に、広大なGCCフラグの組み合わせ空間を探索する反復的コンパイルを実施する。
- 個々のプログラムの最適化ではなく、すべてのベンチマーク全体でスループットを最大化する1つの設定を特定する性能指向の探索を適用する。
- 探索中に発見された最良のフラグの組み合わせに基づき、新しい最適化レベル(-Ocm3、-Oca8、-Oavr)を構築する。
- -O3 から削除された特定のフラグ(例:-fno-exceptions、-fno-rtti)の影響を分析し、パフォーマンス向上の理由を説明する。
- 10分割交差検証を用いて、最先端の機械学習手法(1NN)と比較して、新しい設定の妥当性を検証する。
- 最終的な設定を公開することで、再現性の確保と開発者による実用的採用を促進する。
実験結果
リサーチクエスチョン
- RQ1多様な組み込みベンチマークに対して、-O3 を上回る性能を発揮する1つのプラットフォーム固有のコンパイラ設定を自動的に生成できるか?
- RQ2反復的コンパイルを、個々のプログラムではなくベンチマークスイート全体を対象に最適化するために、どの程度適応可能か?
- RQ3-O3 に含まれる特定のコンパイラフラグが、特定の組み込みアーキテクチャでパフォーマンスに悪影響を及えるのはどの程度で、それらを安全に無効化できるか?
- RQ4自動的に生成された最適化レベルは、未観測のプログラムに対しても一般化できるか? また、機械学習ベースの予測手法と比較してどうか?
- RQ5この手法は、命令セットやパフォーマンス特性が異なる他の組み込みプラットフォームへも拡張可能か?
主な発見
- 提案された -Ocm3 最適化レベルは、ARM Cortex-M3 において、網羅的な反復的コンパイルで特定された最大パフォーマンスゲインのおよそ2/3に達している。
- CM3 プラットフォームにおける10分割交差検証実験で、-O3 および最先端の1NN 機械学習手法をすべて上回る顕著な性能向上を達成している。
- 本手法により、ARM Cortex-A8 と8ビットAVR用に -Oca8 および -Oavr が成功裏に生成され、それぞれのプラットフォームで -O3 を上回る性能を発揮している。
- -O3 から -fno-exceptions や -fno-rtti などのフラグを無効化することで、CM3 でのパフォーマンスが向上し、著者がその理由をこの文脈において有害であると明確に説明している。
- 新しい最適化レベルは、10分割交差検証において一貫したパフォーマンス向上を示しており、未観測のプログラムに対しても良好な一般化性能を示している。
- 本手法は、時間のかかる個々のプログラムごとの反復的コンパイルに代わる実用的で低オーバーヘッドの代替手段を提供しており、機械学習やカスタムトレーニングデータの必要がない。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。