我有用C编写的这个应用程序,应该调整它以提高性能。我查看了Linux中可用的一些性能分析器,发现了GNU profiler,valgrind就是其中的一部分。问题是它们都只提供功能级别的分析信息,而不是我需要的语句级别分析。是否有任何工具可以提供此信息。
答案 0 :(得分:1)
使用-g
编译代码以获取调试符号,并使用-O0
编译代码,以便优化程序不会对代码进行加密。
然后在GDB调试器下运行它,当它很慢时,通过键入Ctrl-C来中断它。
它将在另一个线程上停止,因此键入thread 1
以进入活动线程。
然后键入bt
以显示调用堆栈。
仔细看看它,了解它正在做什么,以及它为什么这样做,当你停止它时。
这样做几次,你会非常准确地知道如何花时间。 这是random pausing技术,如果您在那里查看评论,您将看到它的工作情况。 另外,FWIW,我做了short video of it。
正如您所指出的,大多数分析器都不会为您提供行级信息。我知道一个给你a)行级别信息,b)包容性时间("自我时间"几乎无用),c) wall-clock time(所以你不会对I / O视而不见)是Zoom。 也许其他人可以做到,我不确定。
即使分析器为您提供了所有这些,它也会为您提供宝贵的上下文,而上下文是您需要能够识别的时间,而实际上您可以摆脱的时间。 随机暂停为您提供完整的上下文。 它让你的大脑认识到正在发生的事情,最重要的是为什么,而不仅仅是给你数字或图形的摘要,并希望这足以找到加速。
如果你已经挤出了每个周期,你仍然会看到很多样本终止于编译器编译的代码中,然后打开-O3
并让优化器完成它的工作。
答案 1 :(得分:0)