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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 / H& u- m+ H, C+ Z
. i) L# Q4 }) B! a
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
: v+ I) y* n1 O. b; }$ J( Q; j* F自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的; v: m& y- L; I, }8 _6 m; N
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?  h" Z2 }" J  h. D' K4 N

9 @% Q: r' Z7 P, `5 C

/ R' H( m3 n7 W6 G9 k3 m下面是统计结果& h6 }2 y# f8 U* z4 L* N# v
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    % @) ?) Y# w+ Q8 f5 f$ t$ U
emucycle0_0 = EMUCNT0;- r% }+ `- T5 {0 T) t5 E
emucycle1_0 = EMUCNT1;9 M% v3 F9 k% X9 B* B
emucycle0_1 = EMUCNT0;
7 b( B' K. O5 v; x5 j5 Remucycle1_1 = EMUCNT1;
* j5 I: t" D7 T6 J1 D9 X+ C' oemuoverhead = (emucycle0_1 - emucycle0_0);
7 L& C. j) S4 Z( H
9 J- k1 ^8 S( F0 f& B3 T' x算法();6 {% i' T' _# }

, O# L# b. ]* Eemucycle0_1 = EMUCNT0;3 u4 q: W+ j, L( q
emucycle1_1 = EMUCNT1;8 h: J. [; R2 k# O' I1 `) A
$ i7 b2 H' Z7 r
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;- m& }% v$ t5 |$ H: n8 V; ^" Z& v

: F2 U) Q2 K1 ]* L& ]2 B3 \; ^2 O
  m) O9 O+ }( d5 ?( [5 \% H统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍0 L/ f5 X: C+ Q5 B
DSP> cycles: 196468  :  11814000, e5 H9 M" _0 ~0 k. R5 i
DSP> times: 430.85 us with CPU 456.% r6 c5 N, x; m0 ?7 Z$ s
DSP> cycles: 3238292  :  11814000
* C1 N: d+ Y! C DSP> times: 7101.52 us with CPU 456.! i/ `% M% O8 @" I6 A
DSP> cycles: 157860  :  11814000
9 ]* b+ F5 h7 x- d* N( m DSP> times: 346.18 us with CPU 456.
6 l4 w( ?: \9 j/ I! w DSP> cycles: 3265684  :  11814000# |% Q8 m: w, a# v: A/ Q+ g/ Q
DSP> times: 7161.59 us with CPU 456.# C  _" ]& v9 {: P! J4 g. ]
DSP> cycles: 156344  :  118140006 O4 a- M' C. s' f& Q% L
DSP> times: 342.86 us with CPU 456.
7 f- D$ Z7 C% v7 f8 V; ] DSP> cycles: 3304428  :  11814000% w, T& m, Y. e3 w1 \
DSP> times: 7246.55 us with CPU 456.2 K/ j6 T+ O" E% {: S6 d
) f3 Y- c( ?: p: n' n( J$ D
设置:相应的表放到IRAM中了& w3 e$ ^4 Z! S& p% L* w
SECTIONS) V5 U4 D$ R1 F% k. n; ~
{
, \& c0 V8 l) K    .edma_data>IRAM  align = 0x80
* ]0 b' `* z( z9 U4 r) T    .audio_glb> IRAM align = 0x80
  r5 K" G) S% Q! o9 ]5 z        .f_table>  IRAM,  align = 0x80 1 l* t8 J; {- Y, C+ `# Q4 U
        .f_text>  DSP_PROG,   align = 0x80 % D! o  {! _& N5 M2 i9 ]0 |) O
        .f_glb> IRAM align = 0x808 P5 L3 v8 C3 \
        .ref_glb > IRAM align = 0x80. x4 f& W5 n( U$ @/ D4 E
}+ i5 ]* r9 k; d3 y4 e4 C

. A1 B7 K7 t+ [4 n5 G: l4 F
: W4 r0 A0 x; M. s1 f' Z& B9 ?7 b编译加了-O3 优化参数2 V2 `# ~. L, B1 L0 @8 s, w# _
" G) [* e9 ?3 M# g& t& G1 F/ }
0 s# I' H' M2 I9 z& L
5 B' A: t4 J+ W
: K- s6 J+ {. q. O

3 ~5 s" }: s8 `5 [& A

$ t5 O+ f$ J8 h" q: |9 N9 g
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题( @) b* s! F; q" O& O5 `: |
6 s" Q: e1 J! Y: h
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 18:12 , Processed in 0.037289 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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