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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
/ E: }/ \8 H! m/ h  `+ T1 u# o6 K7 i8 i  o% R" J& R
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)( B0 b) V5 J: P- T7 C
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的; H+ _- b& Z! x' E
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?$ [  M3 @: c5 T* f6 y( M
4 Y2 C8 w2 T6 \* [, o( B
% L( B# N/ q% w6 _% ~
下面是统计结果
5 h  O, }- g$ {" Y& ?统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    5 E( L5 ]+ @3 X4 v' f
emucycle0_0 = EMUCNT0;
) d) E$ N. L. e1 k- `# Qemucycle1_0 = EMUCNT1;
, F8 l4 D  |! n8 |& l& W) v4 Pemucycle0_1 = EMUCNT0;5 f- F( O3 _% |/ t1 v& J. v
emucycle1_1 = EMUCNT1;
# _$ ]2 k7 I( d, \; F; C; _emuoverhead = (emucycle0_1 - emucycle0_0);
2 v* ]# r0 D4 Q2 N
  _  A4 y9 W9 Y8 v/ ?' `5 N算法();) L) ^0 @/ O1 m% k- ^; [

: u" k$ R% f0 N* [5 x$ e! Gemucycle0_1 = EMUCNT0;8 C  x& B- S7 X1 D1 ]
emucycle1_1 = EMUCNT1;) _; N# @4 Y1 K! S
1 G7 z, o+ T* k' G  w% Q, }
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
; _8 w' C( e( O/ o* F
. K, {9 C) n  J# R- r
5 ^5 z( ?; A# L1 G统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
$ Y$ N8 m' o) w9 B, o DSP> cycles: 196468  :  11814000
( R/ q! G' Q" d/ ]% @; {! G DSP> times: 430.85 us with CPU 456.
8 I- J: M9 d7 I! B DSP> cycles: 3238292  :  11814000  y% W6 ~! s+ n' ?
DSP> times: 7101.52 us with CPU 456.
; t# U( Y6 ^1 W2 U* K: @3 E DSP> cycles: 157860  :  11814000
, K* U9 v! ]* a) t  }: t5 Z& Y DSP> times: 346.18 us with CPU 456.3 q4 ]& g! o- A4 ]  w1 A, @- U
DSP> cycles: 3265684  :  118140009 p8 {4 H$ B, u& X& \0 Y
DSP> times: 7161.59 us with CPU 456.
, g- s7 H, e& R) }9 z DSP> cycles: 156344  :  11814000
& v4 n" u! d& y2 G DSP> times: 342.86 us with CPU 456." l) T+ D' {7 D# a  Y
DSP> cycles: 3304428  :  11814000
) z8 E# ^$ `+ C* X7 W% k/ U DSP> times: 7246.55 us with CPU 456.. u/ G# p& D; o5 U# M9 S8 @

4 k$ G4 I' u! n+ d0 O3 F, w, U设置:相应的表放到IRAM中了
! H) I9 M' u; ~SECTIONS% F& x- t* m" b
{1 h6 c2 C  Z; @' J0 g/ G
    .edma_data>IRAM  align = 0x80
0 c7 s4 D% ?1 P/ s    .audio_glb> IRAM align = 0x80
2 `: W6 z* G) \1 q$ o# e& ]        .f_table>  IRAM,  align = 0x80 9 E, E+ A' t1 m- z- }
        .f_text>  DSP_PROG,   align = 0x80 : X3 `) y  g/ |
        .f_glb> IRAM align = 0x80
$ l1 X+ R/ e9 l        .ref_glb > IRAM align = 0x80
# M  Y! L0 C5 e8 _) e}' C5 R1 W+ n& G1 E6 Q! e3 X
. L- e7 j* k8 D& W: S

- H! z5 b7 G/ u编译加了-O3 优化参数
0 e( M0 U  A  E8 a7 ^, C$ Q8 y% m; `/ |% c9 }2 \# Q. {

2 F1 S/ Y: D( p8 X# @
  [) |' d3 `2 l, i1 s" E
" z6 r9 y# ~7 S. o
" T; L# j+ O! A' p; t5 b$ e% E3 t

% j  f$ y  Y" d3 l: y' {
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题* I/ K$ J" Y0 x4 z+ \/ }/ A+ v
$ S" n; E( l) Z
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 06:45 , Processed in 0.040154 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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