我将把这个问题分解成子问题。我很困惑,我是应该分开问他们,还是用一个问题问他们。所以我只想问一个这样的问题。
最近,我被赋予了一个任务来提高我们的产品在ARM11平台上的性能。我对嵌入式系统这一领域还比较陌生,需要这里的专家来帮助我。
发布于 2010-08-06 09:48:10
发布于 2010-08-06 11:33:58
哎呀!!一个很大的问题!
分析和提高C应用程序性能的一般步骤是什么?
除了这里提到的其他静态代码分析器外,还有一个称为PC-Lint的相当便宜的版本,它已经存在了很长时间。有时会为一个错误抛出大量的错误和警告,但到了最后,您会很高兴,并且因为它而对C/C++有更多的了解。
使用所有的代码分析器,一些问题对代码来说可能更具有结构性,所以最好从编码的第一天开始分析它;对旧软件运行分析可能会让您遇到一些问题,这些问题可能需要一段时间才能解决,最好从一开始就保持它的干净。
但是,代码分析器不会捕获所有的逻辑错误,也就是说,它不会执行您希望它做的事情!最好的方法是先进行代码评审,然后进行测试。通过尽量保持算法的简单性,在循环中保持指令紧密,可能是展开循环(您的编译器优化可能做到这一点),在访问数据时使用快速缓存,从而提高性能。
代码评审可以从许多其他人的目光中提出很多问题。不要有太多的人,如果可能的话,试着找另外三个人,有时候初级开发人员会问一些最有洞察力的问题,比如:“我们为什么要这么做?”
测试可以大致分为两部分,自动测试和手动测试。自动化测试需要为函数/单元生成测试处理程序,但是一旦运行就可以一次又一次地运行。手动测试需要有计划、自律来按照要求执行它们,想象出可能会影响性能的场景,并且必须要注意(您可能已经通过了测试,但是范围跟踪在测试之前/之后有一点异常)。
“如果我正在为嵌入式系统开发,这些步骤会改变吗?”
性能分析在嵌入式系统上可能与应用系统不同;使用" embedded“现在涵盖的非常广泛的画笔,这取决于您是如何以硬件为中心的。这可以使用分析器来完成,如果您想要一种更便宜和更chearful的方法,那么可以使用测试输出引脚来度量代码的部分,或者在开发环境中的模拟器上使用断点来测量它们。
确保不仅测量了一个典型的任务长度,而且还测量了一个最大长度,因为在那里,一个任务可能会开始妨碍其他任务,而您的计划任务没有及时完成。
有什么工具可以帮助我?
IDE上的模拟器、静态分析工具、动态分析工具,但最重要的是,您和其他人都能正确地完成需求、正确地检查(代码和测试)和彻底的测试(自动化和手动)。
祝好运!
发布于 2010-08-06 11:42:11
我的经历。
#pragma GCC optimize("O3")标记优化部分或单独编译。https://stackoverflow.com/questions/3422326
复制相似问题