我希望不是每个人都在使用Rational Purify.
那么当你想测量时你会怎么做:
目前,我们手动执行[使用带有时间戳的日志语句和另一个脚本来解析日志并输出到excel.呼...)
你会推荐什么?指向工具或任何技术将不胜感激!
编辑:对不起,我没有首先指定环境,它在专有移动平台上的普通C
我做了很多.如果你有一个IDE或一个ICE,有一种技术需要一些手动工作,但工作没有失败.
警告:现代程序员讨厌这个,我会被投票.他们喜欢他们的工具.但它确实有效,而且你并不总是拥有漂亮的工具.
我假设在你的情况下代码就像DSP或视频一样在定时器上运行并且必须快速.假设你在每个计时器刻度上运行的是子程序A.写一些测试代码以在一个简单的循环中运行子程序A,比如说1000次,或者足够长,让你至少等待几秒钟.
在它运行时,用一个暂停键随机停止它并对调用堆栈(不仅仅是程序计数器)进行采样并记录它.(这是手动部分.)这样做了很多次,比如10次.一次是不够的.
现在寻找堆栈样本之间的共性.查找至少2个样本上出现的任何指令或调用指令.将会有很多这些,但其中一些将在您可以优化的代码中.
这样做,你将得到一个很好的加速,保证.1000次迭代将花费更少的时间.
你不需要大量样品的原因是你不是在寻找小东西.就像你在10个样本中的5个看到一个特定的调用指令一样,它占总执行时间的大约50%.如果您真的想知道,更多样本会更准确地告诉您百分比是多少.如果你像我一样,你只想知道它在哪里,所以你可以解决它,然后继续下一个.
这样做,直到你找不到更多优化,你将达到或接近你的最高速度.
您可能需要不同的工具来进行性能分析和代码覆盖率。
对于分析,我更喜欢 MacOSX 上的 Shark。它是苹果免费的,而且非常好。如果您的应用程序是 vanilla C,那么您应该能够使用它,前提是您有一台 Mac。
对于 Windows 上的分析,您可以使用 LTProf。便宜,但不是很好: http://successfulsoftware.net/2007/12/18/optimising-your-application/
(我认为微软没有为更便宜的 Visual Studio 版本提供像样的分析器,这确实是搬起石头砸自己的脚。)
对于覆盖范围,我更喜欢 Windows 上的覆盖范围验证器: http ://successfulsoftware.net/2008/03/10/coverage-validator/ 它会实时更新覆盖范围。
归档时间: |
|
查看次数: |
10012 次 |
最近记录: |