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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

2

主题

4

帖子

1040

积分

金牌会员

Rank: 6Rank: 6

积分
1040
跳转到指定楼层
楼主
发表于 2018-8-14 09:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
4 q2 |' b8 s% \$ r6 r% C: M/ s5 b  {# s% \; q
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
/ R2 }3 p" K) e4 u4 C自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
& @. `' J% W, |6 H应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
% y# X$ R, z0 s2 `
# i4 o# v" m. v/ W5 Y: i
! p3 e' j/ D) z( S) l& S
下面是统计结果& ~$ M4 h/ Z/ ~# g: Q6 Q
统计方法: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间    # ]2 O4 e% {/ d6 I) o- l2 C( a: _
emucycle0_0 = EMUCNT0;' s; ~: W3 Q. |/ E) ~, {
emucycle1_0 = EMUCNT1;
& i, _* Y) u2 O. Eemucycle0_1 = EMUCNT0;
7 j$ c6 Q( V* Vemucycle1_1 = EMUCNT1;   e% Q' ~, z' W- W) ]/ K
emuoverhead = (emucycle0_1 - emucycle0_0);
# U$ h6 |$ Y) s7 \! ^! [
5 S6 v! p3 p1 X& ~, d算法();
0 R" q9 l' X( ]7 |% K! @) \
( b2 d  C+ F* G2 a  |1 z3 J9 l1 Xemucycle0_1 = EMUCNT0;, S4 Z" a* B, f  G
emucycle1_1 = EMUCNT1;
. I! U  z) ^2 [5 v2 m% R
; F* y' m. F% Q" F7 I2 mCycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
. s  C; X$ E# I3 }; q  `4 X
; J! ], S6 g; m$ m& ^# Z6 ]8 |6 A# ]- ^  n  J( b( P# [
统计结果: 每隔一次, 数据处理的时间会是前一次的将近20倍
3 O4 q7 _$ R" S# O DSP> cycles: 196468  :  118140000 l. ^& p0 f' F% {: p  P3 {+ ~1 q
DSP> times: 430.85 us with CPU 456.* t' D8 B# G; [4 F6 w
DSP> cycles: 3238292  :  11814000
( H/ p+ E* B3 J; z2 | DSP> times: 7101.52 us with CPU 456.& q$ @8 {! l4 o
DSP> cycles: 157860  :  118140000 ^# `2 ^! u5 \. K* t$ ]  \/ u6 s0 V
DSP> times: 346.18 us with CPU 456.
0 P! m: h0 r1 m& k. u! Q2 y. B DSP> cycles: 3265684  :  11814000
6 @6 V6 M8 N- T. a; z DSP> times: 7161.59 us with CPU 456.) E6 a2 P4 {$ J* S. c
DSP> cycles: 156344  :  11814000
) W# T( g& l# ]. Q DSP> times: 342.86 us with CPU 456.* K) E' E8 i/ u+ [8 I' B
DSP> cycles: 3304428  :  118140004 h" \$ y5 @) ]3 f9 U" ^
DSP> times: 7246.55 us with CPU 456.5 j% G7 T1 U- O4 X) P* `
; h! t- j9 t- |% n
设置:相应的表放到IRAM中了. u# S. ]6 A/ |
SECTIONS
, ~+ d, i$ t! ^# q" ?* A& @) N{3 c$ R0 g5 j  \
    .edma_data>IRAM  align = 0x80
# m: Q" Z  n+ v7 d  t    .audio_glb> IRAM align = 0x800 {! s1 V7 C  H$ J4 Q5 E
        .f_table>  IRAM,  align = 0x80
: i. w; m+ s' @7 c' j& A7 I        .f_text>  DSP_PROG,   align = 0x80 8 j5 \! f' d( \0 F, f# Y
        .f_glb> IRAM align = 0x80" G# y* a( j8 Q* k2 R! G! i
        .ref_glb > IRAM align = 0x80
" t8 `1 T& n+ W9 r& e! m; l  g! p) T}
6 i0 }8 G, ?$ m# ]- v0 f! j0 {) s7 i
/ ^1 M  r3 O. i3 R
1 u* a8 v+ B. x# V4 s5 b- I( g编译加了-O3 优化参数
" L4 n5 ?6 j# l  W/ p
% t$ u' ~- i8 T
9 y7 s# z9 S" ^/ N

" \+ Z5 c$ F. t8 ?9 B
% N6 L; ~  N/ Q; j7 h

7 G& V3 F, J. d* P& J6 S" Z

2 n3 N, j: ^8 g$ A0 E
分享到:  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的 , 所以开启栈空间地址的缓存就可以解决问题7 j8 F* `6 V7 T7 e0 y# Z

. H' t9 x/ f0 _$ h( s$ P2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 00:27 , Processed in 0.035564 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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