架构篇-准备工作

 

要点:

       工欲善其事,必先利其器。在优化前必须做好一些准备工作,尤其是工具的准备。包括测试集(test suite),日志(log),性能评估工具(profiler),源码阅读工具,版本控制工具等。

讨论:

       在开始优化前,必须准备好工具。这不仅能提高工作效率,而且是保证优化朝着正确方向前进的必要条件。

1,  测试集(test suite

测试集包括测试例子(test case)和测试脚本(test script)。

Test case分为两大部分,一部分是保证优化结果正确的,如视频解码器的bit-exact test case,顾名思义,bit-exact就是要确保每次优化的结果必须和基准(benchmark)完全一致;另一部分是测试优化性能变化的,如视频解码器的performance test case。无论是bit-exact test case还是performance test case都要有足够的覆盖面,以视频解码器为例,相关的视频标准组织除了提供参考代码,还有许多有代表性的测试片段(test clip,这些test clip的包含了编码器的各种参数选项,就具有很好的覆盖面。在工程实践中,解码器程序员需要了解编码器的使用,会调整各类编码参数,以便根据需要制作相应的test clip

测试脚本对于提高测试效率是非常有用的。在PC上写脚本(如批处理文件)大家都比较熟悉了。在嵌入式系统中可以自己开发一个脚本解析器。脚本驱动的测试大大提高了工作效率。所以一定要重视测试脚本的使用。

2,  日志(Log

整个系统使用统一的日志是非常必要的。在架构级可以通过日志快速锁定问题所在模块。在模块级可以通过日志进一步确定问题根源。尤其对模块级的优化,频繁的优化常常会导致non-bit-exact问题,这时候就需要用现有版本的日志与基准版本的日志进行对比,查出根源。

3,  性能评估工具(Profiler

性能评估工具如大家熟悉的IntelVtune,可以帮助程序员找出程序的热点分布,以及导致热点的各种因素,如过度的I/O读写,Cache miss,分支预测失败等。当然评估工具可以作为一个重要参考,但也不能迷信它的威力,有时候它也会给出错误的提示。

4,  代码阅读工具

很多程序员都不满意嵌入式系统的开发环境。他们选择第三方的代码阅读工具如source insight等来阅读编辑代码,这些代码阅读工具对于加快程序员理清程序结构,理解代码细节很有帮助。

5,  版本管理工具

无论对哪种类型的开发,版本管理工具都是必备的。对与优化来说,频繁的提交新的版本是个重要的技术策略。当某个版本出现non-bit-exact 问题,可以找到最近的一个bit-exact的版本,比较一下这两个版本的差异就可以确定问题。

 

你可能感兴趣的:(架构篇-准备工作)