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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 ! _0 R7 \5 N0 c; p0 f
/ J% v, n. d% o! T$ o
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)8 P3 D2 p$ b7 b
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
9 D4 s3 F& X# l$ n6 B) \( g; m9 A应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
# h& E' S! {- E' a8 n
8 q# n/ S* }) f

7 _+ ^4 M  d0 x4 j: z* g下面是统计结果4 ^0 t3 V/ T# i( [3 P& q3 a
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
5 d, A* U! }2 P$ Hemucycle0_0 = EMUCNT0;
. d7 S: h3 U( j9 ]3 Nemucycle1_0 = EMUCNT1;& w; X3 B1 R( W* E8 {6 N# J3 m2 L' ~
emucycle0_1 = EMUCNT0;! h/ O1 Q* M$ h# R7 m6 t( F
emucycle1_1 = EMUCNT1;
+ E" g1 E: F; Y( P& Xemuoverhead = (emucycle0_1 - emucycle0_0);
- |5 A$ r$ U" A5 D
, C5 V0 j( r' U2 r算法();
/ d4 z2 S1 r9 C/ i; Y4 u! Y2 t( s3 B) {8 W( V0 [, @! r
emucycle0_1 = EMUCNT0;
* b( Z7 X/ X' K$ m) wemucycle1_1 = EMUCNT1;; B; W7 j# w: H9 o

9 J  y. I0 d7 X( v; D( [1 QCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;/ Q7 p9 C. G/ m% s+ J
6 X# h2 n' F1 F5 P- z5 p( V2 ~" e3 S

# N2 u+ n0 i6 p* ^2 z统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍* d2 R6 @# ^7 h% i
DSP> cycles: 196468  :  11814000; b* S, s4 @4 E# T2 ?+ l2 a
DSP> times: 430.85 us with CPU 456./ M+ Q( ?" L2 O2 n8 t$ _
DSP> cycles: 3238292  :  11814000/ F/ a; F5 R- g( o+ @( Y
DSP> times: 7101.52 us with CPU 456.
/ B% T3 y$ a* x- M+ X# F" |- D DSP> cycles: 157860  :  11814000
/ h. }( w" k7 L# g6 Z8 b' W DSP> times: 346.18 us with CPU 456.% A. b  E1 A, @3 K
DSP> cycles: 3265684  :  11814000& f0 M0 X8 w  z/ Y
DSP> times: 7161.59 us with CPU 456.4 i+ ^! j; D' I  T, @( p3 L# W
DSP> cycles: 156344  :  11814000
8 W5 U' v* g! @2 W9 {. D* D; ? DSP> times: 342.86 us with CPU 456.
; u$ ^) \' z+ L4 f! v- | DSP> cycles: 3304428  :  11814000* P; y+ x' Z' x
DSP> times: 7246.55 us with CPU 456.) V5 N, W' w' j& ?0 [. c
5 K; {" J/ V  [% d9 \9 D
设置:相应的表放到IRAM中了4 c- [* p9 n& ]* C) I( W5 ]7 P
SECTIONS: `) Y/ e: y  F: Q1 {0 r& i
{: f+ K9 _9 q6 X0 R& k3 V
    .edma_data>IRAM  align = 0x80
% T& E3 ]+ N5 @6 e4 K/ P1 l& i    .audio_glb> IRAM align = 0x80. J: T8 t* s+ e& I( e
        .f_table>  IRAM,  align = 0x80   K6 I/ H6 `" }( ]
        .f_text>  DSP_PROG,   align = 0x80
8 m1 J5 T, y1 p1 D  s7 e        .f_glb> IRAM align = 0x80
* `. F, ^4 a# ^6 H* @. Z1 X* @        .ref_glb > IRAM align = 0x80
! E1 p( }2 c3 ~}
9 l; P( O# X( l5 n- N1 s
# }* d) w3 i1 O: e; q
/ j. a; Z( `& M- g9 Y+ p, S编译加了-O3 优化参数7 y' y4 a& y& C! U
- t* R" Y: }# J3 o
4 q* t' W! \" _: w) u
4 ~9 ~8 c  \& N
3 [- W8 n& V+ E- Q( i! y
& u5 |6 |- X8 M# E4 C' @4 P' c  f6 q
, a5 [( u; y5 U! h! Z' K: {
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题0 x3 k1 \0 ]  p9 L# T% B
; Z7 a( V: ?5 T# R- l( I) Q3 [3 b
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 14:07 , Processed in 0.038107 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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