This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

库函数FFT效率问题。请教



c6678加入链接库deplib.a66,测试函数dspf_sp_fft_SPxSP,有如下问题

1. 在simulator环境下,测试出的周期数和dsplib手册上的基本一致,例如8192点FFT需要88289 始终周期

    但是在开发板上使用emulator运行时,效率下降很严重。 仍然以8192点为例,L1全设为CACHE,L2设256KBCACHE

    此时将FFT输入输出旋转因子都放在L2里,需要254933个周期。都放在MCSM需要295429个周期。都放在DDR3中要274579周期。

    这是CACHE未命中miss导致的么?如何避免这的周期浪费,最大化FFT效率。

2.输入参数中的 brv[4]是什么意思,有什么作用。

3.输入输出数组定义时都有Xi[M+2*PAD] 这里的PAD是什么意思有什么作用。

4.如果我需要8个核同时运行FFT。对存在MCSM中或者DDR3的数据进行运算,再将结果存回MCSM或者DDR3去。

    例如核0做 x[0]~x[8191]的FFT    核1做x[8192]~x[16383] 以此类推。

    那么在他们同时对MCSM或者DDR3存取数时会不会有访问冲突。

    怎么安排8核同时进行FFT运算效率比较高

5. 如果EDMA3  TCPP0 将数据从DDR3导入MEM或者L2 速度有多快

问题问的比较多,麻烦专家耐心解答一下,谢谢。

  • 您好,

    1. 在EVM板上测试时,请确认在新建target configuration时务必选择正确的gel文件,其中包含了PLL、cache及DDR等的初始化,目前CCS安装目录下带的gel文件配置的工作主频是1GHz;同时测试的cycle以EVM板的结论为准;

    2. 关于输入参数的含义请结合源文件说明作为参考;

    3. 关于多核并行处理,多核同时从共享memeory去数时,可能会有访问冲突导致throughput有所下降,但是可以同时访问;并且keystone从硬件上提供了一种新的memory architecture降低访问冲突,同时可以根据具体的软件设计从软件来避免数据访问冲突;

    4. 关于EDMA效率请参考www.deyisupport.com/.../2622.aspx 其中关于DMA throughput。

  • 谢谢回答。再确认几个问题。

    1.调用库函数时,我应该在工程中加入库函数源程序,还是使用连接库deplib.a66或deplib.ae66。这两种方式效果是否一样

    2.您提到的多核可以同时访问共享memory时指MCSM吗,是否包括DDR3。可以同时去共享memory取数,可以同时写入数据么?

    3.从软件上避免数据访问冲突是指多核可以访问不同的bank,还是说分时间访问共享memory。

  • 您好,

    1. 效果是一样,建议加入lib;

    2. 包括DDR3,读写均可。

    3. 均可。

  • Richard,

    从你的数据LL2情况下和simulator增加了三倍的开销,感觉高了一点。请确认L1P、L1D cache打开设置为最大,代码和数据全部都要在LL2,可以提供map我们一起看看。同时确保链接同样的库。

    另外,你的测试cycle只是包含调用的TI库函数的开销还是有别的东西?

    谢谢!

  • 只包含TI库函数。工程传上来了,请帮忙看下,为什么运行速度这么慢,因为数据量大,放在了MCSM上,放在LL2里速度差不多。

    DSPlabTEST.rar
  • 还没时间看你的工程。下面是FFT文档包含硬件上的测试数据供参考。

    www.ti.com.cn/.../getliterature.tsp

  • Richard Zhang 您好:

    基你提供的工程,我也测了下FFT的效率,在Simulator下结果与手册相近,Emulator条件下时钟周期稍大些,

    我尝试着将CCS中的DSPF_sp_fftSPxSP例程加入cache,包括

    #include <c6x.h>

    #include <csl_cacheAux.h>

    #include <csl_cache.h>

    CACHE_setL1PSize (CACHE_L1_MAXIM3);

    CACHE_setL1DSize (CACHE_L1_MAXIM3);

    CACHE_setL2Size (CACHE_256KCACHE);

    printf ("Core 0 : L1P cache size %d. L1D cache size %d. L2 cache size %d.\n",CACHE_getL1PSize(), CACHE_getL1DSize(), CACHE_getL2Size());

    等指令,但是运行后还是未加cache的结果,时钟周期数很大,跟你给的工程测得结果不一样,不知还需在工程中做哪些修改

    刚接触Cache相关的知识,还望不吝赐教!

    谢谢!

  • Richard Zhang  您好:

    我基于您所提供的工程修改CCS中的例程,但一直未能实现cache的优化,能否留下工作邮箱用以交流6678的学习心得,最近要给出6678FFT/IFFT vecmul matrix相关运算的实测报告,还请指教如何进行相关工程配置。

    我的邮箱hafeigu_2006@126.com

    谢谢!

  • 我的邮箱是

    chuan_zy@126.com

    有什么问题可以共同探讨