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

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

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

comeback:

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

Jiao Li:

回复 comeback:

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

comeback:

回复 Jiao Li:

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

Jiao Li:

回复 comeback:

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

comeback:

回复 Jiao Li:

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

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

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

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

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

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

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

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

comeback:

回复 Jiao Li:

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

Jiao Li:

回复 comeback:

感谢大侠们的关注:下面是其中一个原函数,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。

comeback:

回复 Jiao Li:

你说的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。

Jiao Li:

回复 comeback:

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

Andy Yin1:

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

赞(0)
未经允许不得转载:TI中文支持网 » C6678能否一次从memory中取128位,或者将128位装入Memory
分享到: 更多 (0)