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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;
: t/ P2 P9 N- D
7 z# i: o' w, k2 A7 I/ ]) z
1 T( _+ O% c5 W0 _6 F+ V二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;) I# z5 v: S. n5 w1 a# W+ I; w
1 F* a1 H" n& b8 Z# T

9 Q& g* [6 I, F* V' z+ B+ F1 v; E* e+ v, \8 S

! x+ @6 X+ a+ p/ n7 S: o% q三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。
3 ^8 ?' ~* ]' q+ d8 s* d- t% E1 E& P; u  l4 I" B( G% c! C
比如:" V0 l+ ?1 p6 C2 Y1 S  y
      1)多层的循环结构能否减层。我经常看到这样的程序:
2 k* D  \; n1 s# q: a         for(i = 0; i++; i< A)! P& m+ \4 s  u1 |. d! {
                for(j = 0; j++ j< B)
& X4 f$ Q5 p/ Y9 n% Y' G/ y3 H                {
: k* E! r( I* R3 p2 F, S                      E[j] = C[j] - D[j];, b: f/ u3 ^/ p: H  ?9 k" l
                }
3 t. ^& v) [& e! }( r         这个可以优化成:
, T- B. q9 l7 F4 B$ b2 a9 I& v  I         for(i = 0; i++; i<A*B)
& L2 [' h/ ^5 b, b" {         {8 \3 N) i& Y8 j: F0 [8 t. V
                  E = C - D;
* c) U. s6 z  `- A. _! Q; ^             }' S% z4 d0 P7 r. C6 U- B
         2) 关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;
2 V2 x" V( t2 g, s; g4 u/ z  G2 V         3)关键循环不要调用子函数
# U2 x1 {3 X# l         其它还有一些,具体可以看看手册,手册上讲的很清楚。& j! J& B7 C5 }

# H% g2 d& C+ j5 ]' J- C; ?% W" `

8 E" _9 b6 z7 f( I/ i# Y$ k: G% e" s% [8 m$ z
8 U# C# p$ B" f- N4 A$ q

0 L4 C& i  X4 W四、结合DSP系统的硬件结构优化* ~7 ^9 e/ V0 m+ H+ ]% l7 W! U
7 B) m6 b& S' Z$ b

- A8 P4 S1 K3 d6 f4 Q! ]5 ~; G         1)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;
5 j( t$ E6 s' F+ m, U. T. z3 r) Y1 l! q# W

, N" u# L: L4 D- G2 O8 w# T         2)针对外部数据可对L2 cache优化
6 ]+ U4 v. P3 c6 V- M/ E- |5 X
8 y9 i1 d% }+ g( Y2 ], r/ {: r  D' {: [
五、结合DSP优化器、指令系统等进行优化: r5 d$ f% ~. z8 g6 Z: I
% p5 p! s+ T) p5 z7 U! m2 w( [- c

  Q! p  E- I8 U6 s          这部分可以详细的看TI的手册,大概有这几个方法:
% z4 d- n* f# u$ y: ]6 F. M. A. O( O3 F" H8 Y

0 V  I' r% ?& Z! i! Q         1)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;4 F5 x2 k3 Q4 c9 d* m
         2)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;, N5 d' t& Q& Z' L
         3)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;/ O% T+ n& p* d0 G
         4)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
: _! G5 ^5 ~: \' h& N" D9 j         5)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了;
/ S8 j7 m& I- x8 C& V$ u+ j          这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。3 K; K! |4 [4 ]( r
ps:
( T! N4 D; K! j( R; h  _      系统结构上的优化这个需要在方案阶段考虑,主要是硬件和数据流这些方面的!+ }- o5 a! C- F% W) r
      算法这个东西很重要,做优化的最好对算法有大致地了解才行,有时一个实现思路的改变会帮你优化很多。
! x3 T( ~$ w5 o' }9 l      就算你不对算法本身做优化,对算法了解对你做程序优化也是有帮助的。
5 _2 z, l/ O  x/ l/ n1 h      我是从汇编转到C上来的,后来对C做优化的时候发现对汇编指令的了解非常有助于做优化,5 S1 i4 B. N" `3 r) z
      你有空的话可以看看汇编指令,尤其是64核的dsp,很多打包指令和SIMD指令对程序级优化帮助很大。
. j$ l! ~8 V7 s' [      你不用写汇编,写写线性汇编就行了,不用安排并行,这点比汇编省很多功夫。: s, N3 f$ i. ?& j7 n8 Y
      我现在做优化都是试着用c做,然后看看反汇编的指令,不满意的话用线性汇编写个,一般到这步都差不多了。
  V! q! g9 ?9 p( l, c      还有可以多看看ti imglib的优化代码,ti提供了,多看看你会有收获的!% \5 i* r& j9 Z4 c7 c0 o9 k

! l: R# y. T9 s7 v; p+ W7 E& e/ r  g
3 D% g  h' i$ A) n+ `" o' X4 x. n

/ g  |1 v6 A* j+ W8 f
- U8 E/ m% m+ q2 G! W+ N
最后要重点说下:0 b' V+ X9 ^* Q, h. ^
          优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,要对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!
1 h# J! H1 j) B6 X) Z9 v- V! k, L# ^/ |3 C& c/ D

* j& F1 T+ J6 _$ l  L6 P9 t% ~$ g0 x$ ?! z% I. J2 T8 c

$ ^# ~( o& ~0 a& j5 f7 Q& u5 c( h( V% Y: U# q
, a' \& z/ E3 k# F

, y% C1 I4 ^4 ]' o$ E
+ v- s& C5 T- b

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:47 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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