Clang ++ PGO:空.profraw

时间:2016-02-23 16:01:12

标签: c++ optimization clang pgo


我正在为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
  • 然后我链接对象:
    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&#34的配置文件数据;对于我项目中的每个foo * .cpp文件。

    有人能帮助我试着了解问题所在吗? 提前谢谢!

  • 1 个答案:

    答案 0 :(得分:3)

    解决。 问题是仅在正常退出(返回或退出)的情况​​下生成配置文件,而在我的代码中,主要以_exit结束。