我想知道我的程序中特定函数花费的时间。对于这个目的,我正在使用gprof。我使用以下命令来获取特定函数的时间,但日志文件仍显示程序中存在的所有函数的结果。请帮助我。
gprof -F FunctionName Executable gmon.out>log
答案 0 :(得分:3)
你几乎要重复another question about function execution time。
当我回答there时,有一个困难(由于硬件!)来可靠地获得某个特定功能的执行时间,特别是如果该功能需要很少的时间(例如,小于一毫秒)。您的原始问题指向these methods。
我建议将clock_gettime(2)与CLOCK_REALTIME
或CLOCK_THREAD_CPUTIME_ID
gprof(1)(使用-pg
进行编译后)与profil(3)一起使用,并使用采样技术,基于发送SIGPROF
信号(从signal(7)和TIMER_PROF
设置的定时器中定期(例如每10毫秒)看setitimer(2)};所以程序计数器定期采样。阅读gprof上的wikipage,注意分析可能会显着降低运行时间。
如果您的函数在短时间内(小于一毫秒)执行,则分析会给出不精确的测量值(请参阅heisenbugs)。
换句话说,分析和测量短期运行功能的时间正在改变程序的行为(这也会发生在其他一些操作系统上!)。您可能必须放弃目标,准确 >不打扰它。它甚至可能不会产生任何精确的感,例如因为CPU cache。
您可以使用gprof
而不使用任何-F
参数,如果需要,可以对文本配置文件输出进行后处理(例如使用GNU awk
)以提取您想要的信息。
您还可以要求编译器优化您的程序;如果你正在使用link time optimization,即编译并将与g++ -flto -O2
连接起来,那么小函数的时序概念甚至可能不复存在(因为编译器和链接器可能有在你不知道的情况下内联它。
还要考虑当前的superscalar处理器有micro-architecture instruction pipeline,caches,branch predictor,register renaming,{{3}这么复杂},speculative execution等等,定时短函数的概念是未定义的。你无法预测或衡量它。