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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 # N( o! w- V9 P7 L

" u! y' j. K/ i6 Y# j环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
8 i8 P2 z* e( R2 B. w1 a  I, D- y自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的3 M) k/ k6 f/ j
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?5 J* @8 }8 o* u6 n0 k

+ k+ @# D9 U: }
. x6 i& t- l$ `; C
下面是统计结果& m& |5 U. [; ^+ j
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    ) ~1 _2 e( C: }, k
emucycle0_0 = EMUCNT0;; v% p0 Q& H2 P8 t0 S
emucycle1_0 = EMUCNT1;
, {! B; \, P; }" |8 J6 d. e. M3 F. @- eemucycle0_1 = EMUCNT0;/ F2 u+ y3 g$ V* }( H
emucycle1_1 = EMUCNT1;
# L8 W8 @1 N1 T" Aemuoverhead = (emucycle0_1 - emucycle0_0);, o/ [: P! f; x- x: [6 h3 |1 j0 ~

& l# u4 S+ U: c, p4 D算法();
" l4 U- y( Y2 N! L, F: x/ ]4 h. I/ h% p$ S& W1 [
emucycle0_1 = EMUCNT0;
3 ~( m2 {/ @3 ~  I( Zemucycle1_1 = EMUCNT1;
. p" z8 G+ u1 w7 v$ e- S2 n. }6 O2 Q9 O$ A* c; E
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
0 |3 `% O' J( r. J& D( K. H( C" S, a/ e

' J! V3 Y. v" ?- t& C2 x# X( ]统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
: d9 o0 R6 ^: I8 E+ Q/ Y DSP> cycles: 196468  :  11814000
' p! N& `' ]- L- W DSP> times: 430.85 us with CPU 456.
- V& U& @( m. \; B. @. T. Z5 ~ DSP> cycles: 3238292  :  11814000$ o/ n5 P: i0 q$ d
DSP> times: 7101.52 us with CPU 456.
! m; ?1 U- [% c0 [ DSP> cycles: 157860  :  118140002 N' I7 L0 W( d+ \% R# a  Q
DSP> times: 346.18 us with CPU 456.0 z  V+ \, P( y1 H3 j
DSP> cycles: 3265684  :  11814000
( J, \  m# x* {1 ?$ S' W# N DSP> times: 7161.59 us with CPU 456.
1 ^& y( z$ z8 _* T( B  p1 r/ X DSP> cycles: 156344  :  118140002 i: t7 {0 F/ [  i2 M( h
DSP> times: 342.86 us with CPU 456.
4 Z! J% J7 G1 [1 y4 s5 N DSP> cycles: 3304428  :  11814000  w  i" }9 u' ]% {& s$ ~
DSP> times: 7246.55 us with CPU 456.
! K, A! f4 A5 h* [
% P3 v$ G' q1 y3 T5 V' T/ k- o设置:相应的表放到IRAM中了
% f" _& c1 [; T6 ?5 iSECTIONS
' r+ S4 ^% f; R$ u{
6 X5 U6 c/ K4 z3 V    .edma_data>IRAM  align = 0x80
- T2 I- I+ R" ~/ O! L1 C- _    .audio_glb> IRAM align = 0x80
* N7 q3 b" h; ?& i9 Y" S  _5 u        .f_table>  IRAM,  align = 0x80
) J+ ~- X# {8 u4 r- J        .f_text>  DSP_PROG,   align = 0x80
5 r; L) n3 t( |8 s        .f_glb> IRAM align = 0x808 k9 U4 M% t! Z% ]  D
        .ref_glb > IRAM align = 0x80
% i. _- \5 \+ A4 Z+ y2 b# S}
9 g0 u* d; S" ^" p
! V+ E0 t8 P( U+ f
. t. ~  m  Y4 r2 e* y编译加了-O3 优化参数
1 n: e( ^$ p. s5 Z% g4 r1 v# P4 l5 S  ^! u* \( J0 p
6 I8 |2 `' i2 ~2 i1 v
8 b4 N, s, {. t* r) T# g- K* ~

1 T* a5 t4 G- h; x8 s6 Z
! Y9 \( B, h2 v& V

7 _+ \& J8 c/ _  A( @$ a
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题- O: g0 O1 D8 U; @$ r: m, Y
3 T" v5 n) E% i
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 07:36 , Processed in 0.039522 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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