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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 ! Z7 E3 G  S8 f* S7 A0 {. ^' R
. V' N+ U; g4 T- v& ]
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)% O8 I2 ~6 W5 F5 |5 x8 y& D# U
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的+ R$ A# D7 u+ O, j
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?2 K1 a; x( ?* H8 S- }
7 @) ?8 e1 j# ~8 g; ]+ u9 Y4 |

+ ], z) }$ x% Y/ d  {下面是统计结果
/ K" \( P0 [; u9 }8 W统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
. M3 T5 C% F( c  a9 D" Aemucycle0_0 = EMUCNT0;
* l+ C. q! d, e% F/ p' _0 r% yemucycle1_0 = EMUCNT1;2 _+ S) Y: {5 f/ L% m9 b
emucycle0_1 = EMUCNT0;: m# P$ p' K6 u/ X
emucycle1_1 = EMUCNT1; ; ~4 Z6 R0 k. f
emuoverhead = (emucycle0_1 - emucycle0_0);
& ?3 C: L  u( M9 S: K+ t
" ^3 b4 M) k( {' m2 o$ n算法();
* f$ N7 n) t/ u' y; f& o: F7 o
& T9 C$ o+ I5 \' z$ r6 Zemucycle0_1 = EMUCNT0;
6 V5 {: u) I/ r* Hemucycle1_1 = EMUCNT1;
3 X- B  ?% T- ~5 d+ D2 R; O' i9 S6 w- m
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
5 I" I& H9 x. r" V/ W+ w  M: [) V: C9 Q" f1 v. b1 G0 w# P

3 M$ t0 O  `; ?% {* Y  i统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍% r& l! ]1 X! j) v6 O# P( B& m3 s
DSP> cycles: 196468  :  11814000
7 s, y  N) v2 ^4 p  S- ?* B DSP> times: 430.85 us with CPU 456.
9 |6 j2 c4 O  G- u2 ?) X DSP> cycles: 3238292  :  11814000+ G6 J: S# v4 W+ t8 f1 F
DSP> times: 7101.52 us with CPU 456.
1 Y; ^) t) J8 x5 a$ ? DSP> cycles: 157860  :  11814000& v/ F! ?+ `. q6 ]
DSP> times: 346.18 us with CPU 456.
, f5 Z! b$ W. L DSP> cycles: 3265684  :  11814000/ W( a2 y$ g, x' r0 z
DSP> times: 7161.59 us with CPU 456.
8 Z" L/ W4 O. y) y( w; i DSP> cycles: 156344  :  11814000
5 m! h7 s% ^% T8 O' h DSP> times: 342.86 us with CPU 456.
/ A" }" r( h8 f* v! Y+ c DSP> cycles: 3304428  :  11814000
& b! |9 y; H  I( n& d  Z( t2 G DSP> times: 7246.55 us with CPU 456.
* p/ [# Q2 Z6 h' ~, f; D. l  [9 d4 T
设置:相应的表放到IRAM中了8 n0 U+ H! b- X  J
SECTIONS- E: G7 `" Z8 W6 V/ N( W9 `
{
% a8 A/ e4 B. @    .edma_data>IRAM  align = 0x80* i* W: Z" h7 o6 W
    .audio_glb> IRAM align = 0x80/ c1 T+ b& t& S8 a* w" i- B
        .f_table>  IRAM,  align = 0x80
$ x6 o3 N* _. w! s        .f_text>  DSP_PROG,   align = 0x80 1 S; a" i* w5 C7 `2 v; N$ q
        .f_glb> IRAM align = 0x804 F/ ?% m. p5 \9 g
        .ref_glb > IRAM align = 0x80
) e* w7 [0 ]1 f}- V6 x. t/ c9 y! b% [6 s5 `

7 b% x& B" h# Q7 v3 P& ], E/ o: x, o& J* H% g" {" ^/ u: D% L
编译加了-O3 优化参数* s3 g* G! ?( U8 p0 F6 {

$ ~0 M' n3 ]4 q5 |3 X7 k; W) v$ ^
3 C: s$ K( {2 Z; @
# \  o0 S; h% U" z* ~+ i% K

2 J' S6 s# H  B

: D7 p4 S& D( B

$ r! m& ?  `* A, _1 T
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题$ I6 J" E5 d* |' w' S

/ f, v) A" J8 v! @& E2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 04:01 , Processed in 0.037988 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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