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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 : s$ Y% Y: S' j& }, u* R
- k1 n3 }# @/ v
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink). y6 @5 \3 F' y1 h: b7 S- J5 o
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
7 Y3 ]# |; V9 M) W* h/ J- ^, k/ F应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?: r1 c! h0 t( \
* U; E) v4 G) P" I2 n8 t& i
7 j' @9 ^% K2 ~
下面是统计结果4 [/ l4 K- X$ u2 G9 r
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    : \1 ^2 _! g) E" i. B' c# o6 @0 h9 {9 f
emucycle0_0 = EMUCNT0;4 U- e$ F. \4 c
emucycle1_0 = EMUCNT1;
# |" r! i( A/ s" R& n# a+ d- gemucycle0_1 = EMUCNT0;4 x7 g, e/ V& J
emucycle1_1 = EMUCNT1; : ]4 J& H% n! P$ m) g# F& M3 T/ E
emuoverhead = (emucycle0_1 - emucycle0_0);
/ X' [$ X: L& P( P+ `8 y2 Y3 b$ a6 S
; D' x4 ^6 L2 T' N7 \算法();. c8 ^6 o# i7 q6 s

8 o( F6 p( m4 P7 f7 V$ temucycle0_1 = EMUCNT0;6 @" K* \9 T3 w5 P2 R- a) V
emucycle1_1 = EMUCNT1;- w* H5 N  a0 x+ u
6 n% P+ D$ X" D$ ~# T4 l. x
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
0 S$ T, r1 r2 j, p, u) Y
& o" t* R8 P0 W) f! z; ~/ b8 o1 H; q" ?2 ~+ I* E
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍5 e9 |9 U( R) g2 [
DSP> cycles: 196468  :  11814000
7 Y. a( R. W9 P/ N5 ] DSP> times: 430.85 us with CPU 456.* K' c& @7 _; z/ ^9 [
DSP> cycles: 3238292  :  118140003 [0 v7 @; x/ U/ P+ X: \- `. a
DSP> times: 7101.52 us with CPU 456.
% D$ G6 s) P5 i, H1 N DSP> cycles: 157860  :  11814000& D% z: t4 t- u* b+ N8 ]3 N& c
DSP> times: 346.18 us with CPU 456.) w# ^! U1 k0 J: w6 W# c; j) z4 v
DSP> cycles: 3265684  :  11814000/ O3 D  [. `3 g
DSP> times: 7161.59 us with CPU 456.3 z4 ]6 w( b: @3 Q- y
DSP> cycles: 156344  :  11814000
7 t! O0 j+ Z# s9 u, n% k, F DSP> times: 342.86 us with CPU 456.
: r- K' l: I* ` DSP> cycles: 3304428  :  11814000
/ M; M/ n- P8 K, _7 L/ d DSP> times: 7246.55 us with CPU 456.
- v  N( ?& C- p, L
  ~8 h. x. _  \  ]2 P9 [9 F设置:相应的表放到IRAM中了
6 V: i5 C# w9 P* Y! S7 dSECTIONS1 z8 _* @6 T/ V$ U
{9 h" q/ {7 K' _3 k. G* R8 J
    .edma_data>IRAM  align = 0x80
  [0 z) G+ F3 x    .audio_glb> IRAM align = 0x80: ]5 V# D8 K: |. Q9 @
        .f_table>  IRAM,  align = 0x80
' d) x3 D% _: d. ^        .f_text>  DSP_PROG,   align = 0x80 / m1 v; T8 i, Z1 |, }( R0 p) f0 O  k
        .f_glb> IRAM align = 0x80
0 B9 t# z$ J: q& O0 R8 j        .ref_glb > IRAM align = 0x80% k9 a: S+ i' g) |" B) G( O
}
7 N/ j; B" ^. `! {, a7 L) \# F& g* ^% k
  r: ]5 V4 g; k1 g. E
编译加了-O3 优化参数
6 C( e0 T/ ]3 V( Y0 {- \  r* M
  n9 J: j% N" a0 k- h# y% X* |/ y% Q, @1 Q# d

8 e9 S, |' e: O/ n0 M7 |3 D1 j$ b. ]  `: B( }9 g4 T

+ L; G4 S% c1 A: g# T2 v& j4 ^9 s
) C, O: Z# ]6 V4 c- _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
地板
 楼主| 发表于 2018-8-16 12:03:03 | 只看该作者
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题% h# O, ?( z2 F3 n
) M# d. [7 Z3 I5 D1 M# T4 w7 c
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

8

主题

31

帖子

160

积分

注册会员

Rank: 2

积分
160
板凳
发表于 2018-8-14 19:16:54 | 只看该作者
想请问下您是在LINUX环境下使用MAKEFILE编译双核工程的嘛?另外SECTIONS中的内容是在.CMD文件中编辑的嘛?
回复 支持 反对

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
沙发
发表于 2018-8-14 15:48:56 | 只看该作者
您好,根据您的描述,暂时不能排查到具体的原因。建议您:可以先不跑双核,单跑dsp的情况下,测试算法的性能,再判断是否是syslink或双核的影响。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 00:04 , Processed in 0.037487 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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