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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
) g( L+ Z! ^1 {( |
# ~( @6 z: y& m8 N9 y3 R4 N环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
5 q! O. q) V) y/ J* S/ {自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
5 y6 G# t" @; s- B应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?; i# O' p% a/ n: U
3 t; X) b) ^( ^# f/ g- I, Q/ \. M

: r, y# `6 z0 ~下面是统计结果
9 Y$ X8 Z2 m9 I$ ~& |, I. u7 C统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
8 L5 A0 s1 Q5 ~1 J' {# d& [emucycle0_0 = EMUCNT0;
. Z. f7 {$ j, nemucycle1_0 = EMUCNT1;
! v  C5 j, j: Q& Vemucycle0_1 = EMUCNT0;' U4 a8 L6 R8 t! u8 N2 @
emucycle1_1 = EMUCNT1; 6 I6 a8 _2 ]+ k! d
emuoverhead = (emucycle0_1 - emucycle0_0);
/ ^4 Y: E( t4 Z& O1 a/ y
" Y  z: B/ f! p算法();
! Z9 |" y3 X. V( [2 \; Y
! {2 x4 `4 H+ K8 ^  lemucycle0_1 = EMUCNT0;
$ @# a5 P1 R/ }* j3 H/ aemucycle1_1 = EMUCNT1;
) @* X1 f' G: |) ?* I1 Z; S* d6 J* o  J+ C8 D
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
  S8 P. H5 j/ ?+ {% T5 x7 A0 e: }# ]4 \$ n& _
/ Q+ N8 `0 C( V, A' \5 C1 ]& R
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
& z* J- i" H; s5 b$ C( `# R& M DSP> cycles: 196468  :  11814000
8 M- t3 o' f$ |0 S( a DSP> times: 430.85 us with CPU 456.
, _4 ^) F( ]+ g" J6 U5 q* m DSP> cycles: 3238292  :  11814000
- @4 L, Q1 H* D: u4 O* b: t DSP> times: 7101.52 us with CPU 456./ v8 j- \' j' n+ m' I. [- q2 t
DSP> cycles: 157860  :  11814000
  A9 H: C# p: s5 B/ c: Z! ]$ ~ DSP> times: 346.18 us with CPU 456.
! g7 F7 T) @* W1 g( U DSP> cycles: 3265684  :  11814000) p9 ]" j* S, s9 F; t
DSP> times: 7161.59 us with CPU 456.3 R  N& T+ a6 S
DSP> cycles: 156344  :  11814000
: I. |# f& M) f- X" o4 F% E4 J* X DSP> times: 342.86 us with CPU 456.
. y4 }5 e; E, t5 q4 ` DSP> cycles: 3304428  :  11814000% [1 T6 T. v4 L" T# P" L
DSP> times: 7246.55 us with CPU 456.0 L" E  i  ~% D' G: j

* O9 g6 Q; Y( K( \) z/ I7 d: l: j设置:相应的表放到IRAM中了1 S; l/ G5 e+ |) p( a7 Y
SECTIONS$ J: O# Q/ ]$ o5 _' `* e
{/ A7 s0 @+ [8 j" e' I
    .edma_data>IRAM  align = 0x80
  ~9 O/ q  S7 r9 _    .audio_glb> IRAM align = 0x80
6 ?: B; R' R6 w$ X* m        .f_table>  IRAM,  align = 0x80
7 W* f/ h8 r1 P+ C        .f_text>  DSP_PROG,   align = 0x80
3 K1 O$ X. S0 K8 c        .f_glb> IRAM align = 0x80
9 I% n2 o% C0 h1 j+ p4 M        .ref_glb > IRAM align = 0x80
8 S0 A3 u* v9 X- l9 e# R}
; l2 E# F, Q" V& q
" J% s- P  w3 M% z7 B( i. I
% o. i, n) B! K9 ]) F编译加了-O3 优化参数
! `. |6 F5 P& E  G& K1 _% d& Q" M) g/ K$ n2 Y. ~
" L1 X% o8 g0 N; @6 g1 g" g1 k

( u! j8 O7 F' s% T9 a* c* a2 j, |. g; L, g+ t: `
7 s  `; A% g4 d
  f7 `( p' k. t8 V. e. |' ?" W! p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
沙发
 楼主| 发表于 2018-8-16 12:03:03 | 显示全部楼层
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题: v1 w' r1 o! @1 |1 o9 w0 _

* w0 V( S% \8 T2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 21:42 , Processed in 0.036785 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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