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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
2 I' l; k5 w9 h1 H( A/ G$ V* C, u9 ~+ A; V9 y
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)2 f5 j& |8 C5 R& Y- [) m" {* N
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
& k% J7 O  m# J0 |+ m# i应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?' N, y& E# N' L, n' w
" F* F& a# G- B5 J7 k0 l4 d8 S- }& y; {7 M
- Q6 W1 ^* b# o/ a4 V* r
下面是统计结果
' o) F+ V3 H4 s& A$ d+ T/ u统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    ' C# x0 L& T( U: t
emucycle0_0 = EMUCNT0;
: W* n- R9 E1 nemucycle1_0 = EMUCNT1;3 X2 W! v2 k! J+ P  \5 ?) B+ R
emucycle0_1 = EMUCNT0;; Z, m  d5 T: }+ H" m+ ^
emucycle1_1 = EMUCNT1;
% J( S9 \7 c- Y8 n* F, [1 m8 Eemuoverhead = (emucycle0_1 - emucycle0_0);& p2 L( g$ d( [$ }" P! H
' K) g! a0 {$ b2 j" t) Q0 j
算法();
  s+ V  i0 c4 A. N2 x$ I& h% t4 d% W3 e# a; z
emucycle0_1 = EMUCNT0;
! r% r+ p9 s; p; `emucycle1_1 = EMUCNT1;1 o6 _. Y/ s0 I# S- B  O# D9 _

1 m1 b* I: d- r. w9 a; lCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
% n2 v+ Y+ [* q3 J% Z& r- |- b8 ]4 d* h+ B% B6 ^8 `6 Y
" f* d3 M+ f4 ^" T; P
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍" v+ Q5 x8 R/ I7 o3 k; b
DSP> cycles: 196468  :  11814000
/ B0 l2 z# w+ Z7 n7 Y DSP> times: 430.85 us with CPU 456.- N/ _2 ^+ Z7 I! j
DSP> cycles: 3238292  :  118140006 r* B1 {; E, D8 Z1 H: }4 G9 P
DSP> times: 7101.52 us with CPU 456.( s2 h2 t  b6 i4 e5 z6 J
DSP> cycles: 157860  :  11814000
0 x# H2 j# K% Q2 m! Y DSP> times: 346.18 us with CPU 456.8 G; J0 ^: U' g4 ~0 ~
DSP> cycles: 3265684  :  11814000
5 H, a& T) Y5 x DSP> times: 7161.59 us with CPU 456.
4 L& W! J8 ]/ t0 r1 g/ s DSP> cycles: 156344  :  11814000) J/ R' L: }2 Y+ S
DSP> times: 342.86 us with CPU 456.9 f. A* M( z% j( U* k7 J0 |! `
DSP> cycles: 3304428  :  11814000
9 }9 w& Q8 T6 V: K+ b: h DSP> times: 7246.55 us with CPU 456.% q* S. p% {- t8 @' J
) z( V/ Y( c# s) f, {/ ~" l
设置:相应的表放到IRAM中了
/ X4 g/ f2 R$ y$ q+ |3 J) NSECTIONS
; K5 y1 U3 T% F# n! x  W: b/ V{
5 P1 E( N+ {5 Y    .edma_data>IRAM  align = 0x80
9 s9 _1 T# B2 y  C6 U/ ^    .audio_glb> IRAM align = 0x80
4 J0 F$ Z& f: F& V: y        .f_table>  IRAM,  align = 0x80
. c' r9 r& x6 _2 ?        .f_text>  DSP_PROG,   align = 0x80 ; w4 l* s4 h1 U2 G2 u; i
        .f_glb> IRAM align = 0x80
. X4 i+ x4 J9 e7 u& ~4 G! F2 t        .ref_glb > IRAM align = 0x80! N- ]( v& @" B2 w8 {# k* {3 f  P3 @
}
2 i. g4 N, U$ x: o4 X
% I8 H+ a% D+ Y6 {- s7 R% L5 E0 k5 _/ R8 O* r5 A) f- k& h
编译加了-O3 优化参数
1 w2 i: ?6 f2 a* ]5 u) V6 W6 x5 o, ^; x
$ `. F8 @* Y5 O6 g

/ J( _1 N: D" U, S
4 J# j. s; q$ f. r3 |% h

$ m1 P3 C/ h0 |

/ L, }" p" c7 }3 e
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题& G# e, b; c1 p: E6 F
, s% o! W; w! z2 j6 F7 ?" Q5 Z
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 18:21 , Processed in 0.049828 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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