自己的算法连续两次运行消耗时间差20倍 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 1 [8 J& f$ Y6 ~% y! ]

; K: L$ ^6 A3 }1 X. B4 X环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
& l" f# `( Z6 e- q7 i自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
( L7 O+ G. _3 L7 u  z) s( Q& I应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?! S! X# D8 T7 z9 Q( h7 A' t, D# g5 a

& W% o2 ?" {6 y5 x0 `& ~) _2 G

6 |$ H; o: ^1 l# [/ i/ W# i下面是统计结果
; S" W9 n0 i2 k3 Q( Q统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
  M2 D: x( M9 C* B" {emucycle0_0 = EMUCNT0;
3 |2 n/ U/ r& A8 T  d) V, Pemucycle1_0 = EMUCNT1;! @7 o) A1 }; [
emucycle0_1 = EMUCNT0;- I# z; k& i2 i, x
emucycle1_1 = EMUCNT1;
( ]- E* i+ E) X' F$ hemuoverhead = (emucycle0_1 - emucycle0_0);
" }0 a  J* Q* H) W- Z9 ]/ l1 J. k5 T1 C- N/ o* S
算法();
) r' D* V* j) |* a+ m0 h
6 ]7 b$ a0 @3 t6 i* t6 Z# \! C- a; \emucycle0_1 = EMUCNT0;
+ A* y* f* g5 t; Oemucycle1_1 = EMUCNT1;. I: C4 o1 _- V' W' w# m

5 k* q' f3 [/ c8 Y% r, Z3 G; mCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
( \* v: y6 q4 c5 i7 |! Q3 [6 |! K$ x% n$ r1 y

. e. s/ t! G7 X9 O. \! _统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
! \4 i% c7 ^/ z: C/ W( r DSP> cycles: 196468  :  11814000
# t0 r2 h: O  B% ] DSP> times: 430.85 us with CPU 456.
: W$ S$ t9 \. v0 ` DSP> cycles: 3238292  :  11814000  G4 X  |0 h  t6 R$ m( g) _! R6 v
DSP> times: 7101.52 us with CPU 456.5 _9 R) b  F* _( y: ~5 Y7 p
DSP> cycles: 157860  :  11814000
$ R+ b/ |' G5 U DSP> times: 346.18 us with CPU 456.3 q  ^! P4 K- A6 ^  X
DSP> cycles: 3265684  :  11814000
. z! Y$ r: }* v5 T. ~2 [1 X1 C DSP> times: 7161.59 us with CPU 456.
* l+ }* n5 q& \  s" ^- a DSP> cycles: 156344  :  118140001 Z5 d$ ~: `+ t3 n* q3 b5 a, O
DSP> times: 342.86 us with CPU 456.; E4 B* g4 Z( Y# S
DSP> cycles: 3304428  :  11814000
3 k8 l) z6 z! Z' X DSP> times: 7246.55 us with CPU 456.& n1 a+ b% i( N
7 d6 l8 i2 M" B* I( u# t8 n' W, V
设置:相应的表放到IRAM中了7 [( E+ h3 J8 Q* b
SECTIONS4 W* n' z1 J, l: C
{/ X; p/ m0 h: m- f+ W; ~
    .edma_data>IRAM  align = 0x801 m: D' \% M/ I: d& H0 m8 w. h
    .audio_glb> IRAM align = 0x80" l4 D+ Q$ ^: n/ X) g
        .f_table>  IRAM,  align = 0x80
' c; ~0 r$ s/ o        .f_text>  DSP_PROG,   align = 0x80 8 @; H) T+ n8 n; c! F+ D# ?9 Z
        .f_glb> IRAM align = 0x80
6 b+ X! q. |" X8 S        .ref_glb > IRAM align = 0x80$ e. H. e. O; r6 ]5 r
}
" ~9 l2 ~1 O% ?) n9 o' P; Z: ?+ ?5 ]! Z/ z6 l8 g

. a* A" P) C" c% t) J编译加了-O3 优化参数- h( ^8 [0 r) G

7 o8 r0 `& C) h% q6 @7 ?$ g1 @* k+ w8 C: T
6 y+ X$ }) s$ [# f6 N

3 j3 G* |9 D9 ?

8 Q2 g: g5 i  O6 C- _( d
% {3 y6 m$ Y  K  f, C& X7 |$ E! m
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题7 }3 t2 T# p  V# r; B; m9 J* T- {9 p

0 S% x. M5 E# ?0 c* X0 A' C1 H4 m2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 08:15 , Processed in 0.037564 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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