プロファイリングを使用して、かなり複雑な C++ プロジェクト (Boost ライブラリ、GSL、および OpenCV にリンクされた複数のソース ファイル) を最適化しようとしています。CMakeを使用して、最初にコンパイルします
set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ")
結果の実行可能ファイルを典型的な入力で実行した後、次のようにコンパイルします
set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")
次のような多数のエラーでコンパイルが失敗します。
/n/user/projects/project_name/src/foo.cpp: In member function ‘double TLinearInterp::operator()(double) const’:
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: profile data is not flow-consistent
}
^
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-7 thought to be -7232
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-3 thought to be 20996551
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 3-7 thought to be -28135
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 3-4 thought to be 21024686
GNU コンパイラのバージョン 4.8.0 を使用しています。コンパイラ フラグからわかるように、私のプロジェクトでは OpenMP を使用しています。
プロファイル情報の破損の原因は何ですか?