首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gprof:特定功能时间

Gprof:特定功能时间
EN

Stack Overflow用户
提问于 2014-01-12 06:46:36
回答 1查看 3.5K关注 0票数 3

我想找出我的程序中某个特定函数所花费的时间。FOr这个目的,我使用的是gprof。我使用以下命令获取特定函数的时间,但日志文件仍然显示程序中所有函数的结果。请在这方面帮助我。

代码语言:javascript
复制
gprof -F FunctionName  Executable gmon.out>log 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 08:18:09

您几乎是在重复另一个关于

正如我所回答的那里,有一个困难(由于硬件!)若要可靠地获得某些特定函数的执行时间,特别是如果该函数所需时间较短(例如小于1毫秒)。你最初的问题指向了这些方法

我建议将获得时间(2)CLOCK_REALTIMECLOCK_THREAD_CPUTIME_ID结合使用。

gprof(1) (与-pg编译后)与丙菲尔(3)一起工作,并且正在使用一种采样技术,基于从带有赛蒂默(2)TIMER_PROF的定时器设置的周期性间隔(例如每10毫秒)发送SIGPROF信号(参见信号(7));因此,程序计数器被周期性地采样。阅读gprof上的维基页面,注意分析可能会大大降低运行时间。

如果您的函数在短时间内(小于毫秒)执行,则分析将提供一个不精确的度量(阅读海星虫)。

换句话说,分析和测量一个短时间运行函数的时间会改变程序的行为(这也会发生在其他操作系统上!)。您可能不得不放弃的目标,即精确、可靠和准确地测量您的函数的时间,而不干扰它。它甚至可能没有任何精确的意义,例如,因为CPU缓存

您可以在没有任何gprof参数的情况下使用-F,如果需要,可以对文本配置文件输出(例如与awk)进行后处理,以提取您想要的信息。

顺便说一句,特定功能的精确时间可能并不重要。重要的是整个应用程序的标杆

您还可以要求编译器对您的程序进行更多的优化;如果您正在使用链路时间优化 (即编译和链接g++ -flto -O2 ),那么小函数的定时概念甚至可能不存在(因为编译器和链接器可能在您不知道的情况下将其内联)。

另外,考虑到当前的超标量处理器具有非常复杂的微建筑,包括指令流水线缓存器分支预测器寄存器重命名投机处决无序执行等,因此对短函数定时的概念还没有定义。你不能预测或测量它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21072058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档