このコンパイラ機能を知っている人はいますか? GCCがそれをサポートしているようです。それはどのように機能しますか?潜在的な利益は何ですか?どの場合がいいですか?内部ループ?
(この質問は特定のものであり、一般的な最適化に関するものではありません、ありがとう)
このコンパイラ機能を知っている人はいますか? GCCがそれをサポートしているようです。それはどのように機能しますか?潜在的な利益は何ですか?どの場合がいいですか?内部ループ?
(この質問は特定のものであり、一般的な最適化に関するものではありません、ありがとう)
各コードパスが取得された回数をカウントする追加のコードを配置することで機能します。2 回目にコンパイルすると、コンパイラは、以前は推測することしかできなかった、プログラムの実行について得られた知識を使用します。PGO が取り組むことができることはいくつかあります。
これらがどれだけ役立つかは、実際にテストするまでわかりません。
PGO は、私が取り組んでいるプロジェクトである x264 をコンパイルするときに、約 5% の速度向上をもたらします。場合によっては、無料で速度を向上させることができます。x264 とは異なり、手書きのアセンブリで構成されていないアプリケーションでは、おそらくさらに役立ちます。
ジェイソンのアドバイスは正しいです。あなたが得ようとしている最高のスピードアップは、O(n 2)アルゴリズムをどこかの内部ループに滑り込ませること、または高価な関数の外で特定の計算をキャッシュできることを「発見」することから得られます。
PGOがトリガーできるマイクロ最適化と比較すると、これらは大きな勝者です。そのレベルの最適化を実行すると、PGOが役立つ可能性があります。しかし、私たちはそれで多くの幸運を得ることができませんでした-計装のコストは、私たちのアプリケーションが使用できないほど遅くなる(数桁)ほどでした。
Intel VTuneをプロファイラーとして使用するのが好きなのは、動作を大きく変更するインストルメンテーションプロファイラーと比較して非侵襲的だからです。
最適化の面白いところは、最もありそうもない場所で速度の向上が見られることです。
また、速度の問題がどこにあるかを推測するのではなく、プロファイラーが必要な理由でもあります。
プロファイラーから始めて ( gperf
GCC を使用している場合)、通常の操作でアプリケーションを実行した結果を調べてみることをお勧めします。