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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;
: O. ^$ o3 b1 ?% }
; o9 P1 c9 K4 V9 i3 a7 z# X! d
( W9 z  D' f4 p4 b" ~( y$ n二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;3 D7 S: d3 n2 L. X

1 V( g! Y! v6 c7 a
. r7 A4 C- e( u# }# p% ~

* b6 ]( m3 h1 e* v" y7 f
5 E+ W% G' s, q9 k. q- }9 Y
三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。
* h- K9 _2 G1 [. J3 \
; B6 _( \5 r# D比如:" m- Q( U! d. [2 S. Q# E
      1)多层的循环结构能否减层。我经常看到这样的程序:
7 {6 j; n: ]7 ^# r% V         for(i = 0; i++; i< A)& f, o# w% ^, j( H
                for(j = 0; j++ j< B)% `, c2 w$ r1 j5 K! P) g4 P4 K2 `0 q
                {' w2 I  J5 L: f4 ?
                      E[j] = C[j] - D[j];
+ j8 W/ k% }3 l                }
+ R) b2 E- A: d: l( T0 M         这个可以优化成:
# A( {6 }8 R, _4 m         for(i = 0; i++; i<A*B). k$ W" D$ M1 v4 W/ N
         {
. x' G7 ?( }3 q% j2 x4 N                  E = C - D;$ @3 X7 N  M9 r) D" Y) l7 ]" D4 ]
             }# y/ t3 \1 v/ ~% E% H8 ^4 L
         2) 关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;
; k! Y3 x& G& K4 f8 G         3)关键循环不要调用子函数; s, c3 n) |' ^
         其它还有一些,具体可以看看手册,手册上讲的很清楚。
* ~' B& w( D; }0 y* b9 x: J: r3 h2 X" e6 U4 s$ d+ P2 @  N

- j0 R9 w" S. M" @; k4 n
% \0 z. t: F9 g
3 w5 f: ~+ y8 T; {) n* m% O
四、结合DSP系统的硬件结构优化
5 ?& R" |- B; b! u% k8 C; e$ v' c) O; D0 {% S+ X/ c7 A! p
% @6 V6 y( c; E8 T4 m
         1)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;+ d- S( y( v. X; m" y5 ^% G
1 O& Z6 a! [8 x
' c* [4 w& L! W5 L3 }8 c0 p
         2)针对外部数据可对L2 cache优化
- [3 i. ?5 z. O/ y5 b$ W; \5 r- K' D" ?7 j6 s2 W5 S0 o0 h! i

; _/ o5 d/ X0 h9 p五、结合DSP优化器、指令系统等进行优化
% t7 O8 B+ h$ T$ X
9 }1 Z  T! l+ a1 _
2 F5 q& m1 ~  K5 [+ J. \; v
          这部分可以详细的看TI的手册,大概有这几个方法:+ P: F6 B7 R- X- p2 Q

2 I+ P' X' V. _( ?# ^  ]( Y
' {7 I* o# V9 }, ?: g
         1)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;) b% H1 p0 G% [4 x
         2)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;
3 |4 U' R6 K6 r. U9 j2 T9 ^         3)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;
: |! e2 w: d0 r* ]3 R         4)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
9 W, e. }4 W4 W8 v5 O' m         5)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了;) v& a( K* r& B+ b. j
          这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。
/ r$ ?$ @+ f" q$ F- Fps:
1 U' Y4 |" I5 Y4 Y+ P      系统结构上的优化这个需要在方案阶段考虑,主要是硬件和数据流这些方面的!
4 @) k+ c2 c" x1 C  V* f5 l      算法这个东西很重要,做优化的最好对算法有大致地了解才行,有时一个实现思路的改变会帮你优化很多。/ b* }4 i  Y$ x
      就算你不对算法本身做优化,对算法了解对你做程序优化也是有帮助的。- ^& z0 \0 ^6 Z  t$ B
      我是从汇编转到C上来的,后来对C做优化的时候发现对汇编指令的了解非常有助于做优化,
2 I9 s1 a( n2 }) u8 X      你有空的话可以看看汇编指令,尤其是64核的dsp,很多打包指令和SIMD指令对程序级优化帮助很大。
/ U1 L: w3 |/ b      你不用写汇编,写写线性汇编就行了,不用安排并行,这点比汇编省很多功夫。
! g9 l; o9 I+ p5 O$ b4 Y      我现在做优化都是试着用c做,然后看看反汇编的指令,不满意的话用线性汇编写个,一般到这步都差不多了。. [- O# T: R- k
      还有可以多看看ti imglib的优化代码,ti提供了,多看看你会有收获的!+ F/ ^6 E2 ]0 B- E. U; b6 y! Q$ i

2 A* Z# b" X- S' I3 I, f

5 E$ \/ \4 Y: ^) L. s- \; h% E8 H9 ^' j% Z
( L! e( m$ f' x: h6 y
最后要重点说下:2 v! U2 R) S3 }2 c
          优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,要对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!
3 y# ~: s# V& O- [) H8 T7 [: h* K7 ?( s

- h, n; K$ J; w, v, O: u+ ]5 F# F+ n6 {

/ g4 o3 E+ \# O! ?: x
$ p# K! M; n% r# n: F

% i" Y. i* l( Q* r: H. ^' J6 z5 n  A# N' O, g- Z) @
. m  e, V- @" ^" H$ Y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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