自己的算法连续两次运行消耗时间差20倍 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 1 J+ m. Q4 p2 i6 b# v
0 u4 N' |$ T# F8 n) G3 ]( `
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
+ `1 [, K- W% M自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
0 C  x# S* O, ~" L应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
- x& K, M; D* w/ K4 k3 U: a2 Y% X) K( u  t7 e# l( C: B
- ^% o( q5 s/ \' V
下面是统计结果
1 m" z, ~) m2 m( w& \" E统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    4 B4 X! v# x8 d/ P# ~2 @
emucycle0_0 = EMUCNT0;
  W- i+ T/ i2 q+ c9 s) |emucycle1_0 = EMUCNT1;9 K3 C/ t1 C* @& b6 y
emucycle0_1 = EMUCNT0;: k% q$ Y# m% r
emucycle1_1 = EMUCNT1; : `+ w& M% K5 P: _" R
emuoverhead = (emucycle0_1 - emucycle0_0);" m0 e* X1 c* f! w4 B

; ^6 |0 I; m$ l6 p) Q0 G6 D8 \: z算法();
/ z8 H8 i- R' S+ r! ^+ t9 _+ F/ W( d9 O6 h0 Y0 y8 E! b
emucycle0_1 = EMUCNT0;
  G5 _% B' L& c( j5 l- Q8 `emucycle1_1 = EMUCNT1;9 ]1 e6 I7 [) j) t; z3 I# A
) ]5 }6 Y% y0 U
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;% j! @7 T3 Y5 G& i$ V

6 y/ F7 X" `! [8 c0 ?$ k
2 `& _, i4 j. S# g统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍, L* b) F0 E  {9 g+ _5 @6 x
DSP> cycles: 196468  :  118140006 [" h3 ?9 @: w+ m& O
DSP> times: 430.85 us with CPU 456.8 t! l9 m0 B4 I2 f7 ]
DSP> cycles: 3238292  :  118140009 `4 L9 x2 }' m! ?0 y# O- n1 R
DSP> times: 7101.52 us with CPU 456.: W3 \3 [. N! z
DSP> cycles: 157860  :  11814000
5 f1 O5 n, J% ?+ f DSP> times: 346.18 us with CPU 456.
$ w- e: V4 y+ g2 j DSP> cycles: 3265684  :  118140006 V, e' J5 W+ A3 U6 L/ d
DSP> times: 7161.59 us with CPU 456.
; O$ }9 O8 S8 h: E) N2 E9 y DSP> cycles: 156344  :  118140005 Z) ~- ^* M% G7 X/ A8 G
DSP> times: 342.86 us with CPU 456.6 B, N2 u5 N& B1 }) D! H4 F7 M
DSP> cycles: 3304428  :  11814000
6 ^! g6 R! {) h) r9 M DSP> times: 7246.55 us with CPU 456.
: l+ L  k! X: d1 k0 [
: {! d) s2 m6 G4 g3 }设置:相应的表放到IRAM中了
/ a2 }: _6 g; D; ^SECTIONS
" z2 c+ S8 U( t  U7 F8 f& ]# Q{
6 R  \3 Y1 o4 X: r# Z    .edma_data>IRAM  align = 0x80
2 ]! d6 |% N  ?0 `" A    .audio_glb> IRAM align = 0x80
2 w2 I% o: d& \# c0 j! d        .f_table>  IRAM,  align = 0x80
- [; g- i3 R6 p1 k7 h/ u        .f_text>  DSP_PROG,   align = 0x80 ( {' C. o0 W/ V/ |+ b) P
        .f_glb> IRAM align = 0x80
$ A4 ]# d& L! }$ V/ k        .ref_glb > IRAM align = 0x80/ `- W! |2 E3 b! h9 V/ s
}+ C- P* O2 t% H. l* r
% d0 t. I2 V3 G
# R- M; _/ Y! }4 q) {3 }
编译加了-O3 优化参数# s( F* G$ ?' C, z

1 n) f! p8 p' c$ }5 p
1 O' D/ d$ p( w7 B8 [1 T
8 d& H! B2 t, a
( t( K. H0 g' W" `

8 e: k) w, _* Y- H$ m' @! |' F

+ w5 w! u8 x/ q3 k9 B; Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

524

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
沙发
发表于 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的 , 所以开启栈空间地址的缓存就可以解决问题
0 O+ u! @+ J4 _# R5 U* Y3 B6 k  ?  b1 T; H: x
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 04:48 , Processed in 0.038496 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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