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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
4 }5 H7 F6 K+ P! A) Z2 t; @4 {; N
& [/ q9 {1 U2 X) `" R1 w' v- s环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink). {8 Y; E$ s! R) w1 \% W6 S( S
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
( {% o7 p( }  r) T4 d1 r7 Q应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?1 c# ^7 K6 \, r6 Z8 A, q
0 B9 R8 R; ]( u0 x' f$ X

3 x+ l7 B4 ]$ l2 W: j4 K$ R/ i下面是统计结果: p) F, C  L# p& H
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
8 F% k( Y( l' k' h8 W2 kemucycle0_0 = EMUCNT0;
$ M. V# \5 H* D9 n% A% o( eemucycle1_0 = EMUCNT1;
6 K2 v( a) `, ^) M2 b2 @) {emucycle0_1 = EMUCNT0;: x- Y- U7 X; e) S% ?4 v( ?
emucycle1_1 = EMUCNT1;
9 L! t" u8 j, Z) v' z. M  x4 demuoverhead = (emucycle0_1 - emucycle0_0);8 L0 i3 B9 H! F

; T5 D7 M+ O  a算法();
4 [5 q; J  \! l9 [, j! F6 N9 b
" w( K3 u0 b( u6 Nemucycle0_1 = EMUCNT0;  [8 E& T& g- W, i# S* N
emucycle1_1 = EMUCNT1;
& ?7 S7 C0 x1 o5 A8 k7 r! G& g0 z! ~$ Y
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;# n7 b7 ~: z' p" R

) M$ @1 ?: \  ~* @5 l/ w
8 c2 Z1 P; @$ N/ _5 q统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍7 J% }& M( o! X8 G
DSP> cycles: 196468  :  118140004 q1 i) e$ g# {* [" i# e
DSP> times: 430.85 us with CPU 456.# n6 N5 ~! `. w* I; q
DSP> cycles: 3238292  :  11814000
/ Z9 P8 L6 x3 x* {) T' a: i DSP> times: 7101.52 us with CPU 456.
. h! A9 K& ?; k: s/ n: i+ M6 I" R DSP> cycles: 157860  :  11814000
  B2 _5 U  o+ B0 ^, T) I8 q DSP> times: 346.18 us with CPU 456.8 l' s- k$ y# y; Q% d) C
DSP> cycles: 3265684  :  118140009 M$ H6 U* }' K' {! o' t
DSP> times: 7161.59 us with CPU 456., [7 C. T( e  v% e+ a
DSP> cycles: 156344  :  11814000* ]: c$ x" Q9 K2 ^' j2 J% @
DSP> times: 342.86 us with CPU 456.1 ^7 t7 J7 O( t1 \
DSP> cycles: 3304428  :  11814000, v$ f; [/ W, z  k" d
DSP> times: 7246.55 us with CPU 456.. u8 e8 V& n' M" m

8 J- r" J' [- [4 ~! h) ~% j' t设置:相应的表放到IRAM中了3 w  b# C) O9 ?! o
SECTIONS$ v6 z" g8 j6 b# D2 ?! L
{
" [) P- ^* ?" }/ O- N5 y    .edma_data>IRAM  align = 0x805 c) J/ Q5 N4 o4 J- N1 A6 @% ?
    .audio_glb> IRAM align = 0x80# k& \4 n2 r9 q4 g) M3 z# K
        .f_table>  IRAM,  align = 0x80
3 X8 B  m9 H0 Y% B/ b, R        .f_text>  DSP_PROG,   align = 0x80
0 X3 I2 a# P' J1 a, `1 [" x        .f_glb> IRAM align = 0x80
- `( [. D# O3 B# P2 o        .ref_glb > IRAM align = 0x809 A" K6 \, y9 j! J, f" |
}# V. I  X# I% T% }, K
( E# ~% W$ z+ I' u  F, L

, I* `7 [) d% ]& g. o. N编译加了-O3 优化参数0 x) r% P. E/ A" ~
4 q+ w& V/ w. ~8 u! N, n
% \# M5 k( O2 v
  |, I3 }& W& \8 M$ G2 \
% O- B' g9 J7 p  l7 u) H8 [
! {# [5 t' l+ f" i
2 r3 c$ J$ @+ z: R7 Z
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题2 c# ]0 e4 N9 p

' M  U( k. S8 M3 V2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 05:14 , Processed in 0.036875 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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