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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
7 m& Z7 O9 Z# i5 s2 D
( W+ @% o7 ^; C) k9 n环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
6 z$ |# r7 k+ T自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的( M/ f! b& V; b& A; W( L$ m: \
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?- E  c; a, _+ ^0 D  L

* c6 l; S0 T; x, ~

3 i8 Y5 e. s% G0 }5 \/ S下面是统计结果3 d* i/ P  A/ N- x6 u9 w& y/ l
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    8 S! W; ?% p* N3 E% r% M! n
emucycle0_0 = EMUCNT0;$ B( r* A, ^& ]- Y
emucycle1_0 = EMUCNT1;
2 Q$ L% {0 X( j0 K6 K: Y9 vemucycle0_1 = EMUCNT0;
1 E4 d4 I/ _1 l! demucycle1_1 = EMUCNT1;
2 ~5 v# H1 A( {4 N  G5 G# t+ t! vemuoverhead = (emucycle0_1 - emucycle0_0);$ w  v( U" [5 R

: _0 V4 n$ N/ P- s0 |; f算法();
- j* R/ O' _" c! x! W* n& E4 V0 \5 O: L; @7 \+ j  t" k
emucycle0_1 = EMUCNT0;# {# M7 Y9 I/ A8 T, g) g+ D
emucycle1_1 = EMUCNT1;$ m3 U2 c8 w+ m4 A& c
. N, T! u  k; O, h( @: B
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
' R4 Z+ d" w$ m  A% H
, x0 O; ]" Q9 A/ s: H9 L' l2 I4 I2 P
2 C8 Y/ [, f6 L1 Q统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
5 c& d2 [; }0 v; j DSP> cycles: 196468  :  11814000" @, i( H. Y( E
DSP> times: 430.85 us with CPU 456.9 q6 d+ [1 c& |. g& r
DSP> cycles: 3238292  :  11814000
& k# V  u0 W$ x. Q. F. k2 p DSP> times: 7101.52 us with CPU 456.
6 L& w. v4 D7 m& y5 e- l  a DSP> cycles: 157860  :  118140006 {+ u0 S" ?, D5 C' Y% V
DSP> times: 346.18 us with CPU 456.
7 Q/ L( {( ^: M3 z3 X9 C DSP> cycles: 3265684  :  11814000
' {: g" N9 Y: w0 q  G) t DSP> times: 7161.59 us with CPU 456.
. \, T- A, U7 g  u; s DSP> cycles: 156344  :  11814000( X/ D/ y) ^1 Z& Z" r5 M
DSP> times: 342.86 us with CPU 456.
1 f" A8 @# N  z9 v1 ]2 F DSP> cycles: 3304428  :  11814000, |* w" L+ U1 C1 b9 [
DSP> times: 7246.55 us with CPU 456.
; C. j. g0 l  R3 x; j% [; ~: B$ V# g
设置:相应的表放到IRAM中了
" e# Z; b0 j& n( m, X; L# P5 ]SECTIONS6 J/ J" d1 Q% \/ S: v; h/ v
{
& d# K- ~/ N$ K; z    .edma_data>IRAM  align = 0x80
- {, p0 N6 G7 I    .audio_glb> IRAM align = 0x80
7 j; ~1 }2 V% l. @$ G. y% [- N        .f_table>  IRAM,  align = 0x80 ) o8 ]0 g1 q  e- M3 r, L  S
        .f_text>  DSP_PROG,   align = 0x80 ) v3 `- X. y# h% q. R2 {' @
        .f_glb> IRAM align = 0x80$ v- z. `6 @) s2 u$ N! i# S) @
        .ref_glb > IRAM align = 0x80: {, V& p" k8 M$ [. Q2 n5 q: v
}: C3 J) F) g8 `6 S

) H& N/ l' K, j! d4 p0 X) ?( p0 ]% A; h6 _
编译加了-O3 优化参数/ v1 Y. q, [1 M" h6 i
' t* g# Q6 V# r1 M" w) A3 A6 l$ A# N

# i) U3 e: O, F9 [8 q, B
6 P, J5 t5 v5 T7 [8 F

3 Z+ U7 @6 V0 h0 w0 g% l4 A9 n. b

5 z' _4 l' g" d4 X2 z
5 v, q! U: Z) F8 z8 ?3 t7 R. O3 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
沙发
 楼主| 发表于 2018-8-16 12:03:03 | 显示全部楼层
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题
4 d# S1 p/ c6 S% e6 y$ N- c5 D/ C" f2 ?# A* o5 t
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 03:56 , Processed in 0.035427 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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