Skip to main content
QUICK REVIEW

[論文レビュー] Hardware Counted Profile-Guided Optimization

Baptiste Wicht, R Vitillo|arXiv (Cornell University)|Nov 24, 2014
Parallel Computing and Optimization Techniques参考文献 3被引用数 3
ひとこと要約

本論文は、GCC向けにハードウェアパフォーマンスカウンタ(特にLast Branch Record (LBR) サンプリング)とデバッグシンボルを組み合わせて、ソースレベルのプロファイルを再構築する、サンプリングベースのプロファイルガイドド最適化(PGO)手法を提案する。インストルメンテーションベースのPGOと比較して、1.06%の平均プロファイリングオーバーヘッドで、インストルメンテーションベースの16%のオーバーヘッドと比較し、93%のパフォーマンス向上を達成しており、PGOを実際の用途で実用可能にする。

ABSTRACT

Profile-Guided Optimization (PGO) is an excellent means to improve the performance of a compiled program. Indeed, the execution path data it provides helps the compiler to generate better code and better cacheline packing. At the time of this writing, compilers only support instrumentation-based PGO. This proved effective for optimizing programs. However, few projects use it, due to its complicated dual-compilation model and its high overhead. Our solution of sampling Hardware Performance Counters overcome these drawbacks. In this paper, we propose a PGO solution for GCC by sampling Last Branch Record (LBR) events and using debug symbols to recreate source locations of binary instructions. By using LBR-Sampling, the generated profiles are very accurate. This solution achieved an average of 83% of the gains obtained with instrumentation-based PGO and 93% on C++ benchmarks only. The profiling overhead is only 1.06% on average whereas instrumentation incurs a 16% overhead on average.

研究の動機と目的

  • インストルメンテーションベースのPGOにおける高いオーバーヘッドと複雑な二段階コンパイルモデルを克服すること。
  • プロファイリングオーバーヘッドを低減することで、PGOの実世界プロジェクトへの実用的導入を可能にすること。
  • ハードウェアパフォーマンスカウンタを用いてプロファイル収集を行う、GCC互換のツールチェーンの開発。
  • SPEC 2006ベンチマーク上で、サンプリングベースのPGOの正確さとパフォーマンスを評価すること。
  • 再コンパイルを必要とせず、最適化済みバイナリに対してもPGOをサポートすること。

提案手法

  • パフォーマンスモニタリングユニット(PMU)からLast Branch Record (LBR) イベントをサンプリングして実行トレースを取得する。
  • デバッグシンボルを用いて、サンプルされたプログラムカウンタ(PC)値を元にソースコードの場所にマッピングする。
  • 最小制御フローアルゴリズムを用いて、LBRサンプルから基本ブロックおよびエッジの頻度を再構築する。
  • 基本ブロックのサイズに応じた正規化を実施し、より大きなブロックにバイアスがかかるのを防ぐ。
  • AutoFDO(AFDO)パッチを介して、GCCにサンプルプロファイルを統合し、プロファイル駆動最適化をサポートする。
  • perfツールを用いてサンプルを収集し、gooda-to-afdo-converterツールを用いて、生のサンプルをGCOV互換のプロファイルファイルに変換する。

実験結果

リサーチクエスチョン

  • RQ1ハードウェアパフォーマンスカウンタのサンプリングは、インストルメンテーションベースのPGOと同等の正確さのPGOを達成できるか?
  • RQ2サンプリングベースのPGOは、生産環境での使用に適したレベルまでプロファイリングオーバーヘッドを低減できるか?
  • RQ3LBRサンプリングとデバッグシンボルの使用は、プロファイル再構築の正確さにどのような影響を与えるか?
  • RQ4提案手法は、特別なコンパイルモードを必要とせず、既存のGCCツールチェーンに統合可能か?
  • RQ5サンプリングベースのPGOは、特にC++ワークロードにおいて実世界のアプリケーションパフォーマンスにどのような影響を与えるか?

主な発見

  • 提案手法のハードウェアサンプリングPGOは、SPEC 2006ベンチマーク全体で、インストルメンテーションベースのPGOの平均83%のパフォーマンス向上を達成した。
  • C++ベンチマークに限定すると、インストルメンテーションベースのPGOの93%のパフォーマンス向上を達成した。
  • 平均して1.06%のプロファイリングオーバーヘッドに留まり、インストルメンテーションベースのPGOの16%と比較して顕著に低い。
  • 最適化済みバイナリをサポートし、インストルメンテーションベースのPGOで必要な二段階コンパイルモデルを回避できる。
  • ツールチェーンは生産環境対応であり、AutoFDOパッチを介してGCCに統合済みである。
  • 本手法は、ロード遅延や分岐予測失敗といった低レベルのハードウェアイベントを活用した、将来の最適化機会の探索を可能にする。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。