分析C ++多线程应用程序

时间:2009-03-12 10:50:14

标签: c++ performance multithreading profiling

您是否使用过英特尔Vtune分析仪等任何分析工具?

您对Linux和Windows上的C ++多线程应用程序有什么建议?我主要对缓存未命中,内存使用,内存泄漏和CPU使用率感兴趣。

我使用valgrind(仅限UNIX),但主要用于查找内存错误和泄漏。

7 个答案:

答案 0 :(得分:8)

以下是多线程应用程序的好工具。您可以尝试评估副本。

  1. 运行时完整性检查工具
    • 线程检查器 - 英特尔线程检查程序/ VTune,here
  2. 内存一致性检查工具(内存使用情况,内存泄漏)      - 内存验证器,here
  3. 性能分析。 (CPU使用率)      - AQTime,here
  4. 编辑:英特尔线程检查器可用于诊断数据争用,死锁,停滞线程,废弃锁等。请在分析结果时有很大的耐心,因为它很容易混淆。< / p>

    几点提示:

    1. 禁用不需要的功能。(如果发现死锁,可以禁用数据竞争,反之亦然。)
    2. 根据您的需要使用仪器级别。像“所有功能”和“完整图像”这样的级别用于数据竞争,其中“API Imports”可用于死锁检测)
    3. 经常使用上下文相关菜单“诊断帮助”。

答案 1 :(得分:5)

在Linux上,尝试oprofile。 它支持各种性能计数器。

在Windows上,AMD的CodeAnalyst(免费,与VTune不同)值得一看。 它仅支持AMD硬件上的事件分析 (在Intel CPU上,它只是一个方便的基于计时器的探查器)。

一位同事最近尝试Intel Parallel Studio(测试版)并对其进行了评价 (它在一些代码中发现了一些有趣的并行性相关问题)。

答案 2 :(得分:3)

VTune为您提供了有关处理器正在做什么的大量细节,有时我发现很难看到树木的木材。 VTune不会报告内存泄漏。你需要purify plus,或者如果你可以在Linux机器上运行,valgrind对于内存泄漏是有利的,并且价格合理。

VTune显示两个视图,一个是表格式视图,另一个我认为只是让销售人员给人留下深刻印象但不是那么有用。

为了快速而便宜的选择,我会选择valgrind。 Valgrind也有一个缓存研磨部分,但我没有使用它,但也怀疑它非常好。

欢呼声, 马丁。

答案 3 :(得分:2)

我将为valgrind添加另一个答案,尤其是带有UI的callgrind部分。它可以通过分析每个线程的缓存未命中等来处理多个线程。它们还有一个名为helgrind的多线程错误检查器,但我从来没有使用它,也不知道它有多好。

答案 4 :(得分:2)

您可以试用AMD CodeXL的CPU分析器。它是免费的,适用于Windows和Linux。

AMD CodeXL的CPU分析器取代了不再支持的CodeAnalyst工具(上面给出的答案在timday中提到)。

有关详细信息和下载链接,请访问:AMD CodeXL web page

答案 5 :(得分:1)

Rational PurifyPlus套件包括经过充分验证的检漏仪和非常好的分析仪。我不确定它是否会降低到缓存未命中的水平 - 你可能需要VTune。

PurifyPlus可以在各种Unices和Windows上使用,因此它应该满足您的要求,但不幸的是与Valgrind相比,它不是免费的。

答案 6 :(得分:1)

对于简单的分析gprof非常好..