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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
$ H2 m' o; a  ~2 |6 i7 _, Y( g2 k& L; S4 J
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)5 r( X0 H  E" l0 t" g9 O- E, Z. Q
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
9 L, J: A- C# V. p+ b应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?, r0 w' B  E' t6 h% U) I  V
; I" \& ~$ Q. m

; Q" l" L% h9 L; C: i. w6 \下面是统计结果
3 t& m9 [' u4 r& z* I统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
6 I! n1 C1 Z5 d, T+ Uemucycle0_0 = EMUCNT0;5 H2 V! V) T( M6 z  \# H- y* E5 y
emucycle1_0 = EMUCNT1;. d. a! F' E+ R% q* \- E9 n
emucycle0_1 = EMUCNT0;
" @7 c) l/ Y& S1 L0 u8 I/ eemucycle1_1 = EMUCNT1;
; \. Q' T/ m% [  ~; o! L3 wemuoverhead = (emucycle0_1 - emucycle0_0);
; J4 I5 M$ o- T9 W3 k, Z
. x9 [9 i* P% z" ~6 U, i算法();$ _& [9 s$ y0 A( K  C6 v

! r5 A# F4 P* |9 Temucycle0_1 = EMUCNT0;( @4 T; j9 a1 T0 \+ b9 u/ R/ Z0 ?( S
emucycle1_1 = EMUCNT1;
$ Y5 R& S' M7 L3 @3 M8 [0 ]4 k/ ^' T$ f8 ]( u0 r! g9 b
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;5 }9 X/ |8 q3 R! p* n
: D7 M/ }( M8 q/ S+ i
! X) y( j& b4 K- h7 D0 [
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
( w  u: h; ]4 ~8 |% S DSP> cycles: 196468  :  11814000. [2 C% m% v% ^2 c. F
DSP> times: 430.85 us with CPU 456.$ E. F$ T9 c7 U6 o" K7 `
DSP> cycles: 3238292  :  11814000
- {4 e5 r6 }( [# T# M$ A4 [ DSP> times: 7101.52 us with CPU 456.6 \$ l5 z% @( z1 s- a
DSP> cycles: 157860  :  11814000
) V& U# g" }7 \* @ DSP> times: 346.18 us with CPU 456., P( M1 |% B+ t1 P4 w! E7 H
DSP> cycles: 3265684  :  11814000$ n& f& _+ y0 F
DSP> times: 7161.59 us with CPU 456.9 ]  s; k. I4 L2 @
DSP> cycles: 156344  :  11814000
& x( }3 m% k% w' p DSP> times: 342.86 us with CPU 456.( ^! k4 p+ \4 w9 m
DSP> cycles: 3304428  :  11814000
! g# ]# N8 q( P8 v9 { DSP> times: 7246.55 us with CPU 456.- R% @+ B/ d1 K. Q
: O) ~! U; r" g4 c; F6 s, _+ ]
设置:相应的表放到IRAM中了- V0 `0 a! ?0 S! Q1 V
SECTIONS/ F" B# ^; z( R
{
2 E# R1 Y' b+ \3 R! _9 w    .edma_data>IRAM  align = 0x803 T' H! R! z4 \* t0 a% _7 K
    .audio_glb> IRAM align = 0x803 \& W" a+ f, }
        .f_table>  IRAM,  align = 0x80 . [' k& o, |" B6 x- H
        .f_text>  DSP_PROG,   align = 0x80
, h: s% v- h1 y! s4 O; {5 t6 A6 O        .f_glb> IRAM align = 0x80' v0 x9 d% X$ }5 N  [" V( B9 F0 g
        .ref_glb > IRAM align = 0x803 z6 t  |: t* f9 q% {; R
}
* Q, |; l( ^7 n& x7 G3 `7 {; S: {. L3 l. O

; o6 y9 V: i9 o) x/ H编译加了-O3 优化参数. U  f8 z  g& i3 @; V

" d9 ^1 M; _6 M: p' e- Y- T- @' ]: F; b( E: p+ v6 w" T" r

+ }0 _; [: ~: Q( K# m9 }
7 A9 |6 b5 I& Q# B/ S0 e# W: I
* |* w- P) z& j  N

# M6 w/ m: a, m" Q+ ?( ^
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题( O! M9 `. ]5 Q) F' Q. R, A
4 l3 w# J6 T6 j! _) }+ {
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 14:05 , Processed in 0.039288 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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