您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

TMS320C55x的指令流水线及其效率的提高

时间:2007-1-20栏目:电子通信论文

。在以寄存器为条件执行指令的条件中,如果在测试条件时前面的指令对该寄存器的修改还未完成,也会造成流水线保护和延迟。而C55x大部分操作都是在寄存器内或依赖寄存器来完成的,所以这是造成流水线保护和延迟的主要原因。这时候,需要仔细安排指令的顺序,避免对寄存器访问的竞争;必要时可以采用加mmap()的方式,因为这会改变对相应的寄存器的读取和修改的流水线阶段,就有可能解决这个问题。

  ② 对存储器访问的竞争也是影响流水线保护和延迟的重要原因。C55x内部存储器分为SARAM和DARAM两种。每个周期、每个SARAM体(bank)可被访问一次,DARAM体可被访问两次;如果在同一周期,指令(或并行指令对)中要对同一体访问超过两次的时候,就会造成流水线延迟。这时侯,

可以考虑将其中一个数组复制到另一个存储器体中去,然后再执行相应的操作。在安排程序位置的时候,将程序代码放在SARAM区。因为,读取程序代码也可能和数据的存取产生竞争。

此外,我们还要注意,C55x流水线将某些状态寄存器STx的某些位看作“位组”,将某些寄存器看作“寄存器组”。所以,在同时访问这些“位组”或“寄存器组”成员的时候,也会产生与同时访问一个寄存器或存储器地址类似的冲突,也会造成流水线延迟。

  ③ 指令缓冲队列也有可能造成流水线保护和延迟。指令缓冲队列(IBQ)用于保存准备解码执行的指令,每次送出6字节的指令译码,同时从程序区取4字节的指令包补充。所以如果有太多的5或6字节的指令连续执行,就有可能使取指的速度跟不上译码的速度而导致延迟。而在程序执行出现子程序调用、跳转、块重复和循环等情况的时候,IBQ的内容被刷新,需要重新取指填充IBQ,这也会造成流水线延迟。在长指令间插入一些短指令,并尽可能地使用localrepeat,可以减少出现IBQ延迟的情况。

  判断是否有流水线延迟的方法可以通过高版本的开发工具来检查,也可在怀疑有延迟的语句后添加NOP指令,观察前后的执行时间是否改变。若没有什么变化,则说明有延迟的情况存在,可以将其它指令调整到这个位置。

4 如何提高流水线的效率

  一般情况下,采用指令流水线可以提高系统的执行效率,但是这需要合理的程序设计来实现这一点。例如,上面提到的流水线冲突会引起流水线保护从而造成延迟。此外,即使在没有流水线保护的情况下,也有可能影响流水线的效率。比如在程序中发生调用子程序、条件跳转和块重复循环等分支跳转的情况时,处于指令流水线中各阶段的预处理过的指令都要丢弃,必须重新取入新的指令并重新预处理后才能执行,这就不可避免地带来延迟。所以,尽可能地减少指令流水线的刷新,将使程序运行的速度提高,延迟更少。

  为了减少指令流水线的刷新,即减少分支跳转的情况出现,要尽可能地用条件执行指令来代替条件跳转指令,用单指令重复repeat(CSR)和本地循环(localrepeat)来代替块循环(blockrepeat)。这样不但可以加快程序的执行,而且可以减少代码空间和程序执行时的功耗。条件执行指令会根据条件是否成立来决定指令是否执行,而不会像条件跳转指令那样产生跳转,也就避免了出现分支跳转的情况;而使用单指令重复和本地循环,在循环结构中的指令被取入指令缓冲队列后就不再刷新指令缓冲队列,而直接使用指令缓冲队列中已经取好的指令反复执行,直到循环结束,从而也避免了取指和译码带来的延迟,大大提高了流水线执行的效率。但在编程时需要注意的是,本地循环第一条指令和最后一条指令之间最多为55字节的指令,否则,就无法采用本地循环而必须采用块循环方式。因为,最后一条指令前的长度可为55字节,而最后一条可以为长6字节的指令。所以,在整个循环指令长度较大时,可以将较短的指令前移,而将最长的指令放在最后一条,这样就有可能使得较长的指令也构成本地循环的结构。

结 语

  TMS320C55x是一种高性能的DSP,C55x指令流水线的优异性能是其中的非常重要的方面。通过合理的程序设计,减少指令流水线的冲突以减少保护所造成的延迟,并且尽量减少流水线的刷新,将使程序的执行效率更高,同时也降低了系统的功耗,从而可以真正发挥TMS320C55x的优异性能。


上一页  [1] [2] 

下页更精彩:1 2 3 4 下一页