Clang++ PGO:空 .profraw
Clang++ PGO: empty .profraw
我正在寻求有关 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 和脚本来自动执行该过程,但这是操作流程:
我编译包含 类 创建目标文件的源代码:
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
然后我 link 对象:
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 文件的警告 "warning: no profile data available for file foo*.cpp"。
谁能帮我弄清楚问题出在哪里?
提前致谢!
已解决。
问题是配置文件仅在正常退出(return 或退出)的情况下生成,而在我的代码中,主要以 _exit.
结尾
我正在寻求有关 Clang Profile Guided Optimization 问题的帮助。我正在使用 clang++-3.7,但问题仍然存在于 clang++-3.6。
如果我尝试使用虚拟代码进行 PGO,一切都很好:
clang++ -o test -fprofile-instr-generate dummy.cpp
但是对于更大的项目,存在一些问题。我使用 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
谁能帮我弄清楚问题出在哪里? 提前致谢!
已解决。 问题是配置文件仅在正常退出(return 或退出)的情况下生成,而在我的代码中,主要以 _exit.
结尾