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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
. E) y! T9 ?4 y* T) J7 K! H! j7 \* }8 p
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
9 t) j* X! F, \自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的! h. }; E2 B+ w6 h7 w! H- H
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
5 |. p7 |. }% }7 a' B' S" `' i* Z  l- q! I1 Q" e% d1 _

2 T% S3 Z) w# R- [8 e下面是统计结果. }& q* x; `' v
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    ) W8 h5 w: Z4 L: M6 o' V6 D
emucycle0_0 = EMUCNT0;+ A' b, ~  P8 R$ L# H
emucycle1_0 = EMUCNT1;4 w2 E) X9 c/ x
emucycle0_1 = EMUCNT0;
* M' k) R; b0 _7 y! \% femucycle1_1 = EMUCNT1;
7 J, S" z- Z# L  cemuoverhead = (emucycle0_1 - emucycle0_0);% X. Q2 ?2 e* Z7 f( r  t, d8 }
0 S5 r. U2 `4 F/ U6 a
算法();2 ^5 ]8 Z5 H' ~& j, y, ?

! g- ~3 {2 }  m- Q0 n& I4 \emucycle0_1 = EMUCNT0;2 Q( G! a0 K3 I$ s" q% ^/ x: u, o
emucycle1_1 = EMUCNT1;
2 q5 y& f) Z, c. l& M, h( i
: r( H& C7 @. MCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;- c0 B- q! p9 n. k0 t9 t

0 J  ^' x' }7 T( P* z( Z6 ]
$ D: X+ X) x- M  M统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
- R$ Q; }1 B: ]- P0 b( I4 h' L DSP> cycles: 196468  :  11814000
; ~! v1 K4 x! y DSP> times: 430.85 us with CPU 456.4 ]% m4 |: \. G
DSP> cycles: 3238292  :  11814000  X2 H4 J4 d* }. A8 v" ^
DSP> times: 7101.52 us with CPU 456.
5 i% G4 A7 t, ~  _7 g, h+ g% O DSP> cycles: 157860  :  11814000: I6 H' J1 e- I: G1 d
DSP> times: 346.18 us with CPU 456.. t9 B  f1 A! o7 m% {9 ^
DSP> cycles: 3265684  :  11814000
) ^5 ~4 z+ P* @+ Y DSP> times: 7161.59 us with CPU 456.) q9 \' L& G% m' O8 c: W
DSP> cycles: 156344  :  11814000; K  J8 |# \" W( ]" {0 c0 w# v
DSP> times: 342.86 us with CPU 456.) D, U/ f. a) n* r5 o
DSP> cycles: 3304428  :  11814000
3 c  I( x  b+ T9 q DSP> times: 7246.55 us with CPU 456.
: F3 i3 T, `9 m" Z# B3 p" O8 S- V0 u7 U" v6 ?
设置:相应的表放到IRAM中了
+ q  D- [. `& d. v5 aSECTIONS
  w; \7 v9 K; S2 n4 _{; Y. C4 k3 \- d- s! C& h
    .edma_data>IRAM  align = 0x80
- v" e" g" c3 T( H0 y# X0 k8 S    .audio_glb> IRAM align = 0x80+ u5 w/ B4 i: p& {' A; B
        .f_table>  IRAM,  align = 0x80
  w9 m+ k1 M3 w        .f_text>  DSP_PROG,   align = 0x80 " }5 K1 C( x) l7 a) t: p) n) o+ U0 H
        .f_glb> IRAM align = 0x805 B% x2 P* f+ D7 g* R# I4 @
        .ref_glb > IRAM align = 0x80  o# m& b4 Y! T& C
}
" L3 u8 V' C1 P+ Y" ]4 u
7 J2 L, F+ S9 c* ]; p" _2 @0 C$ C+ W3 I, j+ z5 y
编译加了-O3 优化参数$ H8 b8 c/ |6 ?9 `3 c/ P9 G
, ?: w7 b: T- T7 W+ @

3 ]% P4 f  L! W8 z
+ C2 S' z7 U4 o/ [- a" ~8 v+ s

; }& U. ^# C: X9 r# e

7 y: n- I0 @# J, N! x- R+ r
$ N: M; f% F+ F, 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的 , 所以开启栈空间地址的缓存就可以解决问题* u  J! ^1 n$ Y( n( w
; Q" L, y6 q7 i" O5 K& q9 \% ]
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 13:08 , Processed in 0.036126 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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