我想找出我的程序中某个特定函数所花费的时间。FOr这个目的,我使用的是gprof。我使用以下命令获取特定函数的时间,但日志文件仍然显示程序中所有函数的结果。请在这方面帮助我。
gprof -F FunctionName Executable gmon.out>log 发布于 2014-01-12 08:18:09
您几乎是在重复另一个关于。
正如我所回答的那里,有一个困难(由于硬件!)若要可靠地获得某些特定函数的执行时间,特别是如果该函数所需时间较短(例如小于1毫秒)。你最初的问题指向了这些方法。
我建议将获得时间(2)与CLOCK_REALTIME或CLOCK_THREAD_CPUTIME_ID结合使用。
gprof(1) (与-pg编译后)与丙菲尔(3)一起工作,并且正在使用一种采样技术,基于从带有赛蒂默(2)和TIMER_PROF的定时器设置的周期性间隔(例如每10毫秒)发送SIGPROF信号(参见信号(7));因此,程序计数器被周期性地采样。阅读gprof上的维基页面,注意分析可能会大大降低运行时间。
如果您的函数在短时间内(小于毫秒)执行,则分析将提供一个不精确的度量(阅读海星虫)。
换句话说,分析和测量一个短时间运行函数的时间会改变程序的行为(这也会发生在其他操作系统上!)。您可能不得不放弃的目标,即精确、可靠和准确地测量您的函数的时间,而不干扰它。它甚至可能没有任何精确的意义,例如,因为CPU缓存。
您可以在没有任何gprof参数的情况下使用-F,如果需要,可以对文本配置文件输出(例如与awk)进行后处理,以提取您想要的信息。
顺便说一句,特定功能的精确时间可能并不重要。重要的是整个应用程序的标杆。
您还可以要求编译器对您的程序进行更多的优化;如果您正在使用链路时间优化 (即编译和链接g++ -flto -O2 ),那么小函数的定时概念甚至可能不存在(因为编译器和链接器可能在您不知道的情况下将其内联)。
另外,考虑到当前的超标量处理器具有非常复杂的微建筑,包括指令流水线、缓存器、分支预测器、寄存器重命名、投机处决、无序执行等,因此对短函数定时的概念还没有定义。你不能预测或测量它。
https://stackoverflow.com/questions/21072058
复制相似问题