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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
! {) k% a  y7 ?* V* J
4 T  }3 w) H7 U3 T5 Z( Z6 o$ E环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)+ m9 {$ a# n0 ]
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的: P3 d0 [4 a0 Z- y9 u3 Z
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?; u# K" w+ b3 k; F6 h
0 Q4 q8 R  v* ]6 y

9 w1 U- |- @7 j1 J* a4 d下面是统计结果6 s* |  [2 q& Z* o2 U& b9 D: W3 ]% f
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    * x9 q" \2 o4 i  v& a+ @
emucycle0_0 = EMUCNT0;4 B5 _' m5 |$ \* U. ~
emucycle1_0 = EMUCNT1;
* F- e4 T# u4 i- F* q" C" ]emucycle0_1 = EMUCNT0;
" I4 j3 u. ]4 G  l& S8 t. I  |/ G( Zemucycle1_1 = EMUCNT1;
3 t: |: {1 N" T1 m. A/ R/ Zemuoverhead = (emucycle0_1 - emucycle0_0);) M5 i  X9 O+ W1 a

( w  U( @# c! Q5 G) H0 M- k算法();
; Y2 ?# q. j$ w4 {% P" J- g  c  s+ M0 p5 N& {0 v! w) d9 W. U) [
emucycle0_1 = EMUCNT0;4 N$ c8 v, H0 e) y( I
emucycle1_1 = EMUCNT1;
" S, N3 z+ l8 F9 j, A& g: g0 \8 h; f% G0 U" F+ ]# f- X
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;3 n/ }5 _: E) d% O

% o* F1 w0 W) z# b3 }  V4 ^6 }1 E7 j  O
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
  c. \+ I' x0 ~+ u/ d: x& M, I DSP> cycles: 196468  :  11814000
0 w0 O/ Z* [0 m* W% F4 O+ l6 S' U DSP> times: 430.85 us with CPU 456.
& e, P: J% O; M) h$ k DSP> cycles: 3238292  :  11814000
6 R2 r, y; u9 q5 i DSP> times: 7101.52 us with CPU 456.. \+ N1 l! C# x' ]1 F
DSP> cycles: 157860  :  11814000* u4 E3 K5 R$ `9 J# }
DSP> times: 346.18 us with CPU 456.  q3 F" Z+ J: t& h0 {
DSP> cycles: 3265684  :  11814000
* i* Y& k0 p2 D DSP> times: 7161.59 us with CPU 456.1 p7 g$ l3 W" d" }1 ]
DSP> cycles: 156344  :  11814000
  ]: l. p" C& z% c6 x DSP> times: 342.86 us with CPU 456.: E& ?8 {9 l8 ?  V( \- K; c" \
DSP> cycles: 3304428  :  11814000
; y" M( q- p9 q5 H DSP> times: 7246.55 us with CPU 456.
7 J) h9 K3 @) g
; i7 s+ }0 @) e. ~设置:相应的表放到IRAM中了
6 X: m. Z" z% }) I/ lSECTIONS9 M/ W" ~+ {# J
{
. R5 _# @" Y$ Z6 W! e- k+ P0 D# _    .edma_data>IRAM  align = 0x80$ s2 [6 E5 @5 n
    .audio_glb> IRAM align = 0x80& o7 q0 ]6 Q& v7 t2 c
        .f_table>  IRAM,  align = 0x80 4 N" O7 q* {9 n+ `5 |0 r5 A
        .f_text>  DSP_PROG,   align = 0x80 9 _$ w: A2 e; n& k* z$ z
        .f_glb> IRAM align = 0x80
8 Y3 U4 G( f; Y# N) A- p        .ref_glb > IRAM align = 0x80# Z# {0 d3 n' K4 W
}
# b6 k0 H) `/ A; T% b; e0 b3 b2 X
  w; x0 [# B3 I
) D! _  D* J% F( V" w6 S编译加了-O3 优化参数
0 {: w9 [5 H6 D( ^5 b* s/ V; |+ u5 E4 ~) @3 b+ o2 [6 ]$ M

  Q/ E1 L9 w3 N5 U- N$ Q; F! B

0 {- \7 j7 D' x% W; o" ^4 R  x) N* B5 ~9 S

2 d* A$ f' i% N; n

" I" ~8 M+ ^0 n( o$ w% A
分享到:  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 x  {; n8 r$ }* {; H5 w: v0 W+ b5 Q! e: b% c! S  [
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 14:38 , Processed in 0.037971 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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