自己的算法连续两次运行消耗时间差20倍 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 9 t$ T1 v) D( t" Y  s7 A5 |

) f/ K% Z  f8 D' |. L7 s' p环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
7 d% B, R' n) s" P4 F自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
" S! h, V9 T1 _7 U应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
$ N5 c; @, H  T2 u% H# f: I' f: e# i* q8 s3 x  O
# g5 @: j, d3 L' o0 D
下面是统计结果
$ H/ }9 `( l' Q统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
. s( ^8 N, [% i0 b" {) ~8 z3 \emucycle0_0 = EMUCNT0;
! k- [4 `9 r% B3 t* nemucycle1_0 = EMUCNT1;9 n1 f% _" w. I* N( S) y$ \
emucycle0_1 = EMUCNT0;
1 u2 ^, w3 d( U5 v4 Semucycle1_1 = EMUCNT1; 8 n- Q0 H  C% d" a. w) g9 W
emuoverhead = (emucycle0_1 - emucycle0_0);
/ O$ i, G- \6 ]/ k" W# ]1 ?( n, l' ?2 w( Q# h
算法();5 J& t3 ?  \/ v7 ~. M9 @

0 E: Y' B3 v4 ~. s% [# y  }emucycle0_1 = EMUCNT0;5 B1 ?# v$ q* u: h- B0 ^* f$ P
emucycle1_1 = EMUCNT1;
' Y# ]+ A7 `0 \4 S; d' j0 R
- O. b1 f) F4 y2 I9 w' OCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
. U) ^5 T8 B+ I  f; z; H0 v6 c$ h3 q, s" D) r: f

+ l) C; P; Q- Y4 Y统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍; V8 A% Q: r# x0 C: O) H
DSP> cycles: 196468  :  118140002 x2 F* D9 h) C4 A7 r
DSP> times: 430.85 us with CPU 456.
* \3 l" j- t0 r+ Q7 H DSP> cycles: 3238292  :  11814000& V& `+ R. ~5 a7 ~  ^4 M6 l
DSP> times: 7101.52 us with CPU 456.
% u7 o& Y9 o! W# Y  i. _ DSP> cycles: 157860  :  11814000. T0 C- U9 h) R& X( z; U: a3 j9 w% L
DSP> times: 346.18 us with CPU 456.
# {3 q  I# f$ R" M DSP> cycles: 3265684  :  118140009 I9 k( Y* f: p7 Z( A2 v# O! ^& r
DSP> times: 7161.59 us with CPU 456.  H6 z* {! P& H
DSP> cycles: 156344  :  11814000
5 Q! o  f2 \+ X: k6 D% c DSP> times: 342.86 us with CPU 456.
' z8 y& V3 E' z# R+ ]( ^" f: f DSP> cycles: 3304428  :  11814000; n+ I( J% `8 h' z
DSP> times: 7246.55 us with CPU 456.  [0 J, ~1 o5 ^3 [( u6 a9 I8 F; q4 Y4 {

8 x( r/ C5 R9 t设置:相应的表放到IRAM中了
1 s: h1 `4 D8 E1 k8 \SECTIONS
; s) m- Y& u! ^5 j% O( t% Y{- d( f1 k( i# ^( i3 r6 i# G% n- h1 i
    .edma_data>IRAM  align = 0x802 F; ]4 U1 p" u: {
    .audio_glb> IRAM align = 0x805 [1 r- d1 Y  ~5 n) y8 m
        .f_table>  IRAM,  align = 0x80
" V2 b5 ?4 f# e8 g; I" N        .f_text>  DSP_PROG,   align = 0x80 ' z7 {+ T' a8 ^4 r
        .f_glb> IRAM align = 0x80
" d5 ]* p; Z. p/ L5 r6 B        .ref_glb > IRAM align = 0x80& x* |9 q  A) t7 H- B
}. D' T3 `- l6 F% V9 i3 V

8 d$ @* _/ G: F# `" [" R% Q) _$ s, N6 U: E* o0 [5 P; i
编译加了-O3 优化参数
2 p, J- e$ M: O  p, `6 a$ r, B3 A% ~( |7 I0 _& n9 P( Y3 L
" C, a2 U2 y+ o' t5 B
. z% M) b$ P7 B! N1 H

; z+ `4 [7 D. I" B

" J$ i1 \. Y. J9 a5 y: v& l

$ u7 N6 ^+ g5 |& I1 V. m" d
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题& d8 O" x5 Z( T# b4 a

! }) o  j' g$ f+ F% e* h* c9 O2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 02:34 , Processed in 0.051852 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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