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数据。