到目前为止,我只使用过Rational Quantify。我听说过有关英特尔VTune的很棒的事情,但是从未尝试过!
编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好的结果的唯一方法。
到目前为止,我只使用过Rational Quantify。我听说过有关英特尔VTune的很棒的事情,但是从未尝试过!
编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好的结果的唯一方法。
Answers:
对于linux开发(尽管其中一些工具可能在其他平台上也可以使用)。这是我所知道的两个大品牌,还有很多其他较小的品牌已经有一段时间没有看到积极的发展了。
对于Linux: Google Perftools
恕我直言,使用调试器采样是最好的方法。您只需要一个IDE或调试器即可停止程序。在安装探查器之前,它就解决了性能问题。
我从来没有做过分析。昨天,我使用静态时间表(映射<std :: string,long long>)对ProfilingTimer类进行了编程,以进行时间存储。
构造函数存储开始的滴答声,析构函数计算经过的时间并将其添加到地图中:
ProfilingTimer::ProfilingTimer(std::string name)
: mLocalName(name)
{
sNestedName += mLocalName;
sNestedName += " > ";
if(sTimetable.find(sNestedName) == sTimetable.end())
sTimetable[sNestedName] = 0;
mStartTick = Platform::GetTimerTicks();
}
ProfilingTimer::~ProfilingTimer()
{
long long totalTicks = Platform::GetTimerTicks() - mStartTick;
sTimetable[sNestedName] += totalTicks;
sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}
在要配置的每个函数(或{block})中,我需要添加:
ProfilingTimer _ProfilingTimer("identifier");
由于我必须猜测哪些功能会花费很多时间,因此在要分析的所有功能中添加此行有点麻烦。但是它运行良好,并且打印功能以%显示消耗的时间。
(其他人是否正在使用任何类似的“自制配置文件”?或者仅仅是愚蠢?但这很有趣!有人有改进建议吗?
是否有某种自动向所有功能添加行的方法?)
Visual Studio 2008中的事件探查器非常出色:快速,用户友好,清晰并且可以很好地集成到IDE中。
由于您没有提到正在使用的平台,因此我将在Linux下说cachegrind。绝对是 它是Valgrind工具集的一部分。
http://valgrind.org/info/tools.html
我从未使用过其子功能Callgrind,因为我的大部分代码优化都是针对内部函数的。
请注意,有一个可用的前端KCachegrind。
对于Windows开发,我一直在使用Software Verification的Performance Validator-它快速,合理,价格合理。最好的是,它可以检测正在运行的进程,并允许您在运行时手动或基于调用堆栈打开和关闭数据收集-非常适合分析较大程序的一小部分。
对于Windows,我尝试了Visual Studio Team Edition中的AMD Codeanalyst,Intel VTune和事件探查器。
Codeanalyst有错误(经常崩溃),在我的代码上,其结果通常不准确。其用户界面不直观。例如,要在配置文件结果中显示调用堆栈,您必须单击“进程”选项卡,然后单击程序的EXE文件名,然后单击带有小写字母“ CSS”的工具栏按钮。但是它是免费软件,因此您不妨尝试一下,并且它在没有AMD处理器的情况下也可以运行(功能较少)。
VTune($ 700)的用户界面IMO糟透了。在大型程序中,很难找到想要的特定调用树,并且一次只能查看程序中的一个“节点”(具有其直接调用者和被调用者的功能),而您无法查看完整的呼叫树。有一个调用图视图,但是我找不到使相对执行时间显示在图上的方法。换句话说,无论花了多少时间,图中的功能看起来都一样-好像它们完全错过了性能分析的要点。
Visual Studio的探查器具有三个GUI中最好的GUI,但是由于某种原因,它无法从我的大多数代码中收集样本(样本仅在我的整个C ++程序中为几个函数收集)。另外,我找不到直接购买的价格或方式。但它附带了我公司的MSDN订阅。Visual Studio支持托管代码,本机代码和混合代码。在这方面,我不确定其他两个探查器。
总之,我还不知道一个好的分析器!我一定会在这里查看其他建议。
唯一敏感的答案是英特尔的PTU。当然,最好在英特尔处理器上使用它,并且至少在C2D机器上获得更有价值的结果,因为架构本身更容易返回有意义的配置文件。
我在Windows和Linux下使用VTune已有很多年了,效果非常好。后来的版本变得更糟,当他们将产品外包给俄罗斯开发人员时,质量和性能都下降了(VTune崩溃增加,打开分析文件通常需要15分钟以上)。
关于仪器,您可能会发现它没有您想象的有用。在我添加仪器的过程中,这种应用程序通常会使产品减慢速度,以至于它不再起作用(真实的故事:启动应用程序,回家,第二天回来,应用程序仍在初始化)。此外,使用非仪器分析,您可以对现场问题做出反应。例如,使用VTune远程日期收集器,我可以针对具有数百个同时连接的实时服务器启动一个采样会话,该服务器遇到性能问题,并捕获生产中发生的问题,而这些问题在测试环境中是无法复制的。
我最喜欢的工具是Easy Profiler:http : //code.google.com/p/easyprofiler/
这是一个编译时间分析器:必须使用一组例程来手动检测源代码,以描述目标区域。但是,一旦应用程序运行并自动将其测量结果写入XML文件,则只需要打开Observer应用程序并在分析/比较工具上单击几下,便可以在定性图中查看结果。
让我为EQATEC提供插头...正是我想要的...易于学习和使用,并为我提供了快速找到热点所需的信息。与Visual Studio内置的相比,我更喜欢它(尽管公平地说,我还没有尝试过VS 2010)。
拍摄快照的能力非常强大。在等待真正的目标分析运行时,我经常得到额外的分析和优化……喜欢它。
哦,它的基本版本是免费的!
http://www.eqatec.com/Profiler/