TI中文支持网
TI专业的中文技术问题搜集分享网站

代码优化,memcpy,for循环,内存移动

使用DSP进行FFT运算,发现FFT利用库函数很快,主要是其他操作拖慢了时间,主要在这几个地方

在代码声明了4个全局变量

float fft_data[1024];
float ff_out[2048];
float fft_out_img[1024]
float fft_out_real[1024];

1. 使用的数据放在存放在DDR上,利用memcpy把数据移动到fft_data,比较慢

float *p = (float*)(data_ddr_base + offset)
memcpy(fft_data, p, 4*range_gate);

然后做了一个fft运算,结果存到fft_out里面,这里很快

2. 需要对结果的每个复数做如下计算, abs = sqrt(real * real + img * img),把fft_out中每个复数的实部和虚部分开,这里也比较慢

for(i=0;i<FFT_DATA_NUMBERS;i+=2) {fft_out_real[i/2] = fft_out[i];fft_out_img[i/2] = fft_out[i+1];
}

3. 最后要把结果做累加,存储在DDR里面,这里也比较慢

float *p = (float*) result_addr
DSPF_sp_vecadd(p, fft_out, p, FFT_RESULT_NUMBERS);

请问这几个地方该如何优化啊?

Shine:

1. memcpy函数是CPU搬数据,速度比较慢,建议用EDMA搬数据。

2. 打开-o3优化选项编译。

3. 用EDMA搬移到DDR里面。

4. 还可以打开cache。

,

dejian wei:

谢谢,请问打开cache和使用edma,有相关教程么,有参考的例子程序么?

,

Shine:

请问使用的是哪款DSP芯片?通常processor SDK软件包里有例程。

,

dejian wei:

使用的是C6678那一款,例程在PDK里面找到了,教程有么?cache是不是看 SPRUGY8,edma是不是看SPRUGS5B。

,

Shine:

是的,结合例程看这两篇文档。

赞(0)
未经允许不得转载:TI中文支持网 » 代码优化,memcpy,for循环,内存移动
分享到: 更多 (0)