使用omapl138的arm核跑linux,dsp通过upp接口接收fpga上传的AD采样数据,然后对其做fft运算,但运算速度很慢。
论坛里也有个类似问题的 www.deyisupport.com/.../22241.aspx
给的意见是:
#1. 请问是否采用的TI的DSP库?如果是,请根据这个网页计算一下理论值:http://www.ti.com/lsds/ti/dsp/c6000_dsp/c674x/benchmarks.page
#2. 数据Bufer放在片上还是DDR?或者ShareRAM,如果不是片上L2-RAM,是否正确使能Cache.
#3. 做为测试,可以停掉ARM,只跑DSP以验证运算速度。
#4. 最好是用profile来统计cycle数,而不是绝对时间。
#5. PLL是否正确倍频,运行在什么频率?
我这边的情况是:
1、使用的是TI的DSP库,网址www.ti.com/.../sprc265,调用的是时间抽取基2的DSPF_sp_cfftr2_dit()函数
2、数据Buffer放在片上IRAM,
#pragma DATA_SECTION(“数据Buffer”, ".xbuf");
CMD文件对xbuf定义
.xbuf: {} > IRAM
4、统计cycle数代码如下
unsigned int cycles, t_i, t_extra, t_delta; t_i = CLK_gethtime(); t_extra = CLK_gethtime() - t_i; t_i = CLK_gethtime();//获取当前时钟 DSPF_sp_cfftr2_dit((float * )x, (float * )tw, N); //调用fft函数 bit_rev((float * )x,N);//旋转基运算 t_delta = CLK_gethtime() - t_i - t_extra; cycle = t_delta;
然后得出结论是DSP completed processing in 9216266 cycles.需要900万个周期。
3、作为测试,当我把arm停掉时,只跑dsp,代码是完全一样的,统计cycle方法也是一样的,但是单独跑dsp时只需要30万个周期就能算完FFT。
请问下,像这种情况,是否ARM和DSP抢占DDR所致?有没有好的办法可以解决这个问题?
另外,PLL是否正确倍频如何查看?因为PLL是arm初始化的,而arm跑linux系统的话不知道从哪个内核源码有PLL频率信息,或者可以通过别的方式获知?
谢谢~