c6000系列在做浮点型复数运算时,如果一次可以用一条指令,从memory中取出128位,2个浮点数,呢么其运算速度可以大大提高。
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不久。
针对你说的场景,我有几个问题。
1、你说的浮点数是float型,还是double型?
2、矢量搬移是什么概念?从哪里搬到哪里?
3、你给出的这些数据是官方数据,还是你自己测试的数据?
4、很多计算都不是独立的,比如复数求模,必然要涉及数据的输入和输出。最好能给出这些测试的C代码原型。
5、这里所说的性能,其实是指C66x核,而C6678包含8个C66x。
最后,推荐看看TI的文档:Optimizing Loops on the C66x DSP。
感谢大侠们的关注:下面是其中一个原函数,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。