标签: gprof

加速gcc中的虚函数调用

使用gprof分析我的C++代码,我发现我的大部分时间花在一遍又一遍地调用一个虚拟方法上.该方法本身很短,如果它不是虚拟的,可能会内联.

有什么方法可以加快这一点,而不是将其重写为不是虚拟的?

c++ virtual-functions gprof

5
推荐指数
5
解决办法
2399
查看次数

gprof图书馆 - 问题

我需要在我们的系统中gprof一个库来检查函数调用,看看我们是否可以再优化它.基本上,我拥有的是

可执行文件A使用共享库myLib.so

我想gprof myLib.so.当我使用-pg选项编译myLib.so源时,它会生成一个.so文件.

但是,针对该库重新编译可执行文件A不会因某种原因生成*.gmon文件.需要做什么?我应该静态链接myLib吗?如果是这样,请告诉我如何.我是新手,所以请原谅我的无知.我每天都在学习

提前致谢.

profiling gprof

5
推荐指数
1
解决办法
6552
查看次数

使用带套接字的gprof

我有一个我想用gprof配置的程序.问题(看似)是它使用套接字.所以我得到这样的事情:

::select(): Interrupted system call
Run Code Online (Sandbox Code Playgroud)

我不久就遇到了这个问题,放弃了,继续前进.但我真的希望能够使用gprof来描述我的代码,如果可能的话.我能做什么?我缺少一个gprof选项吗?套接字选项?在存在这些类型的系统调用时,gprof是完全无用的吗?如果是这样,有可行的替代方案吗?

编辑:平台:

  • Linux 2.6(x64)
  • GCC 4.4.1
  • gprof 2.19

c++ sockets profiling gprof

5
推荐指数
1
解决办法
1242
查看次数

C++主要使用〜20%的时间说gprof

我尝试用gprof分析我的C++程序.程序本身运行了大约53秒,所以我不明白为什么它说,主要只运行了大约8.29秒.对此有何解释?

这是一段摘录:

index % time    self  children    called     name
                                                 <spontaneous>
[2]     20.5    0.00    8.29                 main [2]
                0.00    8.28       1/1           MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
                0.00    0.01       1/1           MPQS::MPQS(NTL::ZZ, long) [36]
                0.00    0.00       1/1           MPQS::~MPQS() [78]
-----------------------------------------------
                0.00    8.28       1/1           main [2]
[3]     20.5    0.00    8.28       1         MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
                7.15    1.08     801/801         MPQS::sieve() [4]
                0.00    0.04     801/801         MPQS::find_smooth_vals() [23]
                0.01    0.00       1/1           MPQS::try_solutions(NTL::mat_GF2&) [35]
                0.00    0.00     801/801         MPQS::compute_coeffecients() [59]
-----------------------------------------------
                7.15    1.08     801/801         MPQS::start(std::basic_ofstream<char, std::char_traits<char> >&) [3]
[4]     20.4    7.15 …
Run Code Online (Sandbox Code Playgroud)

c++ gprof

5
推荐指数
1
解决办法
401
查看次数

为什么gprof明显低估了程序的运行时间?

我有这个程序需要2.34秒才能运行,gprof表示它只需要1.18秒.我已经在其他地方读过答案,建议如果例如程序受I/O限制,gprof可能会出错,但这个程序显然不是.

这也适用于我试图描述的有用程序.这不是特定于这个琐碎的测试用例.

(同样在这种情况下,gprof表示main()占用了程序运行时间的100%以上,这是一个非常愚蠢的错误但不会给我带来麻烦.)

$ cat test.c
int main() {
    int i;
    for (i=0;i<1000000000;i++);
}

$ gcc test.c -o test

$ time ./test

real    0m2.342s
user    0m2.340s
sys 0m0.000s

$ gcc test.c -o test -pg

$ time ./test

real    0m2.342s
user    0m2.340s
sys 0m0.000s

$ gprof test |head
Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
101.33      1.18     1.18                             main

 %         the percentage of the total running time of …
Run Code Online (Sandbox Code Playgroud)

c profiling gprof

5
推荐指数
1
解决办法
4514
查看次数

如何分析程序运行时间

我正在尝试优化c ++程序的性能并减少其运行时间.但是,我无法弄清楚瓶颈在哪里.

time命令显示程序本身需要大约5分钟才能运行,大约5分钟,用户cpu时间需要4.5分钟.

CPU分析器(gcc profiler和google perftool)显示函数调用在CPU时间中总共需要60秒.我还尝试使用分析器来实时采样而不是cpu时间,它给了我类似的结果.

I/O探查器(我使用过ioapps)也表明I/O只需要大约30秒的程序运行时间.

所以基本上我有3.5分钟(程序运行时间的最大部分)下落不明,我相信这就是瓶颈所在.

我错过了什么,如何知道那个时间到了哪里?

c++ performance profiling gprof

5
推荐指数
1
解决办法
2215
查看次数

在运行时启用和禁用gprof?

我想知道是否有任何API gprof可以在运行时通过受监视的应用程序启用和禁用性能分析。我对禁用代码某些部分的概要分析并使之专注于我感兴趣的部分感兴趣。我的意思是,有办法避免这种情况吗?

int main (void)
{

  // disable gprof ?
  uninteresting_routine();
  // enable gprof ?

  interesting_routine();
}
Run Code Online (Sandbox Code Playgroud)

链接从GCC网站指仪器选项似乎并不包括这个功能的任何引用。

c performance gprof

5
推荐指数
1
解决办法
445
查看次数

为什么生成的gmon.out文件不包含数据?

我使用-pg开关编译了一个程序,并使用-pg开关进行链接.执行程序时,会生成一个文件"gmon.out".但是,在文件上运行gprof之后,除了解释所提供数据的标准信息之外,没有其他数据.

为什么gmon.out文件中什么都没有?当生成新的"gmon.out"文件时,程序显然已正确编译和链接; 它只是没有数据.

gprof

5
推荐指数
1
解决办法
1253
查看次数

gprof没有输出

我正在尝试使用gprof来分析我正在开发的一些数字代码,但是gprof似乎无法从我的程序中收集数据.这是我的命令行:

g++ -Wall -O3 -g -pg -o fftw_test fftw_test.cpp -lfftw3 -lfftw3_threads -lm && ./fftw_test
Run Code Online (Sandbox Code Playgroud)

gmon.out文件已创建,但似乎没有数据.当我跑

gprof -b fftw_test gmon.out > gprof.out
Run Code Online (Sandbox Code Playgroud)

我得到的只是

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    


                        Call graph


granularity: each sample hit covers 2 byte(s) no time propagated

index % time    self  children    called     name


Index by function name
Run Code Online (Sandbox Code Playgroud)

任何见解?

代码做了很多东西,它不只是调用FFTW例程.它具有计算某些复系数的函数,通过这些系数乘以输入数据的函数,等等.

编辑:包括示例代码和结果.

#include <cstdlib>
#include <ctime>

int main()
{
   std::srand( std::time( 0 ) ); …
Run Code Online (Sandbox Code Playgroud)

profiling g++ gprof

5
推荐指数
2
解决办法
2460
查看次数

使用gprof和pthreads

gprof可以用于配置使用pthreads的多线程程序吗?也就是说,它的输出是否包括所有线程中使用的时间?

multithreading profiling pthreads gprof

4
推荐指数
1
解决办法
8005
查看次数