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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
$ {* }6 t' A' l" l3 @  q# c( X& l% T7 j4 k4 C, o% j/ i
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)# n9 Y! n8 H. V) v5 ~
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的4 ]: m( f% Y9 H1 G$ ~0 V0 I
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
/ \6 n0 S/ C6 g6 C/ m: V- |
( [! P, O$ M+ a- {( h5 K" H$ Y2 ~

. j" |+ W- S& S  ^1 e下面是统计结果
4 P( Q" t9 _9 x统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
  z2 a% B/ R$ Iemucycle0_0 = EMUCNT0;
& q& ?. @$ K- l( Zemucycle1_0 = EMUCNT1;
6 M; S- R$ _- a0 d1 p4 s: ]/ eemucycle0_1 = EMUCNT0;- n* V$ @" r1 E; I- H) w
emucycle1_1 = EMUCNT1; % H0 t/ S6 T$ t( M: I6 o  e# [/ B
emuoverhead = (emucycle0_1 - emucycle0_0);5 K' `$ C& Q. a, p, Y
2 O# \3 q9 p5 |6 J3 ~
算法();
/ k1 i4 j4 b/ O3 r! \
# ?% X$ }0 N. v8 p9 ]emucycle0_1 = EMUCNT0;! z' S0 l9 U4 F& r8 E: G
emucycle1_1 = EMUCNT1;
0 m7 s% r% w( C+ s4 N0 z# X2 z5 p+ D, u4 j( V% o% x- d
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;& w; P) p/ k7 m6 B
1 P6 d; G5 b1 \( w" U3 L; Q

8 u# l' u) A2 L( F9 E6 h7 u; Q5 H/ k1 L统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍7 w( Y" D  S8 \4 T- I
DSP> cycles: 196468  :  11814000
- K7 {' @7 Q( V, [% v2 o DSP> times: 430.85 us with CPU 456.
4 h: ^* o5 s+ d1 }! e5 Q# q. u; `6 n8 I DSP> cycles: 3238292  :  11814000
$ Y! p  L2 P$ H7 H: D& q DSP> times: 7101.52 us with CPU 456.
. u$ Q2 Y& R8 E' y- C DSP> cycles: 157860  :  11814000, z6 M, K! M3 r
DSP> times: 346.18 us with CPU 456.
$ y2 j# u8 ^  P3 ~, X DSP> cycles: 3265684  :  118140001 s' v2 p2 Z1 A! B5 f
DSP> times: 7161.59 us with CPU 456.
. w) a' G3 |, v4 N+ ^ DSP> cycles: 156344  :  118140003 Z5 w9 S. Y% y% Z* [7 z3 m7 }3 [
DSP> times: 342.86 us with CPU 456." {9 k0 w% b4 i* Z$ S
DSP> cycles: 3304428  :  11814000
4 u) u9 A6 v9 P/ q) w$ h+ N3 u6 [ DSP> times: 7246.55 us with CPU 456.( {0 h# A- n: h8 @
4 V1 y8 E& l; x/ |9 N; b( ]
设置:相应的表放到IRAM中了
5 Y: w6 d3 b) H% vSECTIONS: {" u2 h1 w8 A! ~
{
# x, d1 ]/ m& d& [- T  \    .edma_data>IRAM  align = 0x800 K, ?6 D3 p- J4 {
    .audio_glb> IRAM align = 0x80
3 u. b' j# D8 q% u        .f_table>  IRAM,  align = 0x80 ; v. E" }2 S: h
        .f_text>  DSP_PROG,   align = 0x80 0 a; Z* B, [& y& S& x$ h
        .f_glb> IRAM align = 0x80
8 c( X6 E- M  a7 y9 h        .ref_glb > IRAM align = 0x80  o  B$ v5 i- N2 u/ ^3 Y! K
}
4 m6 n# I6 C! }2 |0 R+ L8 H+ d. g9 Z" b

  [' f# a: N) F! B7 x/ x. l编译加了-O3 优化参数) j. {% X2 g! z- s# L
- q$ _4 ^5 n' ~2 {& q

; O6 e" |( M- v! Q. c
+ \( ^# L( K: j' J' D4 t; X
% f3 K' j1 k, N4 F1 @
% y/ d5 y$ D6 y; i, U1 a" V
$ ^) I7 h8 N! o8 S6 W
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
- T, w( i; C) c8 t  C4 T) `" H: g2 L/ G2 s
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 04:21 , Processed in 0.038228 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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