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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
. o& v8 ?9 x1 z) c# y, A8 U5 c0 ~* b! X1 l  i4 D
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)# H; h' F4 B1 Q4 N# a: K
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的. R" ^) j! L- B/ {- P9 `. O3 D/ S
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?8 n. [0 L; n) t, N& [
% w5 ~1 ?& {% m9 F
6 e5 v3 m9 ~5 _* p$ o2 ]& K
下面是统计结果2 @3 F" h& d, {! f3 B5 q
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    ! _( h+ ~1 o9 I/ }8 C5 O
emucycle0_0 = EMUCNT0;
% e, ]  R  g3 D9 o6 Z2 Uemucycle1_0 = EMUCNT1;
( k, {( I' ]; `" p6 ^) x8 vemucycle0_1 = EMUCNT0;
& Q/ |/ b, f, cemucycle1_1 = EMUCNT1;
+ }) G3 w* |" G9 W4 H8 temuoverhead = (emucycle0_1 - emucycle0_0);. s" q/ _" ]3 j. Q

0 X$ |  {6 N- ]算法();
/ }8 b- T9 @0 ]& I
( ]& r/ P1 C! h* P6 gemucycle0_1 = EMUCNT0;5 B$ Z& C6 P4 D2 Y! U* `
emucycle1_1 = EMUCNT1;
0 M: g1 M8 J, Y" L0 a6 v% Z9 f) W3 s" y% L: e) K; L
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
! `  G9 O* D- |0 K" C1 u$ R9 R2 j% }0 }" ?( ]
  z: m" W- i  y/ {. \7 Q
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
! v5 z2 T% Y: [. q DSP> cycles: 196468  :  11814000& P- L$ e! M* w% ]- i
DSP> times: 430.85 us with CPU 456." V' {( a/ o* y4 W2 x
DSP> cycles: 3238292  :  118140004 a* s3 m" p% j2 Q' v
DSP> times: 7101.52 us with CPU 456.+ ~. z- Q9 c' O" l6 y( v
DSP> cycles: 157860  :  11814000
. X( j- Q4 @3 d DSP> times: 346.18 us with CPU 456.9 f( B/ O- @0 p9 h8 R4 U5 ]/ {
DSP> cycles: 3265684  :  118140002 R+ s9 z9 S2 `- p6 A
DSP> times: 7161.59 us with CPU 456.* R% `, z+ q) F; U/ I" M+ X" H& y
DSP> cycles: 156344  :  11814000/ D  v0 S+ [' m5 p/ @' j! L. H6 R
DSP> times: 342.86 us with CPU 456.  d. ]3 T) }& k* Z  v- e6 M9 L
DSP> cycles: 3304428  :  11814000& D: _# A& Q' ?; F8 Y  W
DSP> times: 7246.55 us with CPU 456.# p1 Q6 y# q, o

. o7 D; m7 \% a  R设置:相应的表放到IRAM中了
# W; C7 ]& J/ y" H, z1 qSECTIONS; X% [. Q* J/ F! B7 J7 t
{
& {; w* c7 V$ u! `! W8 j, n    .edma_data>IRAM  align = 0x803 x( m5 M6 O. B  e) r; F
    .audio_glb> IRAM align = 0x80" ^0 \" ]9 `0 U9 e' s* T3 q
        .f_table>  IRAM,  align = 0x80
& G) l2 G6 A$ K; x6 m/ A$ q        .f_text>  DSP_PROG,   align = 0x80 " Y+ _& g% J9 \6 k' \* ?7 y
        .f_glb> IRAM align = 0x80
! w# A$ k, S2 H  E        .ref_glb > IRAM align = 0x809 M, A6 _+ k  v0 Y" _
}
5 x/ M; E. q) a
' c' V) y) G; y* K( r- R: h& ]6 r3 Z, X6 q6 l( x; _
编译加了-O3 优化参数2 I1 a" w+ E2 e. p/ ]& a

. }/ V! F5 j( ^, y, d/ r9 b5 }2 M2 G

! n1 n' ?7 Q4 m7 Z+ n" e! e5 u0 m

( A! J- i- H1 d8 q0 Q, F: O/ I

# J4 j0 F" b% C- @6 a. j, _/ K
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
# g+ X/ h) k- ^1 X; C9 L' T, @1 ?! W6 [$ j* a+ P+ C
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 15:23 , Processed in 0.036877 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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