我正在尋求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合並合並
最后,我可以使用.profdata上的-fprofile-instr-use進行配置文件集成
但是對於一個更大的項目,存在一些問題。 我使用makefile和腳本來自動化該過程,但這是操作流程:
我編譯包含創建目標文件的類的源:
clang ++ -c --std = c ++ 0x -O3 -flto -fprofile-instr-generate src / foo1.cpp -o obj / foo1.o
clang ++ -c --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的配置文件數據”。 任何人都可以幫助我試圖了解問題出在哪里? 先感謝您!