Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有g+的配置文件信息已损坏+;还有CMake 我试图用一个复杂的C++优化项目(多个源文件,使用SooLink链接到Boost库、GSL和OpenCV)。使用CMake,我首先使用 set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ") set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")_C++_G++_Profiling_Compiler Optimization - Fatal编程技术网

带有g+的配置文件信息已损坏+;还有CMake 我试图用一个复杂的C++优化项目(多个源文件,使用SooLink链接到Boost库、GSL和OpenCV)。使用CMake,我首先使用 set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ") set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")

带有g+的配置文件信息已损坏+;还有CMake 我试图用一个复杂的C++优化项目(多个源文件,使用SooLink链接到Boost库、GSL和OpenCV)。使用CMake,我首先使用 set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ") set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp "),c++,g++,profiling,compiler-optimization,C++,G++,Profiling,Compiler Optimization,在使用典型输入运行生成的可执行文件之后,我使用 set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ") set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ") 编译失败,出现大量错误,如下所示: /n/user/projects/project_name/src/foo.cpp: In mem

在使用典型输入运行生成的可执行文件之后,我使用

set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-generate=profiling -pg -fopenmp ")
set(CMAKE_CXX_FLAGS " -O3 -ffast-math -fprofile-use=profiling -fopenmp ")
编译失败,出现大量错误,如下所示:

/n/user/projects/project_name/src/foo.cpp: In member function ‘double TLinearInterp::operator()(double) const’:
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: profile data is not flow-consistent
 }
 ^
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-7 thought to be -7232
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 2-3 thought to be 20996551
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 3-7 thought to be -28135
/n/user/projects/project_name/src/foo.cpp:86:1: error: corrupted profile info: number of executions for edge 3-4 thought to be 21024686
我使用的是GNU编译器的4.8.0版。从编译器标志可以看出,我的项目使用OpenMP


什么可能导致配置文件信息损坏?

我怀疑是多线程导致了问题,因为您使用的是
-fopenmp

在较高的级别上,
-fprofile generate
使编译器以计数器增量为程序注入指令。这些增量不是线程安全的,因此测试运行可能会产生损坏的分析数据

您可以通过将
-fprofile correction
传递给编译器[1]来解决此问题。或者,您可以在尝试PGO时禁用
-fopenmp
/多线程。我已经成功地使用了第一种方法


[1]

这个bug是否应该影响我试图用profiling和-O2/3编译的每个项目?我发现,我可以成功地用一个03启用的程序来配置一个非常简单的C++项目(解决项目Euler问题16)。通常人们所说的成功的配置文件是他们设法使探查器生成一些输出,并且因为他们找不到任何改进,他们声明成功。我相信你能做得更好。顺便说一句,我不会打开-O3,直到我手动将其挤压干燥。我不是说生成要查看的分析信息。我知道怎么做。我说的是使用自动配置文件驱动优化。基本上,如果编译器有评测信息,它可以做得比只给它-O3标志要好。