我希望不是每个人都在使用Rational Purify。
所以,当你想测量的时候,你会做什么:
目前,我们手动完成它(使用带有时间戳的log语句和另一个脚本来解析日志和输出到excel。啊.)
你有什么推荐的?指向工具或任何技术将不胜感激!
编辑:对不起,我没有首先指定环境,它在专有移动平台上的普通C
发布于 2008-09-11 14:50:10
您可能需要不同的工具来进行性能分析和代码覆盖。
在分析方面,我更喜欢MacOSX上的鲨鱼。这是免费的苹果和非常好。如果你的应用程序是香草C,你应该能够使用它,如果你能得到一个Mac。
对于Windows上的分析,您可以使用LTProf。便宜,但不太好:http://successfulsoftware.net/2007/12/18/optimising-your-application/
(我认为微软并没有为更便宜的Visual版本提供一个像样的剖析器,这真是自欺欺人。)
对于覆盖率,我更喜欢Windows上的coverage:http://successfulsoftware.net/2008/03/10/coverage-validator/,它实时更新覆盖率。
发布于 2008-11-04 22:53:26
我做了很多次了。如果您有一个IDE,或者一个ICE,那么有一种技术需要一些手工操作,但是工作正常。
警告:现代程序员讨厌这个,我会被否决的。他们喜欢他们的工具。但是它真的很管用,而且你并不总是有好的工具。
我假设在您的例子中,代码类似于DSP或视频,运行在计时器上,并且必须是快速的。假设您在每个计时器上运行的是子例程A。编写一些测试代码,在一个简单的循环中运行子例程A,比如说1000次,或者足够长,让您至少等待几秒钟。
当它运行时,使用一个暂停键随机地停止它,并对调用堆栈(不仅仅是程序计数器)进行示例,并记录它。(这是手册的部分。)这样做几次,比如10次。一次是不够的。
现在,寻找堆栈样本之间的共同点。查找至少两个样本上出现的任何指令或调用指令。会有很多这样的情况,但其中一些将出现在您可以优化的代码中。
这样做,你会得到一个很好的加速,保证。这1000次迭代将花费较少的时间。
你不需要很多样品的原因是你不是在找小东西。就像您在10个示例中的5个上看到了特定的调用指令一样,它大约占执行时间的50%。如果你真的想知道,更多的样本会更准确地告诉你百分比是多少。如果你像我一样,你只想知道它在哪里,所以你可以修复它,然后继续下一个。
这样做,直到你找不到更多的优化,你将以或接近你的最高速度。
发布于 2008-09-11 14:39:47
对于复杂的应用程序,我非常喜欢英特尔的伏特。与传统的分析器相比,这是一种稍微不同的思维方式,可以对代码进行检测。它的工作方式是对处理器进行采样,查看指令指针每秒1000次的位置。它的巨大优势是不需要对二进制文件进行任何更改,这通常会改变您尝试测量的时间。
不幸的是,这对.net或java没有好处,因为Vtune没有像传统代码那样将指令指针映射到符号的方法。
它还允许您测量其他以处理器/硬件为中心的度量标准,例如每条指令的时钟、高速缓存命中/缺失、TLB命中/误击等,这使您能够确定为什么某些代码段运行的时间可能比您预期的要长,只需检查代码即可。
https://stackoverflow.com/questions/56672
复制相似问题