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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
! [2 ]' _6 k; y: p4 B; n/ u  x* `( y' [: a5 d  `/ ?
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
# V0 l9 e7 a& Q自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
' @4 t9 ]! N1 _$ e5 u应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?: R/ s# I/ e* o9 t: r5 Z' h: E
% s  |. ~7 ?: N" ?: o
$ N# Q0 V7 l% H3 E. N
下面是统计结果
7 p( f, X/ l% I: V& A统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    0 w4 J) ^4 g+ B* J# q. q9 a5 W
emucycle0_0 = EMUCNT0;
/ k0 e* U* H- c% `# lemucycle1_0 = EMUCNT1;! \; P1 h0 t, ^$ \( @
emucycle0_1 = EMUCNT0;
) S" {/ c+ D0 u. Wemucycle1_1 = EMUCNT1; ; N& R3 W; T" I2 X
emuoverhead = (emucycle0_1 - emucycle0_0);
+ K5 f/ l+ V% D  R) E8 ^9 y0 Y: b
( d: z0 @; j$ g9 r算法();
9 F) d+ _, U8 b9 m% T  P
) s# z* h: Q) x2 j) P6 H* Hemucycle0_1 = EMUCNT0;
+ x. o- s! H0 f5 {& r9 W% temucycle1_1 = EMUCNT1;7 V* F! Z4 z0 }% ?9 w  [

" U& Q$ n2 V0 nCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;$ K8 d5 i5 w" [9 A$ Z
7 p) k+ u) G. G4 D( G4 V) E( c& J  D
* \2 T7 w" L3 X' U/ ]" q0 S9 e( T
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
, d, j$ }7 |" d+ t1 b# l DSP> cycles: 196468  :  11814000" g5 E9 u# \( g' W9 {
DSP> times: 430.85 us with CPU 456.
& g( Y: g. o6 s# z, e3 f DSP> cycles: 3238292  :  11814000
1 l9 ]  F/ _- P+ A0 f  x( } DSP> times: 7101.52 us with CPU 456.
9 n) b+ y# i2 H$ H$ I7 a* D8 q DSP> cycles: 157860  :  11814000$ R, g3 ~: p) m3 d) J& r
DSP> times: 346.18 us with CPU 456.
8 i' u9 h# _' Y DSP> cycles: 3265684  :  11814000
6 U1 v0 r- S8 s& Q- d" l1 x$ b; c DSP> times: 7161.59 us with CPU 456.8 C6 ~. ]7 r! X
DSP> cycles: 156344  :  118140005 g6 I( M( H( Z7 d0 i
DSP> times: 342.86 us with CPU 456.4 V6 V6 [1 y; B; [0 x' E
DSP> cycles: 3304428  :  11814000
. {% D# d) ~+ F# A+ i7 [  f/ K( K DSP> times: 7246.55 us with CPU 456.( D8 y* s, q4 P+ H* [7 S
# o# }1 f; @" N
设置:相应的表放到IRAM中了
# _* `% O5 ^4 G& \) K6 i/ l2 u0 |( v/ iSECTIONS
: [  \& X  q7 K' f( P{3 I4 p) S' z+ {, {# k/ Z
    .edma_data>IRAM  align = 0x80
- c  P3 m( N5 C8 c    .audio_glb> IRAM align = 0x807 V: E% p. B' K5 p2 Q2 w, m, b
        .f_table>  IRAM,  align = 0x80
5 K% _* y4 S- z6 L6 i+ @) S- ]        .f_text>  DSP_PROG,   align = 0x80
- A; K9 H7 G/ [) h" o        .f_glb> IRAM align = 0x80
5 l. q! i! \+ Z8 M# E        .ref_glb > IRAM align = 0x80
$ t* |  K4 O! c- ]- L' r" q& A  p}
' B% M, e7 M; Q; p% T2 X1 a" y2 Y

9 a9 n/ ]( I- b  \3 V4 O  i编译加了-O3 优化参数
/ ]) f( b6 V) x! J9 Q; v* x- x$ W7 K6 n

' r5 f+ b5 r0 u
/ U9 \: G) L2 U( n& _' c' u

- D4 \, k, U8 h: q/ ~# M! ?: J

5 v7 t2 ?( `  @6 J6 g& O- D

+ [' C5 m, {% F) o* @. K
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
& K+ c4 c' F# Y. G; I+ X
% b$ G4 P% A6 _/ ]* V& h9 O2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 07:47 , Processed in 0.038635 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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