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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
# v4 _% W/ t7 J8 T
% V1 m8 U2 ~2 q. v$ i环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
$ q5 m) N9 V. w) G2 O  n, o1 n自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的- F' @: N$ j) x( p' n; q
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?* w- ^- a. x8 l- j0 {+ m& B
# L; F4 N6 R( Q- |  U7 _+ f

# x: H/ c* v' _$ @7 f' {. o下面是统计结果% k; |4 Z) g5 M, N: x) T, e" i
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
# O# d3 _3 Y! Y* ?emucycle0_0 = EMUCNT0;+ N4 u2 D5 _3 @; F8 j4 G. v" _
emucycle1_0 = EMUCNT1;
8 m4 a! m* M- f- I5 R% @, p8 aemucycle0_1 = EMUCNT0;
1 N6 d2 j) p7 c' x) P' b* G$ @% uemucycle1_1 = EMUCNT1; 4 d+ ]4 ^5 a8 t" M
emuoverhead = (emucycle0_1 - emucycle0_0);
6 O' G  e5 ?& P7 u; z% `
6 B1 |7 J; I9 N- C% _+ Y+ [算法();1 L0 H' s. a/ f. T

# X, _8 A, R7 ]5 ^emucycle0_1 = EMUCNT0;' u) |# Q' O6 L8 P+ c
emucycle1_1 = EMUCNT1;# a0 E' Z# o  u) ]. @" b7 t4 E
8 U+ u; y  V6 X8 c7 v: _
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;8 z+ i/ E% E( r% I) d5 ?7 ^
8 O: a& k$ N- U$ j

" Q# W. P* t4 n, R3 {2 N" \2 B统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
; s! |% U0 l; c! A- B: K DSP> cycles: 196468  :  11814000
3 a/ y* \& }! r9 P) Q DSP> times: 430.85 us with CPU 456.
; r% n6 }' j1 K& W& o4 o" M DSP> cycles: 3238292  :  118140002 R& u9 C' U% w9 W* q
DSP> times: 7101.52 us with CPU 456.
. k& T7 s* e9 r9 F: y DSP> cycles: 157860  :  11814000/ X; \/ B& ~7 A' Z9 p
DSP> times: 346.18 us with CPU 456.
8 S4 E$ ], j5 j/ L1 D DSP> cycles: 3265684  :  118140004 Z& o8 l) k9 m: Y( B
DSP> times: 7161.59 us with CPU 456.: L/ S$ s( t1 I2 h" _! H: W+ y; I
DSP> cycles: 156344  :  11814000
! Y8 F, k6 ~7 G DSP> times: 342.86 us with CPU 456.
2 `, d$ q+ \5 d, o DSP> cycles: 3304428  :  11814000
* ~8 R' Q( G+ Z/ }9 C- p8 i7 S8 z+ K DSP> times: 7246.55 us with CPU 456.1 Y6 H+ _* X9 J, @/ s

  a! R( d5 c4 N7 F7 M设置:相应的表放到IRAM中了
, x5 P7 a: q8 g- v; JSECTIONS: o% x; d" ?& Q  W
{
9 l. g% Y$ [! e( [6 B2 l    .edma_data>IRAM  align = 0x805 ^2 \* H% B  y7 S/ g5 E
    .audio_glb> IRAM align = 0x80) S2 s* p3 F, L; O& R, s+ m
        .f_table>  IRAM,  align = 0x80 - L6 o! l3 Z% h- g# U
        .f_text>  DSP_PROG,   align = 0x80
) R& z9 h7 ?: e/ ^        .f_glb> IRAM align = 0x80& ~3 F( j: }& W
        .ref_glb > IRAM align = 0x80
' t6 S& j& y5 n9 X7 }}$ _8 B; j, A2 \1 |4 T
- d7 o1 B/ v5 X. ?
. j% K+ v, ^8 o& i5 J& U1 q4 t
编译加了-O3 优化参数, k$ S" @; l. k4 `2 l+ Q3 v3 ~
# }! B' D' W0 T5 g$ ~- r; h
  n" o4 Y) o/ x# o$ P
+ N4 T  ]/ r* X3 v" i. @

( h* E/ u/ L9 H9 ]4 |% ^3 e. D0 ?
2 F1 s- A4 p  |6 v
* k' }3 Y( `2 P1 _4 s* l9 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

524

帖子

2083

积分

创龙

Rank: 8Rank: 8

积分
2083
沙发
发表于 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的 , 所以开启栈空间地址的缓存就可以解决问题3 e7 r- J& b  b8 I+ \1 J

  l4 C4 [* g, ~) m% j) A$ V. o2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 01:51 , Processed in 0.038318 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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