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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 ) f8 x, P2 O* w! N) h! v

: p9 f' \% n4 }环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
$ ?( |7 u6 N% _  t0 `/ e自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的  Q. P2 ?% J5 U& V4 D5 N
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?) Y# H! S/ x/ r8 U% V1 ?
! z( {; q# K& k: N* @

8 A8 M( }' I9 f2 K$ Y: _( S下面是统计结果& O# m  R1 {! ^- Y, ^
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    6 M, W, v. ?9 O( t) u; {
emucycle0_0 = EMUCNT0;% e5 A$ i. f) t5 G+ v2 n& j
emucycle1_0 = EMUCNT1;0 }) y; l# o5 y& |% Z3 g0 r
emucycle0_1 = EMUCNT0;' ^# U; s% [7 D) z2 ]5 p
emucycle1_1 = EMUCNT1;
; D7 G, W# k  ]$ femuoverhead = (emucycle0_1 - emucycle0_0);
' W" u/ o" P! K" Q# r9 X) I4 }9 H9 w) G; O7 J& `
算法();! N5 ]7 o! v$ t. R0 D
3 O; ]0 ]# _  z! C6 d+ r
emucycle0_1 = EMUCNT0;
+ I3 F- c/ W: s' m' vemucycle1_1 = EMUCNT1;" h1 J+ X9 h# }/ T1 l

( S/ m7 J* i9 J2 T8 lCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;% @% H, q! y; d4 k, O( b7 A
( \. |- P  U. h$ s. d; _

" B) l& p: X, l7 V" D7 U1 i; G统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍9 \' Q& o  l' b2 D6 o" a# i
DSP> cycles: 196468  :  11814000
  {; ^5 o% X, }4 E4 V) W/ G& d$ h5 ^8 ? DSP> times: 430.85 us with CPU 456.6 D1 W  i/ ^/ k5 }  J
DSP> cycles: 3238292  :  11814000
  \/ h, C" I  } DSP> times: 7101.52 us with CPU 456.
  i. ~2 ]5 D  S! E& f! I DSP> cycles: 157860  :  11814000
4 i8 ]+ h# J  |2 h/ q; j* q DSP> times: 346.18 us with CPU 456.4 E8 X6 U/ T4 k& b8 o( q
DSP> cycles: 3265684  :  11814000( X" I+ L  y. r& j- `/ X7 k
DSP> times: 7161.59 us with CPU 456.- O; A7 H  E% h* [* W  l8 ~
DSP> cycles: 156344  :  11814000
0 |+ h8 p7 W1 @" Y$ o0 y0 d. D# @- @6 j DSP> times: 342.86 us with CPU 456." d: Z1 u4 r5 i3 \
DSP> cycles: 3304428  :  11814000: t5 K3 n" f$ Z+ L; r- y: r
DSP> times: 7246.55 us with CPU 456.
" W! F! O- F/ i! Y2 H
, K  |- j0 M0 e4 d8 _* w设置:相应的表放到IRAM中了- l5 Q; o. m/ j) g+ s! U& i* ?6 a# V
SECTIONS# F" |7 R5 d+ |: V2 r0 G
{
: J0 I0 t# T2 D& G    .edma_data>IRAM  align = 0x801 i- h. T, S. b, K" u
    .audio_glb> IRAM align = 0x80
/ c% D* _4 L" c( G) T/ |) x        .f_table>  IRAM,  align = 0x80
/ m4 ]' l9 z) y& [        .f_text>  DSP_PROG,   align = 0x80 # m' g, a# p) X9 Z, u: R; }
        .f_glb> IRAM align = 0x80, a3 E. f+ H: H" t" `
        .ref_glb > IRAM align = 0x80
# l4 g& ^1 ^: P: ~) s* ~% q9 h}
+ a5 E- g% Z+ M0 C0 h; ?) G' m  j& c
  x8 l8 G0 {; V
编译加了-O3 优化参数) v$ k9 W7 h5 f, {
0 J$ z+ k4 B3 f2 u0 i; G% d
% k4 B6 S1 c% X( z* r$ E

1 n/ ]! q* {; C. c6 |# ], i4 d" Q% S: W( F9 N, i

, `' s! ~2 L1 z: G! e/ X/ @

$ r6 B. @0 N9 [7 ]) U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
沙发
发表于 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的 , 所以开启栈空间地址的缓存就可以解决问题8 R' L" [' B) I& R# l2 a
& I+ k5 D! h3 y  J- J  m1 j
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 01:32 , Processed in 0.037723 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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