嵌入式开发者社区
标题:
自己的算法连续两次运行消耗时间差20倍
[打印本页]
作者:
bobhi009
时间:
2018-8-14 09:19
标题:
自己的算法连续两次运行消耗时间差20倍
本帖最后由 bobhi009 于 2018-8-16 12:00 编辑
) p, H) N+ p% d% [
( V/ ~- l* n# @0 q
环境: 创龙提供的mcsdk (linux3.3 + bios6 + syslink)
4 @; ^9 k6 l& u
自己的算法连续两次运行消耗时间差20倍, 而且跟算法本身应该没有关系, 因为算法在dsplink 的开发环境下是运行的没有问题的
: q. P- d( ] \1 X' s; x
应该是mcsdk这套开发环境的影响。 有谁知道是什么原因?
* B& K0 y6 S7 \" H" O$ ?1 _: P0 ^
# S) V% t v% t, ] u- v
3 z6 R4 A0 N9 n: r
下面是统计结果
6 M; I7 h) g" W. E4 d
统计方法
: 通过EMUCNT0 EMUCNT1 寄存器统计算法执行周期 再除以主频得到运行时间
$ n0 F, C6 o8 a$ L
emucycle0_0 = EMUCNT0;
2 S( z; b) S3 x, e. F! R, r! ~8 D w+ i
emucycle1_0 = EMUCNT1;
3 z! p+ {, \; p; G
emucycle0_1 = EMUCNT0;
$ O7 D9 m8 v' s# u' t4 c$ f
emucycle1_1 = EMUCNT1;
7 W. `5 E# |$ S7 y
emuoverhead = (emucycle0_1 - emucycle0_0);
2 ~0 ^8 |/ k$ C0 i
" d8 |* y1 ]1 j- K3 h' R6 e; l. H
算法();
& Q( k6 `. M. } B4 t
3 t6 s- y. n7 @/ I
emucycle0_1 = EMUCNT0;
6 e, n& S- [' j) N+ i. ?6 {$ w* t
emucycle1_1 = EMUCNT1;
- b4 B+ `1 J/ \
7 U2 U$ g" o' J. @- w
Cycle = ((emucycle0_1 - emucycle0_0) - emuoverhead) * 4;
" l9 e6 v$ m9 S4 r( g
; x; g1 X; t: ^- _
9 k& l' C! o& P6 D' r* C2 f
统计结果
: 每隔一次, 数据处理的时间会是前一次的将近20倍
: D: ~- U" y" {' ~
DSP> cycles: 196468 : 11814000
6 T/ w6 B9 K( T5 H' ]9 k- n
DSP> times: 430.85 us with CPU 456.
/ j2 O) {- b) l0 C- W8 [- S- J
DSP> cycles: 3238292 : 11814000
% s/ O" ~( x- g6 c. n0 G
DSP> times: 7101.52 us with CPU 456.
* @# d& e( s6 _0 w" S
DSP> cycles: 157860 : 11814000
) d# s8 q3 M# @+ }" F/ f$ k2 [6 i
DSP> times: 346.18 us with CPU 456.
! v" H: }7 A6 E( b# t0 F1 M0 K
DSP> cycles: 3265684 : 11814000
9 W$ a l0 E# c
DSP> times: 7161.59 us with CPU 456.
2 ]7 m3 P i( [3 @* q, V' @) l
DSP> cycles: 156344 : 11814000
2 z; e; ?- b- q/ m" |. ?6 c1 g4 U' i4 {
DSP> times: 342.86 us with CPU 456.
7 w7 \: K/ {) A& ?; t+ A
DSP> cycles: 3304428 : 11814000
( O2 }/ v( j$ k$ T8 J1 R0 _6 e" M
DSP> times: 7246.55 us with CPU 456.
5 _, Y8 T# X; r6 H; ?2 ]- h
( p) ]8 r" U! W3 v$ t/ {2 j: V7 o' x
设置
:相应的表放到IRAM中了
' \2 f1 i" @+ e3 C0 K' w2 G/ s( p
SECTIONS
! v% D } Y- O* F" [) I7 V
{
9 D5 o# A$ I& w! N! L$ ^
.edma_data>IRAM align = 0x80
3 M! D8 T" I; y
.audio_glb> IRAM align = 0x80
+ G4 C1 z. A: o0 f0 `8 X- C! A/ N' l
.f_table> IRAM, align = 0x80
|/ a! o8 {* G8 y
.f_text> DSP_PROG, align = 0x80
+ F+ S y J/ d
.f_glb> IRAM align = 0x80
8 c/ b3 r) A' i) d( w
.ref_glb > IRAM align = 0x80
! [4 l2 W5 y% |1 A7 P p- M
}
- r* T6 K2 s& I I# e4 p
8 p& Z7 P% ^! `
* T4 v0 X" m1 ^" h( p! b" G2 g
编译加了-O3 优化参数
! h9 B& |, [9 H/ X* J
4 `1 F* F' o. J
' [3 O$ R% A7 J) e0 f9 v
; J9 |- E% K$ w0 |
w7 J. ^0 y* r
9 Y+ V9 K0 ?9 l
/ n/ K& n& G4 w' h9 C
作者:
广州创龙莫工
时间:
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的 , 所以开启栈空间地址的缓存就可以解决问题
+ c* o4 i( l8 ^9 c5 r- w
7 ~' _: ~0 v4 C! G( X( f
2. 相差20倍是算法本身的特性, 偶数帧的计算量比较大
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4