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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
. A& f0 M; k, s' H5 D# ]( Z' y9 x3 ~3 |! K( V1 Q! X
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)2 u+ G: F8 n" r& g5 @" U
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的- Z$ T" \+ n6 P5 C* l* l
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?1 Y( z% E% U/ D% n' x1 m2 M5 |
, G" S8 `, m; K2 s$ }4 o" H

8 a+ ~5 R4 Z" ?0 ]/ t下面是统计结果" p2 U) s. T7 K; I
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    4 G  T% J7 V2 J- I4 K; M
emucycle0_0 = EMUCNT0;1 I2 Y2 l7 V3 s) M" h
emucycle1_0 = EMUCNT1;
+ @$ @" _$ m; G* `, Temucycle0_1 = EMUCNT0;6 q; F! s" o: j
emucycle1_1 = EMUCNT1;
5 h# ^2 ^# m& y8 cemuoverhead = (emucycle0_1 - emucycle0_0);6 f. Q& C5 m3 L
; n+ }0 q6 N7 a" d, W
算法();1 V! ]; w1 V- F3 G0 F1 G6 j0 P
" [- g! `: h2 O- q7 `1 A. V, @
emucycle0_1 = EMUCNT0;
  G& A! q/ o2 k( d" semucycle1_1 = EMUCNT1;' B$ q" ~# u9 ~: V0 M
  Y. O4 [: H" y0 K$ Y
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;) C) j+ i& w( b3 j9 R) k8 X) V+ C

& }' i3 S- s9 v( u5 i7 C2 i0 H* m
# L3 ~% z# _6 l# v统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍; W7 V, o2 e5 G3 M$ E1 N
DSP> cycles: 196468  :  11814000
5 o7 T% |0 M+ U; {6 v, ^2 O4 V DSP> times: 430.85 us with CPU 456.
; H' X0 |7 x0 h, ]% x1 N DSP> cycles: 3238292  :  11814000+ c+ I7 V' e1 n
DSP> times: 7101.52 us with CPU 456.
6 ?' H; F; f6 z, j$ K DSP> cycles: 157860  :  118140003 U1 V5 ?7 c- @" e& e( G
DSP> times: 346.18 us with CPU 456.
6 E3 d  f2 [. B: C! p& f DSP> cycles: 3265684  :  11814000
. f5 e5 |- t: s  V: [) l% o: o0 H DSP> times: 7161.59 us with CPU 456.8 q& B$ O9 Q3 l) t- ?
DSP> cycles: 156344  :  11814000
9 K0 ~% h0 i" y) h/ I' n DSP> times: 342.86 us with CPU 456.
5 X+ ]! E+ B! A4 K" g! V& ?; N# x DSP> cycles: 3304428  :  11814000
! t% a( ^$ f+ R3 O0 S$ x DSP> times: 7246.55 us with CPU 456.
. J0 U0 m4 G5 x* g+ @' P$ C
* W' |8 H: N( v( J+ N设置:相应的表放到IRAM中了& l6 [0 \& @2 V3 D$ G$ ]7 K
SECTIONS
$ q& X) h& S" n% N, C3 {{
/ w& C' u+ ]# Z0 b) [    .edma_data>IRAM  align = 0x804 w& t8 I' G; B; a6 e' ^
    .audio_glb> IRAM align = 0x80- J6 d3 m% I5 l
        .f_table>  IRAM,  align = 0x80 . B; Z5 L9 r: t$ N: h, _
        .f_text>  DSP_PROG,   align = 0x80
7 m" p' ^: C+ U* X8 R" b* Q        .f_glb> IRAM align = 0x80, s) s; W: z' A; B& T$ @
        .ref_glb > IRAM align = 0x80
7 g' g! i- I1 R) P4 g' v}
/ C8 M+ w2 r9 }# |. E; m- V' j6 t: J1 n& V
% r) W+ V9 ?, y2 g7 Q
编译加了-O3 优化参数
7 z' D/ u6 U# J/ X+ U! U
& J2 f- C( O4 B0 w1 \( a0 }: C% [
; W4 e0 f7 H6 ?. ]* I: i

) V. m! o7 _" Q  Y) s! C1 r% |+ Q
/ j6 O7 q9 v! ]) _
$ y5 |- G" {' T8 b' E) Y" I$ ~

1 v" z- B: R1 N2 ^/ d) B
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
( w. Q+ p0 C: o# E4 z* b) ]% m
1 C. |( ?$ C9 P" M) c9 m5 q2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-2 10:43 , Processed in 0.035746 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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