Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
C++ 剖面图c和x2B+;性能良好的程序_C++_Profiling_Profiler_Perf - Fatal编程技术网

C++ 剖面图c和x2B+;性能良好的程序

C++ 剖面图c和x2B+;性能良好的程序,c++,profiling,profiler,perf,C++,Profiling,Profiler,Perf,我是Ubuntu 16.04用户。 对于评测c++程序,我使用perf工具。所以我跑: perf record ./myprogram myprogram_args perf report 现在作为输出,我有: 14,52% CSim2Sim libsimgrid.so.3.13.90 [.] lmm_solve 4,40% CSim2Sim libsimgrid.so.3.13.90 [.] lmm_update_modified_set_rec 4,05%

我是Ubuntu 16.04用户。 对于评测
c++
程序,我使用
perf
工具。所以我跑:

perf record ./myprogram myprogram_args
perf report 
现在作为输出,我有:

  14,52%  CSim2Sim  libsimgrid.so.3.13.90  [.] lmm_solve
   4,40%  CSim2Sim  libsimgrid.so.3.13.90  [.] lmm_update_modified_set_rec
   4,05%  CSim2Sim  libc-2.23.so           [.] _int_malloc
   3,30%  CSim2Sim  libsimgrid.so.3.13.90  [.] simgrid::surf::Model::next_occuring_event_lazy
   2,19%  CSim2Sim  libc-2.23.so           [.] _int_free
........................................................................
我只看到程序中的“深度”和库调用。如何从perf获取与此模板类似的报告?(大概是这样的):

从过去到,最后到

带有性能注释的源代码级分析

如果应用程序是用-ggdb编译的,perf annotate可以生成源代码级别的信息。下面的代码段显示了在使用此调试信息编译时noploop的相同执行的更多信息输出

因此,使用option编译(可能还有链接?)应该可以做到这一点

然后,您可以使用收集运行时信息,然后使用
perf annotate
对其进行分析



我刚刚找到了这个答案。如果您想获取调用图信息,建议使用gcc的选项
-fno省略帧指针
。因此,根据您想要实现的目标和优化级别,您可能也需要添加此选项。

我还建议使用。通过将
-pg
(可能还带有
-O
…)传递到
gcc
和/或
g++
(可能更改
Makefile
中的一些
CFLAGS
cxflags
)来编译C(或C++)程序。阅读关于GCC的文章。

可能,您需要编译并链接选项
-g
@OlafDietsche我已经试过了,但一切都一样=(您试过了吗?
  4,52%  CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  CSim2Sim  my_function4(int argc, char* argv[])