自己的算法连续两次运行消耗时间差20倍 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6402|回复: 3
打印 上一主题 下一主题

[已解决] 自己的算法连续两次运行消耗时间差20倍

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 ) s! W) C! J9 e% K, o

$ W0 u- S2 C! `& h+ M/ z# ~# I环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
) ], E  r7 K! P* Y# ]3 }自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的0 v& I9 G& Q9 f' z4 ^* y/ [) \
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?1 @: j6 ~: d( t7 x/ w
0 E* o) s4 j! ~) U& P7 W2 N
7 B+ t% }% F& h3 ]9 d
下面是统计结果
0 A% a% v$ c( w# n统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
# G( }" j: v& x# yemucycle0_0 = EMUCNT0;% v- |# U$ `# P$ n, j2 v$ V+ @
emucycle1_0 = EMUCNT1;
& ~5 l4 N& n+ h. n2 v# r# ?( {+ [emucycle0_1 = EMUCNT0;- o! N; a; {! t- ]7 o- @( Q6 \
emucycle1_1 = EMUCNT1;
! i9 _+ W  w" H1 }* ~* `0 Zemuoverhead = (emucycle0_1 - emucycle0_0);
0 q& P# F' m: k/ j5 i1 N
  J& b0 I% m, E7 g  y  }/ E) {算法();
8 e7 R0 ~9 B  r2 n# z( O& L' \  e1 L: ^  p# x9 P
emucycle0_1 = EMUCNT0;7 O2 J6 f5 M  P! L2 @, h
emucycle1_1 = EMUCNT1;
" V- |8 k/ l/ o9 \/ S/ M6 T& A5 O
* W3 u8 G6 p" P6 u* G8 P; j5 a# HCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;$ h1 m$ J' D/ F3 F4 J
9 X- ]" ]/ T: f9 f2 `

5 Q  Z) C: t$ N2 w4 g统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
" p3 ]. `) [$ F- M* ?  B DSP> cycles: 196468  :  11814000# p! J' t" P, d& _6 E1 |& E2 A0 d
DSP> times: 430.85 us with CPU 456.( {% D  l) a( ^( M' V/ ?* z# j$ }
DSP> cycles: 3238292  :  11814000+ z( F8 w, h% R/ t% ~
DSP> times: 7101.52 us with CPU 456.
! m# d1 g( r3 v* n. }8 d, D5 i; q DSP> cycles: 157860  :  118140000 _9 U$ R3 O- D9 m( d, r
DSP> times: 346.18 us with CPU 456.
& I6 I0 Q7 i+ s DSP> cycles: 3265684  :  118140008 D7 ?, u* ?3 k9 k" ]
DSP> times: 7161.59 us with CPU 456.
+ ?& d3 Y0 c* R* I5 } DSP> cycles: 156344  :  11814000) T$ i, ^* }  l
DSP> times: 342.86 us with CPU 456.! o4 h. S; v& N% m
DSP> cycles: 3304428  :  11814000- K1 G; J) _# J6 n" H/ J0 T
DSP> times: 7246.55 us with CPU 456.6 _) |3 `& o" d; g; W
/ C, d, }4 l5 N; e; q* I9 Z
设置:相应的表放到IRAM中了
2 M; M; }9 I3 Y; ASECTIONS: p+ a$ A1 v$ N1 N' ^- a- t- A+ ^
{0 N' d2 ^( k# |) D
    .edma_data>IRAM  align = 0x80* j8 A+ g+ S+ v' c1 V* L1 n
    .audio_glb> IRAM align = 0x80( G5 |5 [) ^* [' O+ h! p) `/ Y
        .f_table>  IRAM,  align = 0x80
) ^/ A- I' x1 O& [5 h; q( w        .f_text>  DSP_PROG,   align = 0x80 ) p% z/ E0 @/ w
        .f_glb> IRAM align = 0x80: _  I  q6 @* F
        .ref_glb > IRAM align = 0x80  Q+ A5 q. H+ e' w
}
3 l8 F- Z3 t$ e8 v% L
: R5 U' F4 C% y3 J3 K4 f: P) ^, K
8 d: [! v+ x9 t! O. p) g. ]编译加了-O3 优化参数
/ N" x( O/ l) b5 q7 h, T" ~
2 q% ~: V$ W1 Z) D2 u
$ p* `! M5 l& F( Z

; ^- b. g3 O" {' F5 u  U) c
. k2 w$ e  h- M5 y% p, ]

: v& {/ d9 b8 e

" g, i  Q7 W& {* u; V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
沙发
发表于 2018-8-14 15:48:56 | 只看该作者
您好,根据您的描述,暂时不能排查到具体的原因。建议您:可以先不跑双核,单跑dsp的情况下,测试算法的性能,再判断是否是syslink或双核的影响。
回复 支持 反对

使用道具 举报

8

主题

31

帖子

160

积分

注册会员

Rank: 2

积分
160
板凳
发表于 2018-8-14 19:16:54 | 只看该作者
想请问下您是在LINUX环境下使用MAKEFILE编译双核工程的嘛?另外SECTIONS中的内容是在.CMD文件中编辑的嘛?
回复 支持 反对

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
地板
 楼主| 发表于 2018-8-16 12:03:03 | 只看该作者
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题* N3 y, \& L) [- S$ n

. h5 D. `! w4 ?2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-27 18:21 , Processed in 0.037948 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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