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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑 & j1 _) s0 K8 r6 b1 P" ~2 \; P  }% }
: T* x# H9 b( p; i3 u. M  [1 w
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)- B: U6 x/ g2 F& e
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的3 ~1 C8 r" Y8 H: b& j- |7 }9 @
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?# E3 i' Y2 o+ `
; X1 f; g, C' ~
" t; j. p8 j, f$ Y
下面是统计结果
+ J# C$ L7 A- e* ?- k统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
. a/ Y1 m6 U: f8 Q6 H  T$ |7 V3 G/ M+ femucycle0_0 = EMUCNT0;
2 o1 g: i' g2 |. @/ U) d0 nemucycle1_0 = EMUCNT1;
9 H. [/ L) l+ h1 U( ~. [* u. wemucycle0_1 = EMUCNT0;
; F9 d2 F1 i9 ?+ ^* p! Jemucycle1_1 = EMUCNT1;
- g2 }7 t, z0 R: Y1 \2 m1 v( `* R9 q$ Y4 [emuoverhead = (emucycle0_1 - emucycle0_0);+ |2 L( H6 J; V! Q8 A* X1 I

/ ]- G1 e" [1 ]0 k- H; W算法();& `+ L0 R  _# ~0 o0 I

. j1 D" J; \8 I5 Xemucycle0_1 = EMUCNT0;
" y& [* w2 I1 r- z" P  R5 y0 `emucycle1_1 = EMUCNT1;: R0 j2 y( C8 ?( t/ t# `9 S: P/ j
8 O5 D/ H- S( J3 }/ }0 v$ K
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
' b# ~/ E7 O8 {3 n5 Y! B; t
* v7 ~. \; |$ q2 y5 j# L
# H5 O3 q* l8 e9 u统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
( ]+ m8 u: B8 r' A DSP> cycles: 196468  :  11814000
6 S  t3 T8 t, S$ O/ V4 J" L DSP> times: 430.85 us with CPU 456.3 |! [5 n; {* P1 s0 w5 |
DSP> cycles: 3238292  :  11814000
2 Q! U: z5 \( j' |: z- I0 G DSP> times: 7101.52 us with CPU 456.% S5 q( d7 K5 s2 M7 K
DSP> cycles: 157860  :  11814000
, ^. \, R4 y3 ~5 @+ G% Y DSP> times: 346.18 us with CPU 456.
  V9 M7 A, y9 ]$ a  p DSP> cycles: 3265684  :  11814000: A+ C: r* j9 g& V) U! b0 r: ?
DSP> times: 7161.59 us with CPU 456.
, f! H0 |: n. S% H! _: ^ DSP> cycles: 156344  :  11814000# P* f2 a4 l7 f+ M
DSP> times: 342.86 us with CPU 456.1 U+ s/ a  s# m6 F
DSP> cycles: 3304428  :  11814000
& q2 Q4 ^+ I$ v) T DSP> times: 7246.55 us with CPU 456.& E1 f+ ?7 h& a( Q7 n5 L; t: s
; _. c/ Y7 g) G! E  o  E
设置:相应的表放到IRAM中了! p- l  O4 ~3 ^0 F
SECTIONS
; [/ n9 {; O2 ~0 d. T" o{1 P/ w( Z6 G8 F; P* {& U
    .edma_data>IRAM  align = 0x803 L: _- E2 h5 l3 p& N: U2 Y4 Z, w
    .audio_glb> IRAM align = 0x80
: I3 O# O3 @  r- h- m8 ^$ ?        .f_table>  IRAM,  align = 0x80 1 B. {* ]1 j- m4 L+ H8 V( N0 k: ]$ a
        .f_text>  DSP_PROG,   align = 0x80 " i$ N" Z; v' }( ^( V  I5 A+ A
        .f_glb> IRAM align = 0x80; U9 [: u6 W* s
        .ref_glb > IRAM align = 0x80) g% `( Z7 K0 h$ A3 R+ [1 C
}
$ [1 u; x0 O: b# i3 r6 P1 Q
* i8 g3 ^3 i* c: ^. N' R. {: A
" A# }1 i: r9 o+ o编译加了-O3 优化参数; f3 ?0 X# d! |
7 n$ z- z2 \$ F6 ?; G* x4 U
$ ]/ S+ p0 ]6 o/ |- @5 l3 y; t1 Q7 T
0 g3 i1 l# F& X# q9 t! J# t" @

5 l, j1 Z8 Z8 A7 H
" [5 u1 `6 f! P6 \4 G0 t& Y* |' P" `
) O+ [& \' \" Z5 \; m7 b$ o
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题
2 [3 f, K  G; A6 J, ]/ t: y  F+ `  ?2 ~* ~) f
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 05:51 , Processed in 0.038367 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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