1


Clang Profile Guided Optimization の問題について助けを求めています。私は clang++-3.7 を使用していますが、問題は clang++-3.6 でもまだ存在します。
ダミーコードで PGO を実行しようとすると、すべて問題ありません。

  • -fprofile-instr-generate でコンパイルします:
    clang++ -o test -fprofile-instr-generate dummy.cpp
  • 実行可能ファイル「test」を起動すると、default.profraw ファイルが生成されます
  • llvm-profdata merge でプロファイルをマージできます
  • 最後に、.profdata で -fprofile-instr-use を使用して、プロファイル統合でコンパイルできます
  • しかし、より大きなプロジェクトでは、いくつかの問題があります。Makefile とスクリプトを使用してプロセスを自動化していますが、操作の流れは次のとおりです。

  • オブジェクト ファイルを作成するクラスを含むソースをコンパイルし ます

    std=c++0x -O3 -flto -fprofile-instr-generate src/foo2.cpp -o obj/foo2.o
    clang++ -c --std=c++0x -O3 -flto -fprofile-instr-generate src /foo3.cpp -o obj/foo3.o
  • 次に、オブジェクトをリンクします:
    clang++ -O3 -flto -fprofile-instr-generate obj/foo1.o obj/foo2.o obj/foo3.o -o foobar.out
  • この時点で問題があります: トレーニング インスタンスで foobar.out を実行しようとすると、生成された .profraw は常に空です (実行速度は通常であり、pgo の作成時のように遅くはありません)。プロファイル統合を使用してコンパイルすると (.profraw ファイルのマージ後)、コンパイラは常に、プロジェクト内の各 foo*.cpp ファイルに対して「警告: ファイル foo*.cpp で使用できるプロファイル データがありません」という警告を出します。

    問題がどこにあるかを理解しようとするのを手伝ってくれる人はいますか? 前もって感謝します!

  • 4

    1 に答える 1

    4

    解決しました。問題は、プロファイルが通常の終了 (リターンまたは終了) の場合にのみ生成されるのに対し、私のコードではメインが _exit で終了することでした。

    于 2016-02-24T09:40:03.950 に答える