微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

G++/CMake Profile Guided Optimization 找不到生成的 .gcda 文件

如何解决G++/CMake Profile Guided Optimization 找不到生成的 .gcda 文件

我正在 Ubuntu 20.04 上使用 CMake 3.16.3 和 G++ 9.3 编译应用程序。这是当前的源目录:

. (this is called MyApp)
├── src
│   ├── /* source files */
│   └── CMakeLists.txt
├── tests
│   ├── /* source files */
│   └── CMakeLists.txt
├── build-release
│   └── pgo /* folder for .gcda files */
├── build_release.sh
└── CMakeLists.txt*

我在 CMakeLists.txt(根也用星号标记)中设置标志如下:

set(MYAPP_PGO "-fprofile-dir=${MYAPP_PGO} -fprofile-generate=${MYAPP_PGO}")

// apply flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -march=native -flto ${MYAPP_PGO}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MYAPP_PGO}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MYAPP_PGO}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${MYAPP_PGO}")

add_subdirectory(src)
add_subdirectory(tests)

未在 src/CMakeLists.txttests/CMakeLists.txt 中设置标志。 MYAPP_PGO 在 bash 中设置,是 build-release/pgo绝对路径我有一个构建程序的脚本 (build_release.sh):

# excluded other lines and flags for brevity

cd build-release
cmake -DMYAPP_PGO="$(pwd)/pgo/" ..
make -j1

配置文件运行后,我看到build-release/pgo中有多个文件cppsrc中的每个test文件一个,例如

#home#johndoe#MyApp#build-release#src#CMakeFiles#MYAPPLICATION_myapp.dir#sample_source.cpp.gcda

但是,当再次编译时

// this is a multithreaded program
set(MYAPP_PGO "-fprofile-dir=${MYAPP_PGO} -fprofile-use=${MYAPP_PGO} -fprofile-correction")

// apply flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -march=native -flto ${MYAPP_PGO}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MYAPP_PGO}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MYAPP_PGO}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${MYAPP_PGO}")

add_subdirectory(src)
add_subdirectory(tests)

我收到一条警告,指出缺少配置文件

/home/johndoe/MyApp/src/sample_source.cpp: In function ‘_GLOBAL__sub_I_sample_source.cpp’:
/home/johndoe/MyApp/src/sample_source.cpp:215:1: warning: ‘/home/johndoe/MyApp/src/sample_source.cpp/build-release/pgo//#home#johndoe#MyApp#build-release#src#CMakeFiles#MYAPPLICATION_myapp.dir#sample_source.cpp.gcda’ profile count data file not found [-Wmissing-profile]

215:1 指的是此源文件中的最后一个字符。

我已经测试了有和没有 PGO 的程序的速度,但没有看到任何改进。虽然不能保证 PGO 带来任何加速,但我倾向于认为 PGO 在这里没有按预期工作。我做错了什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。