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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
& c2 `+ S. x0 `( f# X) v8 \& q4 q- E( W$ w+ }+ C9 T
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)3 p& O! M+ i+ [" l
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的2 o* d9 m7 p% ]# y$ F: k- _
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?* i2 C- U3 f7 T
3 @, [! m) L+ [: k4 s' U& P5 Q
# `. R" _# M) P8 K
下面是统计结果& Q5 L6 N3 {! |* T9 B: x  I) o
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
5 B+ S( A, n6 O% bemucycle0_0 = EMUCNT0;
2 `* G; e8 ~- M8 M$ N$ O& Femucycle1_0 = EMUCNT1;
; R6 |+ f  L! Femucycle0_1 = EMUCNT0;! y# w. A7 @" C6 Z
emucycle1_1 = EMUCNT1; 2 e# e+ ~) E$ {
emuoverhead = (emucycle0_1 - emucycle0_0);
8 V  W+ \& T, W  P$ P
+ k6 z5 M, l. X5 w1 S算法();
; W) h5 Y6 M& H+ r! ~3 ~  k6 ]+ x! q) T
emucycle0_1 = EMUCNT0;/ Y& ]: O! z( m' F: j8 w+ t( n8 W
emucycle1_1 = EMUCNT1;: _" }) x0 s) v# o" P

) U( f+ P% H; p0 yCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
0 b, @0 Z: g9 p& H
2 f2 t% `+ b3 u# b# W# f2 Y
% p: G& v9 W8 i% F. C统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
1 n" E8 c. R; T" z* y  R DSP> cycles: 196468  :  11814000
3 z- |5 R- K- Z  v DSP> times: 430.85 us with CPU 456.; l/ y* d4 s8 l8 f
DSP> cycles: 3238292  :  11814000
8 h6 F8 f2 T: F( w1 w/ s DSP> times: 7101.52 us with CPU 456.
4 T! w) f, x6 T. _: T DSP> cycles: 157860  :  11814000
! c- n' S3 u: [9 B DSP> times: 346.18 us with CPU 456.
' i1 k+ w2 K7 Y* T& X& Y DSP> cycles: 3265684  :  11814000
9 G- K. ]1 U0 V  K, C3 s2 J DSP> times: 7161.59 us with CPU 456.4 H' q5 a6 ^$ o( |- Q/ ]
DSP> cycles: 156344  :  11814000
6 n5 U8 ~# H' k DSP> times: 342.86 us with CPU 456.$ O  _4 _: E4 s- V) _6 U3 W) [+ |
DSP> cycles: 3304428  :  11814000. p7 k! W, m" D4 V% V: b
DSP> times: 7246.55 us with CPU 456.6 {) u9 o9 \5 G- ^
: U; @% W% V+ L5 T9 o
设置:相应的表放到IRAM中了: }* E- |, d6 j3 @7 ~
SECTIONS; q+ B0 j0 F2 y
{. ?6 i3 F% ^( r  W, q/ x+ @! G
    .edma_data>IRAM  align = 0x80% r/ ?7 g- f% l5 y) @
    .audio_glb> IRAM align = 0x808 v- y& {" W+ a) y- ^6 P1 n
        .f_table>  IRAM,  align = 0x80 , b3 _8 \  |9 m8 `
        .f_text>  DSP_PROG,   align = 0x80 ) {: H) S0 N/ v
        .f_glb> IRAM align = 0x80  k2 v( q0 Z9 o7 K8 M' W% ]$ V5 i! `
        .ref_glb > IRAM align = 0x80) |. a4 C2 n* l  y% J& e
}5 i; [6 h  g8 Q- ^9 e0 F! H6 Q: A
; g  @! Q  t* w( W2 N0 _# Y
: `( s, m% u% T, j' w5 p+ H5 D
编译加了-O3 优化参数
' q7 a* l2 H  T4 d% c0 W( ?3 z* n* U7 a5 o5 R; r" U" L) r

- f2 P- {; X" c" ?
- |2 D6 H/ ]* c! Q- v7 T
4 d" b" @! m# f* ]5 ~8 b

0 Q# w4 L9 f) ^7 y. d$ @7 t$ q9 l
8 {/ B, b% }2 k( M/ \, @; p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
沙发
 楼主| 发表于 2018-8-16 12:03:03 | 显示全部楼层
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题
8 s7 V/ @( E9 j' l+ j7 z: T6 N& X7 e4 c: {$ U. `% U5 o
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 04:59 , Processed in 0.039558 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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