繁体   English   中英

C ++代码性能

[英]C++ code performance

关于使用VS2005将代码编写到C ++中的问题,您如何衡量代码的性能?

VS中是否有任何默认工具? 我可以知道哪个函数或类会使我的应用程序慢下来吗?

是否可以将其他外部工具集成到VS中,以衡量我的代码中的差距?

如果您拥有Visual Studio 2005的团队系统版本,则可以使用内置的探查器。

AMD CodeAnalyst可在Windows和Linux上免费使用,并且可在大多数x86或x64 CPU(包括Intel)上运行。

当然,当您拥有AMD处理器时,它还具有其他可用功能。 它还集成到Visual Studio中。

我已经很幸运了。


请注意,通常至少有两种常见的探查器形式:

  • 检测 :更改您的构建以在某些区域的开始和结束处记录信息(通常按功能)
  • 采样 :定期查看正在运行的代码以记录信息

记录的信息类型可以包括(但不限于):经过时间,CPU周期数,高速缓存命中/未命中等。

检测可以特定于代码的某些区域(只是某些文件或只是您编译的代码,而不是链接到的库)。 开销要高得多(您将代码添加到项目中,这需要时间才能执行,因此您正在更改时序;您可能会更改程序行为,例如中断处理程序或其他与时序相关的代码)。 不过,您可以确保获得有关所检测功能/区域的信息。

采样可能会错过很小的功能或非常零星的功能,但是现代机器具有硬件帮助,可让您更彻底地采样。 请注意,某些采样系统可能仍会注入时序差异,尽管它们通常会小得多。

根据您的使用方式,某些配置工具支持上述两种方式的混合。

您也可以使用Intel VTune。

您需要一个称为探查器的工具。 对于涵盖大多数简单案例的免费案例,我建议您使用Very Sleepy 它通过定期采样应用程序的当前调用堆栈来工作。

您可以随时测量自己编写代码的时间和性能。 有关以下函数QueryPerformanceCounter()QueryPerformanceFrequency(),请咨询MSDN。

要对内存分配和执行时间进行更深入的分析,我们使用Software Verify中的 Memory Validator和Performance Validator。 他们支持除C ++以外的其他几种语言。

我认为衡量性能和查找代码以进行优化是不同的问题,并且需要不同的方法。

为了找到要优化的代码,我发誓要使用这种简单的方法 ,该方法与公认的概要分析方法正交,并且不需要您购买或安装任何工具。

为了衡量性能,我很满意循环运行主题代码并对其进行计时的简单过程。

编辑:顺便说一句,我只是看着非常困倦 ,它似乎在正确的轨道上。 它对整个调用堆栈进行采样,并保留每个堆栈。 我无法确定的是,对于每个调用指令还是常规指令,它是否为您提供了包含该指令的堆栈样本的一部分。 我认为,这是最有价值的统计数据,不需要非常精确。

另一方面,dotTrace看起来也可能保留了堆栈样本,但是其UI表示的调用栈信息似乎是一个调用树。 我想要的是显示单个指令(或语句)的堆栈驻留百分比的内容,因为它们可能位于调用树的不同分支中,因此调用树可能会失去它们的重要性。

对于侵入式测量,请使用性能计数器。 由于您使用的是C ++,因此应该在此痛苦的API上使用外观。 STLSoft拥有这样的产品系列 ,各有优缺点。 我建议使用winstl::performance_counter以获得最高的分辨率,如果您要监视特定线程的性能而不考虑进程中的其他活动,则建议winstl::performance_counter winstl::threadtimes_counter 多布博士几年前有一篇关于此的文章 ,其中详细描述了立面背后的设计原理。

对于非介入式测量,您不能超过VTune

我们使用RationalQuantify,它是Rational PurifyPlus工具集的一部分。

它是分析应用程序性能的出色工具。

我最近尝试了JetBrains dotTrace分析器 ,它看起来非常不错。 它帮助我很容易地在现有C ++代码中找到了一些“黑洞”。

在将C#和C ++混合使用的解决方案中,它在Visual Studio 2005 Professional中可以正常工作-它为这两段代码使用正确的函数名,并进行了集成分析。 您可以追踪时间或记忆。

可惜的是,评估期到期了:)

我们从AQTime获得了不错的成绩。 它不是免费的,但是比Visual Studio便宜;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM