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.

C6678能否一次从memory中取128位,或者将128位装入Memory



c6000系列在做浮点型复数运算时,如果一次可以用一条指令,从memory中取出128位,2个浮点数,呢么其运算速度可以大大提高。

  • 一条指令最多读取64位,但两条读取指令可能并行。

  • 谢谢您的答复。所以c6000在处理复数运算方面能力不如ADI的DSP

  • 额,你这说法有点武断吧?处理能力其实要看整体效果,不能光看一条指令。你可以把具体应用场景再描述一下。

  • 能引起大侠的注意,实在是太好了,ADI的ADSP-TS201 TigerSHARC完成1024个浮点矢量搬移只需334个时钟,完成1024个复数求模只需9576个时钟,完成1024个复数除以复数运算只需10298时钟。不知Ti的C6678最快需要到少时间。

  • 我不是大侠,我也接触C6678不久。

    针对你说的场景,我有几个问题。

    1、你说的浮点数是float型,还是double型?

    2、矢量搬移是什么概念?从哪里搬到哪里?

    3、你给出的这些数据是官方数据,还是你自己测试的数据?

    4、很多计算都不是独立的,比如复数求模,必然要涉及数据的输入和输出。最好能给出这些测试的C代码原型。

    5、这里所说的性能,其实是指C66x核,而C6678包含8个C66x。

    最后,推荐看看TI的文档:Optimizing Loops on the C66x DSP。

  • 找到一个专业一点的比较文档:http://www.ti.com/lit/wp/sprabn8a/sprabn8a.pdf 。

  • 感谢大侠们的关注:下面是其中一个原函数,x,y均为浮点型(float)矢量,

    void DSPF_vmov_cn(float *x,float *y,int nx)
    {
     int i;
      for (i = 0; i < nx; i++)
      {
       y[i]=x[i];
      }
    }

    ADI的ADSP-TS201 TigerSHARC完成这样1024个浮点矢量搬移只需334个时钟,因为它一条指令可搬移128个字节,2个单元并行操作可搬移256字节。

    另外前面提到都是float型复数矢量。当然我也知道综合比较要全面分析,有些方面Ti胜过ADI的DSP。

  • 你说的334个时钟是你自己测试的吗?你确认是128字节,不是128位吗?如果按你所说,TS201的数据总线有256 * 8 = 2M bit。但是我从它的手册上看到是这么说的: Four 128-bit internal data buses, each connecting to the six 4M bit memory banks。

    另外,手册还说明:

     The DSP's internal bus architecture provides a total memory bandwidth of 33.6G bytes per second, enabling the core and I/O to access eight 32-bit data-words and four 32-bit instructions each cycle. 

    也就是说数据宽度是8 * 32 = 256 bit,指令宽度是4 * 32 = 128 bit。

  • 不好意思,笔误,是128位,16字节。采用6678,搬移1024个浮点数,我经过优化需要五百多个时钟,不知您有什么好方法。

  • 而已用mem8指令每次取64bit,分两次即可取128bit数据。