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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 * `1 {+ E0 w  J

  Q" q" @( C0 ]% ~( V环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)% p$ O; R: f4 N( [. w
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
( J  h, v' z8 h) A应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?/ T) D- @7 x# {3 \
* \6 S, C, C' T7 O  u
% |0 M. C- g0 w# n9 \) B
下面是统计结果* Y; ]/ I. A0 E& V, b: p+ Q
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    , ?/ K3 z& {* a( Q6 D% r# M
emucycle0_0 = EMUCNT0;% P9 u$ b* I7 t! ~. C9 N% C% C* T& E7 y
emucycle1_0 = EMUCNT1;7 W, n( N: V! Q# }' Y0 e  S
emucycle0_1 = EMUCNT0;# r! `& s2 L. I9 f5 B& f7 x/ l
emucycle1_1 = EMUCNT1;
# q: t+ t" X. C# l4 w9 b+ ]  zemuoverhead = (emucycle0_1 - emucycle0_0);
( Z# u9 C! r+ |5 O7 O4 V, G
- ~4 I7 `6 l) |& Y  _& L8 p, q算法();
4 F* E, ^. `3 L+ W, X: u# T+ L
2 z; W: w' q5 R  U# r. Q5 Eemucycle0_1 = EMUCNT0;
, W, K8 D; T+ c, }emucycle1_1 = EMUCNT1;
3 R- u  g. ]$ r5 |( O5 ~6 Q& W/ ?2 Z( `; T1 r, d. m
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;* Y( h) B2 g. A+ k

4 R3 J: j% w% e$ p! s6 p
+ C. t6 c2 c" f  ^5 [, ~  z统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍: P( c9 e6 q, ]9 {
DSP> cycles: 196468  :  118140003 O! c" y  c! a; w$ d% U7 O
DSP> times: 430.85 us with CPU 456.' k$ G. U& Q* v9 r  E
DSP> cycles: 3238292  :  11814000
' m% f; l  [( X" b! [* H: ], @, R0 z: L DSP> times: 7101.52 us with CPU 456.& V" \1 Y" q+ W# l7 _$ f( R
DSP> cycles: 157860  :  11814000
: w5 @4 G( Y7 ]; _$ z0 c5 x DSP> times: 346.18 us with CPU 456.' o8 Z. z2 A7 {3 w, h+ ~
DSP> cycles: 3265684  :  11814000
7 ?) }" I+ R! U! a6 b DSP> times: 7161.59 us with CPU 456.
3 M: [  g7 L. B( g; T) v DSP> cycles: 156344  :  11814000
+ q2 c! M" M( k! t! W' `9 M( o DSP> times: 342.86 us with CPU 456.# _- u0 J" s8 N+ `4 ^: j5 g; z3 Q) \6 s
DSP> cycles: 3304428  :  11814000! I! B" Q/ a  ~: i! _1 z! `
DSP> times: 7246.55 us with CPU 456.
) N/ I- ~+ N: H: o
- J! g8 s5 x  h& M, e设置:相应的表放到IRAM中了
7 M8 ~: P( M8 _7 s* {! GSECTIONS" F  y1 ^/ k* @/ l. Y: ?: }2 S; y/ P4 f- j
{; V6 I# v. [6 F* p
    .edma_data>IRAM  align = 0x80% o8 ?2 ~% w7 j
    .audio_glb> IRAM align = 0x805 u2 H$ ]; G" |' L, U( u
        .f_table>  IRAM,  align = 0x80 7 y& e, \0 B2 O! B7 N+ e& }$ v9 C
        .f_text>  DSP_PROG,   align = 0x80 + O; j% M6 O6 `. N; r( ^
        .f_glb> IRAM align = 0x80
, a/ R5 Z( i& ?* w6 G3 B, p6 C        .ref_glb > IRAM align = 0x80$ ^; X* }" G" X" r1 ~
}9 t, K" J. V: @! T" Q# q" b: Q9 `
7 A) ^) d6 W  x7 h4 N, |7 t
) v3 p/ ~2 y0 W& @+ D( X
编译加了-O3 优化参数
# R5 G( V/ A: y, k' N
" h2 l% I0 S% L* @) N- f% N
# I, |# W* J: ]' ?. R6 a! M# g6 L

% q7 ~: R- T1 P$ g& S  J5 Y* E$ u, K$ r& @4 v$ }  o7 y: s

, j, K" `* Y- M) U+ n
. a6 a; x) R8 h) o% C  i, ?# o1 F
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
1 H, S5 Y/ k( b7 S8 S8 A% {* E1 ^8 T5 g
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 05:20 , Processed in 0.042546 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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