C ++性能测试工具

14

我想知道是否有任何性能测试库和前端可以为C++生成漂亮的图表(就像 gcov 生成覆盖数据并且有用于查看代码覆盖数据的前端一样)。能够生成如下图表:

http://download.eclipse.org/eclipse/downloads/drops/S-3.7M4-201012081300/performance/performance.php?fp_type=0

将会非常棒。我们现在使用 cppunit 进行单元测试,因此可能有一些集成了 cppunit 的选项。

更多信息:我们正在 Linux 上编译(我们使用 Ubuntu Lucid/Maverick)在 Intel x86-64 机器上。


https://dev59.com/QOo6XIcBkEYKwwoYTS1D 这个网站有一个有趣的正在进行中的列表,列出了一些类似的东西... - Nim
这将在很大程度上取决于您所运行的操作系统和CPU,以确定可用的选项...您更关注自动化测试还是性能分析? - AJG85
我在考虑更像是自动化回归测试设置,特别针对性能指标。利用cppunit会很酷,但并非必需品,我对任何类型的性能测试工具都感兴趣。当我们的回归测试注意到一些大的运行时影响或类似问题时,我们将采取分析步骤。 - Kenny Peng
4个回答

5

一些建议:

  • googletest C++框架能够生成JUnit兼容的报告。
  • Hudson可以用于运行您的测试。它只需要您的C++应用程序可以作为控制台应用程序运行。
  • Hudson性能插件可以从JUnit报告生成图形图表。
  • 还有许多其他插件

4
有两个性能测试框架可以帮助您。 它们两个都受到Google Test框架的启发,并提供接口来支持性能测试,因此很容易将原始的googletest转移到HayaiSkyPat中。 SkyPat将单元测试和perf_event结合起来。它扩展了Google Test的概念并提供了访问PMU的接口。perf_event为SkyPat提供了精确的周期计数,这对于对时间变化敏感的工具(例如编译器)非常有用。 SkyPat还可以通过PMU事件(例如:周期、指令、缓存引用、缓存未命中等)对代码片段进行分析。 Hayai将不同操作系统的多种性能测量方法(Windows:QueryPerformanceCounter(),Linux:gethrtime(),Apple(OSX、iOS):mach_absolute_time())支持到其性能测试框架中。

3

在Linux上,您可以尝试使用valgrind工具包。Valgrind包括callgrind工具,可对您的代码进行分析。KCacheGrind非常好地展示了cachegrind的输出结果。


1
这个想法并不是为了对代码进行分析,而是要创建一个每晚构建系统,通过对一些性能单元测试进行简单的度量(甚至只是运行时间),来通知我们性能退化的情况。因此,我们并不特别想要在代码中加入仪器,我们只想看到它的原始性能。 - Kenny Peng
@Kenny:你可以解析cg_diff的输出来生成你想要的图形。 - Benjamin Bannier

2

以下是我在类似问题的答案(这里)(这里)中的一些希望有用的笔记。

没有理由你现有的 CppUnit 设置与类似于 scoped_timer(见上述第二个链接)以及一些后处理到某些图表可能不能满足您的需求。虽然我相信 CppUnit 包括一个插件(“Clocker”?),它将记录出单元测试时间,但我认为在实践中,它对于这种性能测试并不是那么有用,因为你不可避免地想要计时每个测试的一部分而不是所有设置代码。


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