找回密码
 注册
关于网站域名变更的通知
查看: 282|回复: 1
打印 上一主题 下一主题

聊一聊 TI DSP 6000系列的优化经验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-19 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;
% j+ Y6 h4 ]; y& t
" t7 P7 E; p) L: Y3 `
' w8 u; i8 ?9 y' B; A二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;! u8 k8 i6 h& X% q7 S# C$ r
9 U+ q: r" J1 N4 {4 Y
, v4 R, T3 Y& I% [# z

  C& J# I. ^% U3 E+ H+ h& P
3 H2 J) X* N8 k" }( m+ V/ H9 c
三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。$ G1 E. w2 m3 m/ [& O

5 V# y$ U5 z9 x6 P/ R7 h比如:
$ k4 T! G( w& i  j4 q      1)多层的循环结构能否减层。我经常看到这样的程序:
1 n. {+ v( l/ Z5 c2 J         for(i = 0; i++; i< A)
8 }3 a6 ~1 o. z/ x/ u' W% T                for(j = 0; j++ j< B)! Q2 ^3 h2 K4 V( o* w/ D
                {( q  G# O$ U& a  x
                      E[j] = C[j] - D[j];! \" v) V( \- @+ c' J0 \7 d
                }
0 m/ L  C: `0 p' D         这个可以优化成:. d3 A- Z% F% M7 C- f2 V2 c) m
         for(i = 0; i++; i<A*B)9 z( Z% K5 t9 v3 H1 t
         {
- l  ~9 M7 X' n" }                  E = C - D;0 q. U/ [4 R9 l/ _( {) t4 F7 q
             }+ G& `% V+ E: ~8 w' E# M  ~1 d
         2) 关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;. o8 p! M% y( g7 f' O; f
         3)关键循环不要调用子函数' o4 B  K3 K8 v& [* ^+ c# ?
         其它还有一些,具体可以看看手册,手册上讲的很清楚。
/ f) \9 p7 I( g! Z% ]2 g
( p+ k; a! I  A, x3 b
; d  l: v5 Z9 {' K
1 D$ p2 ?; ?" {" Z! g0 v
* X+ f7 i' S/ v& [
四、结合DSP系统的硬件结构优化" W4 z3 @, B. O4 ?; M

) T! O1 q: I( G) Z3 ]1 A; l5 t% |( _
$ n& L8 [4 i( x3 a+ X( y: _! U$ V! x
         1)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;+ ?/ h* Z  C/ \5 Z+ k8 v
: k* Y- K+ F- Q0 y

2 u; Q7 J) x0 ~7 C$ P. C         2)针对外部数据可对L2 cache优化/ A9 S. e7 B& }+ n- ]
2 R0 J6 l$ M) h& f
7 l& k. W& D- E" ?0 B; G! H+ {! t7 ~
五、结合DSP优化器、指令系统等进行优化+ s2 j' Y* M8 G7 @0 `
6 _, F! |% w1 b# K! j0 ]0 n

7 X1 I1 {7 U% ]) \0 x' ?          这部分可以详细的看TI的手册,大概有这几个方法:' E5 _# C& |2 t/ g

3 N6 K+ x, y% M. W8 t; y0 h
; u' J( f! I2 @" N. y. m9 T/ t
         1)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;; W1 T$ ]" G" h$ y( @* d8 L
         2)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;
% P% d- k6 j7 P, V, |% K         3)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;
+ Y- I- ^, ?& ?3 o0 A         4)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
3 L! E$ e0 F  Y5 u* N0 _! L         5)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了;$ J) z$ J  |0 x; x
          这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。0 A1 }; G( ^' j. w+ v
ps:2 k/ f: e5 o% K- a' i7 h
      系统结构上的优化这个需要在方案阶段考虑,主要是硬件和数据流这些方面的!
) p9 a% h' p) i, w  v      算法这个东西很重要,做优化的最好对算法有大致地了解才行,有时一个实现思路的改变会帮你优化很多。# l5 H+ S& c$ s: S' P
      就算你不对算法本身做优化,对算法了解对你做程序优化也是有帮助的。+ M/ T9 ~2 ^- r; _) @1 _  Z
      我是从汇编转到C上来的,后来对C做优化的时候发现对汇编指令的了解非常有助于做优化,3 a0 @( A6 |. Q. v9 W& }4 Q
      你有空的话可以看看汇编指令,尤其是64核的dsp,很多打包指令和SIMD指令对程序级优化帮助很大。9 R4 ~% K$ H, Z: q& {. h# {( {
      你不用写汇编,写写线性汇编就行了,不用安排并行,这点比汇编省很多功夫。# Q2 R( \6 U9 B% [8 A5 y: `
      我现在做优化都是试着用c做,然后看看反汇编的指令,不满意的话用线性汇编写个,一般到这步都差不多了。
6 G1 _3 @9 I$ p' \- m      还有可以多看看ti imglib的优化代码,ti提供了,多看看你会有收获的!8 b% Z' o; L( J5 V- ]
# l5 o5 h5 x$ V$ T7 T

# X, V- A% L8 @4 b% S8 ^1 X4 S) r/ v+ J& N2 D$ n$ y: P3 e
! {" a4 I, S$ ~) A0 _" L, H) x
最后要重点说下:
* A. \  e: a# N: H$ ?+ J4 V5 K5 C          优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,要对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!
- O. D  W3 d: L6 C) i! k' B/ v
8 C/ F# O' t" j9 T: G
1 e' ~1 w9 e( s$ Y! a0 N, X. ^2 A: [6 P
+ b4 g$ m" X0 j' R6 B* r) B

- W. R$ s) R1 m8 g6 O; p
+ C! `: q% ]; T2 u

7 o: @4 Z, r4 o. B( b
( T# j: i6 J4 ?( B5 Q3 H% D4 A5 }

该用户从未签到

2#
发表于 2019-7-19 18:32 | 只看该作者
TI DSP 6000系列的优化经验
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 20:40 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表