某项目,完全相同的算法,分别用matlab和C语言实现,DSP+C语言仅接收部分20S一次,matlab在i3上面收发一次能达到2S。真是惨不忍睹,干脆弄两台三四年前的笔记本来做算了
c实现得太差吧
呵呵,这个DSP太差了,或者c是怎么写的。
确实应该是C语言写的比较差,不过两个系统都是一套算法下来的,除了matlab有些地方直接用的矩阵运算。dsp内存只有几MB,IO应该也比较差吧
1G的主频,内存太小了。应该两方面都有原因吧
如果统计的是纯计算时间,并且控制分支非常少,全是矩阵元算,这个结果有可能
但是,一般情况下,这个结果可能是你的C程序中有调试语句或IO语句造成的
建议仔细检查一下
你一定用了矩阵操作
功耗
io可以忽略,最多的是数学运算,应该就是matlab中表示为矩阵形式的一些优化了
这方面dsp做的很好。但是印象中dsp应该代表了高速率,用作信号处理应该比通用处理器强多了,观念完全颠覆了
10年前,就测过600M的ti 6414 DSP干不过当时市面上比较先进的intel处理器。
呵呵,DSP的C语言你把关键部位用汇编优化一下,速率可以提升10倍以上。
还有DSP的长处不在于峰值运算速度和平均运算速度,而是在信号处理的开销和时延可以
做到最大时延最小化。。。
现在的桌面处理器非常强大的
i3的主频3G了吧,双核、64位?
跟哪款DSP比的?
TI的5000DSP主频也就200M左右,还是定点、16位的,
i3要不比它强40倍都不好意思说
6000系列主频最高好像也就1G,定点32位
浮点的67xx主频要低得多
ti的定浮点一体dsp有超过1Ghz的
64xx,1G主频,依然扛不过i3,优化肯定是一方面了
搜了一下,有8GFLOPS, i3-2120有124GFLOPS,确实根本没法比 不过这个gflops能用做比较标准吗?
这个定点,1g
64xx是定点的吧,怎么会有FLOPS指标?
单拼计算性能,十年前dsp就已经不是对手了
dsp的优势在于单位计算性能的功耗、价格、外设配置。。。
DSP对时延控制精度高,intel cpu很难控制到dsp这个精度
DSP代码优化和不优化可以差几十倍。
随便百度这个型号出来了一个flops
乱序执行后的指令在重新排序的时候,需要等待前面指令执行结束。对于多发射而言,可能等前面的一条、两条或者三条指令,这延迟能确定么?
乱序可以让加法指令先于乘法指令做完,但不会让1+1和1+2的指令周期不同
也不会在确定的问题下1+1先于2*2而 2+2后于3*3
所以,对于确定的问题,延迟结果是确定的
而且乱序只会让cpu跑得更快
有理由说3GHz的intel处理器比1G的dsp延迟还不如?
退一步说如果乱序导致延迟增大,还不许我顺序编程吗?
怎么说,intel处理器也不会因为架构问题导致延迟控制那么不堪
即使有差距,也是同数量级的。我看不懂的就是那种随口就来的结论
cache都上来了?
实时系统用cache需要很慎重的你应该知道吧
你给dsp上cache一样有这个问题
中断是个问题,无论对dsp还是对通用处理器
用dma可以解决流水线被破坏,无论dsp还是通用处理器
所以dma每次只读一个数据的这种系统设计是非常不合理的,无论dsp还是gpp
65MADC这种采样,我承认难度有,但如果按你的思路非要让cpu每15ns去读一个数据
当然会比较大。这样的难度对dsp和gpp也是一样的
代价大小,取决于这两类处理器的外设配置,而不是cpu的延迟
一般我们设计是会用一个65M的时钟触发dma事件(假设ADC是时间事件的话)
采集1024点后(取决于处理数据的方式)产生一个中断,如果15ns×1024也就是15us
一个fft还没做完的话,你的处理器就太弱了。
这个方案,不用dsp而用gpp做也一样。只是在pc上面没条件做而已(没有裸机环境,没有
可自己支配的硬件配置)
这种设计下,延迟的时间刻度是us量级,而且不会因为中断破坏fft流水线。。。。
不多说了,我没做过实时系统,说多了又让你笑话
总之,dsp的核无非就是优化了硬件乘法指令,它的构架在现代处理器面前没有
更多的优势。要不你看看ti自上个世纪推出c6000核以后还有什么进展没有?
“退一步说如果乱序导致延迟增大,还不许我顺序编程吗?”——这是硬件根据相关性动态调度的,你编程的时候会考虑每条指令之间的相关性?
在GHz主频的处理器上实现ns级的延迟,考虑指令相关性天经地义吧
纯软件算法倒是可以不考虑
你还真说对了,Ceva和Tensilica的基带DSP就不用d$