|
本帖最后由 zhyu 于 2016-10-13 17:13 编辑
开发环境是dsp 6713 +SEEDXDS510PLUS+CCS3.3
跑算法时,发现时间开销花在数组存取数据上。 暂不考虑数据结构问题,后续我改成了循环队列。
for(i=1;i<20;i++)
{
Sxn[i-1]=Sxn;
Sdn[i-1]=Sdn;
}
发现将数组Sxn和Sdn定义在片内SRAM和片外SDRAM中,花销的时间差3倍。SDRAM 频率100MHz,dsp主频 300MHz。
后来发现用CCS软仿,算法的耗时也一样。
具体情况如下:
一 数组定义在片外
.cmd:
MEMORY
{
L2SRAM: o = 00000000h l = 00030000h /* L2 SRAM 192k*/
L2CACHE: o = 00030000h l = 00010000h /* L2 CACHE 64*/
SDRAM: o = 80000000h l = 01000000h
}
SECTIONS
{
。。。。。。
Audio_dat > SDRAM
}
main:
#pragma DATA_SECTION(Sxn, "Audio_dat")
short Sxn[20]; //外部噪声信号
#pragma DATA_SECTION(Sdn, "Audio_dat")
short Sdn[20]; //内部误差信号
此时上面的for循环要3100 cycles.
二数组直接定义在片内
short Sxn[NUM3];
short Sdn[NUM3];
此时上面的for循环要1000个cpu clock cycles。
想问为什么会差这么多,和cache有关系么?这是正常的么,因为插入等待周期?
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|