今天,[又名什邡站长网]总结了一下《关于profile的介绍和汇编代码级的优化问题》,下面就简单来说说这两个问题,希望对建站的朋友们有所启示,谢谢大家浏览。 关于profile的相关介绍 C6x的Debug工具提供了一个profile界面。在图9中,包括了几个重要的窗口,左上角的窗口是显示出我们写的C语言,可以让我们知道现在做到了哪一步。右上角的窗口显示的是C6x所编译出来的汇编语言,同样的我们也可以知道现在做到了哪一步。左下角的窗口是命令列,是让我们下指令以及显示讯息的窗口。而中间的profile窗口就是在profile模式下最重要的窗口,它显示出的项目如下表: 表5:profile的各项参数[8] 字段 意义 Count 被呼叫的次数 Inclusive 包含子程序的总执行clock数 Incl-Max 包含子程序的执行一次最大clock数Exclusive 不包含子程序的总执行clock数Excl-Max 不包含子程序的执行一次最大clock数利用这个profile模式我们可以用来分析程序中每个函数被呼叫的次数、执行的时脉数等等。用这个分析的结果,程序员就可以知道哪个函数所花费的时脉最多,是可以再改进的,而针对它来作最佳化。 关于profile的介绍和汇编代码级的优化问题 汇编代码级的优化可能会遇到的问题汇总 在经过C代码的优化之后,还不能满足性能上的要求,则可以通过profile clock工具找出效率很低的部分,使用线性汇编重新改写。再通过汇编优化器编译,汇编优化器从输入的线性汇编代码中,完成以下功能: ● 寻找可以平行执行的CPU指令。 ● 在软件流水线期间,处理流水线标号。 ● 分配寄存器的用法。 ● 分配功能单元。 TI提供的汇编优化器可以得到很高的效率,一般可以满足性能上的要求。 优化中的问题 在汇编代码级的优化过程中,总是要对程序进行一定的改动的情况,这样经常会出现一些问题。问题汇总如下: 1)优化结果的验证 优化过的程序往往不知道是否运行正确,这时就需要程序员来加以验证。验证时一般采用的办法就是通过测试序列来验证。测试序列指的是对于不同的算法所取的一组特殊的数据,这些数据可以准确的反映算法的特性。 测试序列中每组数据包括:输入数据和输出数据,通过对输入数据的运算,把结果与输出数据进行比较,判断程序的正确性。一些常见的算法,一般都提供了测试序列。还有一些,没有测试序列。这时就需要根据算法的特点,自己构造测试序列,进行验证。构造的时候,注意序列最好有几组,数据最好有一定的长度,这样验证的更准确。 2)内存泄漏的问题 C64X系列DSP的内部存储空间有1MB,其中程序和数据还有CPU的二级缓存将共享这片空间,因此当程序的运行不正常时,很有可能就是内存泄漏造成的。因此,在程序设计中,应尽量不用指针,同时注意进行边界检测。 程序设计的一些方法 程序设计时,一切应以满足实际的要求为目标。在实际的设计中,除了优化能够提高性能以外,还可以采取其他的办法,利用DSP的特性,提高程序的运行性能,满足实际的设计要求。 1、把程序和经常要用的数据放入片内RAM 片内RAM与CPU——工作在同一时钟频率,比片外RAM性能高得多。因此把程序放在片内可以大大提高运行的速度。同时对于一些经常要用到的数据,放入片内,也会节省处理时间。 2、通过DMA技术搬移数据 对于C64X芯片,其片内RAM有1MB,但是对于一些大型的图像处理算法而言,仍可能是不够的,因此经常通过DMA技术,把需要用到的数据搬入片内,把不需要的搬到片外,可以大大的提高程序的运行速度。 3、CACHE的使用 增大CACHE,可以明显的提高性能。但是C64X系列DSP中程序和数据还有CACHE共享片内RAM,因此增大CACHE,就减小了实际的片内可用空间,设计中需要注意。
|