13

我很好奇是否有人对性能测试库和前端有任何建议,这些库和前端将为 C++ 生成漂亮的图形图表(例如 gcov 如何生成覆盖率数据,并且有用于查看代码覆盖率数据的前端)。能够生成如下图表:

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

会很光滑。我们现在使用 cppunit 进行单元测试,所以也许有一些与之集成的东西。

更多信息:我们正在英特尔 x86-64 机器上的 Linux(我们使用 Ubuntu Lucid/Maverick)上进行编译。

4

4 回答 4

5

一些建议:

  • googletest C++ 框架能够生成与 JUnit 兼容的报告。
  • Hudson可用于运行您的测试。它只要求您的 C++ 应用程序可以作为控制台应用程序运行。
  • Hudson Performance Plugin可以从 JUnit 报告中生成图形图表。
  • 还有很多其他插件
于 2011-01-05T18:54:16.813 回答
2

在 linux 上,您可以尝试使用 valgrind 工具包。Valgrind 包括可以分析您的代码的 callgrind 工具。KCacheGrind 很好地可视化了 cachegrind 的输出。

于 2011-01-05T17:57:03.507 回答
2

在此处此处的答案中,从我对此类事情的经验中获得了一些希望相关的注释。

您现有的 CppUnit 设置与scoped_timer(参见上面的第二个)之类的东西以及对某些图表的一些后处理可能不应该满足您的需求,这是没有理由的。虽然我相信 CppUnit 包含一个插件(“Clocker”?),它会注销 unittest 时间,但我认为它实际上对这种性能测试在实践中没有那么有用,因为你总是希望只为每个测试的一部分计时而不是所有的设置代码。

于 2011-01-05T20:23:53.970 回答
2

有两个性能测试框架可以帮助你。

  • SkyPat (​<a href="https://skypat.skymizer.com" rel="nofollow">https://skypat.skymizer.com)
  • 哈艾(​<a href="https://github.com/nickbruun/hayai" rel="nofollow">https://github.com/nickbruun/hayai)

它们都受到 Google Test 框架的启发,并提供了支持性能测试的接口,因此很容易将您的原始 googletest 传输到HayaiSkyPat

SkyPat结合了单元测试和 perf_evnet。它扩展了 Google Test 的概念,并提供了访问 PMU 的接口。perf_event 为SkyPat提供准确的周期计数,这对于对时序变化敏感的工具(例如编译器)很有用。SkyPat还可以通过 PMU 事件(eq:周期、指令、缓存引用、缓存未命中等)分析一段代码。

Hayai在其性能测试框架中支持多种不同操作系统(Windows:QueryPerformanceCounter()、Linux:gethrtime()、Apple(OSX、iOS) :)的性能测量方法。mach_absolute_time()

于 2016-10-06T16:00:34.893 回答