Mar*_*gno
1
c++
optimization
clang
pgo
我正在寻求有关 Clang 配置文件引导优化问题的帮助。我使用的是 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 和脚本来自动化该过程,但这是操作流程:
我编译包含创建对象文件的类的源:
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-生成 src/foo2.cpp -o obj/foo2.o
clang++ -c --std=c++0x -O3 -flto -fprofile-instr-生成 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 没有可用的配置文件数据”。
谁能帮助我尝试了解问题出在哪里?先感谢您!