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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
* |( v$ V/ u: ?) Y, K1 r2 X6 y- T) P
# o) ~- f6 [0 A. j9 I, x5 {环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
" [) L- `; S: W$ {. @自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
0 [% ]/ y: o8 X4 n+ U9 P% J- q应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?; S* }8 S& A" c6 @' q. F
8 d* u* E& ^0 {" S$ U/ `/ P: X+ Q7 n
& T, i" j/ G. _+ X) _3 V$ E
下面是统计结果5 `( Q) ?4 I+ A, f9 b+ C' W
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    
6 n: [# l0 g' N7 z( P( `emucycle0_0 = EMUCNT0;
& K$ e# s0 s% C) P/ Zemucycle1_0 = EMUCNT1;6 `) W- Z" Q  y1 r5 q( R% b
emucycle0_1 = EMUCNT0;% b' R; S3 y; R- W) ~# r  G3 _
emucycle1_1 = EMUCNT1; & Z( x# |+ [% B1 k# x4 e
emuoverhead = (emucycle0_1 - emucycle0_0);- x) K( M; _) g$ O5 i
8 j  F/ Q- S1 h: s6 p
算法();
3 A+ a7 A0 U; D( Y2 J8 |1 j9 r  V# G) ~" x! F/ G. ~
emucycle0_1 = EMUCNT0;% x8 C, w6 v/ S7 y) C
emucycle1_1 = EMUCNT1;. K% @. ^; T* G! X; f

7 i# A5 m4 ?4 }+ {4 R8 l0 xCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
1 t3 o8 G( ~, W" J
: I# b# n& d. l, T/ |3 o  O4 }; J! r* f
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍9 P% x2 ?% p* s* w& G. k
DSP> cycles: 196468  :  11814000
% T4 U# a# o' @; b$ ~ DSP> times: 430.85 us with CPU 456., @; V* C5 l% v) h/ `3 x. B
DSP> cycles: 3238292  :  11814000. q/ c1 s. J# O. S% Z# v
DSP> times: 7101.52 us with CPU 456.
- E0 U" V* N$ U2 J1 n/ A DSP> cycles: 157860  :  11814000
6 C& u$ c$ x. G& T DSP> times: 346.18 us with CPU 456.+ F! J# d0 ~) U+ o( n$ D
DSP> cycles: 3265684  :  11814000- A" ^. D& O9 r3 P5 F" t
DSP> times: 7161.59 us with CPU 456.0 `! I' t2 C6 U( [- [9 h
DSP> cycles: 156344  :  118140002 M3 |5 i/ _& G  Q7 d
DSP> times: 342.86 us with CPU 456.
; |: Y7 e/ h8 Y9 ?4 H" v DSP> cycles: 3304428  :  11814000, X1 n  C' J! d. k& v3 c% S
DSP> times: 7246.55 us with CPU 456.
/ y1 h% ?2 N8 m4 H! _# g; L3 ], L; L" i: x) }5 v. ~
设置:相应的表放到IRAM中了
# U2 r3 \2 T% b1 U3 |7 E' kSECTIONS0 s# _/ @3 ~, g
{
" s# c* \1 v. W" ~* j' G! S( z    .edma_data>IRAM  align = 0x80' a; G1 W, A7 y: `
    .audio_glb> IRAM align = 0x80
) x, n- N( z" N        .f_table>  IRAM,  align = 0x80 ! s9 V( N0 Z$ _+ D( N# @
        .f_text>  DSP_PROG,   align = 0x80 # h3 j2 \1 [, Z7 v+ x
        .f_glb> IRAM align = 0x80! X& t2 n; s  ~' K3 k* q$ c
        .ref_glb > IRAM align = 0x80
& j& E3 x* L* s6 \}4 Y& f' C9 W$ u) ~% q) Y
% ~+ q& N4 j4 @) B$ S+ \
# s3 n: L' G4 o% L- e2 I- t
编译加了-O3 优化参数
- T. ?$ W( N3 o2 H' A' {8 B* S) h

) y5 a9 a+ X& s: l3 V5 d6 D
4 I, I! e' t( W$ `( ]8 L# z$ h- `
. w' c% ?. E( A  H9 g

. Y( N  X5 z% y# K! M' b
1 x/ l2 T9 k: J+ f
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题" ^  L9 u  b' M# ~$ s. D
. A/ l/ m( a; W) |5 D
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 01:52 , Processed in 0.039576 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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