使用C或C ++编写的程序性能分析

4

您认为最好的用于分析C/C++代码并确定哪些部分占用了大量时间的工具是什么?目前,我只能依靠日志,但是由于引入了不必要的延迟,所以信息不准确。

最好的情况是,如果存在这样的工具,它还应该能够检测/建议可以进行优化的区域。

平台:Linux

该应用程序将在嵌入式环境中使用,因此应该是轻量级和外部的(不是某个IDE上的插件)。


Linux。我将在嵌入式环境中使用它,因此它应该是轻量级和外部的(不是某个IDE的插件)。 - green_t
9个回答

9

1
kcachegrind 是我见过最好的可视化工具,但要注意,如果你有源代码,gprof 将会快得多,如果性能绝对关键或者想要更仔细地查看硬件性能计数器以寻找病态,那么 OProfile 可能是更好的选择。 - Matt J

5
在Linux/FreeBSD上,“gprof”是一个非常简单和高效的工具,可以在运行时识别哪些例程正在占用CPU。它提供函数的嵌套和平面剖面图。它给出了在分析器运行期间执行的每个函数所占用的CPU时间百分比,以及函数本身所占用的百分比和其子函数所占用的百分比。这有助于您轻松地区分问题函数。

那就是我上次需要提高性能所需的全部内容。 - David Thornley

2

我在使用微软Visual C++的分析器时有不错的经验,还有其他外部程序,比如Intel VTune,但大多数都不是免费的。


1

这取决于平台。如果您使用的是MSVC,则某些版本已内置分析器。AMD和Intel都提供了性能分析器(CodeAnalyst和VTune)。

在Linux上,我唯一使用过的是gprof,但我知道还有其他工具可用(我认为AMD或Intels的工具也可能在Linux版本中可用)

当然,整个Valgrind套件也可能会有所帮助。像callgrind或cachegrind这样的工具可以为您提供大量有关性能的信息。


1

有许多很好的分析工具,例如Quantify或KCachegrind。这些工具的一个问题是它们会减慢运行时性能,因此在一些大型系统上可能无法很好地扩展。

有时仅需在调试器中运行并按ctrl-c,查看堆栈跟踪,并重复此操作4次即可。

如果您总是在代码的同一部分,则已找到您可能花费大部分时间的位置。


很好。特别是要寻找在多个调用堆栈样本中出现的调用站点。 - Mike Dunlavey

1

你显然想要两件事情:

  1. 对你的代码进行分析和测量。

  2. 检测可能需要优化的区域。

这些是不同的问题。尽管你可能听到过相反的说法,但它们并不相同。

对于问题(1),会建议使用许多好的分析工具。

对于问题(2),分析工具只能在间接方面提供帮助。
有一种更简单且通常更有效的技术。

看这里


1

如果我们谈论的是UNIX世界,我会选择gprof / oprofile。

您需要重新编译您的应用程序(至少使用gprof)。

Gprof

Oprofile


0

0
如果你使用的是Windows系统,我建议使用AQTime。它支持几乎所有的编译器,包括.NET、Delphi和VB(当然还有所有的C++编译器),是我尝试过的最好的性能分析工具。而且它不仅仅是一个性能分析器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接