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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;! S3 M! o2 P) I% O
0 M9 b( S7 a/ L" b" p2 ]. K! |6 U
( L2 [7 X+ ~8 x1 i
二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;
% [  b' [& q7 h( d5 n( V7 o' L) ]2 ]4 P
7 y6 H4 n9 d3 \# K. u( R

% f, h6 w  t6 n( i" Q8 Z1 _' `8 P& u' o
; p. i/ U4 i/ U: ^
三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。9 l9 k! q( r5 J) F* {

! s$ f! K$ e1 J$ }. `0 `6 O  }比如:/ [! V: q5 i. X& b1 P# a' S
      1)多层的循环结构能否减层。我经常看到这样的程序:
' O- y5 j' i0 W6 J         for(i = 0; i++; i< A)
8 S3 ]7 s7 N- c" q0 F4 W                for(j = 0; j++ j< B)
! ~, \) H1 i, c                {& k2 c0 u. w# E$ V3 }
                      E[j] = C[j] - D[j];- o: v4 v, l5 W( t
                }
7 p- K9 c; d8 M  O" ?" I+ J         这个可以优化成:5 C! c8 W, }8 G3 {. T# i
         for(i = 0; i++; i<A*B)% q& T6 ]+ `! Y- W4 ?
         {
, ~& \6 V$ x5 r/ W                  E = C - D;+ B0 u  G3 }2 j! T2 v
             }
- l+ [) b0 r% [  l* s% e         2) 关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;% o# o7 @/ V  l
         3)关键循环不要调用子函数  ~( u. P) H! w) q* c# {
         其它还有一些,具体可以看看手册,手册上讲的很清楚。' f8 \3 _# t! P
. F0 ~7 A. J/ v! t& B8 V

# a& D' x( G, A, J' V4 O  E
1 E$ \  x3 p0 o0 ]+ V
9 b6 y& z- t( ^4 @" b
四、结合DSP系统的硬件结构优化
9 f4 t% b/ Y3 ^! O, z7 z7 Q, A4 Z: Z7 F" W* A0 x& V+ s1 M

6 B8 U3 g/ k9 E$ I1 {         1)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;
2 Z# o$ b1 |+ @8 G( V, e! `7 T
: Q' H% W. w6 C, `0 a& H9 E% g

3 Y* D# E% o+ H) w) N         2)针对外部数据可对L2 cache优化, H! Z% N2 a3 X6 N- Z
2 C* @5 @; w3 W2 B) [( |5 b
) }+ a0 Y0 l4 [" j6 `, }( H4 D
五、结合DSP优化器、指令系统等进行优化# C- ^4 o8 Q+ ?  T* }) i

, Q$ {; l7 X3 U# j/ b; m. t* Y% X
5 ?) b/ B& f1 T$ [2 e4 q' ~
          这部分可以详细的看TI的手册,大概有这几个方法:% [7 C+ M3 k/ L, K- |8 j5 E
5 b# A  u8 v& }4 e

1 S. A( x, d! L  P         1)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;
) `1 H9 a8 f2 R) W$ r         2)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;9 J" {9 I. b  ~4 K6 ^
         3)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;0 I7 Z9 I; x* p- p. Z2 B
         4)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
. Y1 f% k3 Y, V         5)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了;
1 r* a; z( I- i$ x' H          这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。
. f( ~4 c) H7 I# ~ps:0 R' {5 S3 ^- }  r& Y% p2 R. G
      系统结构上的优化这个需要在方案阶段考虑,主要是硬件和数据流这些方面的!
8 ]! j: w9 j. v4 b$ v& D; X      算法这个东西很重要,做优化的最好对算法有大致地了解才行,有时一个实现思路的改变会帮你优化很多。
" m! h. K% ?7 L8 Y  A      就算你不对算法本身做优化,对算法了解对你做程序优化也是有帮助的。
6 t% f" K) p. Y7 g      我是从汇编转到C上来的,后来对C做优化的时候发现对汇编指令的了解非常有助于做优化,
2 y: _0 e* F1 t0 n# Z      你有空的话可以看看汇编指令,尤其是64核的dsp,很多打包指令和SIMD指令对程序级优化帮助很大。! Z- u5 V3 `2 e
      你不用写汇编,写写线性汇编就行了,不用安排并行,这点比汇编省很多功夫。/ `; p  ?5 w1 L4 e) y9 b
      我现在做优化都是试着用c做,然后看看反汇编的指令,不满意的话用线性汇编写个,一般到这步都差不多了。. ^/ @- Q3 O9 s6 A4 W
      还有可以多看看ti imglib的优化代码,ti提供了,多看看你会有收获的!$ U8 V( ?. Z. h4 l, s' n- v# v
5 j* x; ~: e6 f6 V% ^% |/ L2 K

/ Z9 e3 Q* f7 o3 _# Q% r6 Y
+ {) u6 N& T4 `7 r  X
/ T! C6 |3 D: X5 @
最后要重点说下:% k* J; j; I% Q1 n( P% M& h9 }& w
          优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,要对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!' m. A. A' k. }' _1 n8 }
+ y+ H7 c* y) i' U# U/ g' k* n' O1 u
  X! l* F0 J6 S4 ^2 S. s9 o

" D% ^) M4 `  G% R

2 D/ o) J& u0 \% X' Q4 v/ ~2 O
, V. r$ U" P- O( R- r! }! J
* S% s& O/ [7 M1 C; K" H

& x, c9 \" `. z  }  M, g2 }
( D( @" O, Y' b9 ~$ ^& X$ E& b7 v

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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