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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 4 ~7 ?; X1 i: V  j% Z8 i
3 N: B/ b# D' @$ a: N3 p! N
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
+ W, G+ b; g7 M7 C9 s) j自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
; P1 h3 H" H! c9 |0 [) N应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
  M: v, B' i" Z' b- G) c  M: ~# e5 ~5 }. A

1 {: d+ |! w0 i! b* z下面是统计结果
: }* i9 [% Q: t统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
( c; p, y1 n$ [5 d" }4 T! r2 ]/ y$ temucycle0_0 = EMUCNT0;
/ @# g, s+ X3 a3 D( H; pemucycle1_0 = EMUCNT1;& R. C5 w7 m8 {6 o/ p
emucycle0_1 = EMUCNT0;
, b5 M+ z/ @; H  a. eemucycle1_1 = EMUCNT1;
2 w  c3 ?5 Q  C, H0 Y8 kemuoverhead = (emucycle0_1 - emucycle0_0);
" x# [$ `9 Q! z% b/ \
2 J4 Z1 \% w. M# i4 _算法();
( `4 H  g3 Z8 z- ~# ^2 P* ]6 O0 r3 B+ t; D- E
emucycle0_1 = EMUCNT0;
; f% m* ?6 D' S& t: D0 jemucycle1_1 = EMUCNT1;. v1 p; M  k5 c$ [" ^

" W2 ~7 `; Q" c. MCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
: E) t" C4 ^! Z: _1 q7 P, L& ~, A) ~) _! V( s

* y6 \: ^$ |" J, P4 [5 ?统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍8 p( v( \) Q$ G$ t; ^0 o( u6 d3 L
DSP> cycles: 196468  :  11814000
, B: j* h4 o2 ] DSP> times: 430.85 us with CPU 456.2 {6 J2 E: M) ]1 R  b, v* Y4 B
DSP> cycles: 3238292  :  11814000# b* o! \& i- a6 a- Z
DSP> times: 7101.52 us with CPU 456.
# ?  K: F' l# T" s: u- n9 r) x DSP> cycles: 157860  :  11814000
, f6 @, B! p3 B" ~1 C& @ DSP> times: 346.18 us with CPU 456.
% {5 z) A& Y  B; p) t4 i7 H DSP> cycles: 3265684  :  118140007 ]6 ?# z3 k6 l9 B" F7 F+ T5 }9 |: C
DSP> times: 7161.59 us with CPU 456.6 d4 j6 X1 O/ @$ t3 O
DSP> cycles: 156344  :  11814000( G- n; V. ?/ d* l6 f; M
DSP> times: 342.86 us with CPU 456.5 X  `; a9 a" |) \0 T! @8 v% x
DSP> cycles: 3304428  :  11814000
4 s3 c7 \4 V- ]! b- W DSP> times: 7246.55 us with CPU 456.9 Y! s4 o* V% b3 G$ ?! N4 s
0 @8 `3 r$ U% K" z
设置:相应的表放到IRAM中了$ K: P4 b8 p8 E3 \8 B* s4 n& j
SECTIONS' @2 G3 q! ]2 S% w+ Y2 H
{* m; \& q2 p6 M6 L' r4 r3 @
    .edma_data>IRAM  align = 0x80
+ X( G. ~! I" H+ Y  f1 a' W3 Q2 k    .audio_glb> IRAM align = 0x80
* l' l( z* C- K1 e+ ]' i        .f_table>  IRAM,  align = 0x80 8 Y1 c9 R( v2 s0 b1 J0 {( U$ |
        .f_text>  DSP_PROG,   align = 0x80 2 I2 n- e1 H+ a9 C" b: T+ d
        .f_glb> IRAM align = 0x80
$ G5 u! b* a0 p( U7 f3 @( |9 f        .ref_glb > IRAM align = 0x80
, e' A' `9 u3 B; f" H}# k3 |9 D% d% C3 y
7 ^- c; ^! I# I2 G* c: W  ]

4 v& a6 j4 M8 i编译加了-O3 优化参数
; {0 t2 b6 c' `) P- [7 d: K
( E: t0 U* f; d; R# r( K; N; V6 |3 Y; L& @
+ q3 E- O+ v' y' J5 c

+ \/ W0 [% g% F

1 O; S- y8 p6 M5 P

+ I5 |$ \+ n. S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
地板
 楼主| 发表于 2018-8-16 12:03:03 | 只看该作者
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题: W) c& ?/ h3 V+ L3 \$ ^

9 y" P: B. R+ t2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

8

主题

31

帖子

160

积分

注册会员

Rank: 2

积分
160
板凳
发表于 2018-8-14 19:16:54 | 只看该作者
想请问下您是在LINUX环境下使用MAKEFILE编译双核工程的嘛?另外SECTIONS中的内容是在.CMD文件中编辑的嘛?
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
沙发
发表于 2018-8-14 15:48:56 | 只看该作者
您好,根据您的描述,暂时不能排查到具体的原因。建议您:可以先不跑双核,单跑dsp的情况下,测试算法的性能,再判断是否是syslink或双核的影响。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 22:39 , Processed in 0.039684 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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