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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
7 t! }  s8 O" E
% @) f! |* g- I1 i1 E! i7 p, O环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
" y  R( Y4 s8 A6 [/ C! Q3 b7 X自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的- ~; _! c& Q8 t* O
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?. J1 s* ~4 y* d% S: P- b+ {: n
3 R1 C; b* {6 M- z# I" p6 \! Z. v/ J

  A& z; m. D7 H  B- s下面是统计结果% g  [! ~2 w' j" B) ~
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    0 K6 C: Z$ `6 a' S2 A
emucycle0_0 = EMUCNT0;$ x$ {1 J  P; r0 T
emucycle1_0 = EMUCNT1;
9 p( M4 }. J& P, {8 o$ e) O+ H. L$ F+ |emucycle0_1 = EMUCNT0;
2 ]" L5 I0 G4 P8 x  ]6 yemucycle1_1 = EMUCNT1; , N- O4 x8 Y5 [
emuoverhead = (emucycle0_1 - emucycle0_0);
7 w  D/ n5 M9 Y" m8 P# A
7 m' y1 G% Y# A算法();
" O( @$ J) i+ @* ?, @, |
) s: Y! y; `& wemucycle0_1 = EMUCNT0;
4 j2 ]; s' {5 M- o- o& E7 j3 Hemucycle1_1 = EMUCNT1;4 S# o+ D/ u) d8 K; |" _4 _& R
: C/ Q. C) H) a
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
; s- u/ K' O6 ~/ L4 [* [# `; n. Z! H  O7 C& D
1 [" e. o& N, r1 ~
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
* @3 \6 o! ^+ n/ `9 q  ] DSP> cycles: 196468  :  11814000
2 N9 t( [  s! @6 k: C- `. U DSP> times: 430.85 us with CPU 456.. Y9 P3 b( w4 Z  {) A+ U6 O8 f
DSP> cycles: 3238292  :  11814000* h; ~2 v+ p0 a( X' g
DSP> times: 7101.52 us with CPU 456.
+ V6 r" E. H3 | DSP> cycles: 157860  :  11814000
. L+ V5 A( ^9 M. B. |$ T1 w DSP> times: 346.18 us with CPU 456.
. f" [: b# R% Z DSP> cycles: 3265684  :  11814000
9 Y3 M/ H7 J; ?- a5 M DSP> times: 7161.59 us with CPU 456.( i& n- ~2 e& L# i0 p/ z' A
DSP> cycles: 156344  :  11814000
/ d; h2 o; Q' r DSP> times: 342.86 us with CPU 456.
5 j) G+ [: C# |; j DSP> cycles: 3304428  :  118140001 L0 e& w3 z# J. p$ ]" Y4 {
DSP> times: 7246.55 us with CPU 456.: {9 d  v/ I+ y

" r; q2 H. S! F$ W0 h设置:相应的表放到IRAM中了% o6 [  m% N7 K4 U( A
SECTIONS
+ d. A& i! h5 ^; u: D{
2 A' j  J! b! |- {* X; d# ?- g( S8 c    .edma_data>IRAM  align = 0x80
' m) ?0 R) K  B% e    .audio_glb> IRAM align = 0x80) S0 j% a% N# R/ Q- r# D( D0 {
        .f_table>  IRAM,  align = 0x80 : K- p/ n& m4 t5 P: k, f6 D' a4 Z7 T: W
        .f_text>  DSP_PROG,   align = 0x80 & G# e) q' @+ q8 R; a
        .f_glb> IRAM align = 0x80
& K) H  N" v5 l5 m( W  F        .ref_glb > IRAM align = 0x80, a, K1 t/ N) t; g$ s+ t" T
}) F1 a% l/ o% \1 i2 x; \
% M, u: v6 D( m: ~2 N' q
7 g' ^9 e& ?7 K- W
编译加了-O3 优化参数4 s) |% F# c; @+ g! I  k0 v7 T# K2 g

" X, j. C. t& L" L9 f
2 |% I  W9 x6 _7 V# H& b8 `
( v5 ?8 q# k. ^6 A$ _

9 p  j/ J" f! i6 \
  d, F8 i! W  }0 |5 Z

: z* t3 k* |& I3 j& ~; Q8 \; h9 S
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
" ]5 L* l( T6 L0 e1 y; Y# E1 |; Q* l5 h: I8 o" ~  ?  d; I! s( u
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 07:11 , Processed in 0.036421 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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