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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
6 e7 |6 d+ z: V. N" W0 o" C# e/ J6 i; D5 [5 H
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
2 e7 n0 z$ l) [' L. f" K( I自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的1 O$ a0 D- f3 }; ?4 M$ N& m* C: @/ L
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
1 d( A/ X4 }: T) v' L" M, A# C" @8 J; ?1 X, U

# }5 g/ m. G" d& c. A下面是统计结果
3 y; v+ b( V7 E; Z统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    3 Y- Q( }  A2 x# `
emucycle0_0 = EMUCNT0;
- Y" i1 s- x# w" p/ k! [$ Nemucycle1_0 = EMUCNT1;
- t7 O# X+ u  Qemucycle0_1 = EMUCNT0;
, O2 m7 N. f% ^emucycle1_1 = EMUCNT1; $ _% G- ?- ~& F& [2 S
emuoverhead = (emucycle0_1 - emucycle0_0);
& H6 M! b; ^* M6 I: ?7 C( p
9 ?1 i( `; v( o! Y算法();
; I% B- q# ^4 |8 I
8 J- @' v+ v! R% W2 femucycle0_1 = EMUCNT0;' y7 B, @4 J3 |4 s: y
emucycle1_1 = EMUCNT1;8 {# M, ?3 s& S# ?

8 u9 g: V: F. g( ]; i0 TCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;& `5 e/ \- _: f! V" p

) @4 j5 E9 |* X$ T
4 r* D( M# l" G( O/ C. V0 s  x; ?/ K统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
  M5 e9 @6 m1 Y! m DSP> cycles: 196468  :  11814000( x3 o0 V% g+ N8 T5 D: [8 Y
DSP> times: 430.85 us with CPU 456.: z7 b4 v6 P( r7 n: i1 s- C
DSP> cycles: 3238292  :  11814000
7 M* P) B: c7 K: h" h. Z. @% | DSP> times: 7101.52 us with CPU 456.4 w2 X3 l' y( X; D$ k% {5 A7 L
DSP> cycles: 157860  :  11814000
9 [1 l7 C! C* Z2 {- t% S6 d DSP> times: 346.18 us with CPU 456.8 r6 |7 M$ F7 |( A" I$ I" f* `
DSP> cycles: 3265684  :  11814000
" z$ @3 r9 }% y9 p: o. [+ D5 V DSP> times: 7161.59 us with CPU 456.; K! O: @9 g- S& I5 ]+ X
DSP> cycles: 156344  :  11814000
6 N' |2 p- y' X, s1 z4 v DSP> times: 342.86 us with CPU 456.
( e" X% A4 l8 G DSP> cycles: 3304428  :  11814000$ V- s2 B# ^1 V" q
DSP> times: 7246.55 us with CPU 456.
. S' ^& Z6 E1 O; \0 s' ^9 l
5 H# y: }4 ?$ ?设置:相应的表放到IRAM中了
* J; M, x0 l: g* C. c( {2 d; ASECTIONS! _4 O5 r. c" `' {3 h% f/ V
{
$ J3 s5 G6 j, ?2 a( f* S1 x    .edma_data>IRAM  align = 0x80
7 L) p4 a1 Q0 j& N  @    .audio_glb> IRAM align = 0x80
; F+ h1 V4 P, F- Z+ q        .f_table>  IRAM,  align = 0x80 : O1 D+ M1 A# E) z; l1 J* f
        .f_text>  DSP_PROG,   align = 0x80
  ^6 i4 @3 m1 Q; `% R        .f_glb> IRAM align = 0x80: u7 P* h) b" J- y! B6 f7 ?$ v
        .ref_glb > IRAM align = 0x805 C! X, k/ G" k6 z' A, V
}4 Z5 O4 X4 X$ x& i0 D

1 m* t2 A# [+ b  W0 v0 V& B0 o2 ]4 B+ }8 H) Q/ V# e6 I
编译加了-O3 优化参数
" D, [9 Q# N- C) C1 M
1 v! c; a, A" Z4 w8 u7 H
6 z) j2 M& u" N  s& F2 E

) T+ H4 g+ Z! P8 o( S$ C
3 x  T5 W2 s; r' B+ L

. T& M3 ^: I2 R2 y! \* i$ ]$ M

& d$ Q: {" |  ?; Z8 z( D% g
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
' ?* l: @# L7 o8 j5 [
) x7 N1 f3 T4 o/ {2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-14 19:18 , Processed in 0.065313 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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