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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
9 ]$ Q/ C1 e3 w, Z, \6 }: M. F
3 V3 V) d# a0 H( w: g环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)& f# q) E) t3 x9 l$ Y9 ~  i* u
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的0 H) r. F; C: [8 d+ P
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
3 I# }3 D0 A" Y  x
7 x$ n2 C# R2 ^; l2 `8 @. ]* {
4 Q  D# C& `5 M: |, T
下面是统计结果
8 C: O! K6 Q& k" T统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    & T8 r4 ~* K2 E1 @# ~; P. k+ y
emucycle0_0 = EMUCNT0;# k3 ~( P5 n% @/ z/ i$ _. f' i
emucycle1_0 = EMUCNT1;
$ ]/ l7 c  Y: v) ]$ K' cemucycle0_1 = EMUCNT0;) o- D* A8 K* n6 Q
emucycle1_1 = EMUCNT1;
6 a! l3 ?; v3 I2 r% _emuoverhead = (emucycle0_1 - emucycle0_0);* i" O$ n" y1 t$ x

; N3 S4 x$ a! q1 e1 F) S. `# j# U9 n算法();
( c/ i6 T8 T" M  Y$ h$ a
. @/ }7 e6 @& N; {; s7 z5 }emucycle0_1 = EMUCNT0;5 R( P' X0 |$ h& X8 I  n1 M) ?2 B
emucycle1_1 = EMUCNT1;5 P0 A6 j* n6 f1 ^/ D  _6 ?. \% m

+ g' ]1 |2 A5 U7 s/ VCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
0 z" k* u( q7 s$ s: m8 i7 ^
% @$ A3 B: T/ U  c+ b5 X( x+ v
: D1 ^' c2 X9 x, u' k统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍! r$ P2 O% ~& d$ N1 H" }: g, j
DSP> cycles: 196468  :  11814000
$ f) Z9 a/ _7 P+ r5 M6 N DSP> times: 430.85 us with CPU 456.
% n. a* w8 Y2 l& K* ^  C DSP> cycles: 3238292  :  118140008 ?1 z5 y. d% d$ t+ k
DSP> times: 7101.52 us with CPU 456.
0 D% K9 C# G8 f/ [ DSP> cycles: 157860  :  11814000+ N/ w2 d/ K# B. h
DSP> times: 346.18 us with CPU 456./ X/ X: q/ M: S: W+ m
DSP> cycles: 3265684  :  11814000
( P, {2 X- M6 C7 w. k0 o/ t DSP> times: 7161.59 us with CPU 456.
! `- a: i) c6 `' |( N3 I- ? DSP> cycles: 156344  :  11814000
7 Y3 h! Y6 ~" w0 Q3 y DSP> times: 342.86 us with CPU 456.
5 s+ l& @( k8 z5 [- T& S  _ DSP> cycles: 3304428  :  118140001 c4 A5 G2 A+ x0 M1 p0 B# g
DSP> times: 7246.55 us with CPU 456.
1 a1 Y2 W& S! \( W2 i: {) a! J3 k
设置:相应的表放到IRAM中了
* W. t6 t7 j3 n6 v3 ?SECTIONS
$ a5 i: `) R5 R( M! J8 W2 g- v/ X8 H{
6 [. w6 E2 f- \: f% b8 u    .edma_data>IRAM  align = 0x80
+ ~( x% g6 _* ?' B    .audio_glb> IRAM align = 0x80( w; t, o* q' Y) S$ _
        .f_table>  IRAM,  align = 0x80 2 L* D5 j5 i' C% O  L, y
        .f_text>  DSP_PROG,   align = 0x80   w7 V6 U4 b2 C0 \0 J# T
        .f_glb> IRAM align = 0x805 N( Z2 C& x4 U7 t$ c( E3 P! ^
        .ref_glb > IRAM align = 0x80# h  Z) r9 L! w7 d  y
}
: x) S5 M2 w$ F/ i* U
" p" ]9 {" B( h8 {# ]7 A6 X& ]; Z' u5 a
编译加了-O3 优化参数( H1 x  M* r- M; B8 W

0 I* c1 J% h/ {# v" v. K0 h
2 Y5 j' x8 R9 W7 Z

1 i2 G$ L4 z, I! D
$ [1 A9 Z' `- q$ W  i2 K- p, c

1 L7 o! H- M  Y
. ]1 l1 o4 w6 Y1 Z. p1 Y- @3 h% r# s9 U
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题8 p7 o& {( T. |$ k- ?* a
( x+ O& @& ]) @+ k3 f
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 02:28 , Processed in 0.038119 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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