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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
+ _; c4 y  D* r$ \, Q9 r( W9 y  }6 k* N& j7 Z
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
2 f# s( E7 ^/ M/ B/ P6 v自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
" ~( v+ }/ Q, o) \* l应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?; P& D' j! O: k
! N$ w! }( `7 v9 x

6 [# h, e; A7 F7 v: W下面是统计结果
5 k  g0 f5 K  t9 `4 C, S: e统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
; x% I4 v! p5 J( ~0 @- Xemucycle0_0 = EMUCNT0;
4 H" o4 E1 d( S9 m5 Nemucycle1_0 = EMUCNT1;
% N0 n! f$ I! ?6 \& F; Iemucycle0_1 = EMUCNT0;; P- W" \! v+ Y! b! L
emucycle1_1 = EMUCNT1;
: I6 `. k4 p- S2 B2 |emuoverhead = (emucycle0_1 - emucycle0_0);) Z' c  F7 ]# _( f; I# }
8 W( e& q) j8 c1 Z+ E7 q, b+ W
算法();4 Q6 u( D/ K3 H
! d/ O1 P5 e/ ?% V# k
emucycle0_1 = EMUCNT0;/ _: o# f5 k+ P, ]: }" A
emucycle1_1 = EMUCNT1;0 i, v. ]3 @5 p! }  U. E
* ^  J6 O, b4 K* U6 x8 L
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;5 i+ C- D  s5 H. F# s% |

' f0 z6 o% S3 ^5 t; d$ S
5 M) V2 I1 M. o6 A统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
- Y8 W  K, G! s; X DSP> cycles: 196468  :  11814000
9 f4 Y3 ~- @" X' J* y7 N! p DSP> times: 430.85 us with CPU 456.
8 s1 O" o) ~& E0 s9 C5 n0 ` DSP> cycles: 3238292  :  11814000
, V0 |6 b+ J& } DSP> times: 7101.52 us with CPU 456.
+ D. N% O: k7 i4 O5 ~  U DSP> cycles: 157860  :  11814000; `. b2 K) j; i
DSP> times: 346.18 us with CPU 456.
1 |- k+ ~* d- M; j/ O DSP> cycles: 3265684  :  11814000+ ]& O' S. ~+ {+ i+ B6 r
DSP> times: 7161.59 us with CPU 456.
: g) q6 V$ K0 S; B- v DSP> cycles: 156344  :  11814000
8 m5 Z8 \1 H) Q" _ DSP> times: 342.86 us with CPU 456.
, |3 S" {! o; q, i9 D DSP> cycles: 3304428  :  11814000
5 A( H1 U2 }+ l: o; u- z1 ^: Z/ m4 v DSP> times: 7246.55 us with CPU 456.) J0 `# x9 j3 ]9 z. u8 r) V

- ^. [( A6 V" z; X2 K设置:相应的表放到IRAM中了
3 v! h5 j. F! H4 l7 J: i) hSECTIONS" n, N8 z7 o! Z# f
{: e: l. [; Q9 \" E
    .edma_data>IRAM  align = 0x80
" J% p4 D: X9 E- G3 G    .audio_glb> IRAM align = 0x80
  D7 M% r' r( f: ^1 T* @        .f_table>  IRAM,  align = 0x80 1 L6 P; h+ N0 w8 ~- A& }9 w/ U
        .f_text>  DSP_PROG,   align = 0x80 " b8 O1 m" ~3 F2 c' M
        .f_glb> IRAM align = 0x807 ~- S; \9 y+ W* X: y
        .ref_glb > IRAM align = 0x80
, f3 P) F7 x7 {, J( ~* R. l+ M' N}
/ V/ v2 r  Q9 @( g) W
" ^* b% G" ^, s2 ?& u8 j/ H4 C, ?2 a: L% x, l) q, R
编译加了-O3 优化参数
, V. J' Q2 O; C1 Q0 g& t' C9 ]1 |* E0 B4 F  g

$ t0 D2 X% h/ \/ Y2 w
/ p& l" b8 U/ C1 w6 l

3 O  G7 {4 ]9 D3 G; ^; b
0 y; @* _% |* l) e) l
  r  w) Q, F! c  C: c( A' q3 |% B
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题9 w) c3 K* N* K6 Q# N& Q" Q8 y7 u. x
7 ^* [6 |& ?* a9 G
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 07:30 , Processed in 0.037805 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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