web-dev-qa-db-ja.com

GCC Profile Guided Optimization(PGO)はどのような情報を収集し、どの最適化がそれを使用しますか?

-fprofile-generateを有効にするとGCCが収集する情報と、収集した情報を実際に使用する最適化(-fprofile-useフラグを設定する場合)

ここで引用が必要です。しばらく検索しましたが、文書化されたものは見つかりませんでした。

リンク時最適化(LTO)に関する情報は有益です! = D

39
JohnTortugo

-fprofile-generateは、-fprofile-arcs-fprofile-values、および-fvptを有効にします。

-fprofile-use-fbranch-probabilities-fvpt-funroll-loops-fpeel-loops、および-ftracerを有効にします

ソース: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Optimize-Options.html#Optimize-Options

PS。 LTOに関する情報もそのページにあります。

38
chill

「すべてのプログラマがメモリについて知っておくべきこと」by Ulrich Drepper https://people.freebsd.org/~lstewart/articles/cpumemory.pdfhttp://www.akkadia.org /drepper/cpumemory.pdf

セクション7.4

  • --profile-generateを使用してコンパイルすると、各オブジェクトファイルに対して.gcnoファイルが生成されます。 (gcovカバレッジレポートに使用されるものと同じファイル)
  • その後、いくつかのテストを実行する必要があります。実行時にカバレッジデータが.gcdaファイルに記録されます。
  • --profile-useを使用して再コンパイルします。カバレッジデータを収集し、分岐の可能性(__builtin_expect(..、1)または可能性が低い(__builtin_expect(..、0))を推測します

結果は、プロセッサの命令キャッシュにコードをプリフェッチする方が優れているため、より高速に実行されるはずです。

14
MichaelMoser