嵌入式开发者社区
标题:
自己的算法连续两次运行消耗时间差20倍
[打印本页]
作者:
bobhi009
时间:
2018-8-14 09:19
标题:
自己的算法连续两次运行消耗时间差20倍
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
+ b" R- A; H* G5 J {; o7 D
7 S$ h1 B) A. m2 O
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
0 Q2 f" S; ?8 S6 e; Z9 p
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
% | J$ f* g+ u
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
* G3 m, {& o/ M) T5 G( v. c
2 p+ `" j0 z! M# `; S
4 b4 ~7 _6 {1 \9 u% Q
下面是统计结果
: a7 ?% I1 @& x" J* Y
统计方法
: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间
. x, _: {5 G9 `
emucycle0_0 = EMUCNT0;
0 T$ j; o! v, }: }9 L; ?; q) h8 ]; g; u; W
emucycle1_0 = EMUCNT1;
! L! P+ j5 t! s- W! I2 D
emucycle0_1 = EMUCNT0;
; e0 d4 a- ]8 ]! ~
emucycle1_1 = EMUCNT1;
) p$ R2 \3 [- d
emuoverhead = (emucycle0_1 - emucycle0_0);
1 c g9 [6 ?0 n; Y
. b$ w% R( ?( e2 F- Y
算法();
! S) b- p( w; \7 {
% @! s7 T$ y: l: }
emucycle0_1 = EMUCNT0;
' x% [) a* _: c. `8 X8 y) I; e8 \
emucycle1_1 = EMUCNT1;
6 A) U0 W2 j. Q& \4 o4 {
+ q+ ^# h& T4 W0 I! W
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
1 k# f0 ~( `/ A: W
4 j: w4 K0 U$ Z6 d/ `
. i1 [ \1 L g5 B1 x
统计结果
: 每隔一次, 数据处理的时间会是前一次的将近20倍
. p7 M" h/ H4 ^2 o% _
DSP> cycles: 196468 : 11814000
+ X6 ?! \. a8 _( q6 N- W+ f
DSP> times: 430.85 us with CPU 456.
! y, Q; j3 h) ~8 }- l" K
DSP> cycles: 3238292 : 11814000
! p) V$ |1 p* H
DSP> times: 7101.52 us with CPU 456.
3 D- Z# x: G& i, ]0 Q: _
DSP> cycles: 157860 : 11814000
5 S" C. m$ F/ ~% E+ d$ \0 R6 @
DSP> times: 346.18 us with CPU 456.
! N1 G9 Z4 M$ |6 d. {4 }" p+ `
DSP> cycles: 3265684 : 11814000
r, I | R7 ~% x
DSP> times: 7161.59 us with CPU 456.
: H7 T" c; n+ p9 j" M
DSP> cycles: 156344 : 11814000
! P, B! F' b+ k
DSP> times: 342.86 us with CPU 456.
0 ]+ D7 ]( X7 r A) D
DSP> cycles: 3304428 : 11814000
& O9 L! u5 b) P9 w, W8 e
DSP> times: 7246.55 us with CPU 456.
5 ]: _/ r4 j! ]% X+ f. [& E
( d$ @3 j+ P! O; J" E' d6 E y
设置
:相应的表放到IRAM中了
" G6 U& D, [) p. c2 ]
SECTIONS
7 g& q( N Z) P, d
{
8 h* A' s5 ?* v* w6 Z3 W
.edma_data>IRAM align = 0x80
- G3 b7 E6 ?, d; ~; f! S- ]
.audio_glb> IRAM align = 0x80
# B- }1 h+ d& t4 v. o( w9 e
.f_table> IRAM, align = 0x80
. |0 d: w: G5 z5 f8 H1 O+ R
.f_text> DSP_PROG, align = 0x80
( h6 ^( b9 |; d& m- @% a- w) ]
.f_glb> IRAM align = 0x80
! b' \) E8 F. Y. r- ~
.ref_glb > IRAM align = 0x80
# B4 G' Y7 Y5 O- b. D( X4 V
}
" P, ?+ D$ S0 J! y) S) u
- I2 o5 ^2 h$ }, l7 D0 E' i: m( r
7 y R# y1 h9 [$ [ ~# O; s
编译加了-O3 优化参数
6 s6 y8 m* @- K8 b
; M+ J. P! |( B+ v) t/ t5 g
! w4 |9 p: _2 E
' }$ C9 i: r. ^. K' Z6 G4 N# E7 D
8 L4 a& p8 N4 w3 ?% Y# i' M
/ a/ \8 O) }8 t$ k
, t0 q% R: K4 V
作者:
广州创龙莫工
时间:
2018-8-14 15:48
您好,根据您的描述,暂时不能排查到具体的原因。建议您:可以先不跑双核,单跑dsp的情况下,测试算法的性能,再判断是否是syslink或双核的影响。
作者:
15901123858
时间:
2018-8-14 19:16
想请问下您是在LINUX环境下使用MAKEFILE编译双核工程的嘛?另外SECTIONS中的内容是在.CMD文件中编辑的嘛?
作者:
bobhi009
时间:
2018-8-16 12:03
1. 简单的说下原因, 由于创建任务时 , 由于栈空间地址较大, 所以更换了栈空间的地址, 这导致栈空间新的申请地址是没有开启cache的 , 所以开启栈空间地址的缓存就可以解决问题
. {; P4 g# \( }; w! g
( F. F5 M) @0 X7 M) N0 Y* i
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4