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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6234|回复: 3

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
发表于 2018-8-14 09:19:59 | 显示全部楼层 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
) w/ _& ?3 _! X" c8 m" o$ [7 f  g9 Y4 G5 R! R
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)6 d6 V2 w8 w* H& d) U! F' F1 Y
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的) ?7 I& ~! W  W
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?$ K# E: ~+ U$ x4 O: O

5 m) x' X. U* K0 v
$ a# ~* B: x3 o- ?* y% R# ?
下面是统计结果
, O3 b0 v* ~! G% D2 _, B( `5 ~统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    0 A6 q( g) j0 D2 N5 e; D( M6 k
emucycle0_0 = EMUCNT0;
! R2 E- m# u3 ^  vemucycle1_0 = EMUCNT1;" J8 h* t' A$ Y
emucycle0_1 = EMUCNT0;
2 N& }: |2 U4 h4 i' W6 y: Gemucycle1_1 = EMUCNT1;
4 ^/ v, m. X9 a4 Bemuoverhead = (emucycle0_1 - emucycle0_0);
/ s$ M" F  J" n6 F$ s' w: E" [
7 w- ]. u  Z7 F& ]8 x/ w算法();2 [! b: t& b1 M$ m/ x

( E8 @: O, r  K; R' h$ {5 }' ]emucycle0_1 = EMUCNT0;6 q* M7 {0 X: Q
emucycle1_1 = EMUCNT1;7 w$ n3 U5 v: A4 }

3 Y' P9 p, n4 O$ v( qCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
( d- H# L5 q: X1 E" L
: _( p, ^8 V( l) F6 o; N! C1 k# a/ h. u+ Z) z" |
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍  Z* c  @' [4 u/ b/ W$ g
DSP> cycles: 196468  :  11814000  O, k6 P. j& @; b) j, J: p( T
DSP> times: 430.85 us with CPU 456.4 p5 U- I6 u* m) E# E0 U' Z+ Q
DSP> cycles: 3238292  :  11814000
1 g. g& S0 ~" A; |* M DSP> times: 7101.52 us with CPU 456.
5 c$ m& P2 U9 a7 c* o% w- f DSP> cycles: 157860  :  118140009 M( E+ {6 r% r/ U: c6 \
DSP> times: 346.18 us with CPU 456.
; q, J6 ~! j  E* [* d/ Q* m DSP> cycles: 3265684  :  11814000
! u/ R0 m/ Y9 Y( ]5 d  Q DSP> times: 7161.59 us with CPU 456.* A# A* Q% O* L+ f& n: d
DSP> cycles: 156344  :  11814000, \3 {! F! M7 k2 R3 W( t% j0 X  c6 s
DSP> times: 342.86 us with CPU 456.4 T) k; t: K' p8 F* P2 W& J, S- H4 v/ T
DSP> cycles: 3304428  :  11814000
; `+ O" L3 ]7 ], E7 a0 |& k DSP> times: 7246.55 us with CPU 456.) Q8 _% M' _4 _" t
) b6 I! }  j$ n) F. g* j  I
设置:相应的表放到IRAM中了
+ N  x2 P5 R2 ^5 [, u! @SECTIONS, j* A  U' ~+ _0 ]$ t9 A  I
{( x/ u$ Y/ c/ |( [4 ^
    .edma_data>IRAM  align = 0x80
# r! @1 F4 M4 Z# r9 y    .audio_glb> IRAM align = 0x802 ]! [6 _/ q, T5 Y# w# i# c
        .f_table>  IRAM,  align = 0x80
2 ^6 o7 v; D; e% ~2 V( h9 E        .f_text>  DSP_PROG,   align = 0x80
  L$ }$ k8 e  a/ k  g* r        .f_glb> IRAM align = 0x801 A: E; M/ w% J
        .ref_glb > IRAM align = 0x806 d9 |5 w6 L; ^
}
5 G! b  L* S+ ~, B0 o% B1 R. b5 i) L: ]

6 a" A6 @$ r8 L9 D/ q$ G- g$ d% c编译加了-O3 优化参数
* {3 W  B+ O( t' Y# D% _
# e/ U' m% u/ P& W5 m' s
+ T  B- B% L5 |2 L' Y3 W/ d* E

1 f  ]' H- _' h  Y! ^
# E' ^, B/ f& @9 \9 T) ^) J8 @( T2 r

  V, f& p# g+ {

0 X/ R8 m2 Z0 e, T# S  L
回复

使用道具 举报

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 o# U1 p7 D1 U/ S
) Y' L' g* J9 A  [) M+ P% q
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 17:56 , Processed in 0.040114 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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