网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
DSP的汇编程序优化方法及实例分析(2)
作者:管理员    发布于:2015-08-17 10:31:54    文字:【】【】【
 xcomp(r3,r2);xr4=[j4+=1];;
 
 
  if xah;do,xr3=0;;
 
  ifnxalt;do,xr3=xr2;;
 
  [j5+=1]=xr3;xcomp(r4,r2);;
 
  /*循环扩展部分*/
 
  if xah;do,xr4=0;xr3=[j4+=1];;(2)
 
  if nxah;do.xr4=xr2;;
 
  [j5+=1]=xr4;;
 
  _Picture_Segment_Inner_Loop_End:
 
  if nlelejump_Pieture_Segment_Inner_Loop(p);;
 
  j4=j4一l;; (3)
 
  xr3=0;; (4)
 
  _Pictnre_Segment_Outter_Loop_End:
 
  if nleoe,jump_Pieture_Segment_0utter_Loop(p);;
 
  (3)改换语句达到并行
 
  有时,不同的语句利用不同的硬件资源可以得到相同的结果。换一条语句执行.改变原语句所用硬件资源。往往也能够增加程序的并行程度。例如DSP中往往提供独立的加法、乘法运算单元,同样一条赋值语句可以用加0或者乘l代替,这样就可以将原来不能并行的从内存中取数语句和对寄存器赋值语句(这两条语句都要到总线资源)并行起来。这在许多参考资料中都可以见到。在此不再列举具体实例。
 
  (4)增加取数个数达到并行
 
  某些DSP还支持联合取数的功能,其寄存器可能是32位.但是却支持64位数据的存取,即一条语句可完成二组数据的存取。而对这两组数据的处理却是相互独立、可以并行的,利用这一功能来达到优化,也不失为一种好方法。
 
  2.2 利用软件流水
 
  流水技术是提高DSP程序执行效率的另一种主要手段。它可以使若干条指令的不同执行阶段并行处理。有时由于相邻的几个指令行有可能使用相同的资源,其间又可能有相关性,从而使DSP在执行时自动插人延迟,使DSP的运行速度比预期的慢:有时又可能由于指令本身的原因造成延时(例如跳转指令),使得DSP的效率降低。由于流水技术本身的复杂性以及DSP硬件结构的多样性,这里不再讨论造成这种延迟的种种原因(事实上各个DSIC的使用手册中均有详细的说明),只是想告诉读者其实有时候只需要移动几条指令的位置就可以达到优化的目的。在这里仍继续采用实例1的代码段作为例子(TI公司C6000系列电路的编程更适合此例,只是其汇编指令太复杂)。
 
  如实例5(1)所示,它将例3中并行的语句重新分开,变为二条语句执行。计算其效率可以发现平均每个像素仍然花费5.12个指令周期,与将其并行的效率相同。这是因为取数与比较这二条指令共用了同一寄存器资源xr3,造成这二条语句间插入一个指令周期的延迟,而把语句插入到这两条指令之间,恰恰利用了这一延迟,达到了优化的效果。
 
  实例5:
 
  lc0=xr0;;
 
  xrl=lshift r0 by一1;;
 
  _Picture_Segment_Outter_Imp:
 
  lcl=xrl::
 
  _Picture__Segment_lnnell_Loop:
 
  xr3=[j4+=l];;
 
  xr4=[j4+=1];; (1)
 
  xcomp(r3,r2);;
 
  if xalt; d0,xr3=0;;
 
  if nxalt;d0,xr3=xr2;;
 
  [j5+=1]=xr3;xcomp(r4,r2);;
 
  if xalt; d0,xr4=0;;
 
  if nxalt;d0,xr4:xr2;;
 
  [j5+=1]=xr4;;
 
  _Picture_Segment_Innerl_Loop_End:
 
  if nlcle,jump_Picture_Segment_Inner_Loop(p);;
 
  _Picture_Segment_Outter_Loop_End:
 
  if nlcoe~jump_Picture_Segment_Outter_Loop(p);;
 
  对汇编程序进行优化,应综合上面提到的各种方法。首先使循环内各语句在时间关系上尽量相互独立.然后利用种种技巧最大限度地使语句并行;最后再考虑软件流水造成的延时,调整各条语句的位置.尽量减少延时。
 
  3 结束语
 
  对特定DSP汇编程序进行优化的过程就是对其芯片结构充分熟悉利用的过程,程序优化与精简的程度正比于对芯片结构的熟悉程度。这是一个不断深入、永无止境的过程。但是还应看到,在程序达到高效的同时,牺牲的是程序应有的可读性。在软件高度产业化的今天,程序的可读性有时甚至比其高效性更为重要。因此如何在程序达到高效的同时尽量保证其可读性也是在对程序进行优化时应着重考虑的问题
浏览 (75) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们