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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
2 _, `9 x- C9 P( g0 T3 v# }
" D3 m/ U$ y8 w3 [3 W环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
& M7 w( E3 C  _2 [# C: I/ M) }自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的) f8 |% Y! e' k6 n  F! }8 W
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?0 I3 ]% P9 l0 N
/ q7 b; D# ]  y9 s

2 @; Q5 t& P2 _下面是统计结果" O# J% y! c3 x
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
. Z9 T' w) V$ d# iemucycle0_0 = EMUCNT0;, ]5 a! t8 A( ]1 d+ d. l) c" B
emucycle1_0 = EMUCNT1;0 H( l( {  r9 V0 C+ a- h
emucycle0_1 = EMUCNT0;
) R# }& W5 r2 v, D4 e4 J/ Semucycle1_1 = EMUCNT1; * g" f- s2 ]; E8 G0 \# @
emuoverhead = (emucycle0_1 - emucycle0_0);9 g1 O) b8 U; O5 V6 N
+ W: e$ j; P) V9 G. I
算法();
, E4 }0 k) u& A- q
+ k$ J6 V7 \) u4 P1 k5 W  Aemucycle0_1 = EMUCNT0;+ ^8 ?3 z, r/ T: y/ g5 g
emucycle1_1 = EMUCNT1;
8 i9 t: B, }8 L3 S* g. H( v) ]( L% z6 A" f9 d- ]" f5 V* s
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;8 q( \4 S  Y: u  g9 ~9 ]- d% w' `2 A. a% Z
, @' r5 i8 q5 C% Z2 ]9 C
: P; L6 \5 N% L. D; L+ `; ]
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
, g) P/ a8 D- j3 H DSP> cycles: 196468  :  11814000) D6 H) s7 v  n9 R# o1 r/ K- t
DSP> times: 430.85 us with CPU 456.& f5 [+ b, b+ C( c
DSP> cycles: 3238292  :  118140009 j) Q" C1 M7 a" n0 i6 ]
DSP> times: 7101.52 us with CPU 456.
, j% N3 a2 m! e; H  } DSP> cycles: 157860  :  11814000
- p, r4 p% ?, O DSP> times: 346.18 us with CPU 456.% S9 ?$ H6 m( H# l7 P
DSP> cycles: 3265684  :  11814000
0 ?: w0 P* d7 G DSP> times: 7161.59 us with CPU 456." R; ]3 |; `1 B( O$ |
DSP> cycles: 156344  :  11814000" x& ~9 }/ ^* {$ R2 M, W
DSP> times: 342.86 us with CPU 456.
* b6 j0 V' S& d5 I8 q) o' A9 X9 z DSP> cycles: 3304428  :  118140008 ^0 e- T/ i0 v' I& n8 P6 w! @  b
DSP> times: 7246.55 us with CPU 456.
  g& }% U5 x3 l) l
' m2 {& [2 `  ]0 D8 S设置:相应的表放到IRAM中了# i' Z" b: p3 E  n% J
SECTIONS
" B( n. z+ m; J% Q{' Y( `! t) w- ^, ?1 J
    .edma_data>IRAM  align = 0x80
, G0 v) Q4 m/ R0 N* v& ]% @    .audio_glb> IRAM align = 0x803 R5 {4 T; ]* e. z7 j& K# d* j
        .f_table>  IRAM,  align = 0x80
9 n. B, h+ v( E& R        .f_text>  DSP_PROG,   align = 0x80 1 Q* K. `5 X% z3 z6 R
        .f_glb> IRAM align = 0x80/ f5 k- ~9 h) L' Q( k
        .ref_glb > IRAM align = 0x80
; \) t7 L; c* Y1 {/ k}
3 Y4 V" P) Q2 x% j# m& X4 U
2 J+ F0 o4 V$ P& u) p4 @
1 ^3 _) \) c% r, ^编译加了-O3 优化参数
( B- b3 F: I# {3 A" L0 q1 y
, `) I7 r5 U' H) R) _! m. o7 K0 R% r! g* R

$ w" h% _1 I/ x' [( T2 K# g6 c
, r" u( ]/ l" Z/ C& H' [+ [: K+ Q

# f  W4 O: D, c' E7 P2 p, [2 n; }

! b: o3 W/ k* d& M, _
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题* U: n8 B7 h, Q/ [

6 \( B- l5 M# n2 N- L2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 23:07 , Processed in 0.043828 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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