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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
% N* f" [* Z2 A, Z4 E7 R; Z& `& _, |8 T. w  l  i0 x
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
4 m# a; {$ \' j& J& K% @自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的0 [: f" x' m- d% M4 B$ T
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?& ^/ V4 c# H  z' e* |8 R
5 C- T, N1 k/ u( b7 u8 Z4 j) N
( m& }  i9 v% G! F& m0 a
下面是统计结果7 g6 O3 b, L* Q3 n/ o/ I* O
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    # i. y  I6 ?  l
emucycle0_0 = EMUCNT0;2 [$ k2 v5 ?* ~1 C2 G/ k1 W. n
emucycle1_0 = EMUCNT1;0 E, n- Z! W$ O( L0 `# e
emucycle0_1 = EMUCNT0;
- ?5 V/ S# l- Q! o4 Temucycle1_1 = EMUCNT1;
+ y% v1 {2 c( J# K' jemuoverhead = (emucycle0_1 - emucycle0_0);
  l3 O- [+ S2 M* {* o. L8 B* e
/ o2 j6 P& m4 n1 M算法();
- c& m7 u) Q$ y; _2 J" {
! j$ \5 L5 m3 l1 B# g8 Y/ pemucycle0_1 = EMUCNT0;7 f" p, b5 [7 q) m
emucycle1_1 = EMUCNT1;  O$ H) l" D, X+ ^2 ^0 ]; ^: s6 x0 u

+ \0 G; l2 g2 K0 kCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;/ y" B/ G6 ~3 S: a3 s& g2 M7 ~

* _; {  k+ V5 M' i: O6 X! E* c5 t9 r
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
3 U5 M; P% Z+ S0 Z& C  w: v$ D DSP> cycles: 196468  :  11814000; o' w; \* J6 n
DSP> times: 430.85 us with CPU 456.
3 g% Y7 N4 g4 B3 W- k7 O DSP> cycles: 3238292  :  11814000
# T& V7 g9 ^: x- D$ c DSP> times: 7101.52 us with CPU 456.) ]& o6 A7 N  u6 e
DSP> cycles: 157860  :  11814000# ^1 W! l3 ^# h2 q8 n
DSP> times: 346.18 us with CPU 456.
6 @8 q6 z  T: p( a DSP> cycles: 3265684  :  11814000
) |+ U, ?5 h  x, Y7 D6 E' d DSP> times: 7161.59 us with CPU 456.9 w) s  m( h, N# n
DSP> cycles: 156344  :  11814000( E5 T5 O) C' U/ K( M
DSP> times: 342.86 us with CPU 456." C( z% z2 h5 ]! F5 y
DSP> cycles: 3304428  :  11814000
0 `5 C' w8 K( ~ DSP> times: 7246.55 us with CPU 456.
6 u* t' J7 S) g$ p! r! @. B% v; m& l/ W0 r5 `: h
设置:相应的表放到IRAM中了
/ ~+ @' e5 d& L7 F4 C, y/ D$ bSECTIONS
0 w/ ^+ }0 ~9 S; l  k{- y9 }3 ^* O3 Q7 n: i
    .edma_data>IRAM  align = 0x80) V# _, \, Q7 }# \* s+ Q
    .audio_glb> IRAM align = 0x80
; O5 b' o- z2 n) }9 G& ^        .f_table>  IRAM,  align = 0x80
% m9 U9 z' B# L2 K5 ~% W- p  H1 N        .f_text>  DSP_PROG,   align = 0x80
- Y; d, O7 D" ?        .f_glb> IRAM align = 0x808 {2 ~% p: e) w; o: s3 s. b( _6 }, F
        .ref_glb > IRAM align = 0x80
& ~% {( x# j& @( ?' |6 m) s" h}
( N# n: Q  u4 E. d
- V) x  M9 F* z9 R2 I9 @2 ^0 ]
3 D  q2 o0 H( x编译加了-O3 优化参数
* d* e' @5 o6 _% d: C$ t8 ~$ M6 B0 r1 B
, |  U! X/ R% Z* }, T
3 {! R3 }: |% v& X4 u5 r- O9 m
) g# Z9 ~  E( N8 `0 M" [
. Q; b5 D: ?* u: o+ r3 p$ v
* ]0 h$ N* a7 C% h( t+ Z1 i" H
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
& {& b  v& @, e7 h4 ]$ n$ K5 i, T  E: }4 ?! y. t
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 11:57 , Processed in 0.039047 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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