我们如何配置代码?

时间:2020-03-05 18:51:29  来源:igfitidea点击:

我希望不是每个人都在使用Rational Purify。

因此,当我们要测量时,我们会怎么做:

  • 功能花费的时间
  • 峰值内存使用量
  • 代码覆盖率

目前,我们手动执行此操作[使用带有时间戳的日志语句和另一个脚本来分析日志并将其输出到excel。 ...)

你会推荐什么?指向工具或者任何技术将不胜感激!

编辑:对不起,我没有首先指定环境,它是专有移动平台上的纯C语言

解决方案

回答

nProf Free,适用于.NET。

完成工作,至少足以看到80/20。 (20%的代码,花费80%的时间)

回答

Windows(.NET和本机Exes):AQTime是赚钱的好工具。独立或者作为Visual Studio插件。

Java:我是JProfiler的粉丝。同样,它可以独立运行,也可以作为Eclipse(或者其他各种IDE)插件运行。

我相信两者都有试用版。

回答

对于复杂的应用程序,我是Intel Vtune的忠实拥护者。这与检测代码的传统探查器略有不同。它通过对处理器进行采样来查看指令指针在每秒1000次的位置上的工作方式。它具有无需更改二进制文件的巨大优势,而这通常不会更改我们要测量的时间。

不幸的是,这对.net或者Java不利,因为Vtune无法像传统代码那样将指令指针映射到符号。

它还允许我们测量各种其他以处理器/硬件为中心的指标,例如每条指令的时钟,高速缓存命中/未命中,TLB命中/未命中等,可让我们确定为什么某些代码段可能比我们花费更长的时间运行只需检查代码即可。

回答

我们可能需要不同的工具来进行性能分析和代码覆盖。

对于性能分析,我更喜欢MacOSX上的Shark。它是从Apple免费提供的,而且非常好。如果应用程序是Vanilla C,并且可以使用Mac,则应该可以使用它。

对于Windows上的分析,我们可以使用LTProf。便宜,但不是很好:
http://successfulsoftware.net/2007/12/18/optimising-your-application/

(我认为,Microsoft确实没有为像样的探查器提供更便宜的Visual Studio版本,从而使自己陷入困境。)

对于覆盖率,我更喜欢Windows上的Coverage Validator:
http://successfulsoftware.net/2008/03/10/coverage-validator/
它实时更新覆盖率。

回答

如果我们正在做一个"金属上的"嵌入式" C"系统(我不太确定发帖中暗示的是"手机"),那么我们通常会使用某种计时器ISR,在其中很容易进行采样发生中断的代码地址(通过在堆栈中回溯或者查看链接寄存器或者其他内容)。然后,以粒度/关注范围的某种组合来构建地址直方图并不容易。

因此,通常不难编写代码/脚本/ Excel工作表的某种组合,该组合将直方图计数与链接器符号/列表文件中的地址合并以提供配置文件信息。

如果内存非常有限,那么收集足够的数据以使其既简单又有用可能会有些麻烦,但是我们需要向我们详细介绍平台。

回答

Google Perftools在这方面非常有用。

回答

如果平台是专有操作系统,那么任何工具将如何工作?我认为我们现在正在尽力而为

回答

我将devpartner与MSVC 6和XP一起使用

回答

我已经做了很多。如果我们具有IDE或者ICE,那么有一项技术需要花费一些人工,但是可以正常运行。

警告:现代程序员对此表示讨厌,而我将对此表示不满。他们喜欢他们的工具。但这确实有效,并且我们并不总是拥有好的工具。

我认为在情况下,代码类似于在计时器上运行的DSP或者视频,并且必须快速。假设我们在每个计时器滴答中运行的是子例程A。编写一些测试代码以在一个简单的循环中运行子例程A,例如1000次,或者足够长的时间以至于至少要等待几秒钟。

在运行时,使用暂停键将其随机停止,并对调用堆栈(不仅仅是程序计数器)进行采样并进行记录。 (这是手动部分。)多次执行此操作,例如10次。仅此一次是不够的。

现在寻找堆栈样本之间的共性。查找至少出现在两个样本上的任何指令或者调用指令。其中会有很多,但是其中一些将包含在我们可以优化的代码中。

这样做,我们会得到很好的加速,这是有保证的。 1000次迭代将花费更少的时间。

我们不需要大量样本的原因是我们不需要寻找小物件。就像我们在10个样本中有5个看到特定的调用指令一样,它大约占总执行时间的50%。如果我们真的想知道,更多的样本会更准确地告诉我们百分比是多少。如果我们像我一样,只想知道它在哪里,就可以对其进行修复,然后继续进行下一个。

这样做直到我们找不到其他要优化的东西,并且我们将达到或者接近最高速度。