新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > TMS320C6000嵌入式系统优化编程的研究

TMS320C6000嵌入式系统优化编程的研究

作者: 时间:2009-03-19 来源:网络 收藏

下面例子是算法中计算帧能量的函数,其中包含两个单循环体。进行时,首先要确定循环的次数。对于循环次数是变量的情况,器不进行并行;其次尽量减少数据存取次数,例如以32位存取指令对16位数据进行存取,可以节省一半的存取周期。仔细观察C代码,会发现两次循环次数相同。第二个循环要用到第一个循环的结果,因此可以将两个循环合并在一起,这样就避免了在第二个循环中再从存储器中取结果,减少了一半的Load操作。

  long Comp_En( short *Dpnt)

    { int i ;

  long Rez ;

  short Temp[60] ;

  for ( i = 0 ; i 60 ; i ++)

  Temp[i] = shr( Dpnt[i], (short) 2) ;

  Rez=(long) 0 ;

  for (i=0; i 60; i ++)

   Rez=L_mac(Rez, Temp[i], Temp[i]);

  return Rez ;

  }

相应的线性汇序如下:

  .global _Comp_En ;函数名定义,对c变量前加__Comp_En .cproc Dpnt;函数头定义,Dpnt是参数

  .reg Rez,Rez1,Rez2,I ;寄存器定义,不必考虑实际的寄存器分配

  .reg t1,t2,x1,c1,m1,m2

zero Rez

zero Rez1

zero Rez2

mv Dpnt,c1

mvk 30,i ;确定循环次数。因为用LDW代替LDH,循环次数减少一半。

loop1 .trip 30

ldw *c1++,x1

shl x1,16,t1

shr t1,2,t1

shr x1,2,t2 ;将两个循环合在一起,又减少了一半的从内存取数据的时间。

smpyh t1,t1,m1

smpyh t2,t2,m2

sadd Rez1,m1,Rez1

sadd Rez2,m2,Rez2

[i] sub i,1,i ;循环计数器从30递减

[i] b loop1

sadd Rez1,Rez2,Rez

.return Rez

.endproc

消耗时间(时钟周期):C语言为32971;线性汇编语言为93。

2.3 使用线性汇编改写复杂函数中的循环体

  当函数的逻辑关系复杂,判断、跳转、函数调用情况特别多时,上面方法的效果就会大打折扣。这时可以使用线性汇编将其中的循环部分改写成一个函数,以优化后的函数调用代替循环部分,而不是优化整个复杂函数。

  高速数字信号处理器件的应用范围越来越广,特别是在移动通信领域中,软件无线电、智能天线等新技术的实现都需要强大的实时数字信号处理的支持。系列完全可以满足此类要求。但目前对于并行技术的软硬件开发还处在摸索阶段,如何充分利用高速的资源,是这方面的重点。本文了最新推出的的优化策略,从工程和的角度总结出一套既能满足实时性又能保证开发时效性的实用的优化方法,以供分飨。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭